github.com/go-chef/chef@v0.30.1/environment_test.go (about) 1 package chef 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "io" 7 "log" 8 "net/http" 9 "os" 10 "reflect" 11 "testing" 12 13 _ "github.com/davecgh/go-spew/spew" 14 ) 15 16 var ( 17 testEnvironmentJSON = "test/environment.json" 18 ) 19 20 // BUG(fujin): re-do with goconvey 21 func TestEnvironmentFromJSONDecoder(t *testing.T) { 22 if file, err := os.Open(testEnvironmentJSON); err != nil { 23 t.Error("unexpected error", err, "during os.Open on", testEnvironmentJSON) 24 } else { 25 dec := json.NewDecoder(file) 26 var e Environment 27 if err := dec.Decode(&e); err == io.EOF { 28 log.Println(e) 29 } else if err != nil { 30 log.Fatal(err) 31 } 32 } 33 } 34 35 func TestEnvironmentsService_List(t *testing.T) { 36 setup() 37 defer teardown() 38 39 mux.HandleFunc("/environments", func(w http.ResponseWriter, r *http.Request) { 40 fmt.Fprintf(w, `{"_default":"blah", "development":"blah"}`) 41 }) 42 43 environments, err := client.Environments.List() 44 if err != nil { 45 t.Errorf("Environments.List returned error: %v", err) 46 } 47 48 want := &EnvironmentResult{"_default": "blah", "development": "blah"} 49 if !reflect.DeepEqual(environments, want) { 50 //spew.Dump(environments) 51 //spew.Dump(want) 52 t.Errorf("Environments.List returned %+v, want %+v", environments, want) 53 } 54 } 55 56 func TestEnvironmentsService_Get(t *testing.T) { 57 setup() 58 defer teardown() 59 60 mux.HandleFunc("/environments/testenvironment", func(w http.ResponseWriter, r *http.Request) { 61 fmt.Fprintf(w, `{ 62 "name": "testenvironment", 63 "json_class": "Chef::Environment", 64 "chef_type": "environment" 65 }`) 66 }) 67 68 environments, err := client.Environments.Get("testenvironment") 69 if err != nil { 70 t.Errorf("Environments.Get returned error: %v", err) 71 } 72 73 want := &Environment{ 74 Name: "testenvironment", 75 JsonClass: "Chef::Environment", 76 ChefType: "environment", 77 } 78 79 if !reflect.DeepEqual(environments, want) { 80 t.Errorf("Environments.Get returned %+v, want %+v", environments, want) 81 } 82 } 83 84 func TestEnvironmentsService_Create(t *testing.T) { 85 setup() 86 defer teardown() 87 88 mux.HandleFunc("/environments", func(w http.ResponseWriter, r *http.Request) { 89 fmt.Fprintf(w, `{ "uri": "http://localhost:4000/environments/dev" }`) 90 }) 91 92 role := &Environment{ 93 Name: "dev", 94 ChefType: "environment", 95 JsonClass: "Chef::Environment", 96 Attributes: "", 97 Description: "", 98 CookbookVersions: map[string]string{}, 99 } 100 101 uri, err := client.Environments.Create(role) 102 if err != nil { 103 t.Errorf("Environments.Create returned error: %v", err) 104 } 105 106 want := &EnvironmentResult{"uri": "http://localhost:4000/environments/dev"} 107 108 if !reflect.DeepEqual(uri, want) { 109 t.Errorf("Environments.Create returned %+v, want %+v", uri, want) 110 } 111 } 112 113 func TestEnvironmentsService_Put(t *testing.T) { 114 setup() 115 defer teardown() 116 117 mux.HandleFunc("/environments/dev", func(w http.ResponseWriter, r *http.Request) { 118 fmt.Fprintf(w, `{ 119 "name": "dev", 120 "json_class": "Chef::Environment", 121 "description": "The Dev Environment", 122 "cookbook_versions": {}, 123 "chef_type": "environment" 124 }`) 125 }) 126 127 environment := &Environment{ 128 Name: "dev", 129 ChefType: "environment", 130 JsonClass: "Chef::Environment", 131 Description: "The Dev Environment", 132 CookbookVersions: map[string]string{}, 133 } 134 135 updatedEnvironment, err := client.Environments.Put(environment) 136 if err != nil { 137 t.Errorf("Environments.Put returned error: %v", err) 138 } 139 140 if !reflect.DeepEqual(updatedEnvironment, environment) { 141 t.Errorf("Environments.Put returned %+v, want %+v", updatedEnvironment, environment) 142 } 143 } 144 145 func TestEnvironmentsService_EnvironmentListResultString(t *testing.T) { 146 e := &EnvironmentResult{"_default": "https://api.opscode.com/organizations/org_name/environments/_default", "webserver": "https://api.opscode.com/organizations/org_name/environments/webserver"} 147 estr := e.String() 148 want := "_default => https://api.opscode.com/organizations/org_name/environments/_default\nwebserver => https://api.opscode.com/organizations/org_name/environments/webserver\n" 149 want2 := "webserver => https://api.opscode.com/organizations/org_name/environments/webserver\n_default => https://api.opscode.com/organizations/org_name/environments/_default\n" 150 if estr != want && estr != want2 { 151 t.Errorf("EnvironmentResult.String returned:\n%+v\nwant:\n%+v\n", estr, want) 152 } 153 } 154 155 func TestEnvironmentsService_EnvironmentCreateResultString(t *testing.T) { 156 e := &EnvironmentResult{"uri": "http://localhost:4000/environments/dev"} 157 estr := e.String() 158 want := "uri => http://localhost:4000/environments/dev\n" 159 if estr != want { 160 t.Errorf("EnvironmentResult.String returned %+v, want %+v", estr, want) 161 } 162 } 163 164 func TestEnvironmentsService_ListRecipes(t *testing.T) { 165 setup() 166 defer teardown() 167 168 mux.HandleFunc("/environments/_default/recipes", func(w http.ResponseWriter, r *http.Request) { 169 fmt.Fprintf(w, `["audit::default", "chef-client::default"]`) 170 }) 171 172 environments, err := client.Environments.ListRecipes("_default") 173 if err != nil { 174 t.Errorf("Environments.ListRecipes returned error: %v", err) 175 } 176 177 want := EnvironmentRecipesResult{"audit::default", "chef-client::default"} 178 if !reflect.DeepEqual(environments, want) { 179 t.Errorf("Environments.ListRecipes returned %+v, want %+v", environments, want) 180 } 181 }