github.com/gophercloud/gophercloud@v1.11.0/openstack/identity/v3/projects/testing/fixtures_test.go (about) 1 package testing 2 3 import ( 4 "fmt" 5 "net/http" 6 "testing" 7 8 "github.com/gophercloud/gophercloud/openstack/identity/v3/projects" 9 th "github.com/gophercloud/gophercloud/testhelper" 10 "github.com/gophercloud/gophercloud/testhelper/client" 11 ) 12 13 // ListAvailableOutput provides a single page of available Project results. 14 const ListAvailableOutput = ` 15 { 16 "projects": [ 17 { 18 "description": "my first project", 19 "domain_id": "11111", 20 "enabled": true, 21 "id": "abcde", 22 "links": { 23 "self": "http://localhost:5000/identity/v3/projects/abcde" 24 }, 25 "name": "project 1", 26 "parent_id": "11111" 27 }, 28 { 29 "description": "my second project", 30 "domain_id": "22222", 31 "enabled": true, 32 "id": "bcdef", 33 "links": { 34 "self": "http://localhost:5000/identity/v3/projects/bcdef" 35 }, 36 "name": "project 2", 37 "parent_id": "22222" 38 } 39 ], 40 "links": { 41 "next": null, 42 "previous": null, 43 "self": "http://localhost:5000/identity/v3/users/foobar/projects" 44 } 45 } 46 ` 47 48 // ListOutput provides a single page of Project results. 49 const ListOutput = ` 50 { 51 "projects": [ 52 { 53 "is_domain": false, 54 "description": "The team that is red", 55 "domain_id": "default", 56 "enabled": true, 57 "id": "1234", 58 "name": "Red Team", 59 "parent_id": null, 60 "tags": ["Red", "Team"], 61 "test": "old" 62 }, 63 { 64 "is_domain": false, 65 "description": "The team that is blue", 66 "domain_id": "default", 67 "enabled": true, 68 "id": "9876", 69 "name": "Blue Team", 70 "parent_id": null, 71 "options": { 72 "immutable": true 73 } 74 } 75 ], 76 "links": { 77 "next": null, 78 "previous": null 79 } 80 } 81 ` 82 83 // GetOutput provides a Get result. 84 const GetOutput = ` 85 { 86 "project": { 87 "is_domain": false, 88 "description": "The team that is red", 89 "domain_id": "default", 90 "enabled": true, 91 "id": "1234", 92 "name": "Red Team", 93 "parent_id": null, 94 "tags": ["Red", "Team"], 95 "test": "old" 96 } 97 } 98 ` 99 100 // CreateRequest provides the input to a Create request. 101 const CreateRequest = ` 102 { 103 "project": { 104 "description": "The team that is red", 105 "name": "Red Team", 106 "tags": ["Red", "Team"], 107 "test": "old" 108 } 109 } 110 ` 111 112 // UpdateRequest provides the input to an Update request. 113 const UpdateRequest = ` 114 { 115 "project": { 116 "description": "The team that is bright red", 117 "name": "Bright Red Team", 118 "tags": ["Red"], 119 "test": "new" 120 } 121 } 122 ` 123 124 // UpdateOutput provides an Update response. 125 const UpdateOutput = ` 126 { 127 "project": { 128 "is_domain": false, 129 "description": "The team that is bright red", 130 "domain_id": "default", 131 "enabled": true, 132 "id": "1234", 133 "name": "Bright Red Team", 134 "parent_id": null, 135 "tags": ["Red"], 136 "test": "new" 137 } 138 } 139 ` 140 141 // FirstProject is a Project fixture. 142 var FirstProject = projects.Project{ 143 Description: "my first project", 144 DomainID: "11111", 145 Enabled: true, 146 ID: "abcde", 147 Name: "project 1", 148 ParentID: "11111", 149 Extra: map[string]interface{}{ 150 "links": map[string]interface{}{"self": "http://localhost:5000/identity/v3/projects/abcde"}, 151 }, 152 } 153 154 // SecondProject is a Project fixture. 155 var SecondProject = projects.Project{ 156 Description: "my second project", 157 DomainID: "22222", 158 Enabled: true, 159 ID: "bcdef", 160 Name: "project 2", 161 ParentID: "22222", 162 Extra: map[string]interface{}{ 163 "links": map[string]interface{}{"self": "http://localhost:5000/identity/v3/projects/bcdef"}, 164 }, 165 } 166 167 // RedTeam is a Project fixture. 168 var RedTeam = projects.Project{ 169 IsDomain: false, 170 Description: "The team that is red", 171 DomainID: "default", 172 Enabled: true, 173 ID: "1234", 174 Name: "Red Team", 175 ParentID: "", 176 Tags: []string{"Red", "Team"}, 177 Extra: map[string]interface{}{"test": "old"}, 178 } 179 180 // BlueTeam is a Project fixture. 181 var BlueTeam = projects.Project{ 182 IsDomain: false, 183 Description: "The team that is blue", 184 DomainID: "default", 185 Enabled: true, 186 ID: "9876", 187 Name: "Blue Team", 188 ParentID: "", 189 Extra: make(map[string]interface{}), 190 Options: map[projects.Option]interface{}{ 191 projects.Immutable: true, 192 }, 193 } 194 195 // UpdatedRedTeam is a Project Fixture. 196 var UpdatedRedTeam = projects.Project{ 197 IsDomain: false, 198 Description: "The team that is bright red", 199 DomainID: "default", 200 Enabled: true, 201 ID: "1234", 202 Name: "Bright Red Team", 203 ParentID: "", 204 Tags: []string{"Red"}, 205 Extra: map[string]interface{}{"test": "new"}, 206 } 207 208 // ExpectedAvailableProjectsSlice is the slice of projects expected to be returned 209 // from ListAvailableOutput. 210 var ExpectedAvailableProjectsSlice = []projects.Project{FirstProject, SecondProject} 211 212 // ExpectedProjectSlice is the slice of projects expected to be returned from ListOutput. 213 var ExpectedProjectSlice = []projects.Project{RedTeam, BlueTeam} 214 215 // HandleListAvailableProjectsSuccessfully creates an HTTP handler at `/auth/projects` 216 // on the test handler mux that responds with a list of two tenants. 217 func HandleListAvailableProjectsSuccessfully(t *testing.T) { 218 th.Mux.HandleFunc("/auth/projects", func(w http.ResponseWriter, r *http.Request) { 219 th.TestMethod(t, r, "GET") 220 th.TestHeader(t, r, "Accept", "application/json") 221 th.TestHeader(t, r, "X-Auth-Token", client.TokenID) 222 223 w.Header().Set("Content-Type", "application/json") 224 w.WriteHeader(http.StatusOK) 225 fmt.Fprintf(w, ListAvailableOutput) 226 }) 227 } 228 229 // HandleListProjectsSuccessfully creates an HTTP handler at `/projects` on the 230 // test handler mux that responds with a list of two tenants. 231 func HandleListProjectsSuccessfully(t *testing.T) { 232 th.Mux.HandleFunc("/projects", func(w http.ResponseWriter, r *http.Request) { 233 th.TestMethod(t, r, "GET") 234 th.TestHeader(t, r, "Accept", "application/json") 235 th.TestHeader(t, r, "X-Auth-Token", client.TokenID) 236 237 w.Header().Set("Content-Type", "application/json") 238 w.WriteHeader(http.StatusOK) 239 fmt.Fprintf(w, ListOutput) 240 }) 241 } 242 243 // HandleGetProjectSuccessfully creates an HTTP handler at `/projects` on the 244 // test handler mux that responds with a single project. 245 func HandleGetProjectSuccessfully(t *testing.T) { 246 th.Mux.HandleFunc("/projects/1234", func(w http.ResponseWriter, r *http.Request) { 247 th.TestMethod(t, r, "GET") 248 th.TestHeader(t, r, "Accept", "application/json") 249 th.TestHeader(t, r, "X-Auth-Token", client.TokenID) 250 251 w.Header().Set("Content-Type", "application/json") 252 w.WriteHeader(http.StatusOK) 253 fmt.Fprintf(w, GetOutput) 254 }) 255 } 256 257 // HandleCreateProjectSuccessfully creates an HTTP handler at `/projects` on the 258 // test handler mux that tests project creation. 259 func HandleCreateProjectSuccessfully(t *testing.T) { 260 th.Mux.HandleFunc("/projects", func(w http.ResponseWriter, r *http.Request) { 261 th.TestMethod(t, r, "POST") 262 th.TestHeader(t, r, "X-Auth-Token", client.TokenID) 263 th.TestJSONRequest(t, r, CreateRequest) 264 265 w.WriteHeader(http.StatusCreated) 266 fmt.Fprintf(w, GetOutput) 267 }) 268 } 269 270 // HandleDeleteProjectSuccessfully creates an HTTP handler at `/projects` on the 271 // test handler mux that tests project deletion. 272 func HandleDeleteProjectSuccessfully(t *testing.T) { 273 th.Mux.HandleFunc("/projects/1234", func(w http.ResponseWriter, r *http.Request) { 274 th.TestMethod(t, r, "DELETE") 275 th.TestHeader(t, r, "X-Auth-Token", client.TokenID) 276 277 w.WriteHeader(http.StatusNoContent) 278 }) 279 } 280 281 // HandleUpdateProjectSuccessfully creates an HTTP handler at `/projects` on the 282 // test handler mux that tests project updates. 283 func HandleUpdateProjectSuccessfully(t *testing.T) { 284 th.Mux.HandleFunc("/projects/1234", func(w http.ResponseWriter, r *http.Request) { 285 th.TestMethod(t, r, "PATCH") 286 th.TestHeader(t, r, "X-Auth-Token", client.TokenID) 287 th.TestJSONRequest(t, r, UpdateRequest) 288 289 w.WriteHeader(http.StatusOK) 290 fmt.Fprintf(w, UpdateOutput) 291 }) 292 }