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 }