github.com/go-swagger/go-swagger@v0.31.0/generator/build_test.go (about)

     1  package generator_test
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"testing"
     7  
     8  	flags "github.com/jessevdk/go-flags"
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/go-swagger/go-swagger/cmd/swagger/commands/generate"
    12  	"github.com/go-swagger/go-swagger/generator/internal/gentest"
    13  )
    14  
    15  const (
    16  	defaultAPIPackage    = "operations"
    17  	defaultClientPackage = "client"
    18  	defaultModelPackage  = "models"
    19  )
    20  
    21  func TestGenerateAndBuild(t *testing.T) {
    22  	// This test generates and actually compiles the output
    23  	// of generated clients.
    24  	//
    25  	// We run this in parallel now. Therefore it is no more
    26  	// possible to assert the output on stdout.
    27  	//
    28  	// NOTE: test cases are randomized (map)
    29  	t.Parallel()
    30  	defer gentest.DiscardOutput()()
    31  
    32  	cases := map[string]struct {
    33  		spec string
    34  	}{
    35  		"issue 844": {
    36  			"../fixtures/bugs/844/swagger.json",
    37  		},
    38  		"issue 844 (with params)": {
    39  			"../fixtures/bugs/844/swagger-bis.json",
    40  		},
    41  		"issue 1216": {
    42  			"../fixtures/bugs/1216/swagger.yml",
    43  		},
    44  		"issue 2111": {
    45  			"../fixtures/bugs/2111/fixture-2111.yaml",
    46  		},
    47  		"issue 2278": {
    48  			"../fixtures/bugs/2278/fixture-2278.yaml",
    49  		},
    50  		"issue 2163": {
    51  			"../fixtures/enhancements/2163/fixture-2163.yaml",
    52  		},
    53  		"issue 1771": {
    54  			"../fixtures/enhancements/1771/fixture-1771.yaml",
    55  		},
    56  	}
    57  
    58  	t.Run("build client", func(t *testing.T) {
    59  		for name, toPin := range cases {
    60  			cas := toPin
    61  
    62  			t.Run(name, func(t *testing.T) {
    63  				t.Parallel()
    64  				spec := filepath.FromSlash(cas.spec)
    65  
    66  				generated, err := os.MkdirTemp(filepath.Dir(spec), "generated")
    67  				require.NoErrorf(t, err, "TempDir()=%s", generated)
    68  				t.Cleanup(func() { _ = os.RemoveAll(generated) })
    69  
    70  				require.NoErrorf(t, newTestClient(spec, generated).Execute(nil), "Execute()=%s", err)
    71  
    72  				packages := filepath.Join(generated, "...")
    73  
    74  				t.Run("should go get imports", gentest.GoExecInDir("", "get"))
    75  				t.Run("should build client", gentest.GoExecInDir("", "build", packages))
    76  			})
    77  		}
    78  	})
    79  }
    80  
    81  func newTestClient(input, output string) *generate.Client {
    82  	c := &generate.Client{}
    83  	c.DefaultScheme = "http"
    84  	c.DefaultProduces = "application/json"
    85  	c.Shared.Spec = flags.Filename(input)
    86  	c.Shared.Target = flags.Filename(output)
    87  	c.Operations.APIPackage = defaultAPIPackage
    88  	c.Models.ModelPackage = defaultModelPackage
    89  	c.ClientPackage = defaultClientPackage
    90  	return c
    91  }