From 89e340a81da047c9fb3c737b03a16483665a52b4 Mon Sep 17 00:00:00 2001 From: Michele Moio Date: Thu, 26 Sep 2024 11:53:32 +0200 Subject: [PATCH] CI: [P4PU-384] deploy pipeline fix --- .github/workflows/coverage_report.yml | 17 --- .github/workflows/sonar.yml | 7 +- jest.config.ts | 212 ++++++++++++++++++++++++++ src/utils/interceptors.test.ts | 6 +- vitest.config.mts | 1 + 5 files changed, 219 insertions(+), 24 deletions(-) delete mode 100644 .github/workflows/coverage_report.yml create mode 100644 jest.config.ts diff --git a/.github/workflows/coverage_report.yml b/.github/workflows/coverage_report.yml deleted file mode 100644 index 8509a6b4..00000000 --- a/.github/workflows/coverage_report.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: 'coverage' -on: - pull_request: - branches: - - develop - - main -jobs: - coverage: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 - - run: yarn install - - run: yarn generate - - uses: ArtiomTr/jest-coverage-report-action@c026e98ae079f4b0b027252c8e957f5ebd420610 # v2 - with: - package-manager: yarn - test-script: yarn jest diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml index e9902ea8..1b7e9342 100644 --- a/.github/workflows/sonar.yml +++ b/.github/workflows/sonar.yml @@ -1,4 +1,4 @@ -name: 'sonar_scan' +name: 'coverage' on: pull_request: branches: @@ -10,13 +10,14 @@ jobs: steps: - uses: actions/checkout@v2 with: - fetch-depth: 0 + fetch-depth: 0 - name: Install dependencies run: yarn - name: Generate api client run: yarn generate - name: Test and coverage - run: yarn jest --coverage + run: yarn coverage + - uses: davelosert/vitest-coverage-report-action@v2 # v2 - name: SonarCloud Scan uses: SonarSource/sonarcloud-github-action@master env: diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 00000000..5a4a3d50 --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,212 @@ +/** + * For a detailed explanation regarding each configuration property, visit: + * https://jestjs.io/docs/configuration + */ + +import type { Config } from 'jest'; + +const config: Config = { + // All imported modules in your tests should be mocked automatically + // automock: false, + + // Stop running tests after `n` failures + // bail: 0, + + // The directory where Jest should store its cached dependency information + // cacheDirectory: "/private/var/folders/xw/m35cr9z94z7b320vpqjx54tc0000gn/T/jest_dx", + + // Automatically clear mock calls, instances, contexts and results before every test + clearMocks: true, + + // Indicates whether the coverage information should be collected while executing the test + // collectCoverage: false, + + // An array of glob patterns indicating a set of files for which coverage information should be collected + collectCoverageFrom: ['src/**/*.{ts,tsx}'], + + // The directory where Jest should output its coverage files + // coverageDirectory: undefined, + + // An array of regexp pattern strings used to skip coverage collection + coveragePathIgnorePatterns: [ + "/node_modules/", + "src/stories/", + "src/index.tsx", + "src/App.tsx", + "src/global.d.ts", + "src/components/Layout", + "src/utils/style", + ], + + // Indicates which provider should be used to instrument code for coverage + // coverageProvider: "v8", + + // A list of reporter names that Jest uses when writing coverage reports + // coverageReporters: [ + // "json", + // "text", + // "lcov", + // "clover" + // ], + + // An object that configures minimum threshold enforcement for coverage results + coverageThreshold: { + global: { + lines: 80, + branches: 80, + } + }, + + // A path to a custom dependency extractor + // dependencyExtractor: undefined, + + // Make calling deprecated APIs throw helpful error messages + // errorOnDeprecated: false, + + // The default configuration for fake timers + // fakeTimers: { + // "enableGlobally": false + // }, + + // Force coverage collection from ignored files using an array of glob patterns + // forceCoverageMatch: [], + + // A path to a module which exports an async function that is triggered once before all test suites + // globalSetup: undefined, + + // A path to a module which exports an async function that is triggered once after all test suites + // globalTeardown: undefined, + + // A set of global variables that need to be available in all test environments + // globals: {}, + + // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. + // maxWorkers: "50%", + + // An array of directory names to be searched recursively up from the requiring module's location + moduleDirectories: ["node_modules", "src"], + + // An array of file extensions your modules use + // moduleFileExtensions: [ + // "js", + // "mjs", + // "cjs", + // "jsx", + // "ts", + // "tsx", + // "json", + // "node" + // ], + + // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module + moduleNameMapper: { + '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': + '/__mocks__/fileMock.js', + '\\.(css|less)$': '/__mocks__/styleMock.js', + }, + + // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader + // modulePathIgnorePatterns: [], + + // Activates notifications for test results + // notify: false, + + // An enum that specifies notification mode. Requires { notify: true } + // notifyMode: "failure-change", + + // A preset that is used as a base for Jest's configuration + preset: 'ts-jest', + + // Run tests from one or more projects + // projects: undefined, + + // Use this configuration option to add custom reporters to Jest + // reporters: undefined, + + // Automatically reset mock state before every test + // resetMocks: false, + + // Reset the module registry before running each individual test + // resetModules: false, + + // A path to a custom resolver + // resolver: undefined, + + // Automatically restore mock state and implementation before every test + // restoreMocks: false, + + // The root directory that Jest should scan for tests and modules within + // rootDir: undefined, + + // A list of paths to directories that Jest should use to search for files in + // roots: [ + // "" + // ], + + // Allows you to use a custom runner instead of Jest's default test runner + // runner: "jest-runner", + + // The paths to modules that run some code to configure or set up the testing environment before each test + setupFiles: ["/.jest/setup.js"], + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + // setupFilesAfterEnv: [], + + // The number of seconds after which a test is considered as slow and reported as such in the results. + // slowTestThreshold: 5, + + // A list of paths to snapshot serializer modules Jest should use for snapshot testing + // snapshotSerializers: [], + + // The test environment that will be used for testing + testEnvironment: 'jsdom' + + // Options that will be passed to the testEnvironment + // testEnvironmentOptions: {}, + + // Adds a location field to test results + // testLocationInResults: false, + + // The glob patterns Jest uses to detect test files + // testMatch: [ + // "**/__tests__/**/*.[jt]s?(x)", + // "**/?(*.)+(spec|test).[tj]s?(x)" + // ], + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped + // testPathIgnorePatterns: [ + // "/node_modules/" + // ], + + // The regexp pattern or array of patterns that Jest uses to detect test files + // testRegex: [], + + // This option allows the use of a custom results processor + // testResultsProcessor: undefined, + + // This option allows use of a custom test runner + // testRunner: "jest-circus/runner", + + // A map from regular expressions to paths to transformers + // transform: undefined, + + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation + // transformIgnorePatterns: [ + // "/node_modules/", + // "\\.pnp\\.[^\\/]+$" + // ], + + // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them + // unmockedModulePathPatterns: undefined, + + // Indicates whether each individual test should be reported during the run + // verbose: undefined, + + // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode + // watchPathIgnorePatterns: [], + + // Whether to use watchman for file crawling + // watchman: true, +}; + +export default config; diff --git a/src/utils/interceptors.test.ts b/src/utils/interceptors.test.ts index 86fedfdd..f1a523ed 100644 --- a/src/utils/interceptors.test.ts +++ b/src/utils/interceptors.test.ts @@ -55,8 +55,7 @@ describe('setupInterceptors', () => { const accessToken = 'token'; window.localStorage.setItem('accessToken', accessToken); setupInterceptors(client, navigate); - const requestInterceptor = (client.instance.interceptors.request.use as Mock).mock - .calls[0][0]; + const requestInterceptor = (client.instance.interceptors.request.use as Mock).mock.calls[0][0]; const result = requestInterceptor(request); expect(result.headers['Authorization']).toBe(`Bearer ${accessToken}`); }); @@ -64,8 +63,7 @@ describe('setupInterceptors', () => { it('should not add Authorization header to request if token is not present', () => { const request = { url: '/path3', headers: {} }; setupInterceptors(client, navigate); - const requestInterceptor = (client.instance.interceptors.request.use as Mock).mock - .calls[0][0]; + const requestInterceptor = (client.instance.interceptors.request.use as Mock).mock.calls[0][0]; const result = requestInterceptor(request); expect(result.headers['Authorization']).toBeUndefined(); }); diff --git a/vitest.config.mts b/vitest.config.mts index 70ab59be..098716f3 100644 --- a/vitest.config.mts +++ b/vitest.config.mts @@ -12,6 +12,7 @@ export default defineConfig({ silent: true, coverage: { provider: 'v8', + reporter: ['text', 'json-summary', 'json', 'html', 'lcov'], reportOnFailure: true, exclude: [ ...configDefaults.exclude,