Page MenuHomeMusing Studio

No OneTemporary

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

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

Event Timeline