Page Menu
Home
Musing Studio
Search
Configure Global Search
Log In
Files
F10387563
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
2 KB
Subscribers
None
View Options
diff --git a/author.go b/author.go
new file mode 100644
index 0000000..06af35c
--- /dev/null
+++ b/author.go
@@ -0,0 +1,54 @@
+package writeas
+
+import (
+ "fmt"
+ "net/http"
+)
+
+type (
+ // Author represents a Write.as author.
+ Author struct {
+ User *User
+ Name string `json:"name"`
+ Slug string `json:"slug"`
+ }
+
+ // AuthorParams are used to create or update a Write.as author.
+ AuthorParams struct {
+ // Name is the public display name of the Author.
+ Name string `json:"name"`
+
+ // Slug is the optional slug for the Author.
+ Slug string `json:"slug"`
+
+ // OrgAlias is the alias of the organization the Author belongs to.
+ OrgAlias string `json:"-"`
+ }
+)
+
+// CreateContributor creates a new contributor on the given organization.
+func (c *Client) CreateContributor(sp *AuthorParams) (*Author, error) {
+ if sp.OrgAlias == "" {
+ return nil, fmt.Errorf("AuthorParams.OrgAlias is required.")
+ }
+
+ a := &Author{}
+ env, err := c.post("/organizations/"+sp.OrgAlias+"/contributors", sp, a)
+ if err != nil {
+ return nil, err
+ }
+
+ var ok bool
+ if a, ok = env.Data.(*Author); !ok {
+ return nil, fmt.Errorf("Wrong data returned from API.")
+ }
+
+ status := env.Code
+ if status != http.StatusCreated {
+ if status == http.StatusBadRequest {
+ return nil, fmt.Errorf("Bad request: %s", env.ErrorMessage)
+ }
+ return nil, fmt.Errorf("Problem creating author: %d. %s\n", status, env.ErrorMessage)
+ }
+ return a, nil
+}
diff --git a/author_test.go b/author_test.go
new file mode 100644
index 0000000..fa8b08c
--- /dev/null
+++ b/author_test.go
@@ -0,0 +1,37 @@
+package writeas
+
+import "testing"
+
+func TestClient_CreateContributor(t *testing.T) {
+ c := NewClientWith(Config{URL: "http://localhost:7777/api"})
+ _, err := c.LogIn("test", "test")
+ if err != nil {
+ t.Fatalf("login: %s", err)
+ }
+
+ tests := []struct {
+ name string
+ AName string
+ ASlug string
+ AOrg string
+ }{
+ {
+ name: "good",
+ AName: "Bob Contrib",
+ ASlug: "bob",
+ AOrg: "write-as",
+ },
+ }
+ for _, test := range tests {
+ t.Run(test.name, func(t *testing.T) {
+ _, err = c.CreateContributor(&AuthorParams{
+ Name: test.AName,
+ Slug: test.ASlug,
+ OrgAlias: test.AOrg,
+ })
+ if err != nil {
+ t.Fatalf("create %s: %s", test.name, err)
+ }
+ })
+ }
+}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Mon, Nov 25, 3:23 PM (1 d, 17 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3106724
Attached To
rWGO writeas-go
Event Timeline
Log In to Comment