github.com/drycc/workflow-cli@v1.5.3-0.20240322092846-d4ee25983af9/cmd/releases_test.go (about) 1 package cmd 2 3 import ( 4 "bytes" 5 "fmt" 6 "io" 7 "net/http" 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 TestReleasesList(t *testing.T) { 16 t.Parallel() 17 cf, server, err := testutil.NewTestServerAndClient() 18 if err != nil { 19 t.Fatal(err) 20 } 21 defer server.Close() 22 var b bytes.Buffer 23 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 24 25 server.Mux.HandleFunc("/v2/apps/numenor/releases/", func(w http.ResponseWriter, _ *http.Request) { 26 testutil.SetHeaders(w) 27 fmt.Fprintf(w, `{ 28 "count": 2, 29 "next": null, 30 "previous": null, 31 "results": [ 32 { 33 "uuid": "c4aed81c-d1ca-4ff1-ab89-d2151264e1a3", 34 "app": "numenor", 35 "owner": "nazgul", 36 "created": "2016-08-22T17:40:16Z", 37 "updated": "2016-08-22T17:40:16Z", 38 "version": 2, 39 "summary": "khamul added ANGMAR", 40 "config": "3bb816b1-4fde-4b06-8afe-acd12f58a266", 41 "build": null 42 }, 43 { 44 "app": "numenor", 45 "build": null, 46 "config": "95bd6dea-1685-4f78-a03d-fd7270b058d1", 47 "created": "2014-01-01T00:00:00UTC", 48 "owner": "nazgul", 49 "summary": "nazgul created initial release", 50 "updated": "2014-01-01T00:00:00UTC", 51 "uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75", 52 "version": 1 53 } 54 ] 55 }`) 56 }) 57 58 err = cmdr.ReleasesList("numenor", -1) 59 assert.NoError(t, err) 60 assert.Equal(t, b.String(), `UUID OWNER VERSION CREATED SUMMARY 61 c4aed81c-d1ca-4ff1-ab89-d2151264e1a3 nazgul v2 2016-08-22T17:40:16Z khamul added ANGMAR 62 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 nazgul v1 2014-01-01T00:00:00UTC nazgul created initial release 63 `, "output") 64 } 65 66 func TestReleasesListLimit(t *testing.T) { 67 t.Parallel() 68 cf, server, err := testutil.NewTestServerAndClient() 69 if err != nil { 70 t.Fatal(err) 71 } 72 defer server.Close() 73 var b bytes.Buffer 74 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 75 76 server.Mux.HandleFunc("/v2/apps/numenor/releases/", func(w http.ResponseWriter, _ *http.Request) { 77 testutil.SetHeaders(w) 78 fmt.Fprintf(w, `{ 79 "count": 2, 80 "next": null, 81 "previous": null, 82 "results": [ 83 { 84 "uuid": "c4aed81c-d1ca-4ff1-ab89-d2151264e1a3", 85 "app": "numenor", 86 "owner": "nazgul", 87 "created": "2016-08-22T17:40:16Z", 88 "updated": "2016-08-22T17:40:16Z", 89 "version": 2, 90 "summary": "khamul added ANGMAR", 91 "config": "3bb816b1-4fde-4b06-8afe-acd12f58a266", 92 "build": null 93 } 94 ] 95 }`) 96 }) 97 98 err = cmdr.ReleasesList("numenor", 1) 99 assert.NoError(t, err) 100 assert.Equal(t, b.String(), `UUID OWNER VERSION CREATED SUMMARY 101 c4aed81c-d1ca-4ff1-ab89-d2151264e1a3 nazgul v2 2016-08-22T17:40:16Z khamul added ANGMAR 102 `, "output") 103 } 104 105 func TestReleasesInfo(t *testing.T) { 106 t.Parallel() 107 cf, server, err := testutil.NewTestServerAndClient() 108 if err != nil { 109 t.Fatal(err) 110 } 111 defer server.Close() 112 var b bytes.Buffer 113 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 114 115 server.Mux.HandleFunc("/v2/apps/numenor/releases/v2/", func(w http.ResponseWriter, _ *http.Request) { 116 testutil.SetHeaders(w) 117 fmt.Fprintf(w, `{ 118 "uuid": "c4aed81c-d1ca-4ff1-ab89-d2151264e1a3", 119 "app": "numenor", 120 "owner": "nazgul", 121 "created": "2016-08-22T17:40:16Z", 122 "updated": "2016-08-22T17:40:16Z", 123 "version": 2, 124 "summary": "khamul added ANGMAR", 125 "config": "3bb816b1-4fde-4b06-8afe-acd12f58a266", 126 "build": null 127 }`) 128 }) 129 130 err = cmdr.ReleasesInfo("numenor", 2) 131 assert.NoError(t, err) 132 assert.Equal(t, b.String(), `App: numenor 133 UUID: c4aed81c-d1ca-4ff1-ab89-d2151264e1a3 134 Owner: nazgul 135 Build: 136 Config: 3bb816b1-4fde-4b06-8afe-acd12f58a266 137 Created: 2016-08-22T17:40:16Z 138 Updated: 2016-08-22T17:40:16Z 139 Summary: khamul added ANGMAR 140 Version: v2 141 `, "output") 142 } 143 144 func TestReleasesRollback(t *testing.T) { 145 t.Parallel() 146 cf, server, err := testutil.NewTestServerAndClient() 147 if err != nil { 148 t.Fatal(err) 149 } 150 defer server.Close() 151 var b bytes.Buffer 152 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 153 154 server.Mux.HandleFunc("/v2/apps/numenor/releases/rollback/", func(w http.ResponseWriter, r *http.Request) { 155 testutil.SetHeaders(w) 156 body, err := io.ReadAll(r.Body) 157 if err != nil { 158 t.Fatal(err) 159 } 160 161 assert.Equal(t, body, []byte{}, "body") 162 w.WriteHeader(http.StatusCreated) 163 fmt.Fprintf(w, `{"version": 5}`) 164 }) 165 166 err = cmdr.ReleasesRollback("numenor", -1) 167 assert.NoError(t, err) 168 assert.Equal(t, testutil.StripProgress(b.String()), "Rolling back one release... done, v5\n", "output") 169 170 server.Mux.HandleFunc("/v2/apps/angmar/releases/rollback/", func(w http.ResponseWriter, r *http.Request) { 171 testutil.SetHeaders(w) 172 testutil.AssertBody(t, api.ReleaseRollback{Version: 3}, r) 173 w.WriteHeader(http.StatusCreated) 174 fmt.Fprintf(w, `{"version": 3}`) 175 }) 176 177 b.Reset() 178 179 err = cmdr.ReleasesRollback("angmar", 3) 180 assert.NoError(t, err) 181 assert.Equal(t, testutil.StripProgress(b.String()), "Rolling back to v3... done, v3\n", "output") 182 }