Skip to content
Snippets Groups Projects
index.test.ts 2.76 KiB
Newer Older
  • Learn to ignore specific revisions
  • Zdravko Iliev's avatar
    Zdravko Iliev committed
    import fs from "fs";
    import path from "path";
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
    import { describe, it, expect, beforeAll } from "@jest/globals";
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
    import PDFparser from "../src/pdfParser";
    
    import { AppError } from "../src/lib/errors";
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
    import { saveAs } from "file-saver";
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
    
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
    describe("PDF parser", () => {
    
      it("should return pdf document metadata including signatures", async () => {
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
        const file = fs.readFileSync(
          path.resolve(__dirname, "./abacus-two-signatures.pdf")
        );
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
    
        const parser = new PDFparser(file);
        const actual = await parser.getPDFMeta();
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
        expect(actual.pages).toEqual(2);
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
      });
    
    
      it("should return pdf document metadata without signatures", async () => {
        const file = fs.readFileSync(path.resolve(__dirname, "./example.pdf"));
    
        const parser = new PDFparser(file);
    
        const actual = await parser.getPDFMeta();
        expect(actual.pages).toEqual(1);
        expect(actual.title).toEqual("PDF Digital Signatures");
        expect(actual.author).toEqual("Tecxoft");
      });
    
      it("should throw error without file", async () => {
        try {
          const parser = new PDFparser(null);
          const actual = await parser.getPDFMeta();
        } catch (error) {
          expect(error).toBeInstanceOf(AppError);
        }
      });
    
    
      it("should throw error if file type is different then pdf", async () => {
        const file = fs.readFileSync(path.resolve(__dirname, "./test.txt"));
    
        try {
          const parser = new PDFparser(file);
          const actual = await parser.getPDFMeta();
        } catch (error) {
          expect(error).toBeInstanceOf(AppError);
          expect(error.message).toEqual("Only pdf file type is supported");
        }
      });
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
    });
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
    
    type SealCoords = {
      [key: string]: { x: string; y: string };
    };
    
    describe("PDF insert", () => {
      it.only("should insert qrcode into the pdf without breaking the signature", async () => {
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
        // Signed-linux-libreOfficeWriterTest-v1.6-signed-pades-baseline-b
        // Signed-linux-OpenOfficeWriter-v1.4-signed-pades-baseline-b
        // Signed-mac-Adobe-1.3-signed-pades-baseline-b
        // Signed-XXX-nopodofo-test-v.1.7-signed-pades-baseline-b
        const filename = "abacus-two-signatures";
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
        const file = fs.readFileSync(
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
          path.resolve(__dirname, `./source/${filename}.pdf`)
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
        );
    
        const qrcode = fs.readFileSync(path.resolve(__dirname, "./qrcode.png"));
    
        const parser = new PDFparser(file);
    
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
        const sealCoords: SealCoords = {
          "1": { x: "261.6", y: "384.84" },
          "2": { x: "261.6", y: "384.84" },
        };
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
    
        const resultPDF = await parser.insertQrCode(
          qrcode.buffer,
          "vereign.com",
          sealCoords,
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
          0.25,
          "demo:1652778685773:7b893c000300000000b9c455b21b7b47780dc82f9ef63ddc54ce5c282b"
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
        );
    
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
        fs.writeFileSync(
          `${__dirname}/outputs/tron/${filename}-im11age.pdf`,
          Buffer.from(resultPDF)
        );
    
        expect(true).toBeTruthy();
      }, 30000);
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
    });