Skip to content

Commit

Permalink
Simplify errors tests a bit so they don't all have to write a schema (K…
Browse files Browse the repository at this point in the history
…han#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
  • Loading branch information
benjaminjkraft authored May 15, 2022
1 parent 39cd158 commit d4ec64f
Show file tree
Hide file tree
Showing 10 changed files with 26 additions and 37 deletions.
3 changes: 2 additions & 1 deletion generate/convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,8 @@ func (g *generator) convertDefinition(
globalBinding, ok := g.Config.Bindings[def.Name]
if ok && options.Bind != "-" {
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; "+
"use `bind: \"-\"` to override it", def.Name)
}
Expand Down
31 changes: 22 additions & 9 deletions generate/generate_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package generate

import (
"errors"
"fmt"
"os"
"os/exec"
Expand Down Expand Up @@ -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
// .schema.graphql file, it asserts that the given query returns an error, and
// that that error's string-text matches the snapshot. The snapshotting is
// useful to ensure we don't accidentally make the text less readable, drop the
// line numbers, etc. We include both .go and .graphql tests, to make sure the
// line numbers work in both cases.
// For each .go or .graphql file in testdata/errors, it asserts that the given
// query returns an error, and that that error's string-text matches the
// snapshot. The snapshotting is useful to ensure we don't accidentally make
// the text less readable, drop the line numbers, etc. We include both .go and
// .graphql tests for some of the test cases, to make sure the line numbers
// 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) {
files, err := os.ReadDir(errorsDir)
if err != nil {
Expand All @@ -253,14 +255,25 @@ func TestGenerateErrors(t *testing.T) {
sourceFilename := file.Name()
if !strings.HasSuffix(sourceFilename, ".graphql") &&
!strings.HasSuffix(sourceFilename, ".go") ||
strings.HasSuffix(sourceFilename, ".schema.graphql") {
strings.HasSuffix(sourceFilename, ".schema.graphql") ||
sourceFilename == "schema.graphql" {
continue
}

baseFilename := strings.TrimSuffix(sourceFilename, filepath.Ext(sourceFilename))
schemaFilename := baseFilename + ".schema.graphql"
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) {
_, err := Generate(&Config{
Schema: []string{filepath.Join(errorsDir, schemaFilename)},
Expand Down

This file was deleted.

3 changes: 0 additions & 3 deletions generate/testdata/errors/ConflictingDirectives.schema.graphql

This file was deleted.

This file was deleted.

This file was deleted.

3 changes: 0 additions & 3 deletions generate/testdata/errors/InvalidQuery.schema.graphql

This file was deleted.

1 change: 0 additions & 1 deletion generate/testdata/errors/NoQuery.schema.graphql

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
type Query {
f: String
user: User
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit d4ec64f

Please sign in to comment.