Feature/filestorage sharetype delete (#142)

* sfs: Add support for share type Delete

* sfs: Add acceptance tests for share type Delete
diff --git a/acceptance/openstack/sharedfilesystems/v2/sharetypes.go b/acceptance/openstack/sharedfilesystems/v2/sharetypes.go
index 7f393d6..c965034 100644
--- a/acceptance/openstack/sharedfilesystems/v2/sharetypes.go
+++ b/acceptance/openstack/sharedfilesystems/v2/sharetypes.go
@@ -36,6 +36,17 @@
 	return shareType, nil
 }
 
+// DeleteShareType will delete a share type. An error will occur if
+// the share type was unable to be deleted.
+func DeleteShareType(t *testing.T, client *gophercloud.ServiceClient, shareType *sharetypes.ShareType) {
+	err := sharetypes.Delete(client, shareType.ID).ExtractErr()
+	if err != nil {
+		t.Fatalf("Failed to delete share type %s: %v", shareType.ID, err)
+	}
+
+	t.Logf("Deleted share type: %s", shareType.ID)
+}
+
 // PrintShareType will print a share type and all of its attributes.
 func PrintShareType(t *testing.T, shareType *sharetypes.ShareType) {
 	t.Logf("Name: %s", shareType.Name)
diff --git a/acceptance/openstack/sharedfilesystems/v2/sharetypes_test.go b/acceptance/openstack/sharedfilesystems/v2/sharetypes_test.go
index 6cb9202..f38b1ab 100644
--- a/acceptance/openstack/sharedfilesystems/v2/sharetypes_test.go
+++ b/acceptance/openstack/sharedfilesystems/v2/sharetypes_test.go
@@ -17,7 +17,7 @@
 		t.Fatalf("Unable to create share type: %v", err)
 	}
 
-	//TODO: delete share type when the delete is implemented
-
 	PrintShareType(t, shareType)
+
+	defer DeleteShareType(t, client, shareType)
 }
diff --git a/openstack/sharedfilesystems/v2/sharetypes/requests.go b/openstack/sharedfilesystems/v2/sharetypes/requests.go
index 97905e3..04153c7 100644
--- a/openstack/sharedfilesystems/v2/sharetypes/requests.go
+++ b/openstack/sharedfilesystems/v2/sharetypes/requests.go
@@ -48,3 +48,9 @@
 	})
 	return
 }
+
+// Delete will delete the existing ShareType with the provided ID.
+func Delete(client *gophercloud.ServiceClient, id string) (r DeleteResult) {
+	_, r.Err = client.Delete(deleteURL(client, id), nil)
+	return
+}
diff --git a/openstack/sharedfilesystems/v2/sharetypes/results.go b/openstack/sharedfilesystems/v2/sharetypes/results.go
index 7762dc6..7538581 100644
--- a/openstack/sharedfilesystems/v2/sharetypes/results.go
+++ b/openstack/sharedfilesystems/v2/sharetypes/results.go
@@ -34,3 +34,8 @@
 type CreateResult struct {
 	commonResult
 }
+
+// DeleteResult contains the response body and error from a Delete request.
+type DeleteResult struct {
+	gophercloud.ErrResult
+}
diff --git a/openstack/sharedfilesystems/v2/sharetypes/testing/fixtures.go b/openstack/sharedfilesystems/v2/sharetypes/testing/fixtures.go
index f597b76..0e8ba52 100644
--- a/openstack/sharedfilesystems/v2/sharetypes/testing/fixtures.go
+++ b/openstack/sharedfilesystems/v2/sharetypes/testing/fixtures.go
@@ -59,3 +59,11 @@
         }`)
 	})
 }
+
+func MockDeleteResponse(t *testing.T) {
+	th.Mux.HandleFunc("/types/shareTypeID", func(w http.ResponseWriter, r *http.Request) {
+		th.TestMethod(t, r, "DELETE")
+		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
+		w.WriteHeader(http.StatusAccepted)
+	})
+}
diff --git a/openstack/sharedfilesystems/v2/sharetypes/testing/requests_test.go b/openstack/sharedfilesystems/v2/sharetypes/testing/requests_test.go
index bd70607..22ed2d1 100644
--- a/openstack/sharedfilesystems/v2/sharetypes/testing/requests_test.go
+++ b/openstack/sharedfilesystems/v2/sharetypes/testing/requests_test.go
@@ -59,3 +59,13 @@
 		t.Fatal("ErrMissingInput was expected to occur")
 	}
 }
+
+// Verifies that share type deletion works
+func TestDelete(t *testing.T) {
+	th.SetupHTTP()
+	defer th.TeardownHTTP()
+
+	MockDeleteResponse(t)
+	res := sharetypes.Delete(client.ServiceClient(), "shareTypeID")
+	th.AssertNoErr(t, res.Err)
+}
diff --git a/openstack/sharedfilesystems/v2/sharetypes/urls.go b/openstack/sharedfilesystems/v2/sharetypes/urls.go
index 4ab4f8d..3fb7f18 100644
--- a/openstack/sharedfilesystems/v2/sharetypes/urls.go
+++ b/openstack/sharedfilesystems/v2/sharetypes/urls.go
@@ -5,3 +5,7 @@
 func createURL(c *gophercloud.ServiceClient) string {
 	return c.ServiceURL("types")
 }
+
+func deleteURL(c *gophercloud.ServiceClient, id string) string {
+	return c.ServiceURL("types", id)
+}