machinomy
Version:
Micropayments powered by Ethereum
111 lines • 4.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const sinon = require("sinon");
const EnginePostgres_1 = require("./storage/postgresql/EnginePostgres");
const expect = require('expect');
const PGClient = require('pg').Client;
describe('EnginePostgres', () => {
let engine;
beforeEach(() => {
engine = new EnginePostgres_1.default();
});
describe('isConnected', () => {
it('defaults to false', () => {
expect(engine.isConnected()).toBe(false);
});
});
describe('connect', () => {
it('connects to the database', () => {
const stub = sinon.stub(PGClient.prototype, 'connect').resolves();
return engine.connect()
.then(() => {
expect(stub.callCount).toBe(1);
stub.restore();
});
});
it('prevents multiple concurrent connections', () => {
const stub = sinon.stub(PGClient.prototype, 'connect').resolves();
return Promise.all([
engine.connect(),
engine.connect(),
engine.connect()
]).then(() => {
expect(stub.callCount).toBe(1);
stub.restore();
});
});
it('marks isConnected as true', () => {
const stub = sinon.stub(PGClient.prototype, 'connect').resolves();
return engine.connect()
.then(() => {
expect(engine.isConnected()).toBe(true);
stub.restore();
});
});
});
describe('close', () => {
it('closes connection to the database', () => {
const connectStub = sinon.stub(PGClient.prototype, 'connect').resolves();
const endStub = sinon.stub(PGClient.prototype, 'end').resolves();
return engine.connect()
.then(() => engine.close())
.then(() => expect(endStub.callCount).toBe(1))
.then(() => {
connectStub.restore();
endStub.restore();
});
});
it('marks isConnected as false', () => {
const connectStub = sinon.stub(PGClient.prototype, 'connect').resolves();
const endStub = sinon.stub(PGClient.prototype, 'end').resolves();
return engine.connect()
.then(() => engine.close())
.then(() => {
expect(engine.isConnected()).toBe(false);
connectStub.restore();
endStub.restore();
});
});
});
describe('drop', () => {
it('truncates all tables', () => {
const connectStub = sinon.stub(PGClient.prototype, 'connect').resolves();
const queryStub = sinon.stub(PGClient.prototype, 'query').resolves();
return engine.connect()
.then(() => engine.drop())
.then(() => {
expect(queryStub.callCount).toBe(3);
expect(queryStub.calledWith('TRUNCATE channel CASCADE'));
expect(queryStub.calledWith('TRUNCATE payment CASCADE'));
expect(queryStub.calledWith('TRUNCATE token CASCADE'));
connectStub.restore();
queryStub.restore();
});
});
it('lazily connects to the database', () => {
const connectStub = sinon.stub(PGClient.prototype, 'connect').resolves();
const queryStub = sinon.stub(PGClient.prototype, 'query').resolves();
return engine.drop()
.then(() => {
expect(connectStub.callCount).toBe(1);
connectStub.restore();
queryStub.restore();
});
});
});
describe('exec', () => {
it('returns an instance of the client', () => {
const connectStub = sinon.stub(PGClient.prototype, 'connect').resolves();
return engine.connect()
.then(() => engine.exec((client) => expect(client instanceof PGClient).toBe(true)))
.then(() => connectStub.restore());
});
it('lazily connects to the database', () => {
const connectStub = sinon.stub(PGClient.prototype, 'connect').resolves();
return engine.exec(() => 'beep')
.then(() => expect(connectStub.callCount).toBe(1))
.then(() => connectStub.restore());
});
});
});
//# sourceMappingURL=engines.test.js.map