import * as assert from "assert"; import * as sinon from "sinon"; import {dbProviderStub} from "./db-provider-stub"; import {value as fetchUserPermissionGroups} from "./db-permission-fetch-user-permission-groups_sql"; import {value as fetchUserPermissions} from "./db-permission-fetch-user-permissions_sql"; import {dbPermission, dbPermissionCtor} from "./index"; describe("dbPermission", () => { it("queries the db correctly", async () => { const {dbProvider, dbRead} = dbProviderStub(sinon); const subject = dbPermissionCtor(dbProvider); dbRead.any.resolves([]); const userId = 1; await subject.execute( { userId, }, ); sinon.assert.calledWithExactly(dbRead.any, fetchUserPermissions, {userId}); sinon.assert.calledWithExactly(dbRead.any, fetchUserPermissionGroups, {userId}); }); it("computes permissions correctly", async () => { const {dbProvider, dbRead} = dbProviderStub(sinon); const subject = dbPermissionCtor(dbProvider); dbRead.any.onCall(0).resolves([ {permission_name: "W", reltype: "add"}, {permission_name: "X", reltype: "add"}, {permission_name: "Y", reltype: "add_grant"}, {permission_name: "Z", reltype: "remove"}, ]); dbRead.any.onCall(1).resolves([ {permission_name: "X", reltype: "remove"}, {permission_name: "Y", reltype: "remove"}, {permission_name: "Z", reltype: "add"}, {permission_name: "Q", reltype: "add_grant"}, {permission_name: "A", reltype: "invalid"}, ]); const userId = 1; const result = await subject.execute( { userId, }, ); sinon.assert.calledWithExactly(dbRead.any, fetchUserPermissions, {userId}); sinon.assert.calledWithExactly(dbRead.any, fetchUserPermissionGroups, {userId}); assert.deepEqual({"Q": true, "+Q": true, "Z": true, "W": true}, result); }); });