Skip to content

Commit

Permalink
Transporter plates restriction
Browse files Browse the repository at this point in the history
  • Loading branch information
providenz committed Jan 30, 2025
1 parent e580fd2 commit 9f41f08
Show file tree
Hide file tree
Showing 32 changed files with 778 additions and 242 deletions.
50 changes: 15 additions & 35 deletions back/src/bsda/__tests__/registry.integration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,31 +76,31 @@ const createBsdaWith5Transporters = async () => {
data: [
{
transporterCompanySiret: transporter.company.siret,
transporterTransportPlates: ["TRANSPORTER1-NBR-PLATES"],
transporterTransportPlates: ["TR-01-AA"],
transporterCompanyAddress: transporter.company.address,
number: 1
},
{
transporterCompanySiret: transporter2.company.siret,
transporterTransportPlates: ["TRANSPORTER2-NBR-PLATES"],
transporterTransportPlates: ["TR-02-AA"],
transporterCompanyAddress: transporter2.company.address,
number: 2
},
{
transporterCompanySiret: transporter3.company.siret,
transporterTransportPlates: ["TRANSPORTER3-NBR-PLATES"],
transporterTransportPlates: ["TR-03-AA"],
transporterCompanyAddress: transporter3.company.address,
number: 3
},
{
transporterCompanySiret: transporter4.company.siret,
transporterTransportPlates: ["TRANSPORTER4-NBR-PLATES"],
transporterTransportPlates: ["TR-04-AA"],
transporterCompanyAddress: transporter4.company.address,
number: 4
},
{
transporterCompanyVatNumber: transporter5.company.vatNumber,
transporterTransportPlates: ["TRANSPORTER5-NBR-PLATES"],
transporterTransportPlates: ["TR-05-AA"],
transporterCompanyAddress: transporter5.company.address,
number: 5
}
Expand Down Expand Up @@ -658,29 +658,19 @@ describe("toTransportedWaste", () => {

// Then
expect(waste.transporterCompanySiret).toBe(data.transporter1.siret);
expect(waste.transporterNumberPlates).toStrictEqual([
"TRANSPORTER1-NBR-PLATES"
]);
expect(waste.transporterNumberPlates).toStrictEqual(["TR-01-AA"]);

expect(waste.transporter2CompanySiret).toBe(data.transporter2.siret);
expect(waste.transporter2NumberPlates).toStrictEqual([
"TRANSPORTER2-NBR-PLATES"
]);
expect(waste.transporter2NumberPlates).toStrictEqual(["TR-02-AA"]);

expect(waste.transporter3CompanySiret).toBe(data.transporter3.siret);
expect(waste.transporter3NumberPlates).toStrictEqual([
"TRANSPORTER3-NBR-PLATES"
]);
expect(waste.transporter3NumberPlates).toStrictEqual(["TR-03-AA"]);

expect(waste.transporter4CompanySiret).toBe(data.transporter4.siret);
expect(waste.transporter4NumberPlates).toStrictEqual([
"TRANSPORTER4-NBR-PLATES"
]);
expect(waste.transporter4NumberPlates).toStrictEqual(["TR-04-AA"]);

expect(waste.transporter5CompanySiret).toBe(data.transporter5.vatNumber);
expect(waste.transporter5NumberPlates).toStrictEqual([
"TRANSPORTER5-NBR-PLATES"
]);
expect(waste.transporter5NumberPlates).toStrictEqual(["TR-05-AA"]);
});
});

Expand Down Expand Up @@ -1018,29 +1008,19 @@ describe("toAllWaste", () => {

// Then
expect(waste.transporterCompanySiret).toBe(data.transporter1.siret);
expect(waste.transporterNumberPlates).toStrictEqual([
"TRANSPORTER1-NBR-PLATES"
]);
expect(waste.transporterNumberPlates).toStrictEqual(["TR-01-AA"]);

expect(waste.transporter2CompanySiret).toBe(data.transporter2.siret);
expect(waste.transporter2NumberPlates).toStrictEqual([
"TRANSPORTER2-NBR-PLATES"
]);
expect(waste.transporter2NumberPlates).toStrictEqual(["TR-02-AA"]);

expect(waste.transporter3CompanySiret).toBe(data.transporter3.siret);
expect(waste.transporter3NumberPlates).toStrictEqual([
"TRANSPORTER3-NBR-PLATES"
]);
expect(waste.transporter3NumberPlates).toStrictEqual(["TR-03-AA"]);

expect(waste.transporter4CompanySiret).toBe(data.transporter4.siret);
expect(waste.transporter4NumberPlates).toStrictEqual([
"TRANSPORTER4-NBR-PLATES"
]);
expect(waste.transporter4NumberPlates).toStrictEqual(["TR-04-AA"]);

expect(waste.transporter5CompanySiret).toBe(data.transporter5.vatNumber);
expect(waste.transporter5NumberPlates).toStrictEqual([
"TRANSPORTER5-NBR-PLATES"
]);
expect(waste.transporter5NumberPlates).toStrictEqual(["TR-05-AA"]);
});

it("if forwarding BSD, should contain the info of the initial emitter", async () => {
Expand Down
2 changes: 1 addition & 1 deletion back/src/bsda/typeDefs/bsda.inputs.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ input BsdaBrokerRecepisseInput {
input BsdaTransportInput {
"Mode de transport"
mode: TransportMode
"Plaque(s) d'immatriculation - maximum 2"
"Plaque(s) d'immatriculation - maximum 2- 4 à 12 caractères."
plates: [String!]
"Date de prise en charge"
takenOverAt: DateTime
Expand Down
131 changes: 128 additions & 3 deletions back/src/bsda/validation/__tests__/validation.integration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,24 @@ describe("BSDA parsing", () => {
expect(parsed).toBeDefined();
});

test("when transporter plate is not present and transport mode is not ROAD before TRANSPORT signature", () => {
const data: ZodBsda = {
...bsda,
transporters: [
{
...bsda.transporters![0],
transporterTransportPlates: [],
transporterTransportMode: "ROAD" as TransportMode
}
]
};
const parsed = parseBsda(data, {
...context,
currentSignatureType: "EMISSION"
});
expect(parsed).toBeDefined();
});

test("when transporter plate is not present and transport mode is not ROAD", () => {
const data: ZodBsda = {
...bsda,
Expand All @@ -149,7 +167,7 @@ describe("BSDA parsing", () => {
{
...bsda.transporters![0],
transporterTransportMode: "ROAD" as TransportMode,
transporterTransportPlates: ["TRANSPORTER-PLATES"]
transporterTransportPlates: ["AZ-12-BA"]
}
]
};
Expand Down Expand Up @@ -448,8 +466,8 @@ describe("BSDA parsing", () => {
}
});

test.each([undefined, [], [""]])(
"when transporter plate is %p invalid and transporter mode is ROAD",
test.each([undefined, []])(
"when transporter plate is %p and transporter mode is ROAD",
async invalidValue => {
const data: ZodBsda = {
...bsda,
Expand Down Expand Up @@ -477,6 +495,113 @@ describe("BSDA parsing", () => {
}
);

test("when transporter plate is an empty string and transporter mode is ROAD", async () => {
const data: ZodBsda = {
...bsda,
transporters: [
{
...bsda.transporters![0],
transporterTransportMode: "ROAD" as TransportMode,
transporterTransportPlates: [""]
}
]
};

try {
parseBsda(data, {
...context,
currentSignatureType: "TRANSPORT"
});
} catch (err) {
expect((err as ZodError).issues).toEqual([
expect.objectContaining({
message:
"Le numéro d'immatriculation doit faire entre 4 et 12 caractères"
})
]);
}
});

test("when transporter plate is too short and transporter mode is ROAD", async () => {
const data: ZodBsda = {
...bsda,
transporters: [
{
...bsda.transporters![0],
transporterTransportMode: "ROAD" as TransportMode,
transporterTransportPlates: ["x"]
}
]
};

try {
parseBsda(data, {
...context,
currentSignatureType: "TRANSPORT"
});
} catch (err) {
expect((err as ZodError).issues).toEqual([
expect.objectContaining({
message:
"Le numéro d'immatriculation doit faire entre 4 et 12 caractères"
})
]);
}
});

test("when transporter plate is too long and transporter mode is ROAD", async () => {
const data: ZodBsda = {
...bsda,
transporters: [
{
...bsda.transporters![0],
transporterTransportMode: "ROAD" as TransportMode,
transporterTransportPlates: ["AZ-12-ER-98-AA-12"]
}
]
};

try {
parseBsda(data, {
...context,
currentSignatureType: "TRANSPORT"
});
} catch (err) {
expect((err as ZodError).issues).toEqual([
expect.objectContaining({
message:
"Le numéro d'immatriculation doit faire entre 4 et 12 caractères"
})
]);
}
});

test("when transporter plate only contains whitespace and transporter mode is ROAD", async () => {
const data: ZodBsda = {
...bsda,
transporters: [
{
...bsda.transporters![0],
transporterTransportMode: "ROAD" as TransportMode,
transporterTransportPlates: [" "]
}
]
};

try {
parseBsda(data, {
...context,
currentSignatureType: "TRANSPORT"
});
} catch (err) {
expect((err as ZodError).issues).toEqual([
expect.objectContaining({
message: "Le numéro de plaque fourni est incorrect"
})
]);
}
});

test("when the grouped waste code is not equal to the grouping BSDA waste code", async () => {
const grouping = [
await bsdaFactory({
Expand Down
2 changes: 1 addition & 1 deletion back/src/bsdasris/__tests__/factories.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ export const readyToTakeOverData = company => ({
transporterRecepisseNumber: "xyz",
transporterRecepisseDepartment: "83",
transporterRecepisseValidityLimit: new Date(),
transporterTransportPlates: ["TRANSPORTER-PLATE"],
transporterTransportPlates: ["AB-65-ML"],
transporterTransportMode: TransportMode.ROAD,
transporterWastePackagings: [
{ type: "BOITE_CARTON", volume: 22, quantity: 3 }
Expand Down
18 changes: 7 additions & 11 deletions back/src/bsdasris/__tests__/registry.integration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ describe("toIncomingWaste", () => {
opt: {
destinationCompanyMail: "destination@mail.com",
transporterCompanySiret: transporter.siret,
transporterTransportPlates: ["TRANSPORTER-NBR-PLATES"]
transporterTransportPlates: ["TR-12-AA"]
}
});

Expand Down Expand Up @@ -364,7 +364,7 @@ describe("toOutgoingWaste", () => {
opt: {
destinationCompanyMail: "destination@mail.com",
transporterCompanySiret: transporter.siret,
transporterTransportPlates: ["TRANSPORTER-NBR-PLATES"]
transporterTransportPlates: ["TR-12-AA"]
}
});

Expand Down Expand Up @@ -447,7 +447,7 @@ describe("toTransportedWaste", () => {
opt: {
destinationCompanyMail: "destination@mail.com",
transporterCompanySiret: transporter.siret,
transporterTransportPlates: ["TRANSPORTER-NBR-PLATES"]
transporterTransportPlates: ["TR-12-AA"]
}
});

Expand All @@ -462,9 +462,7 @@ describe("toTransportedWaste", () => {
expect(waste.transporterCompanySiret).toBe(
dasriForRegistry.transporterCompanySiret
);
expect(waste.transporterNumberPlates).toStrictEqual([
"TRANSPORTER-NBR-PLATES"
]);
expect(waste.transporterNumberPlates).toStrictEqual(["TR-12-AA"]);

expect(waste.transporter2CompanySiret).toBeNull();
expect(waste.transporter2NumberPlates).toBeNull();
Expand Down Expand Up @@ -514,7 +512,7 @@ describe("toManagedWaste", () => {
opt: {
destinationCompanyMail: "destination@mail.com",
transporterCompanySiret: transporter.siret,
transporterTransportPlates: ["TRANSPORTER-NBR-PLATES"]
transporterTransportPlates: ["TR-12-AA"]
}
});

Expand Down Expand Up @@ -686,7 +684,7 @@ describe("toAllWaste", () => {
opt: {
destinationCompanyMail: "destination@mail.com",
transporterCompanySiret: transporter.siret,
transporterTransportPlates: ["TRANSPORTER-NBR-PLATES"]
transporterTransportPlates: ["TR-12-AA"]
}
});

Expand All @@ -701,9 +699,7 @@ describe("toAllWaste", () => {
expect(waste.transporterCompanySiret).toBe(
dasriForRegistry.transporterCompanySiret
);
expect(waste.transporterNumberPlates).toStrictEqual([
"TRANSPORTER-NBR-PLATES"
]);
expect(waste.transporterNumberPlates).toStrictEqual(["TR-12-AA"]);

expect(waste.transporter2CompanySiret).toBeNull();
expect(waste.transporter2NumberPlates).toBeNull();
Expand Down
2 changes: 1 addition & 1 deletion back/src/bsdasris/__tests__/validation.integration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ describe("Mutation.signBsdasri emission", () => {
const data = {
...bsdasri,
transporterTransportMode: "ROAD",
transporterTransportPlates: ["TRANSPORTER-PLATES"]
transporterTransportPlates: ["AB-12-ZE"]
};
const validated = await validateBsdasri(data as any, {
transportSignature: true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -487,4 +487,34 @@ describe("Mutation.duplicateBsdasri", () => {
expect(duplicatedDasri.destinationOperationCode).toBeNull();
expect(duplicatedDasri.destinationOperationMode).toBeNull();
});

it("should *not* duplicate transporter plates", async () => {
const { user, company } = await userWithCompanyFactory("MEMBER");

const dasri = await bsdasriFactory({
opt: {
...initialData(company),
transporterTransportPlates: ["AZ-12-RT"]
}
});

const { mutate } = makeClient(user); // emitter

const { data } = await mutate<Pick<Mutation, "duplicateBsdasri">>(
DUPLICATE_DASRI,
{
variables: {
id: dasri.id
}
}
);
expect(data.duplicateBsdasri.status).toBe("INITIAL");
expect(data.duplicateBsdasri.isDraft).toBe(true);

const duplicatedDasri = await prisma.bsdasri.findFirstOrThrow({
where: { id: data.duplicateBsdasri.id }
});

expect(duplicatedDasri.transporterTransportPlates).toStrictEqual([]);
});
});
Loading

0 comments on commit 9f41f08

Please sign in to comment.