Skip to content

Commit

Permalink
Migrated getPersonWithUebersicht
Browse files Browse the repository at this point in the history
  • Loading branch information
YoussefBouch committed Aug 30, 2024
1 parent fdd16fb commit dd3add9
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 158 deletions.
76 changes: 35 additions & 41 deletions src/stores/PersonStore.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {
OrganisationsTyp,
RollenMerkmal,
type DBiamPersonenuebersichtControllerFindPersonenuebersichten200Response,
type DBiamPersonenuebersichtResponse,
type PersonFrontendControllerFindPersons200Response,
type PersonendatensatzResponse,
type TokenStateResponse,
Expand All @@ -23,7 +23,6 @@ describe('PersonStore', () => {
});

it('should initalize state correctly', () => {
expect(personStore.allPersons).toEqual([]);
expect(personStore.errorCode).toEqual('');
expect(personStore.loading).toBe(false);
});
Expand Down Expand Up @@ -61,7 +60,7 @@ describe('PersonStore', () => {
const getAllPersonPromise: Promise<void> = personStore.getAllPersons({});
expect(personStore.loading).toBe(true);
await getAllPersonPromise;
expect(personStore.allPersons).toEqual([...mockPersons]);
expect(personStore.personenWithUebersicht).toEqual([...mockPersons]);
expect(personStore.loading).toBe(false);
});

Expand Down Expand Up @@ -89,7 +88,7 @@ describe('PersonStore', () => {
const getAllPersonPromise: Promise<void> = personStore.getAllPersons({ searchFilter: 'Sus' });
expect(personStore.loading).toBe(true);
await getAllPersonPromise;
expect(personStore.allPersons).toEqual([...mockPersonsWithFilter]);
expect(personStore.personenWithUebersicht).toEqual([...mockPersonsWithFilter]);
expect(personStore.loading).toBe(false);
});

Expand All @@ -98,7 +97,7 @@ describe('PersonStore', () => {
const getAllPersonPromise: Promise<void> = personStore.getAllPersons({});
expect(personStore.loading).toBe(true);
await getAllPersonPromise;
expect(personStore.allPersons).toEqual([]);
expect(personStore.personenWithUebersicht).toEqual([]);
expect(personStore.errorCode).toEqual('UNSPECIFIED_ERROR');
expect(personStore.loading).toBe(false);
});
Expand All @@ -108,7 +107,7 @@ describe('PersonStore', () => {
const getAllPersonPromise: Promise<void> = personStore.getAllPersons({});
expect(personStore.loading).toBe(true);
await getAllPersonPromise;
expect(personStore.allPersons).toEqual([]);
expect(personStore.personenWithUebersicht).toEqual([]);
expect(personStore.errorCode).toEqual('some mock server error');
expect(personStore.loading).toBe(false);
});
Expand Down Expand Up @@ -301,57 +300,52 @@ describe('PersonStore', () => {
expect(personStore.loading).toBe(false);
});
});
describe('getAllPersonenuebersichte', () => {
it('should get All Personenuebersicht', async () => {
const mockResponse: DBiamPersonenuebersichtControllerFindPersonenuebersichten200Response = {
total: 0,
offset: 0,
limit: 0,
items: [

describe('getPersonenuebersichtById', () => {
it('should get Personenuebersicht', async () => {
const mockResponse: DBiamPersonenuebersichtResponse = {
personId: '1',
vorname: 'string',
nachname: 'string',
benutzername: 'string',
lastModifiedZuordnungen: '08.02.2024',
zuordnungen: [
{
personId: '1234',
vorname: 'Samuel',
nachname: 'Vimes',
benutzername: 'string',
lastModifiedZuordnungen: '08.02.2024',
zuordnungen: [
{
sskId: 'string',
rolleId: 'string',
sskName: 'string',
sskDstNr: 'string',
rolle: 'string',
typ: OrganisationsTyp.Klasse,
administriertVon: 'string',
editable: true,
merkmale: [] as unknown as RollenMerkmal,
},
],
sskId: 'string',
rolleId: 'string',
sskName: 'string',
sskDstNr: 'string',
rolle: 'string',
typ: OrganisationsTyp.Klasse,
administriertVon: 'string',
editable: true,
merkmale: [] as unknown as RollenMerkmal,
},
],
};
mockadapter.onGet('/api/dbiam/personenuebersicht').replyOnce(200, mockResponse);
const getAllPersonenuebersichtenPromise: Promise<void> = personStore.getAllPersonenuebersichten([]);

mockadapter.onGet('/api/dbiam/personenuebersicht/1').replyOnce(200, mockResponse);
const getPersonenuebersichtByIdPromise: Promise<void> = personStore.getPersonenuebersichtById('1');
expect(personStore.loading).toBe(true);
await getAllPersonenuebersichtenPromise;
expect(personStore.allUebersichten).toEqual(mockResponse);
await getPersonenuebersichtByIdPromise;
expect(personStore.personenuebersicht).toEqual(mockResponse);
expect(personStore.loading).toBe(false);
});

it('should handle string error', async () => {
mockadapter.onGet('/api/dbiam/personenuebersicht').replyOnce(500, 'some error');
const getAllPersonenuebersichtenPromise: Promise<void> = personStore.getAllPersonenuebersichten([]);
mockadapter.onGet('/api/dbiam/personenuebersicht/1').replyOnce(500, 'some error');
const getPersonenuebersichtByIdPromise: Promise<void> = personStore.getPersonenuebersichtById('1');
expect(personStore.loading).toBe(true);
await getAllPersonenuebersichtenPromise;
await getPersonenuebersichtByIdPromise;
expect(personStore.errorCode).toEqual('UNSPECIFIED_ERROR');
expect(personStore.loading).toBe(false);
});

it('should handle error code', async () => {
mockadapter.onGet('/api/dbiam/personenuebersicht').replyOnce(500, { code: 'some mock server error' });
const getAllPersonenuebersichtenPromise: Promise<void> = personStore.getAllPersonenuebersichten([]);
mockadapter.onGet('/api/dbiam/personenuebersicht/1').replyOnce(500, { code: 'some mock server error' });
const getPersonenuebersichtByIdPromise: Promise<void> = personStore.getPersonenuebersichtById('1');
expect(personStore.loading).toBe(true);
await getAllPersonenuebersichtenPromise;
await getPersonenuebersichtByIdPromise;
expect(personStore.errorCode).toEqual('some mock server error');
expect(personStore.loading).toBe(false);
});
Expand Down
29 changes: 14 additions & 15 deletions src/stores/PersonStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
type DbiamCreatePersonWithContextBodyParams,
type DbiamPersonenuebersichtApiInterface,
type DBiamPersonenuebersichtControllerFindPersonenuebersichten200Response,
type DBiamPersonenuebersichtResponse,
type PersonenApiInterface,
type PersonendatensatzResponse,
type PersonenFrontendApiInterface,
Expand Down Expand Up @@ -48,7 +49,7 @@ type PersonenWithRolleAndZuordnung = {
person: Person;
}[];

export type Uebersicht =
export type PersonWithUebersicht =
| {
personId: string;
vorname: string;
Expand Down Expand Up @@ -93,14 +94,13 @@ export type TwoFactorState = {
export type { PersonendatensatzResponse };

type PersonState = {
allPersons: Array<Personendatensatz>;
errorCode: string;
loading: boolean;
totalPersons: number;
currentPerson: Personendatensatz | null;
twoFactorState: TwoFactorState;
allUebersichten: DBiamPersonenuebersichtControllerFindPersonenuebersichten200Response | null;
personenWithUebersicht: PersonenWithRolleAndZuordnung | null;
personenuebersicht: DBiamPersonenuebersichtResponse | null;
};

export type PersonFilter = {
Expand All @@ -120,7 +120,7 @@ type PersonActions = {
deletePersonById: (personId: string) => Promise<void>;
get2FAState: (personId: string) => Promise<void>;
get2FASoftwareQRCode: (personId: string) => Promise<void>;
getAllPersonenuebersichten: (personIds: string[]) => Promise<void>;
getPersonenuebersichtById: (personId: string) => Promise<void>;
};

export type PersonStore = Store<'personStore', PersonState, PersonGetters, PersonActions>;
Expand All @@ -129,9 +129,8 @@ export const usePersonStore: StoreDefinition<'personStore', PersonState, PersonG
id: 'personStore',
state: (): PersonState => {
return {
allPersons: [],
allUebersichten: null,
personenWithUebersicht: null,
personenuebersicht: null,
errorCode: '',
loading: false,
totalPersons: 0,
Expand Down Expand Up @@ -166,19 +165,19 @@ export const usePersonStore: StoreDefinition<'personStore', PersonState, PersonG
);

// Store the fetched persons
this.allPersons = data.items;
const allPersons: PersonendatensatzResponse[] = data.items;
this.totalPersons = +data.total;

// Fetch overviews for all persons
const personIds: string[] = data.items.map((person: PersonendatensatzResponse) => person.person.id);
const { data: uebersichten }: { data: DBiamPersonenuebersichtControllerFindPersonenuebersichten200Response } =
await personenuebersichtApi.dBiamPersonenuebersichtControllerFindPersonenuebersichten(personIds);
this.allUebersichten = uebersichten;
const allUebersichten: DBiamPersonenuebersichtControllerFindPersonenuebersichten200Response = uebersichten;

// Aggregate the personen with their uebersichten
this.personenWithUebersicht = this.allPersons.map((person: Personendatensatz) => {
const uebersicht: Uebersicht = this.allUebersichten?.items.find(
(ueb: Uebersicht) => ueb?.personId === person.person.id,
this.personenWithUebersicht = allPersons.map((person: Personendatensatz) => {
const uebersicht: PersonWithUebersicht = allUebersichten.items.find(
(ueb: PersonWithUebersicht) => ueb?.personId === person.person.id,
);

const uniqueRollen: Set<string> = new Set<string>();
Expand Down Expand Up @@ -326,12 +325,12 @@ export const usePersonStore: StoreDefinition<'personStore', PersonState, PersonG
this.loading = false;
}
},
async getAllPersonenuebersichten(personIds: string[]): Promise<void> {
async getPersonenuebersichtById(personId: string): Promise<void> {
this.loading = true;
try {
const { data }: { data: DBiamPersonenuebersichtControllerFindPersonenuebersichten200Response } =
await personenuebersichtApi.dBiamPersonenuebersichtControllerFindPersonenuebersichten(personIds);
this.allUebersichten = data;
const { data }: { data: DBiamPersonenuebersichtResponse } =
await personenuebersichtApi.dBiamPersonenuebersichtControllerFindPersonenuebersichtenByPerson(personId);
this.personenuebersicht = data;
} catch (error: unknown) {
this.errorCode = 'UNSPECIFIED_ERROR';
if (isAxiosError(error)) {
Expand Down
51 changes: 0 additions & 51 deletions src/stores/PersonenkontextStore.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import {
type DBiamPersonenkontextResponse,
type DBiamPersonenuebersichtResponse,
type FindRollenResponse,
type FindSchulstrukturknotenResponse,
type SystemrechtResponse,
Expand Down Expand Up @@ -411,56 +410,6 @@ describe('PersonenkontextStore', () => {
expect(personenkontextStore.loading).toBe(false);
});
});
describe('getPersonenuebersichtById', () => {
it('should get Personenuebersicht', async () => {
const mockResponse: DBiamPersonenuebersichtResponse = {
personId: '1',
vorname: 'string',
nachname: 'string',
benutzername: 'string',
lastModifiedZuordnungen: '08.02.2024',
zuordnungen: [
{
sskId: 'string',
rolleId: 'string',
sskName: 'string',
sskDstNr: 'string',
rolle: 'string',
typ: OrganisationsTyp.Klasse,
administriertVon: 'string',
editable: true,
merkmale: [] as unknown as RollenMerkmal,
},
],
};

mockadapter.onGet('/api/dbiam/personenuebersicht/1').replyOnce(200, mockResponse);
const getPersonenuebersichtByIdPromise: Promise<void> = personenkontextStore.getPersonenuebersichtById('1');
expect(personenkontextStore.loading).toBe(true);
await getPersonenuebersichtByIdPromise;
expect(personenkontextStore.personenuebersicht).toEqual(mockResponse);
expect(personenkontextStore.loading).toBe(false);
});

it('should handle string error', async () => {
mockadapter.onGet('/api/dbiam/personenuebersicht/1').replyOnce(500, 'some error');
const getPersonenuebersichtByIdPromise: Promise<void> = personenkontextStore.getPersonenuebersichtById('1');
expect(personenkontextStore.loading).toBe(true);
await getPersonenuebersichtByIdPromise;
expect(personenkontextStore.errorCode).toEqual('UNSPECIFIED_ERROR');
expect(personenkontextStore.loading).toBe(false);
});

it('should handle error code', async () => {
mockadapter.onGet('/api/dbiam/personenuebersicht/1').replyOnce(500, { code: 'some mock server error' });
const getPersonenuebersichtByIdPromise: Promise<void> = personenkontextStore.getPersonenuebersichtById('1');
expect(personenkontextStore.loading).toBe(true);
await getPersonenuebersichtByIdPromise;
expect(personenkontextStore.errorCode).toEqual('some mock server error');
expect(personenkontextStore.loading).toBe(false);
});
});

describe('getPersonenkontextRolleWithFilter', () => {
it('should get filtered Rollen', async () => {
const mockResponse: FindRollenResponse = {
Expand Down
Loading

0 comments on commit dd3add9

Please sign in to comment.