feat: Add http integration tests and enable them in pipeline (#7532)

This commit is contained in:
Stevche Radevski
2024-05-30 10:51:31 +02:00
committed by GitHub
parent 5ad6864b82
commit 6698f3ab7b
13 changed files with 774 additions and 1111 deletions
+75 -75
View File
@@ -18,8 +18,8 @@ jobs:
outputs: outputs:
module-matrix: ${{ steps.set-module-matrix.outputs.matrix }} module-matrix: ${{ steps.set-module-matrix.outputs.matrix }}
module-chunks: ${{ steps.set-module-chunks.outputs.chunks }} module-chunks: ${{ steps.set-module-chunks.outputs.chunks }}
api-matrix: ${{ steps.set-api-matrix.outputs.matrix }} http-matrix: ${{ steps.set-http-matrix.outputs.matrix }}
api-chunks: ${{ steps.set-api-chunks.outputs.chunks }} http-chunks: ${{ steps.set-http-chunks.outputs.chunks }}
unit-tests-matrix: ${{ steps.set-unit-tests-matrix.outputs.matrix }} unit-tests-matrix: ${{ steps.set-unit-tests-matrix.outputs.matrix }}
unit-tests-chunks: ${{ steps.set-unit-tests-chunks.outputs.chunks }} unit-tests-chunks: ${{ steps.set-unit-tests-chunks.outputs.chunks }}
steps: steps:
@@ -58,16 +58,16 @@ jobs:
env: env:
CHUNKS: ${{ steps.set-module-chunks.outputs.chunks }} CHUNKS: ${{ steps.set-module-chunks.outputs.chunks }}
- id: set-api-chunks - id: set-http-chunks
name: Set API Chunks name: Set HTTP Chunks
working-directory: integration-tests/api working-directory: integration-tests/http
run: echo "chunks=$(yarn run jest --listTests --json | jq -cM '[_nwise(length / 2 | ceil)]')" >> $GITHUB_OUTPUT run: echo "chunks=$(yarn run jest --listTests --json | jq -cM '[_nwise(length / 2 | ceil)]')" >> $GITHUB_OUTPUT
- id: set-api-matrix - id: set-http-matrix
name: Set API Matrix name: Set HTTP Matrix
run: echo "matrix=$(echo $CHUNKS | jq -cM 'to_entries | map(.key)')" >> $GITHUB_OUTPUT run: echo "matrix=$(echo $CHUNKS | jq -cM 'to_entries | map(.key)')" >> $GITHUB_OUTPUT
env: env:
CHUNKS: ${{ steps.set-api-chunks.outputs.chunks }} CHUNKS: ${{ steps.set-http-chunks.outputs.chunks }}
- id: set-unit-tests-chunks - id: set-unit-tests-chunks
name: Set Unit Tests Chunks name: Set Unit Tests Chunks
@@ -157,75 +157,75 @@ jobs:
DB_PASSWORD: postgres DB_PASSWORD: postgres
DB_USERNAME: postgres DB_USERNAME: postgres
#integration-tests-api-matrix: integration-tests-http-matrix:
# needs: setup needs: setup
# name: Shard (${{ matrix.chunk }}) API Integration Tests name: Shard (${{ matrix.chunk }}) HTTP Integration Tests
# runs-on: ubuntu-latest runs-on: ubuntu-latest
# strategy: strategy:
# fail-fast: false fail-fast: false
# matrix: matrix:
# chunk: ${{ fromJSON(needs.setup.outputs.api-matrix) }} chunk: ${{ fromJSON(needs.setup.outputs.http-matrix) }}
# env: env:
# TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
# TURBO_TEAM: ${{ secrets.TURBO_TEAM }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
#
# services: services:
# redis: redis:
# image: redis image: redis
# options: >- options: >-
# --health-cmd "redis-cli ping" --health-cmd "redis-cli ping"
# --health-interval 1s --health-interval 1s
# --health-timeout 10s --health-timeout 10s
# --health-retries 10 --health-retries 10
# ports: ports:
# - 6379:6379 - 6379:6379
# postgres: postgres:
# image: postgres image: postgres
# env: env:
# POSTGRES_PASSWORD: postgres POSTGRES_PASSWORD: postgres
# POSTGRES_USER: postgres POSTGRES_USER: postgres
# options: >- options: >-
# --health-cmd pg_isready --health-cmd pg_isready
# --health-interval 1s --health-interval 1s
# --health-timeout 10s --health-timeout 10s
# --health-retries 10 --health-retries 10
# ports: ports:
# - 5432:5432 - 5432:5432
# steps: steps:
# - name: Checkout - name: Checkout
# uses: actions/checkout@v3 uses: actions/checkout@v3
# with: with:
# fetch-depth: 0 fetch-depth: 0
#
# - name: Install dependencies - name: Install dependencies
# uses: ./.github/actions/cache-deps uses: ./.github/actions/cache-deps
# with: with:
# extension: pipeline extension: pipeline
#
# - name: Run API integration tests - name: Run HTTP integration tests
# run: yarn test:integration:api run: yarn test:integration:http
# env: env:
# DB_USERNAME: postgres DB_USERNAME: postgres
# DB_PASSWORD: postgres DB_PASSWORD: postgres
# NODE_OPTIONS: "--max_old_space_size=4096" NODE_OPTIONS: "--max_old_space_size=4096"
# CHUNK: ${{ matrix.chunk }} CHUNK: ${{ matrix.chunk }}
# CHUNKS: ${{ needs.setup.outputs.api-chunks }} CHUNKS: ${{ needs.setup.outputs.http-chunks }}
#integration-tests-api: integration-tests-http:
# if: ${{ always() }} if: ${{ always() }}
# runs-on: ubuntu-latest runs-on: ubuntu-latest
# needs: integration-tests-api-matrix needs: integration-tests-http-matrix
# steps: steps:
# - run: exit 1 - run: exit 1
# if: >- if: >-
# ${{ ${{
# contains(needs.integration-tests-api-matrix.result, 'failure') contains(needs.integration-tests-http-matrix.result, 'failure')
# || contains(needs.integration-tests-api-matrix.result, 'cancelled') || contains(needs.integration-tests-http-matrix.result, 'cancelled')
# || contains(needs.integration-tests-api-matrix.result, 'skipped') || contains(needs.integration-tests-http-matrix.result, 'skipped')
# }} }}
# - run: exit 0 - run: exit 0
# if: ${{ contains(needs.integration-tests-api-matrix.result, 'success') }} if: ${{ contains(needs.integration-tests-http-matrix.result, 'success') }}
unit-tests: unit-tests:
if: ${{ always() }} if: ${{ always() }}
+4
View File
@@ -0,0 +1,4 @@
dist/
node_modules
*yarn-error.log
+12
View File
@@ -0,0 +1,12 @@
process.chdir(__dirname)
module.exports = {
name: "HTTP Integration Tests",
testEnvironment: `node`,
rootDir: "./",
transformIgnorePatterns: ["/dist", "/node_modules/"],
transform: {
"^.+\\.[jt]s$": ["@swc/jest"],
},
setupFiles: ["../setup-env.js"],
}
+19
View File
@@ -0,0 +1,19 @@
const { defineConfig } = require("@medusajs/utils")
const DB_HOST = process.env.DB_HOST
const DB_USERNAME = process.env.DB_USERNAME
const DB_PASSWORD = process.env.DB_PASSWORD
const DB_NAME = process.env.DB_TEMP_NAME
const DB_URL = `postgres://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}/${DB_NAME}`
process.env.DATABASE_URL = DB_URL
process.env.LOG_LEVEL = "error"
module.exports = defineConfig({
admin: {
disable: true,
},
projectConfig: {
http: {
jwtSecret: "test",
},
},
})
+45
View File
@@ -0,0 +1,45 @@
{
"name": "integration-tests-http",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"private": true,
"scripts": {
"test:integration": "jest --no-cache --maxWorkers=50% --bail --detectOpenHandles --forceExit --logHeapUsage",
"test:integration:chunk": "jest --silent --no-cache --bail --maxWorkers=50% --forceExit --testPathPattern=$(echo $CHUNKS | jq -r \".[${CHUNK}] | .[]\")",
"build": "tsc ./src/* --allowJs --outDir ./dist"
},
"dependencies": {
"@medusajs/api-key": "workspace:^",
"@medusajs/auth": "workspace:*",
"@medusajs/cache-inmemory": "workspace:*",
"@medusajs/customer": "workspace:^",
"@medusajs/event-bus-local": "workspace:*",
"@medusajs/fulfillment": "workspace:^",
"@medusajs/fulfillment-manual": "workspace:^",
"@medusajs/inventory-next": "workspace:^",
"@medusajs/medusa": "workspace:*",
"@medusajs/modules-sdk": "workspace:^",
"@medusajs/pricing": "workspace:^",
"@medusajs/product": "workspace:^",
"@medusajs/promotion": "workspace:^",
"@medusajs/region": "workspace:^",
"@medusajs/stock-location-next": "workspace:^",
"@medusajs/store": "workspace:^",
"@medusajs/tax": "workspace:^",
"@medusajs/user": "workspace:^",
"@medusajs/utils": "workspace:^",
"@medusajs/workflow-engine-inmemory": "workspace:*",
"faker": "^5.5.3",
"medusa-test-utils": "workspace:*",
"pg": "^8.11.0"
},
"devDependencies": {
"@medusajs/types": "workspace:^",
"@swc/core": "^1.4.8",
"@swc/jest": "^0.2.36",
"jest": "^26.6.3",
"jest-environment-node": "26.6.2",
"typescript": "^4.1.3"
}
}
+1
View File
@@ -0,0 +1 @@
// noop
+1
View File
@@ -13,6 +13,7 @@ module.exports = {
roots: pkgs, roots: pkgs,
projects: [ projects: [
"<rootDir>/integration-tests/api/jest.config.js", "<rootDir>/integration-tests/api/jest.config.js",
"<rootDir>/integration-tests/http/jest.config.js",
"<rootDir>/integration-tests/plugins/jest.config.js", "<rootDir>/integration-tests/plugins/jest.config.js",
"<rootDir>/integration-tests/repositories/jest.config.js", "<rootDir>/integration-tests/repositories/jest.config.js",
], ],
+1
View File
@@ -63,6 +63,7 @@
"test:chunk": "./scripts/run-workspace-unit-tests-in-chunks.sh", "test:chunk": "./scripts/run-workspace-unit-tests-in-chunks.sh",
"test:integration:packages": "turbo run test:integration --concurrency=50% --no-daemon --no-cache --force --filter='./packages/*' --filter='./packages/core/*' --filter='./packages/cli/*' --filter='./packages/modules/*' --filter='./packages/modules/providers/*'", "test:integration:packages": "turbo run test:integration --concurrency=50% --no-daemon --no-cache --force --filter='./packages/*' --filter='./packages/core/*' --filter='./packages/cli/*' --filter='./packages/modules/*' --filter='./packages/modules/providers/*'",
"test:integration:api": "turbo run test:integration:chunk --concurrency=50% --no-daemon --no-cache --force --filter=integration-tests-api", "test:integration:api": "turbo run test:integration:chunk --concurrency=50% --no-daemon --no-cache --force --filter=integration-tests-api",
"test:integration:http": "turbo run test:integration:chunk --concurrency=50% --no-daemon --no-cache --force --filter=integration-tests-http",
"test:integration:modules": "turbo run test:integration:chunk --concurrency=50% --no-daemon --no-cache --force --filter=integration-tests-modules", "test:integration:modules": "turbo run test:integration:chunk --concurrency=50% --no-daemon --no-cache --force --filter=integration-tests-modules",
"openapi:generate": "yarn ./packages/cli/oas/oas-github-ci run ci --with-full-file", "openapi:generate": "yarn ./packages/cli/oas/oas-github-ci run ci --with-full-file",
"medusa-oas": "yarn ./packages/cli/oas/medusa-oas-cli run medusa-oas", "medusa-oas": "yarn ./packages/cli/oas/medusa-oas-cli run medusa-oas",
@@ -22,9 +22,7 @@ export const GET = async (
entryPoint: "product_option", entryPoint: "product_option",
variables: { variables: {
filters: { ...req.filterableFields, product_id: productId }, filters: { ...req.filterableFields, product_id: productId },
order: req.listConfig.order, ...req.remoteQueryConfig.pagination,
skip: req.listConfig.skip,
take: req.listConfig.take,
}, },
fields: req.remoteQueryConfig.fields, fields: req.remoteQueryConfig.fields,
}) })
@@ -44,7 +44,7 @@ export const retrieveOptionConfig = {
} }
export const listOptionConfig = { export const listOptionConfig = {
...retrieveVariantConfig, ...retrieveOptionConfig,
defaultLimit: 50, defaultLimit: 50,
isList: true, isList: true,
} }
@@ -60,6 +60,9 @@ export const AdminGetProductOptionsParams = createFindParams({
q: z.string().optional(), q: z.string().optional(),
id: z.union([z.string(), z.array(z.string())]).optional(), id: z.union([z.string(), z.array(z.string())]).optional(),
title: z.string().optional(), title: z.string().optional(),
created_at: createOperatorMap().optional(),
updated_at: createOperatorMap().optional(),
deleted_at: createOperatorMap().optional(),
$and: z.lazy(() => AdminGetProductsParams.array()).optional(), $and: z.lazy(() => AdminGetProductsParams.array()).optional(),
$or: z.lazy(() => AdminGetProductsParams.array()).optional(), $or: z.lazy(() => AdminGetProductsParams.array()).optional(),
}) })
+36
View File
@@ -19864,6 +19864,42 @@ __metadata:
languageName: unknown languageName: unknown
linkType: soft linkType: soft
"integration-tests-http@workspace:integration-tests/http":
version: 0.0.0-use.local
resolution: "integration-tests-http@workspace:integration-tests/http"
dependencies:
"@medusajs/api-key": "workspace:^"
"@medusajs/auth": "workspace:*"
"@medusajs/cache-inmemory": "workspace:*"
"@medusajs/customer": "workspace:^"
"@medusajs/event-bus-local": "workspace:*"
"@medusajs/fulfillment": "workspace:^"
"@medusajs/fulfillment-manual": "workspace:^"
"@medusajs/inventory-next": "workspace:^"
"@medusajs/medusa": "workspace:*"
"@medusajs/modules-sdk": "workspace:^"
"@medusajs/pricing": "workspace:^"
"@medusajs/product": "workspace:^"
"@medusajs/promotion": "workspace:^"
"@medusajs/region": "workspace:^"
"@medusajs/stock-location-next": "workspace:^"
"@medusajs/store": "workspace:^"
"@medusajs/tax": "workspace:^"
"@medusajs/types": "workspace:^"
"@medusajs/user": "workspace:^"
"@medusajs/utils": "workspace:^"
"@medusajs/workflow-engine-inmemory": "workspace:*"
"@swc/core": ^1.4.8
"@swc/jest": ^0.2.36
faker: ^5.5.3
jest: ^26.6.3
jest-environment-node: 26.6.2
medusa-test-utils: "workspace:*"
pg: ^8.11.0
typescript: ^4.1.3
languageName: unknown
linkType: soft
"integration-tests-modules@workspace:integration-tests/modules": "integration-tests-modules@workspace:integration-tests/modules":
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "integration-tests-modules@workspace:integration-tests/modules" resolution: "integration-tests-modules@workspace:integration-tests/modules"