45 lines
1.4 KiB
TypeScript
45 lines
1.4 KiB
TypeScript
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { tenantWhere } from '@/db/api/shared/repository';
|
|
import type { CurrentUser } from '@/db/api/types';
|
|
|
|
/**
|
|
* Unit tests for pure repository helpers.
|
|
*
|
|
* Tests for `findOwnedByPk`, `deleteRecordsByIds`, and `autocompleteByField`
|
|
* require Sequelize model mocks which would need type assertions. Those
|
|
* functions are covered by integration tests instead.
|
|
*/
|
|
|
|
const ORG_A = '11111111-1111-1111-1111-111111111111';
|
|
const ORG_B = '22222222-2222-2222-2222-222222222222';
|
|
|
|
const userOrgA: CurrentUser = { id: 'u1', organizationId: ORG_A };
|
|
const globalUser: CurrentUser = {
|
|
id: 'g1',
|
|
organizationId: ORG_A,
|
|
app_role: { globalAccess: true },
|
|
};
|
|
|
|
test('tenantWhere scopes a non-global user to their organization', () => {
|
|
assert.deepEqual(tenantWhere(userOrgA), { organizationId: ORG_A });
|
|
});
|
|
|
|
test('tenantWhere returns no clause for a global-access user', () => {
|
|
assert.deepEqual(tenantWhere(globalUser), {});
|
|
});
|
|
|
|
test('tenantWhere returns no clause when there is no user/org', () => {
|
|
assert.deepEqual(tenantWhere(undefined), {});
|
|
assert.deepEqual(tenantWhere({ id: null }), {});
|
|
});
|
|
|
|
test('tenantWhere prefers the loaded organizations.id over the scalar', () => {
|
|
const user: CurrentUser = {
|
|
id: 'u2',
|
|
organizations: { id: ORG_B },
|
|
organizationId: ORG_A,
|
|
};
|
|
assert.deepEqual(tenantWhere(user), { organizationId: ORG_B });
|
|
});
|