test.js 9.88 KB
var assert = require("assert");
var should = require("should");

describe('aaa', function() {
    var aaa = require('./aaa');

    describe("#unaliasResponseCode()", function() {
        it('should return 68', function() {
            assert.equal('68', aaa.unaliasResponseCode('01', '01:68'));
        });

        it('should return 68', function() {
            assert.equal('68', aaa.unaliasResponseCode('68', '01:68'));
        });

        it('should return 00', function() {
            assert.equal('00', aaa.unaliasResponseCode('00', '01:68'));
        });

        it('should return 40', function() {
            assert.equal('40', aaa.unaliasResponseCode('40', ''));
        });

        it('should return 40', function() {
            assert.equal('40', aaa.unaliasResponseCode('40', ''));
        });

        it('should return 40', function() {
            assert.equal('40', aaa.unaliasResponseCode('40'));
        });

    });

    describe("#getBalanceFromMessage()", function() {
        it ('should return 4782801', function() {
            var message = 'Sukses! , Topup S20H Ke 082136047702, TrxID: 17699291 SN: 0031000909857657 Saldo Rp. 4,782,801=4,802,701-19,900.INFO: TSEL 10 CLOSE.NUSAPULSA';
            assert.equal(aaa.getBalanceFromMessage(message, 'Saldo Rp\. (.+?)='), 4782801);
            assert.equal(aaa.getBalanceFromMessage('2016-02-15 17:00 TRX HSM25 088212551565 BERHASIL S/N: 392745165428  Harga:24575 Saldo: 2442265', 'Saldo: (\\d+?)$'), 2442265);
        });
    });

    describe("#getProductCode()", function() {
        it ('should return SP', function() {
            assert.equal('SP', aaa.getProductCode('SP'));
            assert.equal('SP', aaa.getProductCode('SP20'));
            assert.equal('SP', aaa.getProductCode('SP30'));
            assert.equal('SP', aaa.getProductCode('SP10F'));
            assert.equal(undefined, aaa.getProductCode(''));
            assert.equal(undefined, aaa.getProductCode('23'));
        });
    });

    describe("#getProductNominal()", function() {
        it ('should return 20', function() {
            assert.equal(20, aaa.getProductNominal('SP20'));
            assert.equal(20, aaa.getProductNominal('SP20F'));
            assert.equal(undefined, aaa.getProductNominal('SP'));
        });
    });

    describe("#setProductsArray()", function() {
        it ('should ok', function() {
            assert.deepEqual(aaa.sortProductsArray(["TR100", "TR10","SP20","SP100", "SP10"]), ["SP10","SP20","SP100", "TR10", "TR100"]);
            assert.deepEqual(aaa.sortProductsArray([]), []);
        });
    });

    describe('#getStockFromMessage()', function() {
        it ('should return correct stock', function() {
            assert.equal(
                105,
                aaa.getStockFromMessage(
                    'SN=0041000371763354; Berhasil 14/25/1103 : S20H ke 085215921744 SN : 41000371763354 Reff:4109005271537231, Saldo Rp. 10.984.513 (105) = Rp. 11.004.513 - Rp. 20.000.SA_POIN',
                    '\\d \\((\\d+)\\) =',
                    1
                )
            );
        });
    });

    describe('#getSnFromMessage()', function() {
        it ('should return null if message does not contain sn', function() {
            assert.equal(aaa.getSnFromMessage('XXXX, XR10, KE 8888888 BERHASIL , SN=044490129220452;, HARGA=10,275 , SISA SALDO RP. 1,264,350 REBET ANDA RP.0 - NEW XL,AXIS DENOM 15, KODE X15'), null);
            assert.equal(aaa.getSnFromMessage('SN=;XXXX, XR10, KE 8888888 BERHASIL , SN=044490129220452;, HARGA=10,275 , SISA SALDO RP. 1,264,350 REBET ANDA RP.0 - NEW XL,AXIS DENOM 15, KODE X15'), null);
        });

        it ('should return valid sn', function() {
            assert.equal(aaa.getSnFromMessage('SN=044490129220452; XXXX, XR10, KE 8888 BERHASIL , SN=044490129220452;, HARGA=10,275 , SISA SALDO RP. 1,264,350 REBET ANDA RP.0 - NEW XL,AXIS DENOM 15, KODE X15'), 044490129220452);
        });
    });

    describe('#removeGarbageFromSnMessage()', function() {
        it ('should return original message', function() {
            assert.equal(aaa.removeGarbageFromSnMessage('XXXX, XR10, KE 8888888 BERHASIL , SN=044490129220452;, HARGA=10,275 , SISA SALDO RP. 1,264,350 REBET ANDA RP.0 - NEW XL,AXIS DENOM 15, KODE X15', '[,:;]'), 'XXXX, XR10, KE 8888888 BERHASIL , SN=044490129220452;, HARGA=10,275 , SISA SALDO RP. 1,264,350 REBET ANDA RP.0 - NEW XL,AXIS DENOM 15, KODE X15');
            assert.equal(aaa.removeGarbageFromSnMessage('SN=;XXXX, XR10, KE 8888888 BERHASIL , SN=044490129220452;, HARGA=10,275 , SISA SALDO RP. 1,264,350 REBET ANDA RP.0 - NEW XL,AXIS DENOM 15, KODE X15', '[,:;]'), 'SN=;XXXX, XR10, KE 8888888 BERHASIL , SN=044490129220452;, HARGA=10,275 , SISA SALDO RP. 1,264,350 REBET ANDA RP.0 - NEW XL,AXIS DENOM 15, KODE X15');
            assert.equal(aaa.removeGarbageFromSnMessage('SN=044490129220452; XXXX, XR10, KE 8888 BERHASIL , SN=044490129220452;, HARGA=10,275 , SISA SALDO RP. 1,264,350 REBET ANDA RP.0 - NEW XL,AXIS DENOM 15, KODE X15', '[,:;]'), 'SN=044490129220452; XXXX, XR10, KE 8888 BERHASIL , SN=044490129220452;, HARGA=10,275 , SISA SALDO RP. 1,264,350 REBET ANDA RP.0 - NEW XL,AXIS DENOM 15, KODE X15');
        });

        it ('should return message with clean sn', function() {
            assert.equal(
                aaa.removeGarbageFromSnMessage(
                    'SN=:044490129220452; XXXX, XR10, KE 8888 BERHASIL , SN=044490129220452;, HARGA=10,275 , SISA SALDO RP. 1,264,350 REBET ANDA RP.0 - NEW XL,AXIS DENOM 15, KODE X15',
                    '[,:;]'
                ),
                'SN=044490129220452; XXXX, XR10, KE 8888 BERHASIL , SN=044490129220452;, HARGA=10,275 , SISA SALDO RP. 1,264,350 REBET ANDA RP.0 - NEW XL,AXIS DENOM 15, KODE X15'
            );
        });
    });

    describe('#getProductCodeByPrefix()', function() {
        var prefixConfig = '0818:XL,0812:S,0815:I';
        it ('should return correct product', function() {
            aaa.getProductCodeByPrefix('081800000', prefixConfig).should.equal('XL');
            aaa.getProductCodeByPrefix('081200000', prefixConfig).should.equal('S');
            aaa.getProductCodeByPrefix('081500000', prefixConfig).should.equal('I');
            aaa.getProductCodeByPrefix('08180818', prefixConfig).should.equal('XL');
            aaa.getProductCodeByPrefix('08180812', prefixConfig).should.equal('XL');
            aaa.getProductCodeByPrefix('08180815', prefixConfig).should.equal('XL');
        });

        it ('should return null', function() {
            should.not.exist(aaa.getProductCodeByPrefix('0888999', prefixConfig));
            should.not.exist(aaa.getProductCodeByPrefix('0888999', ''));
        });
    });

    describe('#isAllowedTime', function() {
        it('should return true', function() {
            aaa.isAllowedTime('0000', '2359', '0000').should.be.true();
            aaa.isAllowedTime('0000', '2359', '0100').should.be.true();
            aaa.isAllowedTime('00:00', '23:59', '0100').should.be.true();
            aaa.isAllowedTime('00:00', '23:59', '01:00').should.be.true();
            aaa.isAllowedTime('00:00', '2359', '01:00').should.be.true();
            aaa.isAllowedTime('0000', '2359', '01:00').should.be.true();

            aaa.isAllowedTime().should.be.true();
        });

        it('should return false', function() {
            aaa.isAllowedTime('0000', '2359', '2359').should.be.false();
            aaa.isAllowedTime('0015', '2350', '0000').should.be.false();
            aaa.isAllowedTime('0015', '2350', '2351').should.be.false();
            aaa.isAllowedTime('00:15', '23:50', '2359').should.be.false();
            aaa.isAllowedTime('00:15', '23:50', '23:59').should.be.false();
            aaa.isAllowedTime('00:15', '2350', '23:59').should.be.false();
        });

        it('should not fail', function() {
            should(aaa.isAllowedTime('0015', '2350')).not.throw();
            should(aaa.isAllowedTime()).not.throw();
        });
    });
});

describe('im', function() {
    var im = require('./partner-im.js');

    describe('#getPatternFromMessage', function() {
        it('should return correct product', function() {
            im.getPatternFromMessage(
                'Pengisian SS5 ke 085377637655 SUKSES. SN:6072609450801885231. Saldo 361.863 - 5.250 = 356.613 @26/07 09:45:10',
                'Pengisian (\\w+) ke ',
                1
            ).should.equal('SS5');
        })
    });

    describe('#getPatternsFromMessage', function() {
        var patterns = [
            {
                pattern: 'Pengisian (\\w+) ke ',
                matchIndex: 1
            },
            {
                pattern: ' (\\w+)\\.\\d',
                matchIndex: 1
            }
        ];

        it('should return correct result', function() {
            im.getPatternsFromMessage(
                'Pengisian SS5 ke 085377637655 SUKSES. SN:6072609450801885231. Saldo 361.863 - 5.250 = 356.613 @26/07 09:45:10',
                patterns
            ).should.equal('SS5');

            im.getPatternsFromMessage(
                '#5240966 T-SEL 5 SS5.085377637655 akan diproses @09:39. Saldo 361.863 - 5.250 = 356.613',
                patterns
            ).should.equal('SS5');
        })

        it('should return null', function() {
            should.not.exists(im.getPatternsFromMessage('', patterns));
        })
    })

    describe('#createMessage', function() {
        it('should return correct message', function() {
            var pattern = '[remoteProduct].[destination].[pin]';

            var keywords = {
                remoteProduct: 'SS5',
                destination: '08222',
                pin: 1234
            }

            im.createMessage(pattern, keywords).should.equal('SS5.08222.1234');
        })
    })

    describe('#removeResourceFromJid', function() {
        it('should return correct jid', function() {
            im.removeResourceFromJid('admin@admin.org/12312-213213').should.equal('admin@admin.org');
            im.removeResourceFromJid('admin@admin.org').should.equal('admin@admin.org');
        })
    })
})