X-Git-Url: https://git.squeep.com/?a=blobdiff_plain;f=test%2Fsrc%2Fdb%2Fpostgres.js;h=b617c1d5d98bfb37fec8f1553737f1978621d648;hb=HEAD;hp=02f898692dbfca200ac20fb5ce48543f148487e7;hpb=b0103b0d496262c438b40bc20304081dbfe41e73;p=squeep-indie-auther diff --git a/test/src/db/postgres.js b/test/src/db/postgres.js index 02f8986..b617c1d 100644 --- a/test/src/db/postgres.js +++ b/test/src/db/postgres.js @@ -1,12 +1,9 @@ -/* eslint-disable sonarjs/no-identical-functions */ -/* eslint-env mocha */ -/* eslint-disable sonarjs/no-duplicate-string */ 'use strict'; /* This provides implementation coverage, stubbing pg-promise. */ const assert = require('assert'); -const sinon = require('sinon'); // eslint-disable-line node/no-unpublished-require +const sinon = require('sinon'); const StubLogger = require('../../stub-logger'); const StubDatabase = require('../../stub-db'); const DB = require('../../../src/db/postgres'); @@ -122,7 +119,7 @@ describe('DatabasePostgres', function () { columnTwo: 4, }, ]; - db.pgpInitOptions.receive(data, result, event) + db.pgpInitOptions.receive({ data, result, ctx: event }); assert(db.logger.debug.called); assert.deepStrictEqual(data, expectedData); }); @@ -151,7 +148,7 @@ describe('DatabasePostgres', function () { columnTwo: 4, }, ]; - db.pgpInitOptions.receive(data, result, event) + db.pgpInitOptions.receive({ data, result, ctx: event }); assert(db.logger.debug.called); assert.deepStrictEqual(data, expectedData); }); @@ -281,7 +278,7 @@ describe('DatabasePostgres', function () { assert(db.db.batch.called); }); it('failure', async function () { - sinon.stub(db.db, 'tx').rejects(expectedException) + sinon.stub(db.db, 'tx').rejects(expectedException); await assert.rejects(() => db._purgeTables(true), expectedException); }); }); // _purgeTables @@ -314,6 +311,41 @@ describe('DatabasePostgres', function () { }); }); // almanacGetAll + describe('almanacUpsert', function () { + let event, date; + beforeEach(function () { + event = 'test_event'; + date = new Date('Fri Dec 22 03:27 UTC 2023'); + }); + it('success', async function () { + const dbResult = { + rowCount: 1, + rows: undefined, + duration: 22, + }; + sinon.stub(db.db, 'result').resolves(dbResult); + await db.almanacUpsert(dbCtx, event, date); + }); + it('success with default date', async function () { + const dbResult = { + rowCount: 1, + rows: undefined, + duration: 22, + }; + sinon.stub(db.db, 'result').resolves(dbResult); + await db.almanacUpsert(dbCtx, event); + }); + it('failure', async function () { + const dbResult = { + rowCount: 0, + rows: undefined, + duration: 22, + }; + sinon.stub(db.db, 'result').resolves(dbResult); + await assert.rejects(() => db.almanacUpsert(dbCtx, event, date), DBErrors.UnexpectedResult); + }); + }); // almanacUpsert + describe('authenticationSuccess', function () { let identifier; beforeEach(function () { @@ -384,6 +416,60 @@ describe('DatabasePostgres', function () { }); }); // authenticationUpsert + describe('authenticationUpdateCredential', function () { + let identifier, credential; + beforeEach(function () { + identifier = 'username'; + credential = '$z$foo'; + }); + it('success', async function () { + const dbResult = { + rowCount: 1, + rows: undefined, + duration: 22, + }; + sinon.stub(db.db, 'result').resolves(dbResult); + await db.authenticationUpdateCredential(dbCtx, identifier, credential); + }); + it('failure', async function () { + credential = undefined; + const dbResult = { + rowCount: 0, + rows: undefined, + duration: 22, + }; + sinon.stub(db.db, 'result').resolves(dbResult); + await assert.rejects(() => db.authenticationUpdateCredential(dbCtx, identifier, credential), DBErrors.UnexpectedResult); + + }); + }); // authenticationUpdateCredential + + describe('authenticationUpdateOTPKey', function () { + let identifier, otpKey; + beforeEach(function () { + identifier = 'username'; + otpKey = '1234567890123456789012'; + }); + it('success', async function () { + const dbResult = { + rowCount: 1, + rows: undefined, + duration: 22, + }; + sinon.stub(db.db, 'result').resolves(dbResult); + await db.authenticationUpdateOTPKey(dbCtx, identifier, otpKey); + }); + it('failure', async function () { + const dbResult = { + rowCount: 0, + rows: undefined, + duration: 22, + }; + sinon.stub(db.db, 'result').resolves(dbResult); + await assert.rejects(() => db.authenticationUpdateOTPKey(dbCtx, identifier, otpKey), DBErrors.UnexpectedResult); + }); + }); // authenticationUpdateOTPKey + describe('profileIdentifierInsert', function () { let profile, identifier; beforeEach(function () { @@ -734,7 +820,7 @@ describe('DatabasePostgres', function () { duration: 22, }; sinon.stub(db.db, 'result').resolves(dbResult); - await db.resourceUpsert(dbCtx, resourceId, secret, description) + await db.resourceUpsert(dbCtx, resourceId, secret, description); }); it('failure', async function () { const dbResult = { @@ -949,5 +1035,101 @@ describe('DatabasePostgres', function () { }); }); // tokensGetByIdentifier + describe('ticketRedeemed', function () { + let redeemedData; + beforeEach(function () { + redeemedData = { + resource: 'https://resource.example.com/', + subject: 'https://subject.example.com/', + iss: 'https://idp.example.com/', + ticket: 'xxxTICKETxxx', + token: 'xxxTOKENxxx', + }; + }); + it('success', async function () { + const dbResult = { + rowCount: 1, + rows: undefined, + duration: 22, + }; + sinon.stub(db.db, 'result').resolves(dbResult); + await db.ticketRedeemed(dbCtx, redeemedData); + }); + it('failure', async function () { + const dbResult = { + rowCount: 0, + rows: undefined, + duration: 22, + }; + sinon.stub(db.db, 'result').resolves(dbResult); + await assert.rejects(() => db.ticketRedeemed(dbCtx, redeemedData), DBErrors.UnexpectedResult); + }); + }); // ticketRedeemed + + describe('ticketTokenPublished', function () { + let redeemedData; + beforeEach(function () { + redeemedData = { + resource: 'https://resource.example.com/', + subject: 'https://subject.example.com/', + iss: 'https://idp.example.com/', + ticket: 'xxxTICKETxxx', + token: 'xxxTOKENxxx', + }; + sinon.stub(db.db, 'result'); + }); + it('success', async function () { + const dbResult = { + rowCount: 1, + rows: undefined, + duration: 22, + }; + db.db.result.resolves(dbResult); + await db.ticketTokenPublished(dbCtx, redeemedData); + }); + it('failure', async function () { + const dbResult = { + rowCount: 0, + rows: undefined, + duration: 22, + }; + db.db.result.resolves(dbResult); + await assert.rejects(() => db.ticketTokenPublished(dbCtx, redeemedData), DBErrors.UnexpectedResult); + }); + it('failure of almanac', async function () { + const dbResult = { + rowCount: 1, + rows: undefined, + duration: 22, + }; + const dbResultAlmanac = { + ...dbResult, + rowCount: 0, + }; + db.db.result.resolves(dbResult).onCall(1).resolves(dbResultAlmanac); + await assert.rejects(() => db.ticketTokenPublished(dbCtx, redeemedData), DBErrors.UnexpectedResult); + }); + }); // ticketTokenPublished + + describe('ticketTokenGetUnpublished', function () { + it('success', async function () { + const expected = [{ + resource: 'https://resource.example.com/', + subject: 'https://subject.example.com/', + iss: 'https://idp.example.com/', + ticket: 'xxxTICKETxxx', + token: 'xxxTOKENxxx', + created: new Date(), + published: null, + }]; + sinon.stub(db.db, 'manyOrNone').resolves(expected); + const result = await db.ticketTokenGetUnpublished(dbCtx); + assert.deepStrictEqual(result, expected); + }); + it('failure', async function () { + sinon.stub(db.db, 'manyOrNone').rejects(expectedException); + await assert.rejects(() => db.ticketTokenGetUnpublished(dbCtx), expectedException); + }); + }); // ticketTokenGetUnpublished }); // DatabasePostgres