Skip to content

Commit 0d5356e

Browse files
committed
Consistent field name formatting in error messages
1 parent 098a1e8 commit 0d5356e

File tree

3 files changed

+59
-59
lines changed

3 files changed

+59
-59
lines changed

src/methods/validate-fixture-input.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ export function validateFixtureInput(
121121
if (fieldDefinition === undefined || fieldDefinition === null) {
122122
const currentPath = pathFromAncestors(ancestors);
123123
errors.push({
124-
message: `Cannot validate ${responseKey}: missing field definition`,
124+
message: `Cannot validate \`${responseKey}\`: missing field definition`,
125125
path: [...currentPath, responseKey],
126126
});
127127
return BREAK;
@@ -151,7 +151,7 @@ export function validateFixtureInput(
151151
)
152152
) {
153153
errors.push({
154-
message: `Missing expected fixture data for ${responseKey}`,
154+
message: `Missing expected fixture data for \`${responseKey}\``,
155155
path: [...currentPath, responseKey],
156156
});
157157
}
@@ -227,15 +227,15 @@ export function validateFixtureInput(
227227
// Unexpected type - defensive check that should never be reached
228228
else {
229229
errors.push({
230-
message: `Unexpected type, expected ${unwrappedFieldType}`,
230+
message: `Unexpected type, expected \`${unwrappedFieldType}\``,
231231
path: [...currentPath, responseKey],
232232
});
233233
}
234234
}
235235
// No type information - should not happen with valid query
236236
else {
237237
errors.push({
238-
message: `Cannot validate ${responseKey}: missing type information`,
238+
message: `Cannot validate \`${responseKey}\`: missing type information`,
239239
path: [...currentPath, responseKey],
240240
});
241241
}
@@ -313,7 +313,7 @@ export function validateFixtureInput(
313313
if (!hasTypename && fragmentSpreadCount > 1) {
314314
const currentPath = pathFromAncestors([...ancestors, parent!]);
315315
errors.push({
316-
message: `Missing __typename field for abstract type ${getNamedType(typeInfo.getType())?.name}`,
316+
message: `Missing \`__typename\` field for abstract type \`${getNamedType(typeInfo.getType())?.name}\``,
317317
path: currentPath,
318318
});
319319
return BREAK;
@@ -536,7 +536,7 @@ function checkForExtraFields(
536536
for (const fixtureField of fixtureFields) {
537537
if (!expectedForThisObject.has(fixtureField)) {
538538
errors.push({
539-
message: `Extra field "${fixtureField}" found in fixture data not in query`,
539+
message: `Extra field \`${fixtureField}\` found in fixture data not in query`,
540540
path: [...path, fixtureField],
541541
});
542542
}

test/methods/validate-fixture-input.test.ts

Lines changed: 48 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ describe("validateFixtureInput", () => {
255255
// - Detects missing __typename and BREAKs early
256256
expect(result.errors).toHaveLength(1);
257257
expect(result.errors[0]).toStrictEqual({
258-
message: "Missing __typename field for abstract type NestedInner",
258+
message: "Missing `__typename` field for abstract type `NestedInner`",
259259
path: ["data", "nested", "inner"],
260260
});
261261
});
@@ -648,15 +648,15 @@ describe("validateFixtureInput", () => {
648648
// So it conservatively expects all selected fields on non-empty objects
649649
expect(result.errors).toHaveLength(3);
650650
expect(result.errors[0]).toStrictEqual({
651-
message: "Missing expected fixture data for name",
651+
message: "Missing expected fixture data for `name`",
652652
path: ["data", "interfaceImplementers", 2, "name"],
653653
});
654654
expect(result.errors[1]).toStrictEqual({
655-
message: "Missing expected fixture data for description",
655+
message: "Missing expected fixture data for `description`",
656656
path: ["data", "interfaceImplementers", 1, "description"],
657657
});
658658
expect(result.errors[2]).toStrictEqual({
659-
message: "Missing expected fixture data for description",
659+
message: "Missing expected fixture data for `description`",
660660
path: ["data", "interfaceImplementers", 2, "description"],
661661
});
662662
});
@@ -1230,15 +1230,15 @@ describe("validateFixtureInput", () => {
12301230
const result = validateFixtureInput(queryAST, schema, fixtureInput);
12311231
expect(result.errors).toHaveLength(3);
12321232
expect(result.errors[0]).toStrictEqual({
1233-
message: "Missing expected fixture data for count",
1233+
message: "Missing expected fixture data for `count`",
12341234
path: ["data", "items", 0, "count"],
12351235
});
12361236
expect(result.errors[1]).toStrictEqual({
1237-
message: "Missing expected fixture data for details",
1237+
message: "Missing expected fixture data for `details`",
12381238
path: ["data", "items", 0, "details"],
12391239
});
12401240
expect(result.errors[2]).toStrictEqual({
1241-
message: "Missing expected fixture data for metadata",
1241+
message: "Missing expected fixture data for `metadata`",
12421242
path: ["data", "metadata"],
12431243
});
12441244
});
@@ -1270,7 +1270,7 @@ describe("validateFixtureInput", () => {
12701270
// Should detect that 'count' is not in the query
12711271
expect(result.errors).toHaveLength(1);
12721272
expect(result.errors[0]).toStrictEqual({
1273-
message: 'Extra field "count" found in fixture data not in query',
1273+
message: "Extra field `count` found in fixture data not in query",
12741274
path: ["data", "items", 0, "count"],
12751275
});
12761276
});
@@ -1321,11 +1321,11 @@ describe("validateFixtureInput", () => {
13211321
// Each alias is validated independently, so extra fields in each should be detected
13221322
expect(result.errors).toHaveLength(2);
13231323
expect(result.errors[0]).toStrictEqual({
1324-
message: 'Extra field "details" found in fixture data not in query',
1324+
message: "Extra field `details` found in fixture data not in query",
13251325
path: ["data", "firstItems", 0, "details"],
13261326
});
13271327
expect(result.errors[1]).toStrictEqual({
1328-
message: 'Extra field "count" found in fixture data not in query',
1328+
message: "Extra field `count` found in fixture data not in query",
13291329
path: ["data", "secondItems", 0, "count"],
13301330
});
13311331
});
@@ -1357,7 +1357,7 @@ describe("validateFixtureInput", () => {
13571357
// Should detect the version field since it wasn't selected in the query
13581358
expect(result.errors).toHaveLength(1);
13591359
expect(result.errors[0]).toStrictEqual({
1360-
message: 'Extra field "version" found in fixture data not in query',
1360+
message: "Extra field `version` found in fixture data not in query",
13611361
path: ["version"],
13621362
});
13631363
});
@@ -1485,40 +1485,40 @@ describe("validateFixtureInput", () => {
14851485
expect(result.errors).toHaveLength(9);
14861486
expect(result.errors[0]).toStrictEqual({
14871487
message:
1488-
'Extra field "extraDetailField" found in fixture data not in query',
1488+
"Extra field `extraDetailField` found in fixture data not in query",
14891489
path: ["data", "searchResults", 0, "details", "extraDetailField"],
14901490
}); // details (deepest)
14911491
expect(result.errors[1]).toStrictEqual({
1492-
message: 'Extra field "count" found in fixture data not in query',
1492+
message: "Extra field `count` found in fixture data not in query",
14931493
path: ["data", "searchResults", 0, "count"],
14941494
}); // Item
14951495
expect(result.errors[2]).toStrictEqual({
1496-
message: 'Extra field "phone" found in fixture data not in query',
1496+
message: "Extra field `phone` found in fixture data not in query",
14971497
path: ["data", "searchResults", 1, "phone"],
14981498
}); // Metadata
14991499
expect(result.errors[3]).toStrictEqual({
1500-
message: 'Extra field "description" found in fixture data not in query',
1500+
message: "Extra field `description` found in fixture data not in query",
15011501
path: ["data", "interfaceImplementers", 0, "description"],
15021502
}); // InterfaceImplementer1
15031503
expect(result.errors[4]).toStrictEqual({
1504-
message: 'Extra field "extraField" found in fixture data not in query',
1504+
message: "Extra field `extraField` found in fixture data not in query",
15051505
path: ["data", "interfaceImplementers", 1, "extraField"],
15061506
}); // InterfaceImplementer2
15071507
expect(result.errors[5]).toStrictEqual({
1508-
message: 'Extra field "value" found in fixture data not in query',
1508+
message: "Extra field `value` found in fixture data not in query",
15091509
path: ["data", "nested", 0, "inner", 0, "value"],
15101510
}); // NestedInnerA cross-contamination
15111511
expect(result.errors[6]).toStrictEqual({
1512-
message: 'Extra field "email" found in fixture data not in query',
1512+
message: "Extra field `email` found in fixture data not in query",
15131513
path: ["data", "nested", 0, "email"],
15141514
}); // NestedOuterA cross-contamination
15151515
expect(result.errors[7]).toStrictEqual({
1516-
message: 'Extra field "id" found in fixture data not in query',
1516+
message: "Extra field `id` found in fixture data not in query",
15171517
path: ["data", "nested", 1, "id"],
15181518
}); // NestedOuterB cross-contamination
15191519
expect(result.errors[8]).toStrictEqual({
15201520
message:
1521-
'Extra field "extraRootField" found in fixture data not in query',
1521+
"Extra field `extraRootField` found in fixture data not in query",
15221522
path: ["extraRootField"],
15231523
}); // root (last)
15241524
});
@@ -1562,11 +1562,11 @@ describe("validateFixtureInput", () => {
15621562
// Should detect extra fields in both union members
15631563
expect(result.errors).toHaveLength(2);
15641564
expect(result.errors[0]).toStrictEqual({
1565-
message: 'Extra field "count" found in fixture data not in query',
1565+
message: "Extra field `count` found in fixture data not in query",
15661566
path: ["data", "searchResults", 0, "count"],
15671567
});
15681568
expect(result.errors[1]).toStrictEqual({
1569-
message: 'Extra field "phone" found in fixture data not in query',
1569+
message: "Extra field `phone` found in fixture data not in query",
15701570
path: ["data", "searchResults", 1, "phone"],
15711571
});
15721572
});
@@ -1618,19 +1618,19 @@ describe("validateFixtureInput", () => {
16181618
// Metadata should NOT have id/count (those are Item fields)
16191619
expect(result.errors).toHaveLength(4);
16201620
expect(result.errors[0]).toStrictEqual({
1621-
message: 'Extra field "email" found in fixture data not in query',
1621+
message: "Extra field `email` found in fixture data not in query",
16221622
path: ["data", "searchResults", 0, "email"],
16231623
});
16241624
expect(result.errors[1]).toStrictEqual({
1625-
message: 'Extra field "phone" found in fixture data not in query',
1625+
message: "Extra field `phone` found in fixture data not in query",
16261626
path: ["data", "searchResults", 0, "phone"],
16271627
});
16281628
expect(result.errors[2]).toStrictEqual({
1629-
message: 'Extra field "id" found in fixture data not in query',
1629+
message: "Extra field `id` found in fixture data not in query",
16301630
path: ["data", "searchResults", 1, "id"],
16311631
});
16321632
expect(result.errors[3]).toStrictEqual({
1633-
message: 'Extra field "count" found in fixture data not in query',
1633+
message: "Extra field `count` found in fixture data not in query",
16341634
path: ["data", "searchResults", 1, "count"],
16351635
});
16361636
});
@@ -1691,27 +1691,27 @@ describe("validateFixtureInput", () => {
16911691
// - name, description, and extraField3 on InterfaceImplementer3 (doesn't implement HasName or HasDescription)
16921692
expect(result.errors).toHaveLength(6);
16931693
expect(result.errors[0]).toStrictEqual({
1694-
message: 'Extra field "extraField1" found in fixture data not in query',
1694+
message: "Extra field `extraField1` found in fixture data not in query",
16951695
path: ["data", "interfaceImplementers", 0, "extraField1"],
16961696
});
16971697
expect(result.errors[1]).toStrictEqual({
1698-
message: 'Extra field "description" found in fixture data not in query',
1698+
message: "Extra field `description` found in fixture data not in query",
16991699
path: ["data", "interfaceImplementers", 1, "description"],
17001700
});
17011701
expect(result.errors[2]).toStrictEqual({
1702-
message: 'Extra field "extraField2" found in fixture data not in query',
1702+
message: "Extra field `extraField2` found in fixture data not in query",
17031703
path: ["data", "interfaceImplementers", 1, "extraField2"],
17041704
});
17051705
expect(result.errors[3]).toStrictEqual({
1706-
message: 'Extra field "name" found in fixture data not in query',
1706+
message: "Extra field `name` found in fixture data not in query",
17071707
path: ["data", "interfaceImplementers", 2, "name"],
17081708
});
17091709
expect(result.errors[4]).toStrictEqual({
1710-
message: 'Extra field "description" found in fixture data not in query',
1710+
message: "Extra field `description` found in fixture data not in query",
17111711
path: ["data", "interfaceImplementers", 2, "description"],
17121712
});
17131713
expect(result.errors[5]).toStrictEqual({
1714-
message: 'Extra field "extraField3" found in fixture data not in query',
1714+
message: "Extra field `extraField3` found in fixture data not in query",
17151715
path: ["data", "interfaceImplementers", 2, "extraField3"],
17161716
});
17171717
});
@@ -1774,15 +1774,15 @@ describe("validateFixtureInput", () => {
17741774
// - id on NestedOuterB (outer level)
17751775
expect(result.errors).toHaveLength(3);
17761776
expect(result.errors[0]).toStrictEqual({
1777-
message: 'Extra field "value" found in fixture data not in query',
1777+
message: "Extra field `value` found in fixture data not in query",
17781778
path: ["data", "nested", 0, "inner", 0, "value"],
17791779
});
17801780
expect(result.errors[1]).toStrictEqual({
1781-
message: 'Extra field "email" found in fixture data not in query',
1781+
message: "Extra field `email` found in fixture data not in query",
17821782
path: ["data", "nested", 0, "email"],
17831783
});
17841784
expect(result.errors[2]).toStrictEqual({
1785-
message: 'Extra field "id" found in fixture data not in query',
1785+
message: "Extra field `id` found in fixture data not in query",
17861786
path: ["data", "nested", 1, "id"],
17871787
});
17881788
});
@@ -1842,27 +1842,27 @@ describe("validateFixtureInput", () => {
18421842
// - name and description on InterfaceImplementer3 (only id queried)
18431843
expect(result.errors).toHaveLength(6);
18441844
expect(result.errors[0]).toStrictEqual({
1845-
message: 'Extra field "description" found in fixture data not in query',
1845+
message: "Extra field `description` found in fixture data not in query",
18461846
path: ["data", "interfaceImplementers", 0, "description"],
18471847
});
18481848
expect(result.errors[1]).toStrictEqual({
1849-
message: 'Extra field "extraField1" found in fixture data not in query',
1849+
message: "Extra field `extraField1` found in fixture data not in query",
18501850
path: ["data", "interfaceImplementers", 0, "extraField1"],
18511851
});
18521852
expect(result.errors[2]).toStrictEqual({
1853-
message: 'Extra field "name" found in fixture data not in query',
1853+
message: "Extra field `name` found in fixture data not in query",
18541854
path: ["data", "interfaceImplementers", 1, "name"],
18551855
});
18561856
expect(result.errors[3]).toStrictEqual({
1857-
message: 'Extra field "extraField2" found in fixture data not in query',
1857+
message: "Extra field `extraField2` found in fixture data not in query",
18581858
path: ["data", "interfaceImplementers", 1, "extraField2"],
18591859
});
18601860
expect(result.errors[4]).toStrictEqual({
1861-
message: 'Extra field "name" found in fixture data not in query',
1861+
message: "Extra field `name` found in fixture data not in query",
18621862
path: ["data", "interfaceImplementers", 2, "name"],
18631863
});
18641864
expect(result.errors[5]).toStrictEqual({
1865-
message: 'Extra field "description" found in fixture data not in query',
1865+
message: "Extra field `description` found in fixture data not in query",
18661866
path: ["data", "interfaceImplementers", 2, "description"],
18671867
});
18681868
});
@@ -1958,7 +1958,7 @@ describe("validateFixtureInput", () => {
19581958
const result = validateFixtureInput(queryAST, schema, fixtureInput);
19591959
expect(result.errors).toHaveLength(1);
19601960
expect(result.errors[0]).toStrictEqual({
1961-
message: "Missing expected fixture data for metadata",
1961+
message: "Missing expected fixture data for `metadata`",
19621962
path: ["data", "metadata"],
19631963
});
19641964
});
@@ -2059,7 +2059,7 @@ describe("validateFixtureInput", () => {
20592059
// Should detect missing type information for the invalid field
20602060
expect(result.errors).toHaveLength(1);
20612061
expect(result.errors[0]).toStrictEqual({
2062-
message: "Cannot validate nonExistentField: missing field definition",
2062+
message: "Cannot validate `nonExistentField`: missing field definition",
20632063
path: ["data", "items", "nonExistentField"],
20642064
});
20652065
});
@@ -2093,11 +2093,11 @@ describe("validateFixtureInput", () => {
20932093
// Empty object {} is invalid in non-union context - missing required fields
20942094
expect(result.errors).toHaveLength(2);
20952095
expect(result.errors[0]).toStrictEqual({
2096-
message: "Missing expected fixture data for id",
2096+
message: "Missing expected fixture data for `id`",
20972097
path: ["data", "items", 1, "id"],
20982098
});
20992099
expect(result.errors[1]).toStrictEqual({
2100-
message: "Missing expected fixture data for count",
2100+
message: "Missing expected fixture data for `count`",
21012101
path: ["data", "items", 1, "count"],
21022102
});
21032103
});
@@ -2127,7 +2127,7 @@ describe("validateFixtureInput", () => {
21272127
// We're not discriminating between union members, so all fields are required
21282128
expect(result.errors).toHaveLength(1);
21292129
expect(result.errors[0]).toStrictEqual({
2130-
message: "Missing expected fixture data for price",
2130+
message: "Missing expected fixture data for `price`",
21312131
path: ["data", "purchasable", "price"],
21322132
});
21332133
});
@@ -2166,7 +2166,7 @@ describe("validateFixtureInput", () => {
21662166
// However, NO cascading field errors because all fragments select on same type
21672167
expect(result.errors).toHaveLength(1);
21682168
expect(result.errors[0]).toStrictEqual({
2169-
message: "Missing __typename field for abstract type SearchResult",
2169+
message: "Missing `__typename` field for abstract type `SearchResult`",
21702170
path: ["data", "searchResults"],
21712171
});
21722172
});
@@ -2210,7 +2210,7 @@ describe("validateFixtureInput", () => {
22102210
// Validator detects missing __typename for abstract type with 2+ fragments and BREAKs early
22112211
expect(result.errors).toHaveLength(1);
22122212
expect(result.errors[0]).toStrictEqual({
2213-
message: "Missing __typename field for abstract type SearchResult",
2213+
message: "Missing `__typename` field for abstract type `SearchResult`",
22142214
path: ["data", "searchResults"],
22152215
});
22162216
});

0 commit comments

Comments
 (0)