Skip to content

Commit

Permalink
Added first RunUserPermissionUseCase test: ignore user when is in exc…
Browse files Browse the repository at this point in the history
…lusionUser rule
  • Loading branch information
idelcano committed Oct 3, 2024
1 parent 0470dc6 commit 30842d9
Show file tree
Hide file tree
Showing 2 changed files with 240 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
import { NamedRef } from "domain/entities/Base";
import { UserMonitoringProgramMetadata } from "domain/entities/user-monitoring/common/UserMonitoringProgramMetadata";
import {
PermissionFixerConfig,
PermissionFixerMetadataConfig,
} from "domain/entities/user-monitoring/permission-fixer/PermissionFixerConfigOptions";
import {
PermissionFixerTemplateGroup,
PermissionFixerTemplateGroupExtended,
} from "domain/entities/user-monitoring/permission-fixer/PermissionFixerTemplates";
import { PermissionFixerUser } from "domain/entities/user-monitoring/permission-fixer/PermissionFixerUser";
export const config: PermissionFixerConfig = {
pushReport: true,
pushFixedUsersRoles: true,
pushFixedUserGroups: true,
forceMinimalGroupForUsersWithoutGroup: true,
};
export const templateGroup: PermissionFixerTemplateGroup = {
group: {
id: "template_group_uid",
name: "template_group_name",
},
template: {
id: "user_template_uid",
name: "user_template_name",
},
};
export function getMetadataExcludedUser(excludedUser: NamedRef): PermissionFixerMetadataConfig {
metadataConfig.excludedUsers = [excludedUser];
return metadataConfig;
}
export const metadataConfig: PermissionFixerMetadataConfig = {
templates: [templateGroup],
excludedRoles: [],
excludedUsers: [],
excludedRolesByUser: [],
excludedRolesByGroup: [],
excludedRolesByRole: [],

pushProgram: {
id: "IKpEgoQ4S0r",
name: "Event program uid",
},
minimalGroup: {
id: "IKpEgoQ4S02",
name: "Minimal group uid",
},
minimalRole: {
id: "IKpEgoQ4S03",
name: "Minimal role uid",
},
permissionFixerConfig: config,
};

export const programMetadata: UserMonitoringProgramMetadata = {
id: "IKpEgoQ4S0r",
programStageId: "aHbPlvAb2bu",
dataElements: [
{
id: "PDAPJ38H7Pl",
code: "ADMIN_users_without_two_factor_count_7_Events",
name: "ADMIN_users_without_two_factor_count_7_Events",
},
{
id: "Ss4ZVwDJKDe",
code: "ADMIN_users_without_two_factor_8_Events",
name: "ADMIN_users_without_two_factor_8_Events",
},
],
orgUnitId: "wLoK6XpZq8I",
};

export const fakeValidUser: PermissionFixerUser = {
//lastUpdated: "2024-09-16T14:51:06.958",
id: "CHbcHcmgoZ5",
//href: "https://server/api/users/CHbcHcmgoZ5",
//created: "2018-05-02T11:33:24.434",
//lastLogin: "2024-09-16T14:51:06.955",
twoFA: false,
invitation: false,
//selfRegistered: false,
firstName: "Fake",
name: "Fake Dummy",
favorite: false,
//openId: "dummy@email.com",
displayName: "Fake Dummy",
externalAuth: false,
externalAccess: false,
surname: "Dummy",
disabled: false,
email: "dummy@email.com",
username: "userusername",
lastUpdatedBy: {
displayName: "fake complete name",
name: "fake complete name",
id: "TuqkLj1igOH",
username: "fakeusername",
},
userCredentials: {
//openId: "dummy@email.com",
lastLogin: "2024-09-16T14:51:06.955",
invitation: false,
disabled: false,
twoFA: false,
username: "userusername",
userRoles: [
{
id: "tocVqzvmpI0",
name: "userRole name",
},
],
//this is a bit different in 2.38.7
lastUpdated: "",
passwordLastUpdated: "",
selfRegisterd: false,
uid: "",
twoFactorEnabled: false,
},
createdBy: {
displayName: "fake complete name",
name: "fake complete name",
id: "TuqkLj1igOH",
username: "fakeusername",
},
userGroups: [
{
id: "dhWMtH5yC2h",
name: "userGroup name",
},
],
userRoles: [
{
id: "tocVqzvmpI0",
name: "userRole name",
},
],
selftRefistered: false,
phoneNumber: "",
passwordLastUpdated: "",
};

export const templateGroupsExtended: PermissionFixerTemplateGroupExtended = {
group: {
id: "dhWMtH5yC2h",
name: "userGroup name",
},
template: {
id: "dhWMtH5yC2h_user",
name: "template user username",
},
validRolesByAuthority: [],
invalidRolesByAuthority: [],
validRolesById: [],
invalidRolesById: [],
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import { UserMonitoringProgramD2Repository } from "data/user-monitoring/common/UserMonitoringProgramD2Repository";
import { RunUserPermissionUseCase } from "../RunUserPermissionUseCase";
import {
fakeValidUser,
metadataConfig,
programMetadata,
templateGroupsExtended,
} from "./RunUserPermissionTest.data";
import { describe, it, expect } from "vitest";
import { anything, deepEqual, instance, mock, when } from "ts-mockito";
import { PermissionFixerUserD2Repository } from "data/user-monitoring/permission-fixer/PermissionFixerUserD2Repository";
import { PermissionFixerUserGroupD2Repository } from "data/user-monitoring/permission-fixer/PermissionFixerUserGroupD2Repository";
import { PermissionFixerTemplateD2Repository } from "data/user-monitoring/permission-fixer/PermissionFixerTemplateD2Repository";
import { PermissionFixerReportD2Repository } from "data/user-monitoring/permission-fixer/PermissionFixerReportD2Repository";
import { PermissionFixerConfigD2Repository } from "data/user-monitoring/permission-fixer/PermissionFixerConfigD2Repository";
import { NamedRef } from "domain/entities/Base";
import { PermissionFixerMetadataConfig } from "domain/entities/user-monitoring/permission-fixer/PermissionFixerConfigOptions";

describe("RunUserPermissionUseCase", () => {
it("Should ignore user if the user is in the datastore excluded users list", async () => {
const useCase = givenUseCaseIgnoreUser();

const result = await useCase.execute();
console.log(JSON.stringify(result));
expect(result.groupsReport?.invalidUsersCount).toEqual(undefined);
expect(result.groupsReport?.listOfAffectedUsers).toEqual(undefined);
expect(result.rolesReport?.invalidUsersCount).toEqual(undefined);
expect(result.rolesReport?.listOfAffectedUsers).toEqual(undefined);
expect(result.message).toEqual("");
});
});

function givenUseCaseIgnoreUser() {
const useCase = new RunUserPermissionUseCase(
givenConfigRepository(fakeValidUser),
givenReportRepository(),
givenTemplateRepository(),
givenUserGroupRepository(),
givenUserRepository(),
givenUserMonitoringProgramD2Repository()
);
return useCase;
}

function givenConfigRepository(excludedUser: NamedRef) {
const mockedRepository = mock(PermissionFixerConfigD2Repository);
metadataConfig.excludedUsers = [excludedUser];
when(mockedRepository.get()).thenReturn(Promise.resolve(metadataConfig));
const reportRepository = instance(mockedRepository);
return reportRepository;
}
function givenReportRepository() {
const mockedRepository = mock(PermissionFixerReportD2Repository);
when(mockedRepository.save(anything(), anything(), anything())).thenReturn(Promise.resolve("OK"));
const reportRepository = instance(mockedRepository);
return reportRepository;
}
function givenUserGroupRepository() {
const mockedRepository = mock(PermissionFixerUserGroupD2Repository);
when(mockedRepository.save(anything(), anything())).thenReturn(Promise.resolve("OK"));
const reportRepository = instance(mockedRepository);
return reportRepository;
}
function givenUserRepository() {
const mockedRepository = mock(PermissionFixerUserD2Repository);
when(mockedRepository.getAllUsers(anything(), anything())).thenReturn(Promise.resolve([fakeValidUser]));
const reportRepository = instance(mockedRepository);
return reportRepository;
}
function givenTemplateRepository() {
const mockedRepository = mock(PermissionFixerTemplateD2Repository);
when(mockedRepository.getTemplateAuthorities(anything(), anything())).thenReturn(
Promise.resolve([templateGroupsExtended])
);
const reportRepository = instance(mockedRepository);
return reportRepository;
}
function givenUserMonitoringProgramD2Repository() {
const mockedRepository = mock(UserMonitoringProgramD2Repository);
when(mockedRepository.get(deepEqual(metadataConfig.pushProgram.id))).thenReturn(
Promise.resolve(programMetadata)
);
const reportRepository = instance(mockedRepository);
return reportRepository;
}

0 comments on commit 30842d9

Please sign in to comment.