Skip to content

Commit

Permalink
Imporve test cases for init and generate
Browse files Browse the repository at this point in the history
  • Loading branch information
ipfans committed Jan 17, 2022
1 parent 811408b commit b8c3cc6
Show file tree
Hide file tree
Showing 6 changed files with 179 additions and 0 deletions.
52 changes: 52 additions & 0 deletions api/generate_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package api

import (
"os"
"path"
"testing"

"github.com/99designs/gqlgen/codegen/config"
"github.com/stretchr/testify/require"
)

func cleanup(workDir string) {
_ = os.Remove(path.Join(workDir, "server.go"))
_ = os.RemoveAll(path.Join(workDir, "graph", "generated"))
_ = os.Remove(path.Join(workDir, "graph", "resolver.go"))
_ = os.Remove(path.Join(workDir, "graph", "schema.resolvers.go"))
_ = os.Remove(path.Join(workDir, "graph", "model", "models_gen.go"))
}

func TestGenerate(t *testing.T) {
wd, _ := os.Getwd()
type args struct {
workDir string
}
tests := []struct {
name string
args args
wantErr bool
}{
{
name: "default",
args: args{
workDir: path.Join(wd, "testdata", "default"),
},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
defer func() {
cleanup(tt.args.workDir)
_ = os.Chdir(wd)
}()
_ = os.Chdir(tt.args.workDir)
cfg, err := config.LoadConfigFromDefaultLocations()
require.Nil(t, err, "failed to load config")
if err := Generate(cfg); (err != nil) != tt.wantErr {
t.Errorf("Generate() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
56 changes: 56 additions & 0 deletions api/testdata/default/gqlgen.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Where are all the schema files located? globs are supported eg src/**/*.graphqls
schema:
- graph/*.graphqls

# Where should the generated server code go?
exec:
filename: graph/generated/generated.go
package: generated

# Uncomment to enable federation
# federation:
# filename: graph/generated/federation.go
# package: generated

# Where should any generated models go?
model:
filename: graph/model/models_gen.go
package: model

# Where should the resolver implementations go?
resolver:
layout: follow-schema
dir: graph
package: graph

# Optional: turn on use `gqlgen:"fieldName"` tags in your models
# struct_tag: json

# Optional: turn on to use []Thing instead of []*Thing
# omit_slice_element_pointers: false

# Optional: set to speed up generation time by not performing a final validation pass.
# skip_validation: true

# gqlgen will search for any type names in the schema in these go packages
# if they match it will use them, otherwise it will generate them.
autobind:
- "github.com/99designs/gqlgen/api/testdata/default/graph/model"

# This section declares type mapping between the GraphQL and go type systems
#
# The first line in each type will be used as defaults for resolver arguments and
# modelgen, the others will be allowed when binding to fields. Configure them to
# your liking
models:
ID:
model:
- github.com/99designs/gqlgen/graphql.ID
- github.com/99designs/gqlgen/graphql.Int
- github.com/99designs/gqlgen/graphql.Int64
- github.com/99designs/gqlgen/graphql.Int32
Int:
model:
- github.com/99designs/gqlgen/graphql.Int
- github.com/99designs/gqlgen/graphql.Int64
- github.com/99designs/gqlgen/graphql.Int32
1 change: 1 addition & 0 deletions api/testdata/default/graph/model/doc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package model
28 changes: 28 additions & 0 deletions api/testdata/default/graph/schema.graphqls
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# GraphQL schema example
#
# https://gqlgen.com/getting-started/

type Todo {
id: ID!
text: String!
done: Boolean!
user: User!
}

type User {
id: ID!
name: String!
}

type Query {
todos: [Todo!]!
}

input NewTodo {
text: String!
userId: String!
}

type Mutation {
createTodo(input: NewTodo!): Todo!
}
42 changes: 42 additions & 0 deletions cmd/init_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package cmd

import (
"os"
"path"
"testing"

"github.com/stretchr/testify/require"
"github.com/urfave/cli/v2"
)

func cleanupGenerate() {
// remove generated files
_ = os.Remove("gqlgen.yml")
_ = os.Remove("server.go")
_ = os.RemoveAll("graph")
}

func TestInitCmd(t *testing.T) {
// setup test dir
wd, _ := os.Getwd()
testpath := path.Join(wd, "testdata", "init")
defer func() {
// remove generated files
cleanupGenerate()
_ = os.Chdir(wd)
}()
_ = os.Chdir(testpath)

// Should ok if dir is empty
app := cli.NewApp()
app.Commands = []*cli.Command{initCmd}
args := os.Args[0:1]
args = append(args, "init")
err := app.Run(args)
require.Nil(t, err)

// Should fail if dir is not empty, e.g. gqlgen.yml exists
err = app.Run(args)
require.NotNil(t, err)
require.Equal(t, "gqlgen.yml already exists", err.Error())
}
Empty file added cmd/testdata/init/.keep
Empty file.

0 comments on commit b8c3cc6

Please sign in to comment.