github.com/drycc/workflow-cli@v1.5.3-0.20240322092846-d4ee25983af9/cmd/builds_test.go (about)

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