github.com/jcarley/cli@v0.0.0-20180201210820-966d90434c30/commands/files/download_test.go (about)

     1  package files
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"os"
     7  	"testing"
     8  
     9  	"github.com/daticahealth/cli/commands/services"
    10  	"github.com/daticahealth/cli/test"
    11  )
    12  
    13  const fileContents = "text"
    14  
    15  var downloadTests = []struct {
    16  	svcName   string
    17  	fileName  string
    18  	output    string
    19  	force     bool
    20  	expectErr bool
    21  }{
    22  	{test.SvcLabel, fileName, "", false, false},
    23  	{test.SvcLabel, fileName, "", true, false},
    24  	{test.SvcLabel, fileName, "output.txt", true, false},
    25  	{test.SvcLabel, "invalid-file", "", false, true},
    26  	{"invalid-svc", fileName, "", false, true},
    27  }
    28  
    29  func TestDownload(t *testing.T) {
    30  	os.Remove("output.txt")
    31  	mux, server, baseURL := test.Setup()
    32  	defer test.Teardown(server)
    33  	settings := test.GetSettings(baseURL.String())
    34  	mux.HandleFunc("/environments/"+test.EnvID+"/services",
    35  		func(w http.ResponseWriter, r *http.Request) {
    36  			test.AssertEquals(t, r.Method, "GET")
    37  			fmt.Fprint(w, fmt.Sprintf(`[{"id":"%s","label":"%s"}]`, test.SvcID, test.SvcLabel))
    38  		},
    39  	)
    40  	mux.HandleFunc("/environments/"+test.EnvID+"/services/"+test.SvcID+"/files",
    41  		func(w http.ResponseWriter, r *http.Request) {
    42  			test.AssertEquals(t, r.Method, "GET")
    43  			fmt.Fprint(w, fmt.Sprintf(`[{"id":1,"name":"%s"}]`, fileName))
    44  		},
    45  	)
    46  	mux.HandleFunc("/environments/"+test.EnvID+"/services/"+test.SvcID+"/files/1",
    47  		func(w http.ResponseWriter, r *http.Request) {
    48  			test.AssertEquals(t, r.Method, "GET")
    49  			fmt.Fprint(w, fmt.Sprintf(`{"id":1,"name":"%s","contents":"%s"}`, fileName, fileContents))
    50  		},
    51  	)
    52  
    53  	for _, data := range downloadTests {
    54  		t.Logf("Data: %+v", data)
    55  
    56  		// test
    57  		err := CmdDownload(data.svcName, data.fileName, data.output, data.force, New(settings), services.New(settings))
    58  
    59  		// assert
    60  		if err != nil != data.expectErr {
    61  			t.Errorf("Unexpected error: %s", err)
    62  			continue
    63  		}
    64  	}
    65  	os.Remove("output.txt")
    66  }
    67  
    68  func TestDownloadForce(t *testing.T) {
    69  	os.Remove("output.txt")
    70  	mux, server, baseURL := test.Setup()
    71  	defer test.Teardown(server)
    72  	settings := test.GetSettings(baseURL.String())
    73  	mux.HandleFunc("/environments/"+test.EnvID+"/services",
    74  		func(w http.ResponseWriter, r *http.Request) {
    75  			test.AssertEquals(t, r.Method, "GET")
    76  			fmt.Fprint(w, fmt.Sprintf(`[{"id":"%s","label":"%s"}]`, test.SvcID, test.SvcLabel))
    77  		},
    78  	)
    79  	mux.HandleFunc("/environments/"+test.EnvID+"/services/"+test.SvcID+"/files",
    80  		func(w http.ResponseWriter, r *http.Request) {
    81  			test.AssertEquals(t, r.Method, "GET")
    82  			fmt.Fprint(w, fmt.Sprintf(`[{"id":1,"name":"%s"}]`, fileName))
    83  		},
    84  	)
    85  	mux.HandleFunc("/environments/"+test.EnvID+"/services/"+test.SvcID+"/files/1",
    86  		func(w http.ResponseWriter, r *http.Request) {
    87  			test.AssertEquals(t, r.Method, "GET")
    88  			fmt.Fprint(w, fmt.Sprintf(`{"id":1,"name":"%s","contents":"%s"}`, fileName, fileContents))
    89  		},
    90  	)
    91  
    92  	err := CmdDownload(test.SvcLabel, fileName, "output.txt", false, New(settings), services.New(settings))
    93  	if err != nil {
    94  		t.Fatalf("Unexpected error: %s", err)
    95  	}
    96  
    97  	err = CmdDownload(test.SvcLabel, fileName, "output.txt", false, New(settings), services.New(settings))
    98  	if err == nil {
    99  		t.Fatal("Expected error but got nil")
   100  	}
   101  
   102  	err = CmdDownload(test.SvcLabel, fileName, "output.txt", true, New(settings), services.New(settings))
   103  	if err != nil {
   104  		t.Fatalf("Unexpected error: %s", err)
   105  	}
   106  	os.Remove("output.txt")
   107  }