Identity v3 Projects Update (#167)

diff --git a/openstack/identity/v3/projects/testing/fixtures.go b/openstack/identity/v3/projects/testing/fixtures.go
index 96a4e41..caa5567 100644
--- a/openstack/identity/v3/projects/testing/fixtures.go
+++ b/openstack/identity/v3/projects/testing/fixtures.go
@@ -65,6 +65,31 @@
 }
 `
 
+// UpdateRequest provides the input to an Update request.
+const UpdateRequest = `
+{
+  "project": {
+		"description": "The team that is bright red",
+		"name": "Bright Red Team"
+  }
+}
+`
+
+// UpdateOutput provides an Update response.
+const UpdateOutput = `
+{
+  "project": {
+		"is_domain": false,
+		"description": "The team that is bright red",
+		"domain_id": "default",
+		"enabled": true,
+		"id": "1234",
+		"name": "Bright Red Team",
+		"parent_id": null
+  }
+}
+`
+
 // RedTeam is a Project fixture.
 var RedTeam = projects.Project{
 	IsDomain:    false,
@@ -87,6 +112,17 @@
 	ParentID:    "",
 }
 
+// UpdatedRedTeam is a Project Fixture.
+var UpdatedRedTeam = projects.Project{
+	IsDomain:    false,
+	Description: "The team that is bright red",
+	DomainID:    "default",
+	Enabled:     true,
+	ID:          "1234",
+	Name:        "Bright Red Team",
+	ParentID:    "",
+}
+
 // ExpectedProjectSlice is the slice of projects expected to be returned from ListOutput.
 var ExpectedProjectSlice = []projects.Project{RedTeam, BlueTeam}
 
@@ -141,3 +177,16 @@
 		w.WriteHeader(http.StatusNoContent)
 	})
 }
+
+// HandleUpdateProjectSuccessfully creates an HTTP handler at `/projects` on the
+// test handler mux that tests project updates.
+func HandleUpdateProjectSuccessfully(t *testing.T) {
+	th.Mux.HandleFunc("/projects/1234", func(w http.ResponseWriter, r *http.Request) {
+		th.TestMethod(t, r, "PATCH")
+		th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
+		th.TestJSONRequest(t, r, UpdateRequest)
+
+		w.WriteHeader(http.StatusOK)
+		fmt.Fprintf(w, UpdateOutput)
+	})
+}