From 7fff2e9a8fb94d1f7ec6b7efdc5f8462ca92110a Mon Sep 17 00:00:00 2001 From: Benoit Guigal Date: Thu, 6 Mar 2025 09:28:33 +0100 Subject: [PATCH 1/8] fix : la signature transporteur est disponible depuis l'onglet Suivi --- front/src/Apps/Dashboard/dashboardServices.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/Apps/Dashboard/dashboardServices.ts b/front/src/Apps/Dashboard/dashboardServices.ts index 1e2adae637..059459527c 100644 --- a/front/src/Apps/Dashboard/dashboardServices.ts +++ b/front/src/Apps/Dashboard/dashboardServices.ts @@ -933,7 +933,7 @@ export const getSignByProducerBtnLabel = ( isSameSiretTransporter(currentSiret, bsd) && permissions.includes(UserPermission.BsdCanSignTransport) ) { - if (isBsdd(bsd.type)) { + if (isBsdd(bsd.type) && isToCollectTab) { return SIGNER; } if (isBsdasri(bsd.type)) { From dddcdc09d455bca876d2589bd96da4896774fc50 Mon Sep 17 00:00:00 2001 From: Benoit Guigal Date: Thu, 6 Mar 2025 10:13:03 +0100 Subject: [PATCH 2/8] =?UTF-8?q?fix(annexe=202)=20:=20la=20liste=20des=20co?= =?UTF-8?q?nditionnements=20est=20incompl=C3=A8te?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/PackagingList/PackagingForm.tsx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/front/src/Apps/Forms/Components/PackagingList/PackagingForm.tsx b/front/src/Apps/Forms/Components/PackagingList/PackagingForm.tsx index b5382b9c3e..867a9b4457 100644 --- a/front/src/Apps/Forms/Components/PackagingList/PackagingForm.tsx +++ b/front/src/Apps/Forms/Components/PackagingList/PackagingForm.tsx @@ -71,9 +71,16 @@ function PackagingForm({ packagingsLength > 1 ? // Un conditionnement en citerne ou benne exclut le mélange avec // tout autre type de conditionnement - packagingTypeOptions.filter( - o => o.value !== Packagings.Citerne && o.value !== Packagings.Benne - ) + packagingTypeOptions.filter(o => { + return ( + // tra-16064 - cas particulier si les conditionnements ont été calculés + // automatiquement à partir de la liste des annexes 2, on peut se retrouver + // avec des conditionnements incohérents et on veut quand même pouvoir afficher + // Citerne ou Benne dans la liste des options disponibles. + o.value === packaging.type || + (o.value !== Packagings.Citerne && o.value !== Packagings.Benne) + ); + }) : packagingTypeOptions; return ( From 2c6a819f8c6727c887df7d842fa8f594f0a64240 Mon Sep 17 00:00:00 2001 From: Benoit Guigal Date: Thu, 6 Mar 2025 11:19:20 +0100 Subject: [PATCH 3/8] =?UTF-8?q?fix=20:=20on=20ne=20peut=20pas=20modifier?= =?UTF-8?q?=20le=20conditionnement=20lors=20de=20la=20signature=20du=20TTR?= =?UTF-8?q?=20apr=C3=A8s=20entreposage=20provsioire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WorkflowAction/FormJourneySummary.tsx | 6 ++- .../FormWasteEmissionSummary.tsx | 39 +++++++++++-------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/front/src/dashboard/components/BSDList/BSDD/WorkflowAction/FormJourneySummary.tsx b/front/src/dashboard/components/BSDList/BSDD/WorkflowAction/FormJourneySummary.tsx index ed883a6a01..131629cbb5 100644 --- a/front/src/dashboard/components/BSDList/BSDD/WorkflowAction/FormJourneySummary.tsx +++ b/front/src/dashboard/components/BSDList/BSDD/WorkflowAction/FormJourneySummary.tsx @@ -94,7 +94,11 @@ export function FormJourneySummary({ form }: FormJourneySummaryProps) { variant={ form.temporaryStorageDetail.emittedAt ? "complete" - : (form.transporters ?? []).every(t => Boolean(t.takenOverAt)) + : (form.isDirectSupply && form.emittedAt) || + (!form.isDirectSupply && + (form.transporters ?? []).every(t => + Boolean(t.takenOverAt) + )) ? // Actif si tous les transporteurs ont signé, sinon en attente "active" : "incomplete" diff --git a/front/src/dashboard/components/BSDList/BSDD/WorkflowAction/FormWasteEmissionSummary.tsx b/front/src/dashboard/components/BSDList/BSDD/WorkflowAction/FormWasteEmissionSummary.tsx index 3395fde93a..6c1bcaf576 100644 --- a/front/src/dashboard/components/BSDList/BSDD/WorkflowAction/FormWasteEmissionSummary.tsx +++ b/front/src/dashboard/components/BSDList/BSDD/WorkflowAction/FormWasteEmissionSummary.tsx @@ -75,6 +75,12 @@ export function FormWasteEmissionSummary({ .filter((name, index, fields) => fields.indexOf(name) === index) ); + // On ne doit pas pouvoir éditer la liste des contenants ou la plaque immat + // lors d'un acheminement direct par pipeline ou convoyeur sauf s'il s'agit + // de la signature du TTR après entreposage provisoire + const isDirectSupply = + form.temporaryStorageDetail && form.emittedAt ? false : form.isDirectSupply; + return ( <> @@ -104,7 +110,7 @@ export function FormWasteEmissionSummary({ - {!form.isDirectSupply && ( + {!isDirectSupply && ( Contenant(s) @@ -157,22 +163,23 @@ export function FormWasteEmissionSummary({ )} - {form.emitter?.type !== EmitterType.Appendix1Producer && ( - - Plaque d'immatriculation - - {values.transporterNumberPlate} + {form.emitter?.type !== EmitterType.Appendix1Producer && + !isDirectSupply && ( + + Plaque d'immatriculation + + {values.transporterNumberPlate} - - - - )} + + + + )} {fields.length > 0 && (
From a24cb6207849af5ec997253504b0c444f0345ee9 Mon Sep 17 00:00:00 2001 From: Benoit Guigal Date: Thu, 6 Mar 2025 11:26:51 +0100 Subject: [PATCH 4/8] =?UTF-8?q?fix(BSDDetailContent.tsx)=20:=20corrige=20l?= =?UTF-8?q?a=20vue=20d=C3=A9tail=20d'un=20BSDD=20en=20cas=20d'achmeninemen?= =?UTF-8?q?t=20direct=20par=20pipeline?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../detail/bsdd/BSDDetailContent.tsx | 31 +++++++------------ 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/front/src/dashboard/detail/bsdd/BSDDetailContent.tsx b/front/src/dashboard/detail/bsdd/BSDDetailContent.tsx index 65ede844b3..01c62a061c 100644 --- a/front/src/dashboard/detail/bsdd/BSDDetailContent.tsx +++ b/front/src/dashboard/detail/bsdd/BSDDetailContent.tsx @@ -910,14 +910,15 @@ export default function BSDDetailContent({ Courtier )} - {form.transporters?.map((_, idx) => ( - - - - {isMultiModal ? `Transp. n° ${idx + 1}` : "Transporteur"} - - - ))} + {!form.isDirectSupply && + form.transporters?.map((_, idx) => ( + + + + {isMultiModal ? `Transp. n° ${idx + 1}` : "Transporteur"} + + + ))} {hasTempStorage && ( @@ -1019,7 +1020,7 @@ export default function BSDDetailContent({ )} {/* Transporter tab panel */} - {!form.isDirectSupply ? ( + {!form.isDirectSupply && (form.transporters ?? []).map((transporter, idx) => (
@@ -1078,17 +1079,7 @@ export default function BSDDetailContent({ />
- )) - ) : ( - -
- -
-
- )} + ))} {/* Temp storage tab panel */} {hasTempStorage && ( From 27002f7cad39e14e102b664b0d412fbf8dab35d0 Mon Sep 17 00:00:00 2001 From: Benoit Guigal Date: Thu, 6 Mar 2025 11:57:50 +0100 Subject: [PATCH 5/8] fix(BsddPdf) : affiche la date de signature de l'acceptation par l'entreposage provisoire --- back/src/forms/converter.ts | 3 ++- back/src/forms/pdf/components/BsddPdf.tsx | 4 +++- back/src/forms/typeDefs/bsdd.objects.graphql | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/back/src/forms/converter.ts b/back/src/forms/converter.ts index d704c4ae18..d3ac504799 100644 --- a/back/src/forms/converter.ts +++ b/back/src/forms/converter.ts @@ -855,7 +855,8 @@ export function expandFormFromDb( wasteAcceptationStatus: form.wasteAcceptationStatus, wasteRefusalReason: form.wasteRefusalReason, receivedAt: processDate(form.receivedAt), - receivedBy: form.receivedBy + receivedBy: form.receivedBy, + signedAt: form.signedAt }, transporter: forwardedInTransporter ? expandTransporterFromDb(forwardedInTransporter) diff --git a/back/src/forms/pdf/components/BsddPdf.tsx b/back/src/forms/pdf/components/BsddPdf.tsx index d1220f8bc6..2428f59705 100644 --- a/back/src/forms/pdf/components/BsddPdf.tsx +++ b/back/src/forms/pdf/components/BsddPdf.tsx @@ -983,7 +983,9 @@ export function BsddPdf({

Nom :{" "} diff --git a/back/src/forms/typeDefs/bsdd.objects.graphql b/back/src/forms/typeDefs/bsdd.objects.graphql index 7ba104b1e7..5389c1e501 100644 --- a/back/src/forms/typeDefs/bsdd.objects.graphql +++ b/back/src/forms/typeDefs/bsdd.objects.graphql @@ -376,9 +376,10 @@ type TemporaryStorer { quantityAccepted: Float wasteAcceptationStatus: WasteAcceptationStatus wasteRefusalReason: String - receivedAt: DateTime receivedBy: String + "Date à laquelle le déchet a été accepté ou refusé (case 13)" + signedAt: DateTime } "Destination finale après entreposage provisoire ou reconditionement" From dc22cd2ff1ec6f82701eba9215121d76bc0cfd04 Mon Sep 17 00:00:00 2001 From: Benoit Guigal Date: Thu, 6 Mar 2025 13:52:47 +0100 Subject: [PATCH 6/8] =?UTF-8?q?fix(signTransportForm.ts)=20:=20la=20plaque?= =?UTF-8?q?=20immat=20du=20transporteur=20apr=C3=A8s=20entreposage=20provi?= =?UTF-8?q?soire=20est=20requise?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resolvers/mutations/signTransportForm.ts | 29 +++++++++---------- back/src/forms/validation.ts | 13 --------- .../SignEmissionFormModalContent.tsx | 10 ++++++- 3 files changed, 22 insertions(+), 30 deletions(-) diff --git a/back/src/forms/resolvers/mutations/signTransportForm.ts b/back/src/forms/resolvers/mutations/signTransportForm.ts index 75e37314e0..76833c1b68 100644 --- a/back/src/forms/resolvers/mutations/signTransportForm.ts +++ b/back/src/forms/resolvers/mutations/signTransportForm.ts @@ -21,7 +21,7 @@ import { getFormRepository } from "../../repository"; import { getTransporterCompanyOrgId } from "@td/constants"; import { runInTransaction } from "../../../common/repository/helper"; import { sumPackagingInfos } from "../../repository/helper"; -import { validateBeforeTransport, plateSchemaFn } from "../../validation"; +import { validateBeforeTransport, transporterSchemaFn } from "../../validation"; import { Permission } from "../../../permissions"; import { enqueueUpdatedBsdToIndex } from "../../../queue/producers/elastic"; import { recipifyFormInput } from "../../recipify"; @@ -333,12 +333,22 @@ const signatures: Partial< const existingFullForm = await getFullForm(existingForm); const transporter = getFirstTransporterSync(existingFullForm.forwardedIn!); + const signingTransporterOrgId = getTransporterCompanyOrgId(transporter)!; await checkCanSignFor( - getTransporterCompanyOrgId(transporter)!, + signingTransporterOrgId, user, Permission.BsdCanSignTransport, args.securityCode ); + const transporterNumberPlate = + args.input.transporterNumberPlate ?? transporter?.transporterNumberPlate; + + const transporterSchema = transporterSchemaFn({ signingTransporterOrgId }); + + await transporterSchema.validate({ + ...transporter, + transporterNumberPlate + }); const formUpdateInput: Prisma.FormUpdateInput = { forwardedIn: { @@ -349,9 +359,7 @@ const signatures: Partial< transporters: { updateMany: { data: { - transporterNumberPlate: - args.input.transporterNumberPlate ?? - transporter?.transporterNumberPlate + transporterNumberPlate }, where: { number: 1 } } @@ -365,17 +373,6 @@ const signatures: Partial< } }; - await plateSchemaFn().validate( - { - transporterNumberPlate: - args.input.transporterNumberPlate ?? - transporter?.transporterNumberPlate - }, - { - abortEarly: false - } - ); - const updatedForm = await getFormRepository(user).update( { id: existingFullForm.id, status: existingFullForm.status }, { diff --git a/back/src/forms/validation.ts b/back/src/forms/validation.ts index 25231ce898..e6b1faa32b 100644 --- a/back/src/forms/validation.ts +++ b/back/src/forms/validation.ts @@ -1069,19 +1069,6 @@ export const validatePlates = (transporterNumberPlate: string) => { return true; }; -// Schema dedicated to validate plates on signTransportForm SIGNED_BY_TEMP_STORER -export const plateSchemaFn = () => - yup.object({ - transporterNumberPlate: yup - .string() - .nullable() - .test(transporterNumberPlate => { - return transporterNumberPlate - ? validatePlates(transporterNumberPlate) - : true; - }) - }); - export const transporterSchemaFn: FactorySchemaOf< Pick, Transporter diff --git a/front/src/dashboard/components/BSDList/BSDD/WorkflowAction/SignEmissionFormModalContent.tsx b/front/src/dashboard/components/BSDList/BSDD/WorkflowAction/SignEmissionFormModalContent.tsx index 623573139e..addb61d201 100644 --- a/front/src/dashboard/components/BSDList/BSDD/WorkflowAction/SignEmissionFormModalContent.tsx +++ b/front/src/dashboard/components/BSDList/BSDD/WorkflowAction/SignEmissionFormModalContent.tsx @@ -122,6 +122,14 @@ function SignEmissionFormModalContent({ ); } const form = data?.form; + + const initialTransporterNumberPlate = + !!form.temporaryStorageDetail && !!form.emittedAt + ? // Il s'agit de la signature de l'émetteur après + // entreposage provisoire + form?.temporaryStorageDetail.transporter?.numberPlate + : form.transporter?.numberPlate; + const initialValues = { emittedAt: TODAY.toISOString(), emittedBy: "", @@ -131,7 +139,7 @@ function SignEmissionFormModalContent({ packagingInfos: form.wasteDetails?.packagingInfos ?? [], quantity: form.wasteDetails?.quantity ?? 0, onuCode: form.wasteDetails?.onuCode ?? "", - transporterNumberPlate: form.transporter?.numberPlate ?? "" + transporterNumberPlate: initialTransporterNumberPlate ?? "" }; const handlesubmit = async values => { From bdf9f009c2ce9ae599d644958a71269710684f92 Mon Sep 17 00:00:00 2001 From: Benoit Guigal Date: Thu, 6 Mar 2025 14:38:13 +0100 Subject: [PATCH 7/8] =?UTF-8?q?fix(CI)=20:=20auto-compl=C3=A8te=20le=20r?= =?UTF-8?q?=C3=A9c=C3=A9piss=C3=A9=20transporteur=20apr=C3=A8s=20entreposa?= =?UTF-8?q?ge=20provisoire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../forms/__tests__/form-converter.integration.ts | 3 ++- .../__tests__/signTransportForm.integration.ts | 4 ++++ .../forms/resolvers/mutations/signTransportForm.ts | 14 ++++++++++++-- front/src/Apps/Dashboard/dashboardServices.test.ts | 2 +- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/back/src/forms/__tests__/form-converter.integration.ts b/back/src/forms/__tests__/form-converter.integration.ts index 45c949a870..25ead4e017 100644 --- a/back/src/forms/__tests__/form-converter.integration.ts +++ b/back/src/forms/__tests__/form-converter.integration.ts @@ -203,7 +203,8 @@ describe("expandFormFromDb", () => { wasteAcceptationStatus: null, wasteRefusalReason: null, receivedAt: null, - receivedBy: null + receivedBy: null, + signedAt: null }, destination: { cap: "CAP", diff --git a/back/src/forms/resolvers/mutations/__tests__/signTransportForm.integration.ts b/back/src/forms/resolvers/mutations/__tests__/signTransportForm.integration.ts index 9306b7d718..91e5c05f75 100644 --- a/back/src/forms/resolvers/mutations/__tests__/signTransportForm.integration.ts +++ b/back/src/forms/resolvers/mutations/__tests__/signTransportForm.integration.ts @@ -444,6 +444,7 @@ describe("signTransportForm", () => { it("should sign transport from temporary storage", async () => { const temporaryStorage = await userWithCompanyFactory("ADMIN"); const transporter = await userWithCompanyFactory("ADMIN"); + await transporterReceiptFactory({ company: transporter.company }); const emittedAt = new Date("2018-12-11T00:00:00.000Z"); const takenOverAt = new Date("2018-12-12T00:00:00.000Z"); @@ -499,6 +500,7 @@ describe("signTransportForm", () => { it("should sign transport from temporary storage when plates are valid", async () => { const temporaryStorage = await userWithCompanyFactory("ADMIN"); const transporter = await userWithCompanyFactory("ADMIN"); + await transporterReceiptFactory({ company: transporter.company }); const emittedAt = new Date("2018-12-11T00:00:00.000Z"); const takenOverAt = new Date("2018-12-12T00:00:00.000Z"); @@ -555,6 +557,7 @@ describe("signTransportForm", () => { it("should throw an error when signing transport from temporary storage and plates are invalid", async () => { const temporaryStorage = await userWithCompanyFactory("ADMIN"); const transporter = await userWithCompanyFactory("ADMIN"); + await transporterReceiptFactory({ company: transporter.company }); const emittedAt = new Date("2018-12-11T00:00:00.000Z"); const takenOverAt = new Date("2018-12-12T00:00:00.000Z"); @@ -604,6 +607,7 @@ describe("signTransportForm", () => { it("should sign transport from temporary storage with security code", async () => { const temporaryStorage = await userWithCompanyFactory("ADMIN"); const transporter = await userWithCompanyFactory("ADMIN"); + await transporterReceiptFactory({ company: transporter.company }); const emittedAt = new Date("2018-12-11T00:00:00.000Z"); const takenOverAt = new Date("2018-12-12T00:00:00.000Z"); diff --git a/back/src/forms/resolvers/mutations/signTransportForm.ts b/back/src/forms/resolvers/mutations/signTransportForm.ts index 76833c1b68..55f951b10f 100644 --- a/back/src/forms/resolvers/mutations/signTransportForm.ts +++ b/back/src/forms/resolvers/mutations/signTransportForm.ts @@ -343,11 +343,19 @@ const signatures: Partial< const transporterNumberPlate = args.input.transporterNumberPlate ?? transporter?.transporterNumberPlate; + const transporterTransportMode = + args.input.transporterTransportMode ?? + transporter?.transporterTransportMode; + const transporterSchema = transporterSchemaFn({ signingTransporterOrgId }); + const receiptFields = await getFormReceiptField(transporter); + await transporterSchema.validate({ ...transporter, - transporterNumberPlate + transporterNumberPlate, + transporterTransportMode, + ...receiptFields }); const formUpdateInput: Prisma.FormUpdateInput = { @@ -359,7 +367,9 @@ const signatures: Partial< transporters: { updateMany: { data: { - transporterNumberPlate + transporterNumberPlate, + transporterTransportMode, + ...receiptFields }, where: { number: 1 } } diff --git a/front/src/Apps/Dashboard/dashboardServices.test.ts b/front/src/Apps/Dashboard/dashboardServices.test.ts index c152bae396..d64fdf207f 100644 --- a/front/src/Apps/Dashboard/dashboardServices.test.ts +++ b/front/src/Apps/Dashboard/dashboardServices.test.ts @@ -1029,7 +1029,7 @@ describe("dashboardServices", () => { } }, permissions, - "actTab" + "toCollectTab" ); expect(result).toEqual(SIGNER); }); From 121bb5824299ad6ba2a8a5060c6a52fb0b066391 Mon Sep 17 00:00:00 2001 From: Benoit Guigal Date: Fri, 7 Mar 2025 15:04:18 +0100 Subject: [PATCH 8/8] test(signTransport): add tests for transporter validation --- .../signTransportForm.integration.ts | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/back/src/forms/resolvers/mutations/__tests__/signTransportForm.integration.ts b/back/src/forms/resolvers/mutations/__tests__/signTransportForm.integration.ts index 91e5c05f75..ab921b8573 100644 --- a/back/src/forms/resolvers/mutations/__tests__/signTransportForm.integration.ts +++ b/back/src/forms/resolvers/mutations/__tests__/signTransportForm.integration.ts @@ -705,6 +705,115 @@ describe("signTransportForm", () => { expect(errors).not.toBeUndefined(); }); + it("should throw an error when signing transport from temporary storage if plates are not provided and mode is ROAD", async () => { + const temporaryStorage = await userWithCompanyFactory("ADMIN"); + const transporter = await userWithCompanyFactory("ADMIN"); + await transporterReceiptFactory({ company: transporter.company }); + const emittedAt = new Date("2018-12-11T00:00:00.000Z"); + const takenOverAt = new Date("2018-12-12T00:00:00.000Z"); + const form = await formWithTempStorageFactory({ + ownerId: temporaryStorage.user.id, + opt: { + status: "SIGNED_BY_TEMP_STORER", + recipientCompanySiret: temporaryStorage.company.siret, + recipientCompanyName: temporaryStorage.company.name + }, + forwardedInOpts: { + emittedAt: emittedAt, + emittedBy: temporaryStorage.user.name, + transporters: { + create: { + transporterCompanySiret: transporter.company.siret, + transporterCompanyName: transporter.company.name, + transporterTransportMode: "ROAD", + transporterNumberPlate: null, + number: 1 + } + } + } + }); + + const { mutate } = makeClient(transporter.user); + const { errors } = await mutate< + Pick, + MutationSignTransportFormArgs + >(SIGN_TRANSPORT_FORM, { + variables: { + id: form.id, + input: { + takenOverAt: takenOverAt.toISOString() as unknown as Date, + takenOverBy: transporter.user.name, + transporterNumberPlate: null + } + } + }); + + expect(errors).toEqual([ + expect.objectContaining({ + message: "La plaque d'immatriculation est requise" + }) + ]); + }); + + it("should sign transport from temporary storage if plates are not provided and mode is not ROAD", async () => { + const temporaryStorage = await userWithCompanyFactory("ADMIN"); + const transporter = await userWithCompanyFactory("ADMIN"); + await transporterReceiptFactory({ company: transporter.company }); + const emittedAt = new Date("2018-12-11T00:00:00.000Z"); + const takenOverAt = new Date("2018-12-12T00:00:00.000Z"); + const form = await formWithTempStorageFactory({ + ownerId: temporaryStorage.user.id, + opt: { + status: "SIGNED_BY_TEMP_STORER", + recipientCompanySiret: temporaryStorage.company.siret, + recipientCompanyName: temporaryStorage.company.name + }, + forwardedInOpts: { + emittedAt: emittedAt, + emittedBy: temporaryStorage.user.name, + transporters: { + create: { + transporterCompanySiret: transporter.company.siret, + transporterCompanyName: transporter.company.name, + transporterTransportMode: "SEA", + transporterNumberPlate: null, + number: 1 + } + } + } + }); + + const { mutate } = makeClient(transporter.user); + const { data, errors } = await mutate< + Pick, + MutationSignTransportFormArgs + >(SIGN_TRANSPORT_FORM, { + variables: { + id: form.id, + input: { + takenOverAt: takenOverAt.toISOString() as unknown as Date, + takenOverBy: transporter.user.name, + transporterNumberPlate: null + } + } + }); + + expect(errors).toBeUndefined(); + + expect(data.signTransportForm).toEqual( + expect.objectContaining({ + status: "RESENT", + temporaryStorageDetail: expect.objectContaining({ + signedAt: takenOverAt.toISOString(), + signedBy: temporaryStorage.user.name, + + takenOverAt: takenOverAt.toISOString(), + takenOverBy: transporter.user.name + }) + }) + ); + }); + it("should throw an error if signed by an intermediary", async () => { const intermediary = await userWithCompanyFactory("ADMIN"); const emitter = await userWithCompanyFactory("ADMIN");