testeranto
Version:
the AI powered BDD test framework for typescript projects
216 lines (215 loc) • 9.31 kB
JavaScript
;
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-unused-vars */
Object.defineProperty(exports, "__esModule", { value: true });
exports.implementation = void 0;
const MockTiposkripto_1 = require("./MockTiposkripto");
const Tiposkripto_specification_1 = require("./Tiposkripto.specification");
const Tiposkripto_adapter_1 = require("./Tiposkripto.adapter");
exports.implementation = {
suites: {
Default: "Tiposkripto test suite",
ExtendedSuite: "Extended Tiposkripto test suite",
},
givens: {
Default: () => {
console.log("Creating default test builder instance");
const builder = new MockTiposkripto_1.MockTiposkripto({}, // input
Tiposkripto_specification_1.specification, // Use the current specification
exports.implementation, // Use the current implementation
{ ports: 0 }, // Default resource requirements
Tiposkripto_adapter_1.testAdapter, // Default adapter
(cb) => cb() // Default uberCatcher
);
console.log("Builder created:", builder);
// Ensure the test adapter is properly set
if (!builder.testAdapter) {
builder.testAdapter = Tiposkripto_adapter_1.testAdapter;
}
return builder;
},
WithCustomInput: (input = {}) => {
return new MockTiposkripto_1.MockTiposkripto(input, Tiposkripto_specification_1.specification, exports.implementation, { ports: 0 }, Tiposkripto_adapter_1.testAdapter, (cb) => cb());
},
WithResourceRequirements: (requirements = { ports: 0 }) => {
return new MockTiposkripto_1.MockTiposkripto({}, Tiposkripto_specification_1.specification, exports.implementation, requirements, Tiposkripto_adapter_1.testAdapter, (cb) => cb());
},
WithCustomImplementation: (impl = exports.implementation) => {
return new MockTiposkripto_1.MockTiposkripto({}, Tiposkripto_specification_1.specification, impl, { ports: 0 }, Tiposkripto_adapter_1.testAdapter, (cb) => cb());
},
WithCustomSpecification: (spec = Tiposkripto_specification_1.specification) => {
return new MockTiposkripto_1.MockTiposkripto({}, spec, exports.implementation, { ports: 0 }, Tiposkripto_adapter_1.testAdapter, (cb) => cb());
},
WithCustomAdapter: (customAdapter = {}) => {
return new MockTiposkripto_1.MockTiposkripto({}, Tiposkripto_specification_1.specification, exports.implementation, { ports: 0 }, Object.assign(Object.assign({}, Tiposkripto_adapter_1.testAdapter), customAdapter), (cb) => cb());
},
},
whens: {
addArtifact: (artifact) => (builder) => {
builder.artifacts.push(artifact);
return builder;
},
setTestJobs: (jobs) => (builder) => {
builder.testJobs = jobs;
return builder;
},
modifySpecs: (modifier) => (builder) => {
builder.specs = modifier(builder.specs || []);
return builder;
},
modifyJobs: (modifier) => (builder) => {
builder.testJobs = modifier(builder.testJobs || []);
return builder;
},
triggerError: (message) => (builder) => {
throw new Error(message);
},
// Add a when to simulate receiving test resource config
receiveTestResourceConfig: (config) => async (builder) => {
return await builder.receiveTestResourceConfig(config);
},
},
thens: {
initializedProperly: () => (builder, utils) => {
var _a;
if (!builder) {
throw new Error("Builder is undefined");
}
if (!(builder instanceof MockTiposkripto_1.MockTiposkripto)) {
throw new Error(`Builder was not properly initialized. Expected MockTiposkripto instance but got ${(_a = builder === null || builder === void 0 ? void 0 : builder.constructor) === null || _a === void 0 ? void 0 : _a.name}`);
}
// Verify required properties exist
const requiredProps = [
"specs",
"testJobs",
"artifacts",
"suitesOverrides",
"givenOverides",
"whenOverides",
"thenOverides",
];
for (const prop of requiredProps) {
if (!(prop in builder)) {
throw new Error(`Missing required property: ${prop}`);
}
}
return builder;
},
specsGenerated: () => (builder) => {
if (!Array.isArray(builder.specs)) {
throw new Error("Specs were not generated");
}
return builder;
},
jobsCreated: () => (builder) => {
if (!Array.isArray(builder.testJobs)) {
throw new Error("Test jobs were not created");
}
return builder;
},
artifactsTracked: () => (builder) => {
if (!Array.isArray(builder.artifacts)) {
throw new Error("Artifacts array not initialized");
}
return builder;
},
resourceRequirementsSet: () => (builder) => {
if (!builder.testResourceRequirement) {
throw new Error("Resource requirements not set");
}
return builder;
},
suitesOverridesConfigured: () => (builder) => {
if (!builder.suitesOverrides) {
throw new Error("Suites overrides not configured");
}
return builder;
},
givensOverridesConfigured: () => (builder) => {
if (!builder.givenOverides) {
throw new Error("Givens overrides not configured");
}
return builder;
},
whensOverridesConfigured: () => (builder) => {
if (!builder.whenOverides) {
throw new Error("Whens overrides not configured");
}
return builder;
},
thensOverridesConfigured: () => (builder) => {
if (!builder.thenOverides) {
throw new Error("Thens overrides not configured");
}
return builder;
},
interfaceConfigured: () => (builder) => {
if (!builder.testAdapter) {
throw new Error("Test adapter not configured");
}
// Check if the test adapter has the required methods
const requiredMethods = [
"beforeAll",
"beforeEach",
"andWhen",
"butThen",
"afterEach",
"afterAll",
"assertThis",
];
for (const method of requiredMethods) {
if (typeof builder.testAdapter[method] !== "function") {
throw new Error(`Test adapter missing required method: ${method}`);
}
}
return builder;
},
specsModified: (expectedCount) => (builder) => {
if (builder.specs.length <= expectedCount) {
throw new Error(`Expected at least ${expectedCount} modified specs`);
}
return builder;
},
jobsModified: (expectedCount) => (builder) => {
if (builder.testJobs.length <= expectedCount) {
throw new Error(`Expected at least ${expectedCount} modified jobs`);
}
return builder;
},
errorThrown: (expectedMessage) => (builder) => {
// This is handled by the test runner
return builder;
},
testRunSuccessful: () => async (builder) => {
await builder.receiveTestResourceConfig("");
return builder;
},
runTimeTestsCounted: () => async (builder) => {
const result = await builder.receiveTestResourceConfig("");
// The total number of tests should be greater than 0
if (result.runTimeTests <= 0) {
throw new Error(`Expected runTimeTests > 0, got ${result.runTimeTests}`);
}
return builder;
},
runTimeTestsSetToNegativeOne: () => async (builder) => {
await builder.receiveTestResourceConfig("");
// If we reach here, no error was thrown, which is unexpected
// But we'll let the test fail naturally
return builder;
},
runTimeTestsCountIs: (expectedCount) => async (builder) => {
const result = await builder.receiveTestResourceConfig("");
if (result.runTimeTests !== expectedCount) {
throw new Error(`Expected runTimeTests to be ${expectedCount}, got ${result.runTimeTests}`);
}
return builder;
},
runTimeTestsIsNegativeOne: () => async (builder) => {
await builder.receiveTestResourceConfig("");
// If we reach here, no error was thrown, which is unexpected
// But we'll let the test fail naturally
return builder;
},
},
};