import { v2, SignedVerifiableCredential } from "@trustvc/trustvc"; import React from "react"; import { fullAttachmentRenderer } from "./components/renderer/FullAttachmentRenderer"; import { noAttachmentRenderer } from "./components/renderer/NoAttachmentRenderer"; import { TemplateRegistry } from "./types"; import { documentTemplates, repeat } from "./utils"; describe("repeat", () => { it("should not call callback when times is 0", () => { const callback = jest.fn(); repeat(0)(callback); expect(callback).toHaveBeenCalledTimes(0); }); it("should not call callback when times is 3", () => { const callback = jest.fn(); repeat(3)(callback); expect(callback).toHaveBeenCalledTimes(3); }); }); describe("documentTemplates", () => { const Component: React.FunctionComponent = () =>
Hello
; it("should return foo templates", () => { const document: v2.OpenAttestationDocument = { issuers: [{ name: "name" }], $template: { name: "foo", type: v2.TemplateType.EmbeddedRenderer, url: "url" }, }; const templateRegistry: TemplateRegistry = { foo: [{ id: "component-a", label: "Component A", template: Component }], }; expect(documentTemplates(document, templateRegistry, noAttachmentRenderer)).toStrictEqual([ { id: "component-a", label: "Component A", template: Component, type: "custom-template", }, ]); }); it("should return foo templates but filter out component-b", () => { const document: v2.OpenAttestationDocument = { issuers: [{ name: "name" }], $template: { name: "foo", type: v2.TemplateType.EmbeddedRenderer, url: "url" }, }; const templateRegistry: TemplateRegistry = { foo: [ { id: "component-a", label: "Component A", template: Component }, { id: "component-b", label: "Component B", template: Component, predicate: () => false }, ], }; expect(documentTemplates(document, templateRegistry, noAttachmentRenderer)).toStrictEqual([ { id: "component-a", label: "Component A", template: Component, type: "custom-template", }, ]); }); it("should return foo templates and attachments", () => { const document: v2.OpenAttestationDocument = { issuers: [{ name: "name" }], $template: { name: "foo", type: v2.TemplateType.EmbeddedRenderer, url: "url" }, attachments: [ { type: "application/pdf", filename: "abc.pdf", data: "data" }, { type: "txt", filename: "abc.txt", data: "data" }, ], }; const templateRegistry: TemplateRegistry = { foo: [ { id: "component-a", label: "Component A", template: Component }, { id: "component-b", label: "Component B", template: Component, predicate: () => false }, ], }; expect(documentTemplates(document, templateRegistry, fullAttachmentRenderer)).toStrictEqual([ { id: "component-a", label: "Component A", template: Component, type: "custom-template", }, expect.objectContaining({ id: "attachment-0", label: "abc.pdf", type: "application/pdf", }), expect.objectContaining({ id: "attachment-1", label: "abc.txt", type: "txt", }), ]); }); it("should return foo templates and attachments for w3c vc", () => { const document: SignedVerifiableCredential = { "@context": [ "https://www.w3.org/2018/credentials/v1", "https://w3id.org/security/bbs/v1", "https://w3id.org/vc/status-list/2021/v1", "https://trustvc.io/context/transferable-records-context.json", "https://trustvc.io/context/render-method-context.json", "https://trustvc.io/context/attachments-context.json", "https://schemata.openattestation.com/io/tradetrust/bill-of-lading/1.0/bill-of-lading-context.json", ], credentialStatus: { type: "TransferableRecords", tokenNetwork: { chain: "MATIC", chainId: "80002", }, tokenRegistry: "0x3781bd0bbd15Bf5e45c7296115821933d47362be", tokenId: "e8ad3d0567f4e58a31f2f29e9be38b83527c6f76226d0d52a56935737979a21c", }, renderMethod: [ { id: "https://generic-templates.tradetrust.io", type: "EMBEDDED_RENDERER", templateName: "foo", }, ], credentialSubject: { shipper: { address: {}, }, consignee: {}, notifyParty: {}, blNumber: "20250107", scac: "20250107", links: { self: { href: "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Ftradetrust-functions.netlify.app%2F.netlify%2Ffunctions%2Fstorage%2F91c8b97b-2a43-4c66-9cf7-b91ca0bd3813%22%2C%22key%22%3A%229428cac0631b4b0859e46abde7948449b79a2874a1ce4d4035fe75b35b3180a6%22%2C%22permittedActions%22%3A%5B%22STORE%22%5D%2C%22redirect%22%3A%22https%3A%2F%2Fdev.tradetrust.io%2F%22%2C%22chainId%22%3A%2220180427%22%7D%7D", }, }, attachments: [ { type: "application/pdf", filename: "abc.pdf", data: "data" }, { type: "txt", filename: "abc.txt", data: "data" }, ], }, issuanceDate: "2021-12-03T12:19:52Z", expirationDate: "2029-12-03T12:19:52Z", issuer: "did:web:trustvc.github.io:did:1", type: ["VerifiableCredential"], id: "urn:bnid:_:01943fab-749b-7116-b040-5f8051a33a12", proof: { type: "BbsBlsSignature2020", created: "2025-01-07T07:29:51Z", proofPurpose: "assertionMethod", proofValue: "", verificationMethod: "did:web:trustvc.github.io:did:1#keys-1", }, }; const templateRegistry: TemplateRegistry = { foo: [ { id: "component-a", label: "Component A", template: Component }, { id: "component-b", label: "Component B", template: Component, predicate: () => false }, ], }; expect(documentTemplates(document, templateRegistry, fullAttachmentRenderer)).toStrictEqual([ { id: "component-a", label: "Component A", template: Component, type: "custom-template", }, expect.objectContaining({ id: "attachment-0", label: "abc.pdf", type: "application/pdf", }), expect.objectContaining({ id: "attachment-1", label: "abc.txt", type: "txt", }), ]); }); });