From b86e49b62078ba945003e34f6f7dcf0ae4a5bfe0 Mon Sep 17 00:00:00 2001 From: April Bates Date: Fri, 25 Aug 2023 16:40:28 +0100 Subject: [PATCH 1/5] feat: creating fixtures folder --- src/__tests__/fixtures/contracts/testContract.ts | 11 +++++++++++ src/__tests__/fixtures/contracts/testContract2.ts | 10 ++++++++++ src/__tests__/fixtures/types.ts | 9 +++++++++ 3 files changed, 30 insertions(+) create mode 100644 src/__tests__/fixtures/contracts/testContract.ts create mode 100644 src/__tests__/fixtures/contracts/testContract2.ts create mode 100644 src/__tests__/fixtures/types.ts diff --git a/src/__tests__/fixtures/contracts/testContract.ts b/src/__tests__/fixtures/contracts/testContract.ts new file mode 100644 index 0000000..5850e91 --- /dev/null +++ b/src/__tests__/fixtures/contracts/testContract.ts @@ -0,0 +1,11 @@ +import { Contract } from "../types.js"; +export interface PersonRegisteredContract extends Contract { + "detail-type": "PersonRegisteredContract"; + detail: { + "detail-version": 1; + data: { + firstName: string; + lastName: string; + }; + }; +} diff --git a/src/__tests__/fixtures/contracts/testContract2.ts b/src/__tests__/fixtures/contracts/testContract2.ts new file mode 100644 index 0000000..f9e841d --- /dev/null +++ b/src/__tests__/fixtures/contracts/testContract2.ts @@ -0,0 +1,10 @@ +import { Contract } from "../types.js"; +export interface PersonRegisteredContract extends Contract { + "detail-type": "PersonRegisteredContract"; + detail: { + "detail-version": 2; + data: { + firstName: string; + }; + }; +} diff --git a/src/__tests__/fixtures/types.ts b/src/__tests__/fixtures/types.ts new file mode 100644 index 0000000..19963d5 --- /dev/null +++ b/src/__tests__/fixtures/types.ts @@ -0,0 +1,9 @@ +export interface Contract { + readonly "detail-type": string; + readonly detail: Detail; +} + +export interface Detail { + readonly "detail-version": number; + readonly data: Record; +} From 7038fd4b407e23483e339a270dd8c391cbb19e49 Mon Sep 17 00:00:00 2001 From: April Bates Date: Fri, 25 Aug 2023 17:31:11 +0100 Subject: [PATCH 2/5] feat: creating integration test --- .../generateDocs.integration.test.ts | 73 ++++++++++++------- 1 file changed, 48 insertions(+), 25 deletions(-) diff --git a/src/__tests__/generateDocs.integration.test.ts b/src/__tests__/generateDocs.integration.test.ts index 1c0b116..c86a739 100644 --- a/src/__tests__/generateDocs.integration.test.ts +++ b/src/__tests__/generateDocs.integration.test.ts @@ -1,34 +1,57 @@ -import { describe, expect, it, vi, afterEach, beforeEach } from "vitest"; -import mock from "mock-fs"; +import { describe, expect, it, afterEach } from "vitest"; import { generateDocumentation } from "../generateDocs"; import path from "path"; +import { rimraf } from "rimraf"; +import { readdir } from "fs/promises"; +import { existsSync, readFileSync } from "fs"; -const mockFileSystem = { - "mock/contracts/directory": { - "testContract.ts": mock.load( - path.join( - process.cwd(), - "/example-architecture/events/contracts/personRegisteredContractV1.ts" - ) - ), - "testContract2.ts": mock.load( - path.join( - process.cwd(), - "/example-architecture/events/contracts/personRegisteredContractV2.ts" - ) - ), - }, - "mock/events/directory": {}, -}; +const testContractsPath = path.join( + process.cwd(), + "/src/__tests__/fixtures/contracts" +); +const testDocsPath = path.join(process.cwd(), "/src/__tests__/fixtures/docs"); describe("Create documentation for contract types, standardised for use with event catalog", () => { - beforeEach(function () { - mock(mockFileSystem); + afterEach(async () => { + const files = await readdir(testDocsPath); + for (const file of files) { + await rimraf(path.join(testDocsPath, file)); + } }); - afterEach(mock.restore); - it("Creates documentation without error when passed valid contract types", () => { - generateDocumentation("mock/contracts/directory", "mock/events/directory"); - expect(true); + it("Creates documentation without error when passed valid contract types", async () => { + await generateDocumentation(testContractsPath, testDocsPath); + var savedVersionedDocs = readFileSync( + path.join( + testDocsPath, + "/PersonRegisteredContract/versioned/1/schema.json" + ), + { + encoding: "utf8", + } + ); + expect(savedVersionedDocs).toMatch(/("const": "PersonRegisteredContract")/); + expect(savedVersionedDocs).toMatch(/("const": 1)/); + expect( + existsSync( + path.join( + testDocsPath, + "/PersonRegisteredContract/versioned/1/index.md" + ) + ) + ).toStrictEqual(true); + var savedUnversionedDocs = readFileSync( + path.join(testDocsPath, "/PersonRegisteredContract/schema.json"), + { + encoding: "utf8", + } + ); + expect(savedUnversionedDocs).toMatch( + /("const": "PersonRegisteredContract")/i + ); + expect(savedUnversionedDocs).toMatch(/("const": 2)/i); + expect( + existsSync(path.join(testDocsPath, "/PersonRegisteredContract/index.md")) + ).toStrictEqual(true); }); }); From 03dc81d6ae88cd708e22f38869604526a1945263 Mon Sep 17 00:00:00 2001 From: April Bates Date: Fri, 25 Aug 2023 17:39:36 +0100 Subject: [PATCH 3/5] feat: creating better example docs --- .../events/PersonSignedInContract/index.md | 20 ++++++++ .../events/PersonSignedInContract/schema.json | 46 +++++++++++++++++++ .../contracts/personSignedInContractV1.ts | 12 +++++ 3 files changed, 78 insertions(+) create mode 100644 event-catalog/events/PersonSignedInContract/index.md create mode 100644 event-catalog/events/PersonSignedInContract/schema.json create mode 100644 example-architecture/events/contracts/personSignedInContractV1.ts diff --git a/event-catalog/events/PersonSignedInContract/index.md b/event-catalog/events/PersonSignedInContract/index.md new file mode 100644 index 0000000..60f48de --- /dev/null +++ b/event-catalog/events/PersonSignedInContract/index.md @@ -0,0 +1,20 @@ +--- +name: PersonSignedInContract +version: 1 +summary: | + A summary +producers: + - Producer +consumers: + - Consumer +owners: + - Name +--- + +Some information + +### Details + +Some details... + + \ No newline at end of file diff --git a/event-catalog/events/PersonSignedInContract/schema.json b/event-catalog/events/PersonSignedInContract/schema.json new file mode 100644 index 0000000..f231f09 --- /dev/null +++ b/event-catalog/events/PersonSignedInContract/schema.json @@ -0,0 +1,46 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "detail-type": { + "type": "string", + "const": "PersonSignedInContract" + }, + "detail": { + "type": "object", + "properties": { + "detail-version": { + "type": "number", + "const": 1 + }, + "data": { + "type": "object", + "properties": { + "userName": { + "type": "string" + }, + "password": { + "type": "string" + } + }, + "required": [ + "userName", + "password" + ], + "additionalProperties": false + } + }, + "required": [ + "detail-version", + "data" + ], + "additionalProperties": false + } + }, + "required": [ + "detail", + "detail-type" + ], + "additionalProperties": false, + "definitions": {} +} \ No newline at end of file diff --git a/example-architecture/events/contracts/personSignedInContractV1.ts b/example-architecture/events/contracts/personSignedInContractV1.ts new file mode 100644 index 0000000..da46fd4 --- /dev/null +++ b/example-architecture/events/contracts/personSignedInContractV1.ts @@ -0,0 +1,12 @@ +import { Contract } from "../../types"; + +export interface PersonSignedInContract extends Contract { + "detail-type": "PersonSignedInContract"; + detail: { + "detail-version": 1; + data: { + userName: string; + password: string; + }; + }; +} From e99b435fa966381d1ac5f1440e3fa05b5e86fb37 Mon Sep 17 00:00:00 2001 From: April Bates Date: Fri, 25 Aug 2023 17:41:47 +0100 Subject: [PATCH 4/5] feat: adding ci --- .github/workflows/pr.yml | 45 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 .github/workflows/pr.yml diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 0000000..f9f4d3a --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,45 @@ +name: PR Created + +on: + pull_request: + types: [opened, synchronize, reopened] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + AWS_REGION: eu-west-2 + +permissions: + id-token: write # this is required for AWS https://github.com/aws-actions/configure-aws-credentials#usage + contents: read # this is required for Nx https://github.com/nrwl/nx-set-shas#permissions-in-v2 + actions: read # this is required for Nx https://github.com/nrwl/nx-set-shas#permissions-in-v2 + +defaults: + run: + shell: bash + +jobs: + run-tests: + name: Deploy and Run Tests + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + - uses: pnpm/action-setup@v2 + with: + version: 7.27.0 + - name: Setup Node.js + id: setup-node + uses: actions/setup-node@v3 + with: + cache: "pnpm" + - name: Install Top Level Dependencies + run: pnpm install --frozen-lockfile + - name: "🧪 Test unit and integration" + run: pnpm test --verbose + - name: '🧪 Test linter' + run: pnpm lint-test From 919957ac2a7b302c9add2b888696ab69e73da1d1 Mon Sep 17 00:00:00 2001 From: April Bates Date: Fri, 25 Aug 2023 18:03:53 +0100 Subject: [PATCH 5/5] feat: removing optimistic ci --- .github/workflows/pr.yml | 45 ---------------------------------------- 1 file changed, 45 deletions(-) delete mode 100644 .github/workflows/pr.yml diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml deleted file mode 100644 index f9f4d3a..0000000 --- a/.github/workflows/pr.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: PR Created - -on: - pull_request: - types: [opened, synchronize, reopened] - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -env: - AWS_REGION: eu-west-2 - -permissions: - id-token: write # this is required for AWS https://github.com/aws-actions/configure-aws-credentials#usage - contents: read # this is required for Nx https://github.com/nrwl/nx-set-shas#permissions-in-v2 - actions: read # this is required for Nx https://github.com/nrwl/nx-set-shas#permissions-in-v2 - -defaults: - run: - shell: bash - -jobs: - run-tests: - name: Deploy and Run Tests - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - uses: actions/checkout@v3 - with: - ref: ${{ github.event.pull_request.head.sha }} - - uses: pnpm/action-setup@v2 - with: - version: 7.27.0 - - name: Setup Node.js - id: setup-node - uses: actions/setup-node@v3 - with: - cache: "pnpm" - - name: Install Top Level Dependencies - run: pnpm install --frozen-lockfile - - name: "🧪 Test unit and integration" - run: pnpm test --verbose - - name: '🧪 Test linter' - run: pnpm lint-test