github.com/6543-forks/go-swagger@v0.26.0/generator/build_test.go (about)

     1  package generator_test
     2  
     3  import (
     4  	"bytes"
     5  	"io/ioutil"
     6  	"log"
     7  	"os"
     8  	"os/exec"
     9  	"path/filepath"
    10  	"strings"
    11  	"testing"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  	"github.com/stretchr/testify/require"
    15  
    16  	"github.com/go-swagger/go-swagger/cmd/swagger/commands/generate"
    17  	flags "github.com/jessevdk/go-flags"
    18  )
    19  
    20  const (
    21  	defaultAPIPackage    = "operations"
    22  	defaultClientPackage = "client"
    23  	defaultModelPackage  = "models"
    24  )
    25  
    26  func TestGenerateAndBuild(t *testing.T) {
    27  	defer func() {
    28  		log.SetOutput(os.Stdout)
    29  	}()
    30  
    31  	cases := map[string]struct {
    32  		spec string
    33  	}{
    34  		"issue 844": {
    35  			"../fixtures/bugs/844/swagger.json",
    36  		},
    37  		"issue 844 (with params)": {
    38  			"../fixtures/bugs/844/swagger-bis.json",
    39  		},
    40  		"issue 1216": {
    41  			"../fixtures/bugs/1216/swagger.yml",
    42  		},
    43  		"issue 2111": {
    44  			"../fixtures/bugs/2111/fixture-2111.yaml",
    45  		},
    46  		"issue 2278": {
    47  			"../fixtures/bugs/2278/fixture-2278.yaml",
    48  		},
    49  	}
    50  
    51  	for name, cas := range cases {
    52  		var captureLog bytes.Buffer
    53  		log.SetOutput(&captureLog)
    54  
    55  		t.Run(name, func(t *testing.T) {
    56  			spec := filepath.FromSlash(cas.spec)
    57  
    58  			generated, err := ioutil.TempDir(filepath.Dir(spec), "generated")
    59  			if err != nil {
    60  				t.Fatalf("TempDir()=%s", generated)
    61  			}
    62  			defer func() { _ = os.RemoveAll(generated) }()
    63  
    64  			err = newTestClient(spec, generated).Execute(nil)
    65  			require.NoErrorf(t, err, "Execute()=%s", err)
    66  
    67  			assert.Contains(t, strings.ToLower(captureLog.String()), "generation completed")
    68  
    69  			packages := filepath.Join(generated, "...")
    70  
    71  			p, err := exec.Command("go", "get", packages).CombinedOutput()
    72  			require.NoErrorf(t, err, "go get %s: %s\n%s", packages, err, p)
    73  
    74  			p, err = exec.Command("go", "build", packages).CombinedOutput()
    75  			require.NoErrorf(t, err, "go build %s: %s\n%s", packages, err, p)
    76  		})
    77  	}
    78  }
    79  
    80  func newTestClient(input, output string) *generate.Client {
    81  	c := &generate.Client{}
    82  	c.DefaultScheme = "http"
    83  	c.DefaultProduces = "application/json"
    84  	c.Shared.Spec = flags.Filename(input)
    85  	c.Shared.Target = flags.Filename(output)
    86  	c.Operations.APIPackage = defaultAPIPackage
    87  	c.Models.ModelPackage = defaultModelPackage
    88  	c.ClientPackage = defaultClientPackage
    89  	return c
    90  }