github.com/huaweicloud/golangsdk@v0.0.0-20210831081626-d823fe11ceba/openstack/identity/v3/projects/testing/fixtures.go (about) 1 package testing 2 3 import ( 4 "fmt" 5 "net/http" 6 "testing" 7 8 "github.com/huaweicloud/golangsdk/openstack/identity/v3/projects" 9 th "github.com/huaweicloud/golangsdk/testhelper" 10 "github.com/huaweicloud/golangsdk/testhelper/client" 11 ) 12 13 // ListOutput provides a single page of Project results. 14 const ListOutput = ` 15 { 16 "projects": [ 17 { 18 "is_domain": false, 19 "description": "The team that is red", 20 "domain_id": "default", 21 "enabled": true, 22 "id": "1234", 23 "name": "Red Team", 24 "parent_id": null 25 }, 26 { 27 "is_domain": false, 28 "description": "The team that is blue", 29 "domain_id": "default", 30 "enabled": true, 31 "id": "9876", 32 "name": "Blue Team", 33 "parent_id": null 34 } 35 ], 36 "links": { 37 "next": null, 38 "previous": null 39 } 40 } 41 ` 42 43 // GetOutput provides a Get result. 44 const GetOutput = ` 45 { 46 "project": { 47 "is_domain": false, 48 "description": "The team that is red", 49 "domain_id": "default", 50 "enabled": true, 51 "id": "1234", 52 "name": "Red Team", 53 "parent_id": null 54 } 55 } 56 ` 57 58 // CreateRequest provides the input to a Create request. 59 const CreateRequest = ` 60 { 61 "project": { 62 "description": "The team that is red", 63 "name": "Red Team" 64 } 65 } 66 ` 67 68 // UpdateRequest provides the input to an Update request. 69 const UpdateRequest = ` 70 { 71 "project": { 72 "description": "The team that is bright red", 73 "name": "Bright Red Team" 74 } 75 } 76 ` 77 78 // UpdateOutput provides an Update response. 79 const UpdateOutput = ` 80 { 81 "project": { 82 "is_domain": false, 83 "description": "The team that is bright red", 84 "domain_id": "default", 85 "enabled": true, 86 "id": "1234", 87 "name": "Bright Red Team", 88 "parent_id": null 89 } 90 } 91 ` 92 93 // RedTeam is a Project fixture. 94 var RedTeam = projects.Project{ 95 IsDomain: false, 96 Description: "The team that is red", 97 DomainID: "default", 98 Enabled: true, 99 ID: "1234", 100 Name: "Red Team", 101 ParentID: "", 102 } 103 104 // BlueTeam is a Project fixture. 105 var BlueTeam = projects.Project{ 106 IsDomain: false, 107 Description: "The team that is blue", 108 DomainID: "default", 109 Enabled: true, 110 ID: "9876", 111 Name: "Blue Team", 112 ParentID: "", 113 } 114 115 // UpdatedRedTeam is a Project Fixture. 116 var UpdatedRedTeam = projects.Project{ 117 IsDomain: false, 118 Description: "The team that is bright red", 119 DomainID: "default", 120 Enabled: true, 121 ID: "1234", 122 Name: "Bright Red Team", 123 ParentID: "", 124 } 125 126 // ExpectedProjectSlice is the slice of projects expected to be returned from ListOutput. 127 var ExpectedProjectSlice = []projects.Project{RedTeam, BlueTeam} 128 129 // HandleListProjectsSuccessfully creates an HTTP handler at `/projects` on the 130 // test handler mux that responds with a list of two tenants. 131 func HandleListProjectsSuccessfully(t *testing.T) { 132 th.Mux.HandleFunc("/projects", func(w http.ResponseWriter, r *http.Request) { 133 th.TestMethod(t, r, "GET") 134 th.TestHeader(t, r, "Accept", "application/json") 135 th.TestHeader(t, r, "X-Auth-Token", client.TokenID) 136 137 w.Header().Set("Content-Type", "application/json") 138 w.WriteHeader(http.StatusOK) 139 fmt.Fprintf(w, ListOutput) 140 }) 141 } 142 143 // HandleGetProjectSuccessfully creates an HTTP handler at `/projects` on the 144 // test handler mux that responds with a single project. 145 func HandleGetProjectSuccessfully(t *testing.T) { 146 th.Mux.HandleFunc("/projects/1234", func(w http.ResponseWriter, r *http.Request) { 147 th.TestMethod(t, r, "GET") 148 th.TestHeader(t, r, "Accept", "application/json") 149 th.TestHeader(t, r, "X-Auth-Token", client.TokenID) 150 151 w.Header().Set("Content-Type", "application/json") 152 w.WriteHeader(http.StatusOK) 153 fmt.Fprintf(w, GetOutput) 154 }) 155 } 156 157 // HandleCreateProjectSuccessfully creates an HTTP handler at `/projects` on the 158 // test handler mux that tests project creation. 159 func HandleCreateProjectSuccessfully(t *testing.T) { 160 th.Mux.HandleFunc("/projects", func(w http.ResponseWriter, r *http.Request) { 161 th.TestMethod(t, r, "POST") 162 th.TestHeader(t, r, "X-Auth-Token", client.TokenID) 163 th.TestJSONRequest(t, r, CreateRequest) 164 165 w.WriteHeader(http.StatusCreated) 166 fmt.Fprintf(w, GetOutput) 167 }) 168 } 169 170 // HandleDeleteProjectSuccessfully creates an HTTP handler at `/projects` on the 171 // test handler mux that tests project deletion. 172 func HandleDeleteProjectSuccessfully(t *testing.T) { 173 th.Mux.HandleFunc("/projects/1234", func(w http.ResponseWriter, r *http.Request) { 174 th.TestMethod(t, r, "DELETE") 175 th.TestHeader(t, r, "X-Auth-Token", client.TokenID) 176 177 w.WriteHeader(http.StatusOK) 178 }) 179 } 180 181 // HandleUpdateProjectSuccessfully creates an HTTP handler at `/projects` on the 182 // test handler mux that tests project updates. 183 func HandleUpdateProjectSuccessfully(t *testing.T) { 184 th.Mux.HandleFunc("/projects/1234", func(w http.ResponseWriter, r *http.Request) { 185 th.TestMethod(t, r, "PATCH") 186 th.TestHeader(t, r, "X-Auth-Token", client.TokenID) 187 th.TestJSONRequest(t, r, UpdateRequest) 188 189 w.WriteHeader(http.StatusOK) 190 fmt.Fprintf(w, UpdateOutput) 191 }) 192 }