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  }