Skip to content

Commit

Permalink
refetch convention on status change (pre-validation, validation, modi…
Browse files Browse the repository at this point in the history
…fication asked...)
  • Loading branch information
JeromeBu committed Dec 10, 2024
1 parent 5c99a5b commit 24bc6c5
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 16 deletions.
38 changes: 25 additions & 13 deletions front/src/core-logic/domain/convention/convention.epics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,18 @@ const getConventionEpic: ConventionEpic = (
filter(
(action) =>
conventionSlice.actions.fetchConventionRequested.match(action) ||
conventionSlice.actions.signConventionSucceeded.match(action),
conventionSlice.actions.signConventionSucceeded.match(action) ||
conventionSlice.actions.statusChangeSucceeded.match(action),
),
switchMap(({ payload }) => conventionGateway.retrieveFromToken$(payload)),
switchMap((action) => {
const params = conventionSlice.actions.statusChangeSucceeded.match(action)
? {
conventionId: action.payload.updateStatusParams.conventionId,
jwt: action.payload.jwt,
}
: action.payload;
return conventionGateway.retrieveFromToken$(params);
}),
map(conventionSlice.actions.fetchConventionSucceeded),
catchEpicError((error: Error) =>
conventionSlice.actions.fetchConventionFailed(error.message),
Expand Down Expand Up @@ -118,19 +127,22 @@ const conventionStatusChangeEpic: ConventionEpic = (
conventionGateway
.updateConventionStatus$(payload.updateStatusParams, payload.jwt)
.pipe(
map(() =>
conventionSlice.actions.statusChangeSucceeded(payload.feedbackKind),
),
map(() => conventionSlice.actions.statusChangeSucceeded(payload)),
catchEpicError((error: Error) => {
if (
error.message.includes(
"Convention should be reviewed by counsellor",
)
)
return conventionSlice.actions.statusChangeSucceeded({
...payload,
feedbackKind: "missingCounsellorValidationError",
});

return conventionSlice.actions.statusChangeFailed(error.message);
}),
),
),
catchEpicError((error: Error) => {
if (error.message.includes("Convention should be reviewed by counsellor"))
return conventionSlice.actions.statusChangeSucceeded(
"missingCounsellorValidationError",
);

return conventionSlice.actions.statusChangeFailed(error.message);
}),
);

const getConventionStatusDashboardUrl: ConventionEpic = (
Expand Down
4 changes: 2 additions & 2 deletions front/src/core-logic/domain/convention/convention.slice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -194,10 +194,10 @@ export const conventionSlice = createSlice({
},
statusChangeSucceeded: (
state,
action: PayloadAction<ConventionFeedbackKind>,
action: PayloadAction<StatusChangePayload>,
) => {
state.isLoading = false;
state.feedback = { kind: action.payload };
state.feedback = { kind: action.payload.feedbackKind };
},
statusChangeFailed: setFeedbackAsErrored,

Expand Down
39 changes: 38 additions & 1 deletion front/src/core-logic/domain/convention/convention.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -795,13 +795,34 @@ describe("Convention slice", () => {

describe("Convention status change", () => {
it("sends modification request with provided justification", () => {
const agencyFields = {
agencyCounsellorEmails: [],
agencyDepartment: "75",
agencyKind: "mission-locale" as const,
agencyName: "Agence Mission Locale",
agencyRefersTo: undefined,
agencySiret: "11110000111155",
agencyValidatorEmails: [],
};
const convention: ConventionReadDto = {
...agencyFields,
...new ConventionDtoBuilder().withStatus("IN_REVIEW").build(),
};

({ store, dependencies } = createTestStore({
convention: {
...initialConventionState,
convention,
},
}));

const jwt = "some-correct-jwt";
store.dispatch(
conventionSlice.actions.statusChangeRequested({
updateStatusParams: {
status: "DRAFT",
statusJustification: "There is a mistake in my last name",
conventionId: "some-id",
conventionId: convention.id,
modifierRole: "beneficiary",
},
feedbackKind: "modificationsAskedFromSignatory",
Expand All @@ -812,8 +833,24 @@ describe("Convention slice", () => {
isLoading: true,
});
feedGatewayWithModificationSuccess();

expectConventionState({
isLoading: false,
feedback: { kind: "modificationsAskedFromSignatory" },
convention,
});

const updatedConvention: ConventionReadDto = {
...convention,
status: "DRAFT",
statusJustification: "There is a mistake in my last name",
};

feedGatewayWithConvention(updatedConvention);

expectConventionState({
isLoading: false,
convention: updatedConvention,
feedback: { kind: "modificationsAskedFromSignatory" },
});
});
Expand Down

0 comments on commit 24bc6c5

Please sign in to comment.