Skip to content

Commit 3d993d6

Browse files
committed
update validateTestAssets result to reflect new approach
1 parent 5f59928 commit 3d993d6

File tree

3 files changed

+94
-95
lines changed

3 files changed

+94
-95
lines changed

src/methods/validate-test-assets.ts

Lines changed: 36 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,17 @@ export interface CompleteValidationResult {
2727
valid: boolean;
2828
errors: readonly GraphQLError[];
2929
};
30-
inputFixture: {
30+
fixtureInputStructure: {
3131
valid: boolean;
3232
errors: string[];
33-
data: any;
33+
generatedQuery?: string;
3434
};
35-
inputQueryFixtureMatch: {
35+
fixtureInputTypes: {
3636
valid: boolean;
3737
errors: string[];
38-
generatedQuery?: string;
38+
data: any;
3939
};
40-
outputFixture: {
40+
fixtureOutput: {
4141
valid: boolean;
4242
errors: { message: string }[];
4343
mutationName: string | null;
@@ -65,9 +65,9 @@ export interface CompleteValidationResult {
6565
* - mutationName: string - Mutation name used for validation
6666
* - resultParameterName: string - Parameter name used for validation
6767
* - inputQuery: { valid: boolean, errors: Array } - Input query validation results
68-
* - inputFixture: { valid: boolean, errors: Array, data: Object } - Input fixture validation results
69-
* - inputQueryFixtureMatch: { valid: boolean, errors: Array } - Input query-fixture structure match results
70-
* - outputFixture: { valid: boolean, errors: Array, mutationName: string, resultParameterType: string } - Output fixture validation results
68+
* - fixtureInputStructure: { valid: boolean, errors: Array, generatedQuery: string } - Fixture input structure validation results
69+
* - fixtureInputTypes: { valid: boolean, errors: Array, data: Object } - Fixture input type validation results
70+
* - fixtureOutput: { valid: boolean, errors: Array, mutationName: string, resultParameterType: string } - Fixture output validation results
7171
*/
7272
export async function validateTestAssets({
7373
schema,
@@ -80,9 +80,9 @@ export async function validateTestAssets({
8080
mutationName,
8181
resultParameterName,
8282
inputQuery: { valid: false, errors: [] },
83-
inputFixture: { valid: false, errors: [], data: null },
84-
inputQueryFixtureMatch: { valid: false, errors: [] },
85-
outputFixture: { valid: false, errors: [], mutationName: null, resultParameterType: null }
83+
fixtureInputStructure: { valid: false, errors: [] },
84+
fixtureInputTypes: { valid: false, errors: [], data: null },
85+
fixtureOutput: { valid: false, errors: [], mutationName: null, resultParameterType: null }
8686
};
8787

8888
try {
@@ -93,31 +93,30 @@ export async function validateTestAssets({
9393
errors: inputQueryErrors
9494
};
9595

96-
// Step 2: Validate query-fixture structure match to get validation, query, and normalized data in one pass
97-
const traversalResult = validateFixtureInputStructure(inputQueryAST, schema, fixture.input);
96+
// Step 2: Validate fixture input structure
97+
const structureResult = validateFixtureInputStructure(inputQueryAST, schema, fixture.input);
9898

99-
// Step 3: Store input query-fixture structure match results
100-
results.inputQueryFixtureMatch = {
101-
valid: traversalResult.valid,
102-
errors: traversalResult.errors,
103-
generatedQuery: traversalResult.generatedQuery
99+
results.fixtureInputStructure = {
100+
valid: structureResult.valid,
101+
errors: structureResult.errors,
102+
generatedQuery: structureResult.generatedQuery
104103
};
105104

106-
// Step 4: Validate input fixture types using traversal results
105+
// Step 3: Validate fixture input types using generated query from structure validation
107106
// Pass variable values from fixture if present
108-
const inputFixtureResult = await validateFixtureInputTypes(
109-
traversalResult.generatedQuery,
107+
const typesResult = await validateFixtureInputTypes(
108+
structureResult.generatedQuery,
110109
schema,
111110
fixture.input,
112111
fixture.inputQueryVariables
113112
);
114-
results.inputFixture = {
115-
valid: inputFixtureResult.valid,
116-
errors: inputFixtureResult.errors,
117-
data: inputFixtureResult.data
113+
results.fixtureInputTypes = {
114+
valid: typesResult.valid,
115+
errors: typesResult.errors,
116+
data: typesResult.data
118117
};
119118

120-
// Step 5: Determine mutation details for output validation
119+
// Step 4: Determine mutation details for output validation
121120
let determined;
122121
if (!mutationName || !resultParameterName) {
123122
const target = fixture.target;
@@ -131,22 +130,22 @@ export async function validateTestAssets({
131130
results.mutationName = mutationName || determined?.mutationName;
132131
results.resultParameterName = resultParameterName || determined?.resultParameterName;
133132

134-
// Step 6: Validate output fixture
133+
// Step 5: Validate fixture output
135134
if (!results.mutationName || !results.resultParameterName) {
136135
throw new Error('Unable to determine mutation name or result parameter name for output fixture validation');
137136
}
138-
139-
const outputFixtureResult = await validateFixtureOutput(
140-
fixture.expectedOutput,
141-
schema,
142-
results.mutationName,
137+
138+
const fixtureOutputResult = await validateFixtureOutput(
139+
fixture.expectedOutput,
140+
schema,
141+
results.mutationName,
143142
results.resultParameterName
144143
);
145-
results.outputFixture = {
146-
valid: outputFixtureResult.valid,
147-
errors: outputFixtureResult.errors,
148-
mutationName: outputFixtureResult.mutationName,
149-
resultParameterType: outputFixtureResult.resultParameterType
144+
results.fixtureOutput = {
145+
valid: fixtureOutputResult.valid,
146+
errors: fixtureOutputResult.errors,
147+
mutationName: fixtureOutputResult.mutationName,
148+
resultParameterType: fixtureOutputResult.resultParameterType
150149
};
151150

152151
return results;

test-app/extensions/discount-function/tests/default.test.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import { buildFunction, loadFixture, runFunction, validateTestAssets, loadSchema
55
function logValidationResults(fixtureFile, validationResult) {
66
console.log(`Validation for ${path.basename(fixtureFile)}:`);
77
console.log(` Input Query: ${validationResult.inputQuery.valid ? '✅' : '❌'}`);
8-
console.log(` Input Fixture: ${validationResult.inputFixture.valid ? '✅' : '❌'}`);
9-
console.log(` Input Query-Fixture Match: ${validationResult.inputQueryFixtureMatch.valid ? '✅' : '❌'}`);
10-
console.log(` Output Fixture: ${validationResult.outputFixture.valid ? '✅' : '❌'}`);
11-
console.log(` Overall: ${(validationResult.inputQuery.valid && validationResult.inputFixture.valid && validationResult.inputQueryFixtureMatch.valid && validationResult.outputFixture.valid) ? '✅' : '❌'}`);
8+
console.log(` Fixture Input Structure: ${validationResult.fixtureInputStructure.valid ? '✅' : '❌'}`);
9+
console.log(` Fixture Input Types: ${validationResult.fixtureInputTypes.valid ? '✅' : '❌'}`);
10+
console.log(` Fixture Output: ${validationResult.fixtureOutput.valid ? '✅' : '❌'}`);
11+
console.log(` Overall: ${(validationResult.inputQuery.valid && validationResult.fixtureInputStructure.valid && validationResult.fixtureInputTypes.valid && validationResult.fixtureOutput.valid) ? '✅' : '❌'}`);
1212
}
1313

1414
// File-level variables shared across all tests
@@ -54,9 +54,9 @@ describe("Discount Function Tests", () => {
5454

5555
// Assert that all validation steps pass
5656
expect(validationResult.inputQuery.valid).toBe(true);
57-
expect(validationResult.inputFixture.valid).toBe(true);
58-
expect(validationResult.inputQueryFixtureMatch.valid).toBe(true);
59-
expect(validationResult.outputFixture.valid).toBe(true);
57+
expect(validationResult.fixtureInputStructure.valid).toBe(true);
58+
expect(validationResult.fixtureInputTypes.valid).toBe(true);
59+
expect(validationResult.fixtureOutput.valid).toBe(true);
6060

6161
// Run the actual function
6262
const runResult = await runFunction(
@@ -96,9 +96,9 @@ describe("Discount Function Tests", () => {
9696
// For incorrectly formatted fixtures, validation should fail because the fixture
9797
// structure doesn't match the query (e.g., arguments in field keys)
9898
expect(validationResult.inputQuery.valid).toBe(true);
99-
expect(validationResult.inputFixture.valid).toBe(true);
100-
expect(validationResult.inputQueryFixtureMatch.valid).toBe(false);
101-
expect(validationResult.outputFixture.valid).toBe(true);
99+
expect(validationResult.fixtureInputStructure.valid).toBe(false);
100+
expect(validationResult.fixtureInputTypes.valid).toBe(true);
101+
expect(validationResult.fixtureOutput.valid).toBe(true);
102102

103103
// Run the actual function
104104
const runResult = await runFunction(

test/methods/validate-test-assets.test.ts

Lines changed: 48 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ describe('validateTestAssets', () => {
2727
expect(result.resultParameterName).toBe('result');
2828

2929
expect(result.inputQuery.valid).toBe(true);
30-
expect(result.inputFixture.valid).toBe(true);
31-
expect(result.inputQueryFixtureMatch.valid).toBe(true);
32-
expect(result.outputFixture.valid).toBe(true);
30+
expect(result.fixtureInputTypes.valid).toBe(true);
31+
expect(result.fixtureInputStructure.valid).toBe(true);
32+
expect(result.fixtureOutput.valid).toBe(true);
3333
});
3434

3535
it('should perform complete validation workflow with valid test fixture', async () => {
@@ -45,23 +45,23 @@ describe('validateTestAssets', () => {
4545
expect(result).toHaveProperty('mutationName');
4646
expect(result).toHaveProperty('resultParameterName');
4747
expect(result).toHaveProperty('inputQuery');
48-
expect(result).toHaveProperty('inputFixture');
49-
expect(result).toHaveProperty('inputQueryFixtureMatch');
50-
expect(result).toHaveProperty('outputFixture');
48+
expect(result).toHaveProperty('fixtureInputTypes');
49+
expect(result).toHaveProperty('fixtureInputStructure');
50+
expect(result).toHaveProperty('fixtureOutput');
5151

5252
expect(result.inputQuery.valid).toBe(true);
5353
expect(result.inputQuery.errors).toHaveLength(0);
5454

55-
expect(result.inputFixture.valid).toBe(true);
56-
expect(result.inputFixture.errors).toHaveLength(0);
55+
expect(result.fixtureInputTypes.valid).toBe(true);
56+
expect(result.fixtureInputTypes.errors).toHaveLength(0);
5757

58-
expect(result.inputQueryFixtureMatch.valid).toBe(true);
59-
expect(result.inputQueryFixtureMatch.errors).toHaveLength(0);
58+
expect(result.fixtureInputStructure.valid).toBe(true);
59+
expect(result.fixtureInputStructure.errors).toHaveLength(0);
6060

61-
expect(result.outputFixture.valid).toBe(true);
62-
expect(result.outputFixture.errors).toHaveLength(0);
61+
expect(result.fixtureOutput.valid).toBe(true);
62+
expect(result.fixtureOutput.errors).toHaveLength(0);
6363

64-
expect(result.inputQuery.valid && result.inputFixture.valid && result.inputQueryFixtureMatch.valid && result.outputFixture.valid).toBe(true);
64+
expect(result.inputQuery.valid && result.fixtureInputTypes.valid && result.fixtureInputStructure.valid && result.fixtureOutput.valid).toBe(true);
6565
});
6666
});
6767

@@ -86,13 +86,13 @@ describe('validateTestAssets', () => {
8686

8787
expect(result.inputQuery.valid).toBe(true);
8888

89-
expect(result.inputFixture.valid).toBe(true);
89+
expect(result.fixtureInputTypes.valid).toBe(true);
9090

91-
expect(result.inputQueryFixtureMatch.valid).toBe(true);
91+
expect(result.fixtureInputStructure.valid).toBe(true);
9292

93-
expect(result.outputFixture.valid).toBe(false);
94-
expect(result.outputFixture.errors.length).toBe(1);
95-
expect(result.outputFixture.errors[0].message).toContain('Field "extraField" is not defined by type "ProcessDataResult"');
93+
expect(result.fixtureOutput.valid).toBe(false);
94+
expect(result.fixtureOutput.errors.length).toBe(1);
95+
expect(result.fixtureOutput.errors[0].message).toContain('Field "extraField" is not defined by type "ProcessDataResult"');
9696
});
9797
});
9898

@@ -129,10 +129,10 @@ describe('validateTestAssets', () => {
129129
expect(result.inputQuery.valid).toBe(true);
130130

131131
// Input fixture should be invalid due to query/schema mismatch
132-
expect(result.inputFixture.valid).toBe(false);
133-
expect(result.inputFixture.errors.length).toBeGreaterThan(0);
132+
expect(result.fixtureInputTypes.valid).toBe(false);
133+
expect(result.fixtureInputTypes.errors.length).toBeGreaterThan(0);
134134
// Should contain type error from GraphQL execution
135-
const hasTypeError = result.inputFixture.errors.some(e =>
135+
const hasTypeError = result.fixtureInputTypes.errors.some(e =>
136136
e.includes('Int cannot represent non-integer value') || e.includes('not_a_number')
137137
);
138138
expect(hasTypeError).toBe(true);
@@ -166,15 +166,15 @@ describe('validateTestAssets', () => {
166166
expect(result.inputQuery.valid).toBe(true);
167167

168168
// Input fixture structure should be invalid due to fixture having fields not in query
169-
expect(result.inputQueryFixtureMatch.valid).toBe(false);
170-
expect(result.inputQueryFixtureMatch.errors.length).toBeGreaterThan(0);
169+
expect(result.fixtureInputStructure.valid).toBe(false);
170+
expect(result.fixtureInputStructure.errors.length).toBeGreaterThan(0);
171171
// Should contain error about invalidField not being in query
172-
const hasInvalidFieldError = result.inputQueryFixtureMatch.errors.some(e =>
172+
const hasInvalidFieldError = result.fixtureInputStructure.errors.some(e =>
173173
e.includes('invalidField')
174174
);
175175
expect(hasInvalidFieldError).toBe(true);
176176

177-
expect(result.outputFixture.valid).toBe(true);
177+
expect(result.fixtureOutput.valid).toBe(true);
178178
});
179179
});
180180

@@ -195,7 +195,7 @@ describe('validateTestAssets', () => {
195195
expect(result.inputQuery.errors.length).toBe(2);
196196
expect(result.inputQuery.errors[0].message).toContain('Cannot query field');
197197

198-
expect(result.inputQuery.valid && result.inputFixture.valid && result.inputQueryFixtureMatch.valid && result.outputFixture.valid).toBeFalsy();
198+
expect(result.inputQuery.valid && result.fixtureInputTypes.valid && result.fixtureInputStructure.valid && result.fixtureOutput.valid).toBeFalsy();
199199
});
200200

201201
it('should validate complete test with all fragment corner cases', async () => {
@@ -213,17 +213,17 @@ describe('validateTestAssets', () => {
213213
expect(result.inputQuery.valid).toBe(true);
214214
expect(result.inputQuery.errors).toHaveLength(0);
215215

216-
expect(result.inputFixture.valid).toBe(true);
217-
expect(result.inputFixture.errors).toHaveLength(0);
216+
expect(result.fixtureInputTypes.valid).toBe(true);
217+
expect(result.fixtureInputTypes.errors).toHaveLength(0);
218218

219-
expect(result.inputQueryFixtureMatch.valid).toBe(true);
220-
expect(result.inputQueryFixtureMatch.errors).toHaveLength(0);
219+
expect(result.fixtureInputStructure.valid).toBe(true);
220+
expect(result.fixtureInputStructure.errors).toHaveLength(0);
221221

222-
expect(result.outputFixture.valid).toBe(true);
223-
expect(result.outputFixture.errors).toHaveLength(0);
222+
expect(result.fixtureOutput.valid).toBe(true);
223+
expect(result.fixtureOutput.errors).toHaveLength(0);
224224

225225
// Verify the generated query includes all the complex scenarios
226-
const generatedQuery = result.inputQueryFixtureMatch.generatedQuery;
226+
const generatedQuery = result.fixtureInputStructure.generatedQuery;
227227

228228
// Should have different aliases from fragment spreads
229229
expect(generatedQuery).toContain('firstItemList: items');
@@ -246,15 +246,15 @@ describe('validateTestAssets', () => {
246246
expect(generatedQuery).toContain('details(itemId: "gid://test/Item/6")');
247247

248248
// Verify data was validated correctly
249-
expect(result.inputFixture.data?.data?.firstItemList).toEqual([{ id: 'gid://test/Item/1' }]);
250-
expect(result.inputFixture.data?.data?.secondItemList).toEqual([{ id: 'gid://test/Item/2' }]);
251-
expect(result.inputFixture.data?.data?.mergedItemList).toEqual([{
249+
expect(result.fixtureInputTypes.data?.data?.firstItemList).toEqual([{ id: 'gid://test/Item/1' }]);
250+
expect(result.fixtureInputTypes.data?.data?.secondItemList).toEqual([{ id: 'gid://test/Item/2' }]);
251+
expect(result.fixtureInputTypes.data?.data?.mergedItemList).toEqual([{
252252
id: 'gid://test/Item/3',
253253
count: 10,
254254
details: { id: 'gid://test/Details/3' }
255255
}]);
256-
expect(result.inputFixture.data?.data?.searchResults).toHaveLength(2);
257-
expect(result.inputFixture.data?.data?.moreSearchResults).toHaveLength(2);
256+
expect(result.fixtureInputTypes.data?.data?.searchResults).toHaveLength(2);
257+
expect(result.fixtureInputTypes.data?.data?.moreSearchResults).toHaveLength(2);
258258
});
259259

260260
it('should use actual variable values from fixture when present', async () => {
@@ -272,14 +272,14 @@ describe('validateTestAssets', () => {
272272
expect(result.inputQuery.valid).toBe(true);
273273
expect(result.inputQuery.errors).toHaveLength(0);
274274

275-
expect(result.inputFixture.valid).toBe(true);
276-
expect(result.inputFixture.errors).toHaveLength(0);
275+
expect(result.fixtureInputTypes.valid).toBe(true);
276+
expect(result.fixtureInputTypes.errors).toHaveLength(0);
277277

278-
expect(result.inputQueryFixtureMatch.valid).toBe(true);
279-
expect(result.inputQueryFixtureMatch.errors).toHaveLength(0);
278+
expect(result.fixtureInputStructure.valid).toBe(true);
279+
expect(result.fixtureInputStructure.errors).toHaveLength(0);
280280

281-
expect(result.outputFixture.valid).toBe(true);
282-
expect(result.outputFixture.errors).toHaveLength(0);
281+
expect(result.fixtureOutput.valid).toBe(true);
282+
expect(result.fixtureOutput.errors).toHaveLength(0);
283283

284284
// Verify fixture has extracted variables
285285
expect(fixture.inputQueryVariables).toBeDefined();
@@ -305,7 +305,7 @@ describe('validateTestAssets', () => {
305305
expect(result.inputQuery.errors[0].message).toContain('Cannot query field "nonExistentField" on type "Item"');
306306
expect(result.inputQuery.errors[1].message).toContain('Cannot query field "invalidMetadataField" on type "Metadata"');
307307

308-
expect(result.inputQuery.valid && result.inputFixture.valid && result.inputQueryFixtureMatch.valid && result.outputFixture.valid).toBeFalsy();
308+
expect(result.inputQuery.valid && result.fixtureInputTypes.valid && result.fixtureInputStructure.valid && result.fixtureOutput.valid).toBeFalsy();
309309
});
310310
});
311311

@@ -321,9 +321,9 @@ describe('validateTestAssets', () => {
321321
resultParameterName: 'result'
322322
});
323323

324-
expect(result.inputQuery.valid && result.inputFixture.valid && result.inputQueryFixtureMatch.valid && result.outputFixture.valid).toBeFalsy();
325-
expect(result.outputFixture.valid).toBe(false);
326-
expect(result.outputFixture.errors.length).toBe(1);
324+
expect(result.inputQuery.valid && result.fixtureInputTypes.valid && result.fixtureInputStructure.valid && result.fixtureOutput.valid).toBeFalsy();
325+
expect(result.fixtureOutput.valid).toBe(false);
326+
expect(result.fixtureOutput.errors.length).toBe(1);
327327
});
328328
});
329329
});

0 commit comments

Comments
 (0)