github.com/kerryoscer/gqlgen@v0.17.29/plugin/resolvergen/resolver_test.go (about)

     1  package resolvergen
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"syscall"
     7  	"testing"
     8  
     9  	"github.com/kerryoscer/gqlgen/codegen"
    10  	"github.com/kerryoscer/gqlgen/codegen/config"
    11  	"github.com/stretchr/testify/require"
    12  	"golang.org/x/tools/go/packages"
    13  )
    14  
    15  func TestLayoutSingleFile(t *testing.T) {
    16  	_ = syscall.Unlink("testdata/singlefile/out/resolver.go")
    17  
    18  	cfg, err := config.LoadConfig("testdata/singlefile/gqlgen.yml")
    19  	require.NoError(t, err)
    20  	p := Plugin{}
    21  
    22  	require.NoError(t, cfg.Init())
    23  
    24  	data, err := codegen.BuildData(cfg)
    25  	if err != nil {
    26  		panic(err)
    27  	}
    28  
    29  	require.NoError(t, p.GenerateCode(data))
    30  	assertNoErrors(t, "github.com/kerryoscer/gqlgen/plugin/resolvergen/testdata/singlefile/out")
    31  }
    32  
    33  func TestLayoutFollowSchema(t *testing.T) {
    34  	testFollowSchemaPersistence(t, "testdata/followschema")
    35  
    36  	b, err := os.ReadFile("testdata/followschema/out/schema.resolvers.go")
    37  	require.NoError(t, err)
    38  	source := string(b)
    39  
    40  	require.Contains(t, source, "(_ *customresolver.Resolver, err error)")
    41  	require.Contains(t, source, "// Named return values are supported.")
    42  	require.Contains(t, source, "// CustomerResolverType.Name implementation")
    43  	require.Contains(t, source, "// AUserHelperFunction implementation")
    44  }
    45  
    46  func TestLayoutFollowSchemaWithCustomFilename(t *testing.T) {
    47  	testFollowSchemaPersistence(t, "testdata/filetemplate")
    48  
    49  	b, err := os.ReadFile("testdata/filetemplate/out/schema.custom.go")
    50  	require.NoError(t, err)
    51  	source := string(b)
    52  
    53  	require.Contains(t, source, "// CustomerResolverType.Resolver implementation")
    54  	require.Contains(t, source, "// CustomerResolverType.Name implementation")
    55  	require.Contains(t, source, "// AUserHelperFunction implementation")
    56  }
    57  
    58  func TestLayoutInvalidModelPath(t *testing.T) {
    59  	cfg, err := config.LoadConfig("testdata/invalid_model_path/gqlgen.yml")
    60  	require.NoError(t, err)
    61  
    62  	require.NoError(t, cfg.Init())
    63  
    64  	_, err = codegen.BuildData(cfg)
    65  	require.Error(t, err)
    66  }
    67  
    68  func testFollowSchemaPersistence(t *testing.T, dir string) {
    69  	_ = syscall.Unlink(dir + "/out/resolver.go")
    70  
    71  	cfg, err := config.LoadConfig(dir + "/gqlgen.yml")
    72  	require.NoError(t, err)
    73  	p := Plugin{}
    74  
    75  	require.NoError(t, cfg.Init())
    76  
    77  	data, err := codegen.BuildData(cfg)
    78  	if err != nil {
    79  		panic(err)
    80  	}
    81  
    82  	require.NoError(t, p.GenerateCode(data))
    83  	assertNoErrors(t, "github.com/kerryoscer/gqlgen/plugin/resolvergen/"+dir+"/out")
    84  }
    85  
    86  func assertNoErrors(t *testing.T, pkg string) {
    87  	pkgs, err := packages.Load(&packages.Config{
    88  		Mode: packages.NeedName |
    89  			packages.NeedFiles |
    90  			packages.NeedCompiledGoFiles |
    91  			packages.NeedImports |
    92  			packages.NeedTypes |
    93  			packages.NeedTypesSizes,
    94  	}, pkg)
    95  	if err != nil {
    96  		panic(err)
    97  	}
    98  
    99  	hasErrors := false
   100  	for _, pkg := range pkgs {
   101  		for _, err := range pkg.Errors {
   102  			hasErrors = true
   103  			fmt.Println(err.Pos + ":" + err.Msg)
   104  		}
   105  	}
   106  	if hasErrors {
   107  		t.Fatal("see compilation errors above")
   108  	}
   109  }