|
7 | 7 | setupDynamoDBContainer, |
8 | 8 | } from "./db"; |
9 | 9 | import { LetterRepository } from "../letter-repository"; |
10 | | -import { InsertLetter, Letter, UpdateLetter, UpsertLetter } from "../types"; |
| 10 | +import { InsertLetter, Letter, UpdateLetter } from "../types"; |
11 | 11 | import { LogStream, createTestLogger } from "./logs"; |
12 | 12 |
|
13 | 13 | function createLetter( |
@@ -484,149 +484,4 @@ describe("LetterRepository", () => { |
484 | 484 | ]), |
485 | 485 | ).rejects.toThrow("Cannot do operations on a non-existent table"); |
486 | 486 | }); |
487 | | - |
488 | | - test("successful upsert (update status) returns updated letter", async () => { |
489 | | - const letter: InsertLetter = createLetter( |
490 | | - "supplier1", |
491 | | - "letter1", |
492 | | - "PENDING", |
493 | | - new Date(2020, 0, 1).toISOString(), |
494 | | - ); |
495 | | - const existingLetter: Letter = await letterRepository.putLetter(letter); |
496 | | - |
497 | | - const updateLetterStatus: UpsertLetter = { |
498 | | - id: "letter1", |
499 | | - supplierId: "supplier1", |
500 | | - status: "REJECTED", |
501 | | - reasonCode: "R01", |
502 | | - reasonText: "R01 text", |
503 | | - source: "/data-plane/letter-rendering/pdf", |
504 | | - subject: "client/1/letter-request/letter1", |
505 | | - }; |
506 | | - |
507 | | - const before = Date.now(); |
508 | | - |
509 | | - const result: Letter = |
510 | | - await letterRepository.upsertLetter(updateLetterStatus); |
511 | | - |
512 | | - const after = Date.now(); |
513 | | - |
514 | | - expect(result).toEqual( |
515 | | - expect.objectContaining({ |
516 | | - id: "letter1", |
517 | | - status: "REJECTED", |
518 | | - specificationId: "specification1", |
519 | | - groupId: "group1", |
520 | | - reasonCode: "R01", |
521 | | - reasonText: "R01 text", |
522 | | - supplierId: "supplier1", |
523 | | - url: "s3://bucket/letter1.pdf", |
524 | | - supplierStatus: "supplier1#REJECTED", |
525 | | - source: "/data-plane/letter-rendering/pdf", |
526 | | - subject: "client/1/letter-request/letter1", |
527 | | - }), |
528 | | - ); |
529 | | - expect(Date.parse(result.updatedAt)).toBeGreaterThan( |
530 | | - Date.parse(existingLetter.updatedAt), |
531 | | - ); |
532 | | - expect(result.createdAt).toBe(existingLetter.createdAt); |
533 | | - expect(result.createdAt).toBe(result.supplierStatusSk); |
534 | | - assertTtl(result.ttl, before, after); |
535 | | - }); |
536 | | - |
537 | | - test("successful upsert (insert letter) returns created letter", async () => { |
538 | | - const insertLetter: UpsertLetter = { |
539 | | - id: "letter1", |
540 | | - status: "PENDING", |
541 | | - specificationId: "specification1", |
542 | | - groupId: "group1", |
543 | | - supplierId: "supplier1", |
544 | | - url: "s3://bucket/letter1.pdf", |
545 | | - source: "/data-plane/letter-rendering/pdf", |
546 | | - subject: "client/1/letter-request/letter1", |
547 | | - }; |
548 | | - |
549 | | - const before = Date.now(); |
550 | | - |
551 | | - const result: Letter = await letterRepository.upsertLetter(insertLetter); |
552 | | - |
553 | | - const after = Date.now(); |
554 | | - |
555 | | - expect(result).toEqual( |
556 | | - expect.objectContaining({ |
557 | | - id: "letter1", |
558 | | - status: "PENDING", |
559 | | - specificationId: "specification1", |
560 | | - groupId: "group1", |
561 | | - supplierId: "supplier1", |
562 | | - url: "s3://bucket/letter1.pdf", |
563 | | - source: "/data-plane/letter-rendering/pdf", |
564 | | - subject: "client/1/letter-request/letter1", |
565 | | - }), |
566 | | - ); |
567 | | - |
568 | | - expect(Date.parse(result.createdAt)).toBeGreaterThanOrEqual(before); |
569 | | - expect(Date.parse(result.createdAt)).toBeLessThanOrEqual(after); |
570 | | - expect(result.updatedAt).toBe(result.createdAt); |
571 | | - expect(result.supplierStatusSk).toBe(result.createdAt); |
572 | | - assertTtl(result.ttl, before, after); |
573 | | - }); |
574 | | - |
575 | | - test("successful upsert without status change (update url)", async () => { |
576 | | - const insertLetter: InsertLetter = createLetter( |
577 | | - "supplier1", |
578 | | - "letter1", |
579 | | - "PENDING", |
580 | | - new Date(2020, 0, 1).toISOString(), |
581 | | - ); |
582 | | - const existingLetter = await letterRepository.putLetter(insertLetter); |
583 | | - |
584 | | - const before = Date.now(); |
585 | | - |
586 | | - const result = await letterRepository.upsertLetter({ |
587 | | - id: "letter1", |
588 | | - supplierId: "supplier1", |
589 | | - url: "s3://updateToPdf", |
590 | | - }); |
591 | | - |
592 | | - const after = Date.now(); |
593 | | - |
594 | | - expect(result).toEqual( |
595 | | - expect.objectContaining({ |
596 | | - id: "letter1", |
597 | | - status: "PENDING", |
598 | | - specificationId: "specification1", |
599 | | - groupId: "group1", |
600 | | - supplierId: "supplier1", |
601 | | - url: "s3://updateToPdf", |
602 | | - supplierStatus: "supplier1#PENDING", |
603 | | - source: "/data-plane/letter-rendering/pdf", |
604 | | - subject: "client/1/letter-request/letter1", |
605 | | - }), |
606 | | - ); |
607 | | - expect(Date.parse(result.updatedAt)).toBeGreaterThan( |
608 | | - Date.parse(existingLetter.updatedAt), |
609 | | - ); |
610 | | - expect(result.createdAt).toBe(existingLetter.createdAt); |
611 | | - expect(result.createdAt).toBe(result.supplierStatusSk); |
612 | | - assertTtl(result.ttl, before, after); |
613 | | - }); |
614 | | - |
615 | | - test("unsuccessful upsert should throw error", async () => { |
616 | | - const mockSend = jest.fn().mockResolvedValue({ Items: null }); |
617 | | - const mockDdbClient = { send: mockSend } as any; |
618 | | - const repo = new LetterRepository( |
619 | | - mockDdbClient, |
620 | | - { debug: jest.fn() } as any, |
621 | | - { lettersTableName: "letters", lettersTtlHours: 1 }, |
622 | | - ); |
623 | | - |
624 | | - await expect( |
625 | | - repo.upsertLetter({ |
626 | | - id: "letter1", |
627 | | - status: "PENDING", |
628 | | - supplierId: "supplier1", |
629 | | - }), |
630 | | - ).rejects.toThrow("upsertLetter: no attributes returned"); |
631 | | - }); |
632 | 487 | }); |
0 commit comments