Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
"packages/case-plugin-base": "0.28.2",
"packages/case-plugin-dsl-types": "0.28.2",
"packages/case-entities": "0.28.2",
"packages/contract-case-jest": "0.28.2",
"packages/contract-case-connector-js": "0.28.2",
"packages/contract-case-dsl-js": "0.28.2",
"packages/contract-case-dsl-js-jest": "0.28.2",
"packages/contract-case-dsl-js-vitest": "0.28.2",
"packages/documentation": "0.28.2",
".": "0.28.2",
"packages/contract-case-cli": "0.28.2",
Expand Down
3,144 changes: 798 additions & 2,346 deletions package-lock.json

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,8 @@
"test": "lerna run test",
"test:verify": "lerna run test:verify",
"coverage": "lcov-result-merger 'packages/*/*/lcov.info' combined-coverage.info --prepend-source-files"
},
"dependencies": {
"nx": "^22.5.2"
}
}
61 changes: 61 additions & 0 deletions packages/contract-case-connector-js/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
{
"name": "@contract-case/contract-case-connector-js",
"version": "0.28.2",
"description": "Internal JavaScript/TypeScript connector code for ContractCase test framework bindings",
"keywords": [
"testing",
"api",
"pact",
"contracttesting",
"contract-testing",
"contractcase"
],
"author": "Timothy Jones <timothy.l.jones@gmail.com> (https://github.com/TimothyJones)",
"homepage": "https://case.contract-testing.io",
"license": "BSD-3-Clause",
"main": "./dist/src/index.js",
"types": "./dist/src/index.d.ts",
"directories": {
"src": "src",
"dist": "dist"
},
"files": [
"dist"
],
"publishConfig": {
"access": "public"
},
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/case-contract-testing/case.git"
},
"scripts": {
"build": "rimraf dist && tsc --project tsconfig.build.json",
"lint": "eslint",
"lint:fix": "eslint --fix",
"format:base": "prettier --parser typescript \"{src,bin}/*.ts\"",
"format:check": "npm run format:base -- --list-different",
"format:fix": "npm run format:base -- --write "
},
"funding": {
"type": "individual",
"url": "https://github.com/sponsors/TimothyJones"
},
"engines": {
"node": ">=14.21.2"
},
"bugs": {
"url": "https://github.com/case-contract-testing/case/issues"
},
"devDependencies": {
"@contract-case/eslint-config-case-maintainer": "0.28.2",
"eslint": "^9.39.1",
"prettier": "3.6.2",
"rimraf": "^6.1.2",
"typescript": "5.9.3"
},
"dependencies": {
"@contract-case/case-connector": "0.28.2",
"chalk": "^4.1.2"
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { BoundaryFailure } from '@contract-case/case-connector/cjs';
import { ContractCaseConfigurationError } from '../../../entities';
import { ContractCaseConfigurationError } from '../../../entities/index.js';

export const makeBoundaryFailure = (error: Error): BoundaryFailure =>
new BoundaryFailure(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { BoundaryResult } from '@contract-case/case-connector';
import { mapSuccessWithAny } from './boundaryResultToJs';
import { BoundaryResult } from '@contract-case/case-connector/cjs';
import { mapSuccessWithAny } from './boundaryResultToJs.js';
import {
ContractCaseCoreError,
VerificationHandle,
VerificationTestHandle,
} from '../../../entities';
} from '../../../entities/index.js';

const TEST_HANDLE_EXPECTED_FIELDS = {
filePath: 'string',
Expand All @@ -26,15 +26,15 @@ const isVerificationTestHandle = (
if (typeof handle !== 'object' || handle == null) {
throw new ContractCaseCoreError(
`Bug: The verification test handle array had a non-object or null. Full item: ${handle}`,
'contract-case-jest',
'contract-case-connector-js',
);
}
Object.entries(TEST_HANDLE_EXPECTED_FIELDS).forEach(
([expectedKey, expectedValue]) => {
if (!(expectedKey in handle)) {
throw new ContractCaseCoreError(
`Bug: One of the verification handles didn't include a key for '${expectedKey}'. Full object: ${handle}`,
'contract-case-jest',
'contract-case-connector-js',
);
}
if (
Expand All @@ -43,7 +43,7 @@ const isVerificationTestHandle = (
) {
throw new ContractCaseCoreError(
`Bug: One of the verification handles had the wrong type for key '${expectedKey}'. Expected ${expectedValue} Full object: ${handle}`,
'contract-case-jest',
'contract-case-connector-js',
);
}
},
Expand All @@ -57,15 +57,15 @@ const checkContractVerificationHandle = (
if (typeof handle !== 'object' || handle == null) {
throw new ContractCaseCoreError(
`Bug: The contract verification handle array had a non-object or null. Full item: ${handle}`,
'contract-case-jest',
'contract-case-connector-js',
);
}
Object.entries(CONTRACT_HANDLE_EXPECTED_FIELDS).forEach(
([expectedKey, expectedValue]) => {
if (!(expectedKey in handle)) {
throw new ContractCaseCoreError(
`Bug: One of the verification handles didn't include a key for '${expectedKey}'. Full object: ${handle}`,
'contract-case-jest',
'contract-case-connector-js',
);
}
if (
Expand All @@ -74,15 +74,15 @@ const checkContractVerificationHandle = (
) {
throw new ContractCaseCoreError(
`Bug: One of the verification handles had the wrong type for key '${expectedKey}'. Expected ${expectedValue} Full object: ${handle}`,
'contract-case-jest',
'contract-case-connector-js',
);
}
},
);
if (!('testHandles' in handle && Array.isArray(handle.testHandles))) {
throw new ContractCaseCoreError(
`Bug: One of the verification handles didn't include a key for 'testHandles' or it wasn't an array. Full object: ${JSON.stringify(handle)}`,
'contract-case-jest',
'contract-case-connector-js',
);
}
return handle.testHandles.every(isVerificationTestHandle);
Expand All @@ -95,7 +95,7 @@ export const mapContractVerificationHandles = (
if (!Array.isArray(array)) {
throw new ContractCaseCoreError(
"Bug: The result from the contract verification call wasn't an array",
'contract-case-jest',
'contract-case-connector-js',
);
}

Expand Down
30 changes: 30 additions & 0 deletions packages/contract-case-connector-js/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*!
* ContractCase Connector JS - Internal connector code for ContractCase test framework bindings
* Copyright(c) 2022-2024 Timothy Jones (TLJ)
* BSD-3-Clause license
*/

// Internal boundary mappers
export {
mapSuccess,
mapSuccessWithAny,
mapFailureToJsError,
} from './connectors/case-boundary/mappers/boundaryResultToJs.js';
export { makeBoundaryFailure } from './connectors/case-boundary/mappers/jsErrorToBoundary.js';
export { mapInvokeableFunction } from './connectors/case-boundary/mappers/invokeableFunction.js';
export { mapContractVerificationHandles } from './connectors/case-boundary/mappers/verificationHandles.js';
export {
mapConfig,
mapSuccessConfig,
mapFailingConfig,
} from './connectors/case-boundary/mappers/config/config.js';

// Internal printer and error handler
export {
defaultPrinter,
crashPrinter,
} from './connectors/defaultTestPrinter.js';
export { errorHandler, errorReporter } from './connectors/handler.js';

// Entity types (shared between internal and user-facing code)
export * from './entities/index.js';
16 changes: 16 additions & 0 deletions packages/contract-case-connector-js/tsconfig.build.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"extends": "@contract-case/case-maintainer-config/tsconfig.json",
"compilerOptions": {
"outDir": "dist/",
"module": "nodenext",
"moduleResolution": "nodenext"
},
"include": ["src/**/*.ts"],
"exclude": [
"src/**/*.spec.ts",
"src/**/*.spec.verify.ts",
"src/**/*.spec-dont-run.ts",
"dist/**/*.js",
"coverage"
]
}
7 changes: 7 additions & 0 deletions packages/contract-case-connector-js/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"extends": "@contract-case/case-maintainer-config/tsconfig.json",
"compilerOptions": {
"outDir": "dist/"
},
"exclude": ["jest.config.ts", "dist/**/*.js", "coverage"]
}
3 changes: 3 additions & 0 deletions packages/contract-case-dsl-js-jest/eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import lintConfig from '@contract-case/eslint-config-case-maintainer';

export default [...lintConfig];
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@contract-case/contract-case-jest",
"name": "@contract-case/contract-case-dsl-js-jest",
"version": "0.28.2",
"description": "ContractCase contract testing suite",
"description": "ContractCase contract testing suite for Jest",
"keywords": [
"testing",
"api",
Expand Down Expand Up @@ -81,14 +81,8 @@
"jest": "^29.4.3 | ^30.0.0"
},
"dependencies": {
"@contract-case/case-connector": "0.28.2",
"@contract-case/case-core-plugin-http-dsl": "0.28.2",
"@contract-case/case-definition-dsl": "0.28.2",
"@contract-case/case-entities-internal": "0.28.2",
"@contract-case/case-plugin-base": "0.28.2",
"@contract-case/case-plugin-dsl-types": "0.28.2",
"@contract-case/contract-case-dsl-js": "0.28.2",
"@contract-case/cli": "0.28.2",
"chalk": "^4.1.2",
"ts-node": "^10.9.1"
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
/* eslint-disable import/no-extraneous-dependencies */
/* eslint-disable import/order */
/* eslint-disable jest/expect-expect */

import { willReceiveHttpRequest } from '../../boundaries/index.js';
// example-extract _creating-a-contract
import {
willReceiveHttpRequest,
ContractCaseDefiner,
defineContract,
} from '@contract-case/contract-case-jest';
} from '@contract-case/contract-case-dsl-js-jest';
// example-extract _creating-a-contract

defineContract(
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
stringPrefix,
anyString,
HttpRequestConfig,
} from '@contract-case/contract-case-jest';
} from '@contract-case/contract-case-dsl-js-jest';
import { YourApi } from './YourApi.js';

// ignore-extract
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import { defineContract, ContractCaseDefiner } from '../../index.js';

// example-extract _defining-an-example
import { willSendHttpRequest } from '@contract-case/contract-case-jest';
import { willSendHttpRequest } from '@contract-case/contract-case-dsl-js-jest';

// ignore-extract
defineContract(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
export * from './dsl/index.js';
export * from './jest/index.js';
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
/* eslint-disable jest/expect-expect */
/* eslint-disable jest/no-export */
import { ContractCaseDefiner } from '../../connectors/ContractDefiner.js';
import { ContractVerifier } from '../../connectors/ContractVerifier.js';
import {
ContractCaseDefiner,
ContractVerifier,
} from '@contract-case/contract-case-dsl-js';
import type {
ContractMetadata,
ContractWriteSuccess,
} from '../../entities/index.js';
} from '@contract-case/contract-case-dsl-js';
import type {
ContractCaseJestConfig,
ContractCaseJestVerifierConfig,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { ContractCaseDefiner } from '../../connectors/ContractDefiner.js';
import { ContractVerifier } from '../../connectors/ContractVerifier.js';
import {
import type {
ContractCaseDefiner,
ContractVerifier,
ContractCaseConfig,
ContractCaseVerifierConfig,
} from '../../entities/config.js';
} from '@contract-case/contract-case-dsl-js';

export type ContractCaseJestConfig = ContractCaseConfig;
export type ContractCaseJestVerifierConfig = ContractCaseVerifierConfig;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { verifyContract } from './boundaries/jest/jest.js';
import { TriggerGroupMap } from './connectors/TriggerGroup.js';
import { FunctionExecutorConfig } from './index.js';
import { TriggerGroupMap, FunctionExecutorConfig } from './index.js';

describe('verification', () => {
verifyContract({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { baseService } from './__tests__/server/domain/baseService.js';
import { Dependencies } from './__tests__/server/domain/types.js';
import { User } from './__tests__/server/entities/responses.js';
import { verifyContract } from './boundaries/jest/jest.js';
import { StateHandlers } from './entities/types.js';
import { StateHandlers } from './index.js';

describe('Server verification but with base config', () => {
// This test is like the non base one, but with state handlers
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { baseService } from './__tests__/server/domain/baseService.js';
import { Dependencies } from './__tests__/server/domain/types.js';
import { User } from './__tests__/server/entities/responses.js';
import { verifyContract } from './boundaries/jest/jest.js';
import { StateHandlers } from './entities/types.js';
import { StateHandlers } from './index.js';

describe('Server verification', () => {
// SERVER SETUP BOILERPLATE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ import api from './__tests__/client/http.js';
import { UserNotFoundConsumerError } from './__tests__/client/entities/errors.js';
import { ApiError } from './__tests__/client/entities/apiErrors.js';

import { verifyContract, HttpRequestConfig } from './index.js';
import { TriggerGroupMap } from './connectors/TriggerGroup.js';
import { verifyContract, HttpRequestConfig, TriggerGroupMap } from './index.js';

verifyContract({
providerName: 'http request provider',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
import { InteractionSetup } from './entities/index.js';
import type { InteractionSetup } from '@contract-case/contract-case-dsl-js';

/*!
* ContractCase Jest DSL
* Copyright(c) 2022-2024 Timothy Jones (TLJ)
* BSD-3-Clause license
*/

export { ContractCaseDefiner } from './connectors/ContractDefiner.js';
// Re-export all shared DSL code
export * from '@contract-case/contract-case-dsl-js';

// Re-export jest-specific bindings
export * from './boundaries/index.js';
export * as dsl from './boundaries/dsl/index.js';
export * as TestEquivalenceMatchers from './boundaries/dsl/Matchers/index.js';
export * from './entities/types.js';

// Namespace re-exports for backward compatibility
export * as dsl from '@contract-case/contract-case-dsl-js';
export * as TestEquivalenceMatchers from '@contract-case/contract-case-dsl-js';

process.env['CASE_CONNECTOR_CLIENT'] = 'contract-case-jest';

Expand Down
3 changes: 3 additions & 0 deletions packages/contract-case-dsl-js-vitest/eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import lintConfig from '@contract-case/eslint-config-case-maintainer';

export default [...lintConfig];
Loading
Loading