stash/vendor/github.com/99designs/gqlgen/TESTING.md
SmallCoccinelle 45f700d6ea
Support Go 1.18: Upgrade gqlgen to v0.17.2 (#2443)
* Upgrade gqlgen to v0.17.2

This enables builds on Go 1.18. github.com/vektah/gqlparser is upgraded
to the newest version too.

Getting this to work is a bit of a hazzle. I had to first remove
vendoring from the repository, perform the upgrade and then re-introduce
the vendor directory. I think gqlgens analysis went wrong for some
reason on the upgrade. It would seem a clean-room installation fixed it.

* Bump project to 1.18

* Update all packages, address gqlgenc breaking changes

* Let `go mod tidy` handle the go.mod file

* Upgrade linter to 1.45.2

* Introduce v1.45.2 of the linter

The linter now correctly warns on `strings.Title` because it isn't
unicode-aware. Fix this by using the suggested fix from x/text/cases
to produce unicode-aware strings.

The mapping isn't entirely 1-1 as this new approach has a larger iface:
it spans all of unicode rather than just ASCII. It coincides for ASCII
however, so things should be largely the same.

* Ready ourselves for errchkjson and contextcheck.

* Revert dockerfile golang version changes for now

Co-authored-by: Kermie <kermie@isinthe.house>
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2022-04-02 18:08:14 +11:00

1.1 KiB

How to write tests for gqlgen

Testing generated code is a little tricky, heres how its currently set up.

Testing responses from a server

There is a server in codegen/testserver that is generated as part of go generate ./..., and tests written against it.

There are also a bunch of tests in against the examples, feel free to take examples from there.

Testing the errors generated by the binary

These tests are really slow, because they need to run the whole codegen step. Use them very sparingly. If you can, find a way to unit test it instead.

Take a look at codegen/testserver/input_test.go for an example.

Testing introspection

Introspection is tested by diffing the output of graphql get-schema against an expected output.

Setting up the integration environment is a little tricky:

cd integration
go generate ./...
go run ./server/server.go

in another terminal

cd integration
npm install
./node_modules/.bin/graphql-codegen

will write the schema to integration/schema-fetched.graphql, compare that with schema-expected.graphql

CI will run this and fail the build if the two files dont match.