Skip to content

Commit

Permalink
Add checksum check on docs
Browse files Browse the repository at this point in the history
  • Loading branch information
sandrotaje committed Feb 20, 2025
1 parent 7fce9f7 commit 0642c1c
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 0 deletions.
13 changes: 13 additions & 0 deletions packages/eservice-template-process/src/model/domain/errors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export const errorCodes = {
missingRiskAnalysis: "0019",
interfaceAlreadyExists: "0020",
prettyNameDuplicate: "0021",
checksumDuplicate: "0022",
};

export type ErrorCodes = keyof typeof errorCodes;
Expand Down Expand Up @@ -257,3 +258,15 @@ export function prettyNameDuplicate(
title: "Duplicated prettyName",
});
}

export function checksumDuplicate(
fileName: string,
eserviceTemplateId: string,
eserviceTemplateVersionId: string
): ApiError<ErrorCodes> {
return new ApiError({
detail: `The document ${fileName} content already exists in version ${eserviceTemplateVersionId} of template ${eserviceTemplateId}`,
code: "checksumDuplicate",
title: "Duplicated checksum",
});
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import { match } from "ts-pattern";
import { eserviceTemplateApi } from "pagopa-interop-api-clients";
import {
attributeNotFound,
checksumDuplicate,
eServiceTemplateDuplicate,
eServiceTemplateNotFound,
eServiceTemplateVersionNotFound,
Expand Down Expand Up @@ -1419,6 +1420,17 @@ export function eserviceTemplateServiceBuilder(
throw prettyNameDuplicate(document.prettyName, version.id);
}

if (
document.kind === "DOCUMENT" &&
version.docs.some((d) => d.checksum === document.checksum)
) {
throw checksumDuplicate(
document.fileName,
eserviceTemplate.data.id,
version.id
);
}

const isInterface = document.kind === "INTERFACE";
const newDocument: Document = {
id: unsafeBrandId(document.documentId),
Expand Down
34 changes: 34 additions & 0 deletions packages/eservice-template-process/test/uploadDocument.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {
} from "pagopa-interop-commons-test";

import {
checksumDuplicate,
eServiceTemplateNotFound,
eServiceTemplateVersionNotFound,
interfaceAlreadyExists,
Expand Down Expand Up @@ -237,4 +238,37 @@ describe("upload Document", () => {
prettyNameDuplicate(document.prettyName.toLowerCase(), version.id)
);
});

it("should throw checksumDuplicate if the checksum is already present in the version", async () => {
const document = {
...getMockDocument(),
prettyName: "First doc",
checksum: "checksum",
};
const eserviceTemplate: EServiceTemplate = {
...mockEServiceTemplate,
versions: [
{
...mockVersion,
docs: [document],
},
],
};
await addOneEServiceTemplate(eserviceTemplate);
await expect(
eserviceTemplateService.createEServiceTemplateDocument(
eserviceTemplate.id,
mockVersion.id,
buildDocumentSeed(),
{
authData: getMockAuthData(eserviceTemplate.creatorId),
correlationId: generateId(),
serviceName: "",
logger: genericLogger,
}
)
).rejects.toThrowError(
checksumDuplicate(document.name, eserviceTemplate.id, mockVersion.id)
);
});
});

0 comments on commit 0642c1c

Please sign in to comment.