test: guard inactive directory membership

This commit is contained in:
Bastian Wagner
2026-07-31 22:36:18 +02:00
parent d738b49cbf
commit 4105460400
2 changed files with 56 additions and 1 deletions

View File

@@ -35,6 +35,7 @@ describe('UsersService directory', () => {
let userRows: ReturnType<typeof directoryUserRow>[];
let assignmentRows: ReturnType<typeof directoryAssignmentRow>[];
let total: number;
let rejectActiveSharedTeamPredicate: boolean;
const usersRepository = {
find: jest.fn(() => {
throw new Error('directory queries must use a safe database projection');
@@ -55,6 +56,7 @@ describe('UsersService directory', () => {
beforeEach(() => {
jest.clearAllMocks();
rejectActiveSharedTeamPredicate = false;
setDirectoryResult(
[users[0], users[1], users[2], users[4]],
[players[0], players[1], players[2], players[4]],
@@ -105,6 +107,7 @@ describe('UsersService directory', () => {
});
it('treats an inactive requester assignment as a shared team membership', async () => {
rejectActiveSharedTeamPredicate = true;
setDirectoryResult(
[users[0], users[1]],
[
@@ -353,7 +356,17 @@ describe('UsersService directory', () => {
function createSharedTeamsQuery() {
const query: any = {
select: () => query,
where: () => query,
where: (predicate: string) => {
if (
rejectActiveSharedTeamPredicate &&
/requesterPlayer\.active/i.test(predicate)
) {
throw new Error(
'shared-team membership must not filter inactive requester assignments',
);
}
return query;
},
getQuery: () =>
'SELECT requesterPlayer.teamId FROM player requesterPlayer',
getParameters: () => ({ requesterId: users[0].id }),