fix changelog
[squeep-indie-auther] / test / src / db / postgres.js
index 02f898692dbfca200ac20fb5ce48543f148487e7..b617c1d5d98bfb37fec8f1553737f1978621d648 100644 (file)
@@ -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