github.com/emreu/go-swagger@v0.22.1/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  
    15  	"github.com/go-swagger/go-swagger/cmd/swagger/commands/generate"
    16  	flags "github.com/jessevdk/go-flags"
    17  )
    18  
    19  const (
    20  	defaultAPIPackage    = "operations"
    21  	defaultClientPackage = "client"
    22  	defaultModelPackage  = "models"
    23  	defaultServerPackage = "restapi"
    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  	}
    44  
    45  	for name, cas := range cases {
    46  		var captureLog bytes.Buffer
    47  		log.SetOutput(&captureLog)
    48  
    49  		t.Run(name, func(t *testing.T) {
    50  			spec := filepath.FromSlash(cas.spec)
    51  
    52  			generated, err := ioutil.TempDir(filepath.Dir(spec), "generated")
    53  			if err != nil {
    54  				t.Fatalf("TempDir()=%s", generated)
    55  			}
    56  			defer func() { _ = os.RemoveAll(generated) }()
    57  
    58  			err = newTestClient(spec, generated).Execute(nil)
    59  			if err != nil {
    60  				t.Fatalf("Execute()=%s", err)
    61  			}
    62  
    63  			//fmt.Println(captureLog.String())
    64  			assert.Contains(t, strings.ToLower(captureLog.String()), "generation completed")
    65  
    66  			packages := filepath.Join(generated, "...")
    67  
    68  			if p, err := exec.Command("go", "get", packages).CombinedOutput(); err != nil {
    69  				t.Fatalf("go get %s: %s\n%s", packages, err, p)
    70  			}
    71  
    72  			if p, err := exec.Command("go", "build", packages).CombinedOutput(); err != nil {
    73  				t.Fatalf("go build %s: %s\n%s", packages, err, p)
    74  			}
    75  		})
    76  	}
    77  }
    78  
    79  func newTestClient(input, output string) *generate.Client {
    80  	c := &generate.Client{
    81  		DefaultScheme:   "http",
    82  		DefaultProduces: "application/json",
    83  	}
    84  	c.Spec = flags.Filename(input)
    85  	c.Target = flags.Filename(output)
    86  	c.APIPackage = defaultAPIPackage
    87  	c.ModelPackage = defaultModelPackage
    88  	c.ServerPackage = defaultServerPackage
    89  	c.ClientPackage = defaultClientPackage
    90  	return c
    91  }