github.com/engineyard/workflow-cli@v2.21.6+incompatible/cmd/builds_test.go (about)

     1  package cmd
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"io/ioutil"
     7  	"net/http"
     8  	"os"
     9  	"testing"
    10  
    11  	"github.com/arschles/assert"
    12  	"github.com/teamhephy/controller-sdk-go/api"
    13  	"github.com/teamhephy/workflow-cli/pkg/testutil"
    14  )
    15  
    16  func TestParseProcfile(t *testing.T) {
    17  	t.Parallel()
    18  
    19  	procMap, err := parseProcfile([]byte(`web: ./test
    20  foo: test --test
    21  `))
    22  	assert.NoErr(t, err)
    23  	assert.Equal(t, procMap, map[string]string{"web": "./test", "foo": "test --test"}, "map")
    24  
    25  	_, err = parseProcfile([]byte(`web: ./test
    26  foo
    27  `))
    28  
    29  	assert.ExistsErr(t, err, "yaml")
    30  }
    31  
    32  func TestBuildsList(t *testing.T) {
    33  	t.Parallel()
    34  	cf, server, err := testutil.NewTestServerAndClient()
    35  	if err != nil {
    36  		t.Fatal(err)
    37  	}
    38  	defer server.Close()
    39  	var b bytes.Buffer
    40  	cmdr := DeisCmd{WOut: &b, ConfigFile: cf}
    41  
    42  	server.Mux.HandleFunc("/v2/apps/foo/builds/", func(w http.ResponseWriter, r *http.Request) {
    43  		testutil.SetHeaders(w)
    44  		fmt.Fprintf(w, `{
    45  			"count": 2,
    46  			"next": null,
    47  			"previous": null,
    48  			"results": [
    49  				{
    50  					"app": "",
    51  					"created": "2014-01-01T00:00:00UTC",
    52  					"dockerfile": "",
    53  					"image": "",
    54  					"owner": "",
    55  					"procfile": {},
    56  					"sha": "",
    57  					"updated": "",
    58  					"uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
    59  				},
    60  				{
    61  					"app": "",
    62  					"created": "2014-01-05T00:00:00UTC",
    63  					"dockerfile": "",
    64  					"image": "",
    65  					"owner": "",
    66  					"procfile": {},
    67  					"sha": "",
    68  					"updated": "",
    69  					"uuid": "c4aed81c-d1ca-4ff1-ab89-d2151264e1a3"
    70  				}
    71  			]
    72  		}`)
    73  	})
    74  
    75  	err = cmdr.BuildsList("foo", -1)
    76  	assert.NoErr(t, err)
    77  	assert.Equal(t, b.String(), `=== foo Builds
    78  de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 2014-01-01T00:00:00UTC
    79  c4aed81c-d1ca-4ff1-ab89-d2151264e1a3 2014-01-05T00:00:00UTC
    80  `, "output")
    81  }
    82  
    83  func TestBuildsListLimit(t *testing.T) {
    84  	t.Parallel()
    85  	cf, server, err := testutil.NewTestServerAndClient()
    86  	if err != nil {
    87  		t.Fatal(err)
    88  	}
    89  	defer server.Close()
    90  	var b bytes.Buffer
    91  	cmdr := DeisCmd{WOut: &b, ConfigFile: cf}
    92  
    93  	server.Mux.HandleFunc("/v2/apps/foo/builds/", func(w http.ResponseWriter, r *http.Request) {
    94  		testutil.SetHeaders(w)
    95  		fmt.Fprintf(w, `{
    96              "count": 2,
    97              "next": null,
    98              "previous": null,
    99              "results": [
   100                  {
   101                      "app": "foo",
   102                      "created": "2014-01-01T00:00:00UTC",
   103                      "dockerfile": "",
   104                      "image": "",
   105                      "owner": "",
   106                      "procfile": {},
   107                      "sha": "",
   108                      "updated": "",
   109                      "uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
   110                  }
   111              ]
   112          }`)
   113  	})
   114  
   115  	err = cmdr.BuildsList("foo", 1)
   116  	assert.NoErr(t, err)
   117  	assert.Equal(t, b.String(), `=== foo Builds (1 of 2)
   118  de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 2014-01-01T00:00:00UTC
   119  `, "output")
   120  }
   121  
   122  func TestBuildsCreate(t *testing.T) {
   123  	t.Parallel()
   124  	cf, server, err := testutil.NewTestServerAndClient()
   125  	if err != nil {
   126  		t.Fatal(err)
   127  	}
   128  	defer server.Close()
   129  	var b bytes.Buffer
   130  	cmdr := DeisCmd{WOut: &b, ConfigFile: cf}
   131  
   132  	// Create a new temporary directory and change to it.
   133  	name, err := ioutil.TempDir("", "client")
   134  	assert.NoErr(t, err)
   135  	err = os.Chdir(name)
   136  	assert.NoErr(t, err)
   137  
   138  	server.Mux.HandleFunc("/v2/apps/enterprise/builds/", func(w http.ResponseWriter, r *http.Request) {
   139  		testutil.SetHeaders(w)
   140  		testutil.AssertBody(t, api.CreateBuildRequest{
   141  			Image: "ncc/1701:A",
   142  		}, r)
   143  		w.WriteHeader(http.StatusCreated)
   144  		fmt.Fprintf(w, "{}")
   145  	})
   146  
   147  	err = cmdr.BuildsCreate("enterprise", "ncc/1701:A", "")
   148  	assert.NoErr(t, err)
   149  	assert.Equal(t, testutil.StripProgress(b.String()), "Creating build... done\n", "output")
   150  
   151  	server.Mux.HandleFunc("/v2/apps/bradbury/builds/", func(w http.ResponseWriter, r *http.Request) {
   152  		testutil.SetHeaders(w)
   153  		testutil.AssertBody(t, api.CreateBuildRequest{
   154  			Image: "nx/72307:latest",
   155  			Procfile: map[string]string{
   156  				"web":  "./drive",
   157  				"warp": "./warp 8",
   158  			},
   159  		}, r)
   160  
   161  		w.WriteHeader(http.StatusCreated)
   162  		fmt.Fprintf(w, "{}")
   163  	})
   164  	b.Reset()
   165  
   166  	err = cmdr.BuildsCreate("bradbury", "nx/72307:latest", `web: ./drive
   167  warp: ./warp 8
   168  `)
   169  	assert.NoErr(t, err)
   170  	assert.Equal(t, testutil.StripProgress(b.String()), "Creating build... done\n", "output")
   171  
   172  	server.Mux.HandleFunc("/v2/apps/franklin/builds/", func(w http.ResponseWriter, r *http.Request) {
   173  		testutil.SetHeaders(w)
   174  		testutil.AssertBody(t, api.CreateBuildRequest{
   175  			Image: "nx/326:latest",
   176  		}, r)
   177  
   178  		w.WriteHeader(http.StatusCreated)
   179  		fmt.Fprintf(w, "{}")
   180  	})
   181  	b.Reset()
   182  
   183  	err = ioutil.WriteFile("Procfile", []byte(`web: ./drive
   184  warp: ./warp 8
   185  `), os.ModePerm)
   186  	assert.NoErr(t, err)
   187  
   188  	err = cmdr.BuildsCreate("franklin", "nx/326:latest", "")
   189  	assert.NoErr(t, err)
   190  	assert.Equal(t, testutil.StripProgress(b.String()), "Creating build... done\n", "output")
   191  
   192  }