github.com/maeglindeveloper/gqlgen@v0.13.1-0.20210413081235-57808b12a0a0/internal/code/packages_test.go (about) 1 package code 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestPackages(t *testing.T) { 11 t.Run("name for existing package does not load again", func(t *testing.T) { 12 p := initialState(t) 13 require.Equal(t, "a", p.NameForPackage("github.com/99designs/gqlgen/internal/code/testdata/a")) 14 require.Equal(t, 1, p.numLoadCalls) 15 }) 16 17 t.Run("name for unknown package makes name only load", func(t *testing.T) { 18 p := initialState(t) 19 require.Equal(t, "c", p.NameForPackage("github.com/99designs/gqlgen/internal/code/testdata/c")) 20 require.Equal(t, 1, p.numLoadCalls) 21 require.Equal(t, 1, p.numNameCalls) 22 }) 23 24 t.Run("evicting a package causes it to load again", func(t *testing.T) { 25 p := initialState(t) 26 p.Evict("github.com/99designs/gqlgen/internal/code/testdata/b") 27 require.Equal(t, "a", p.Load("github.com/99designs/gqlgen/internal/code/testdata/a").Name) 28 require.Equal(t, 1, p.numLoadCalls) 29 require.Equal(t, "b", p.Load("github.com/99designs/gqlgen/internal/code/testdata/b").Name) 30 require.Equal(t, 2, p.numLoadCalls) 31 }) 32 33 t.Run("evicting a package also evicts its dependencies", func(t *testing.T) { 34 p := initialState(t) 35 p.Evict("github.com/99designs/gqlgen/internal/code/testdata/a") 36 require.Equal(t, "a", p.Load("github.com/99designs/gqlgen/internal/code/testdata/a").Name) 37 require.Equal(t, 2, p.numLoadCalls) 38 require.Equal(t, "b", p.Load("github.com/99designs/gqlgen/internal/code/testdata/b").Name) 39 require.Equal(t, 3, p.numLoadCalls) 40 }) 41 } 42 43 func TestNameForPackage(t *testing.T) { 44 var p Packages 45 46 assert.Equal(t, "api", p.NameForPackage("github.com/99designs/gqlgen/api")) 47 48 // does not contain go code, should still give a valid name 49 assert.Equal(t, "docs", p.NameForPackage("github.com/99designs/gqlgen/docs")) 50 assert.Equal(t, "github_com", p.NameForPackage("github.com")) 51 } 52 53 func initialState(t *testing.T) *Packages { 54 p := &Packages{} 55 pkgs := p.LoadAll( 56 "github.com/99designs/gqlgen/internal/code/testdata/a", 57 "github.com/99designs/gqlgen/internal/code/testdata/b", 58 ) 59 require.Nil(t, p.Errors()) 60 61 require.Equal(t, 1, p.numLoadCalls) 62 require.Equal(t, 0, p.numNameCalls) 63 require.Equal(t, "a", pkgs[0].Name) 64 require.Equal(t, "b", pkgs[1].Name) 65 return p 66 }