Simplify errors tests a bit so they don't all have to write a schema (#196)
Some of the errors tests need to have their own schema, so the schema can do something weird (or even be entirely invalid!). But most can still share a schema. In this commit I have those indeed share a schema, to avoid having to have a bunch of copies of mostly the same schema. While doing so I noticed one error whose location wasn't very useful, and fixed it. Test plan: make check
This commit is contained in:
+2
-1
@@ -294,7 +294,8 @@ func (g *generator) convertDefinition(
|
|||||||
globalBinding, ok := g.Config.Bindings[def.Name]
|
globalBinding, ok := g.Config.Bindings[def.Name]
|
||||||
if ok && options.Bind != "-" {
|
if ok && options.Bind != "-" {
|
||||||
if options.TypeName != "" {
|
if options.TypeName != "" {
|
||||||
return nil, errorf(pos,
|
// The option position (in the query) is more useful here.
|
||||||
|
return nil, errorf(options.pos,
|
||||||
"typename option conflicts with global binding for %s; "+
|
"typename option conflicts with global binding for %s; "+
|
||||||
"use `bind: \"-\"` to override it", def.Name)
|
"use `bind: \"-\"` to override it", def.Name)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package generate
|
package generate
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
@@ -235,14 +236,15 @@ func TestGenerateWithConfig(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestGenerate is a snapshot-based test of error text.
|
// TestGenerateErrors is a snapshot-based test of error text.
|
||||||
//
|
//
|
||||||
// For each .go or .graphql file in testdata/errors, and corresponding
|
// For each .go or .graphql file in testdata/errors, it asserts that the given
|
||||||
// .schema.graphql file, it asserts that the given query returns an error, and
|
// query returns an error, and that that error's string-text matches the
|
||||||
// that that error's string-text matches the snapshot. The snapshotting is
|
// snapshot. The snapshotting is useful to ensure we don't accidentally make
|
||||||
// useful to ensure we don't accidentally make the text less readable, drop the
|
// the text less readable, drop the line numbers, etc. We include both .go and
|
||||||
// line numbers, etc. We include both .go and .graphql tests, to make sure the
|
// .graphql tests for some of the test cases, to make sure the line numbers
|
||||||
// line numbers work in both cases.
|
// work in both cases. Tests may include a .schema.graphql file of their own,
|
||||||
|
// or use the shared schema.graphql in the same directory for convenience.
|
||||||
func TestGenerateErrors(t *testing.T) {
|
func TestGenerateErrors(t *testing.T) {
|
||||||
files, err := os.ReadDir(errorsDir)
|
files, err := os.ReadDir(errorsDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -253,14 +255,25 @@ func TestGenerateErrors(t *testing.T) {
|
|||||||
sourceFilename := file.Name()
|
sourceFilename := file.Name()
|
||||||
if !strings.HasSuffix(sourceFilename, ".graphql") &&
|
if !strings.HasSuffix(sourceFilename, ".graphql") &&
|
||||||
!strings.HasSuffix(sourceFilename, ".go") ||
|
!strings.HasSuffix(sourceFilename, ".go") ||
|
||||||
strings.HasSuffix(sourceFilename, ".schema.graphql") {
|
strings.HasSuffix(sourceFilename, ".schema.graphql") ||
|
||||||
|
sourceFilename == "schema.graphql" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
baseFilename := strings.TrimSuffix(sourceFilename, filepath.Ext(sourceFilename))
|
baseFilename := strings.TrimSuffix(sourceFilename, filepath.Ext(sourceFilename))
|
||||||
schemaFilename := baseFilename + ".schema.graphql"
|
|
||||||
testFilename := strings.ReplaceAll(sourceFilename, ".", "/")
|
testFilename := strings.ReplaceAll(sourceFilename, ".", "/")
|
||||||
|
|
||||||
|
// Schema is either <base>.schema.graphql, or <dir>/schema.graphql if
|
||||||
|
// that doesn't exist.
|
||||||
|
schemaFilename := baseFilename + ".schema.graphql"
|
||||||
|
if _, err := os.Stat(filepath.Join(errorsDir, schemaFilename)); err != nil {
|
||||||
|
if errors.Is(err, os.ErrNotExist) {
|
||||||
|
schemaFilename = "schema.graphql"
|
||||||
|
} else {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
t.Run(testFilename, func(t *testing.T) {
|
t.Run(testFilename, func(t *testing.T) {
|
||||||
_, err := Generate(&Config{
|
_, err := Generate(&Config{
|
||||||
Schema: []string{filepath.Join(errorsDir, schemaFilename)},
|
Schema: []string{filepath.Join(errorsDir, schemaFilename)},
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
type Query {
|
|
||||||
f: String
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
type Query {
|
|
||||||
f: String
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
type Query {
|
|
||||||
user: User
|
|
||||||
}
|
|
||||||
|
|
||||||
type User {
|
|
||||||
id: ID!
|
|
||||||
name: String!
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
type Query {
|
|
||||||
user: User
|
|
||||||
}
|
|
||||||
|
|
||||||
type User {
|
|
||||||
id: ID!
|
|
||||||
name: String!
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
type Query {
|
|
||||||
f: String
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
type Query { f: String }
|
|
||||||
+1
@@ -1,4 +1,5 @@
|
|||||||
type Query {
|
type Query {
|
||||||
|
f: String
|
||||||
user: User
|
user: User
|
||||||
}
|
}
|
||||||
|
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
testdata/errors/ConflictingTypeNameAndGlobalBind.schema.graphql:8: typename option conflicts with global binding for ValidScalar; use `bind: "-"` to override it
|
testdata/errors/ConflictingTypeNameAndGlobalBind.graphql:4: typename option conflicts with global binding for ValidScalar; use `bind: "-"` to override it
|
||||||
|
|||||||
Reference in New Issue
Block a user