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 }