const should = require('should'); const sinon = require('sinon'); const pcsc = require('../lib/pcsclite'); describe('Testing PCSCLite private', function() { describe('#start()', function() { it('#start() stub', function(done) { var p = pcsc(); try { var stub = sinon.stub(p, 'start').callsFake(function(startCb) { startCb(undefined, Buffer.from("ACS ACR122U PICC Interface\u0000ACS ACR122U PICC Interface 01\u0000\u0000")); }); var readerHit = 0; p.on('reader', function(reader) { reader.close(); switch (++readerHit) { case 1: reader.name.should.equal("ACS ACR122U PICC Interface"); break; case 2: reader.name.should.equal("ACS ACR122U PICC Interface 01"); done(); break; } }); } finally { p.close(); } }); }); }); describe('Testing CardReader private', function() { var get_reader = function() { var p = pcsc(); var stub = sinon.stub(p, 'start').callsFake(function(my_cb) { /* "MyReader\0" */ my_cb(undefined, Buffer.from("MyReader\u0000\u0000")); }); return p; }; describe('#_connect()', function() { it('#_connect() success', function(done) { var p = get_reader(); p.on('reader', function(reader) { var connect_stub = sinon.stub(reader, '_connect').callsFake(function(share_mode, protocol, connect_cb) { connect_cb(undefined, 1); }); reader.connect(function(err, protocol) { should.not.exist(err); protocol.should.equal(1); done(); }); }); }); it('#_connect() error', function(done) { var p = get_reader(); p.on('reader', function(reader) { var cb = sinon.spy(); var connect_stub = sinon.stub(reader, '_connect').callsFake(function(share_mode, protocol, connect_cb) { connect_cb(""); }); reader.connect(cb); sinon.assert.calledOnce(cb); done(); }); }); it('#_connect() already connected', function(done) { var p = get_reader(); p.on('reader', function(reader) { var cb = sinon.spy(); reader.connected = true; reader.connect(cb); process.nextTick(function () { sinon.assert.calledOnce(cb); done(); }); }); }); }); describe('#_disconnect()', function() { it('#_disconnect() success', function(done) { var p = get_reader(); p.on('reader', function(reader) { reader.connected = true; var cb = sinon.spy(); var connect_stub = sinon.stub(reader, '_disconnect').callsFake(function(disposition, disconnect_cb) { disconnect_cb(undefined); }); reader.disconnect(cb); sinon.assert.calledOnce(cb); done(); }); }); it('#_disconnect() error', function(done) { var p = get_reader(); p.on('reader', function(reader) { reader.connected = true; var cb = sinon.spy(); var connect_stub = sinon.stub(reader, '_disconnect').callsFake(function(disposition, disconnect_cb) { disconnect_cb(""); }); reader.disconnect(cb); sinon.assert.calledOnce(cb); done(); }); }); it('#_disconnect() already disconnected', function(done) { var p = get_reader(); p.on('reader', function(reader) { var cb = sinon.spy(); var connect_stub = sinon.stub(reader, '_disconnect').callsFake(function(disposition, disconnect_cb) { disconnect_cb(undefined); }); reader.disconnect(cb); process.nextTick(function () { sinon.assert.calledOnce(cb); done(); }); }); }); }); });