Skip to content

Commit

Permalink
Add test for update post
Browse files Browse the repository at this point in the history
  • Loading branch information
minodisk committed Feb 4, 2016
1 parent be45b61 commit 0265d6f
Show file tree
Hide file tree
Showing 2 changed files with 129 additions and 0 deletions.
12 changes: 12 additions & 0 deletions model/post.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,19 @@ func FetchPost(client api.Client, team *Team, id string) (post Post, err error)
return
}

type EmptyIDError struct{}

func (err EmptyIDError) Error() (msg string) {
msg = "post: ID is empty"
return
}

func (post *Post) Update(client api.Client) (err error) {
if post.ID == "" {
err = EmptyIDError{}
return
}

subDomain := ""
if post.Team != nil {
subDomain = post.Team.ID
Expand Down
117 changes: 117 additions & 0 deletions model/post_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ import (
)

func TestPostCreate(t *testing.T) {
testutil.CleanUp()
defer testutil.CleanUp()

mux := http.NewServeMux()
mux.HandleFunc("/api/v2/items", func(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
Expand Down Expand Up @@ -95,6 +98,9 @@ func TestPostCreate(t *testing.T) {
}

func TestFetchPost(t *testing.T) {
testutil.CleanUp()
defer testutil.CleanUp()

mux := http.NewServeMux()
mux.HandleFunc("/api/v2/items/4bd431809afb1bb99e4f", func(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
Expand Down Expand Up @@ -256,6 +262,9 @@ func TestFetchPost(t *testing.T) {
}

func TestFetchPost_ResponseError(t *testing.T) {
testutil.CleanUp()
defer testutil.CleanUp()

mux := http.NewServeMux()
mux.HandleFunc("/api/v2/items/4bd431809afb1bb99e4f", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(400)
Expand Down Expand Up @@ -292,6 +301,9 @@ func TestFetchPost_ResponseError(t *testing.T) {
}

func TestFetchPost_StatusError(t *testing.T) {
testutil.CleanUp()
defer testutil.CleanUp()

mux := http.NewServeMux()
mux.HandleFunc("/api/v2/items/4bd431809afb1bb99e4f", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(500)
Expand Down Expand Up @@ -323,6 +335,99 @@ func TestFetchPost_StatusError(t *testing.T) {
}
}

func TestPostUpdateWithEmptyID(t *testing.T) {
testutil.CleanUp()
defer testutil.CleanUp()

client, err := api.NewClient(nil)
if err != nil {
t.Fatal(err)
}

post := model.NewPost("Example Title", &model.Time{time.Date(2000, 1, 1, 9, 0, 0, 0, time.UTC)}, nil)
err = post.Update(client)
if err == nil {
t.Fatal("error should occur")
}
}

func TestPostUpdate(t *testing.T) {
testutil.CleanUp()
defer testutil.CleanUp()

mux := http.NewServeMux()
mux.HandleFunc("/api/v2/items/abcdefghijklmnopqrst", func(w http.ResponseWriter, r *http.Request) {
if r.Method != "PATCH" {
w.WriteHeader(405)
b, _ := json.Marshal(api.ResponseError{"method_not_allowed", "Method Not Allowed"})
w.Write(b)
return
}

defer r.Body.Close()

b, err := ioutil.ReadAll(r.Body)
if err != nil {
testutil.ResponseError(w, 500, err)
return
}
if string(b) == "" {
testutil.ResponseAPIError(w, 500, api.ResponseError{
Type: "fatal",
Message: "empty body",
})
return
}

var post model.Post
err = json.Unmarshal(b, &post)
if err != nil {
testutil.ResponseError(w, 500, err)
return
}

post.UpdatedAt = model.Time{Time: time.Date(2016, 2, 1, 12, 51, 42, 0, time.UTC)}
b, err = json.Marshal(post)
if err != nil {
testutil.ResponseError(w, 500, err)
return
}

_, err = w.Write(b)
if err != nil {
testutil.ResponseError(w, 500, err)
return
}
})

server := httptest.NewServer(mux)
defer server.Close()

err := os.Setenv("QIITA_ACCESS_TOKEN", "XXXXXXXXXXXX")
if err != nil {
t.Fatal(err)
}

client, err := api.NewClient(func(subDomain, path string) (url string) {
url = fmt.Sprintf("%s%s%s", server.URL, "/api/v2", path)
return
})
if err != nil {
t.Fatal(err)
}

post := model.NewPost("Example Title", &model.Time{time.Date(2000, 1, 1, 9, 0, 0, 0, time.UTC)}, nil)
post.ID = "abcdefghijklmnopqrst"
err = post.Update(client)
if err != nil {
t.Fatal(err)
}

if !post.UpdatedAt.Equal(time.Date(2016, 2, 1, 12, 51, 42, 0, time.UTC)) {
t.Errorf("wrong UpdatedAt: %s", post.UpdatedAt)
}
}

func TestPostSave(t *testing.T) {
testutil.CleanUp()
defer testutil.CleanUp()
Expand Down Expand Up @@ -419,6 +524,9 @@ tags: []
}

func TestPostDecodeWithWrongMeta(t *testing.T) {
testutil.CleanUp()
defer testutil.CleanUp()

var post model.Post
err := post.Decode([]byte(`XXXXXXXX
<!--
Expand Down Expand Up @@ -446,6 +554,9 @@ Paragraph
}

func TestPostDecodeWithWrongTag(t *testing.T) {
testutil.CleanUp()
defer testutil.CleanUp()

var post model.Post
err := post.Decode([]byte(`<!--
id: abcdefghijklmnopqrst
Expand All @@ -472,6 +583,9 @@ Paragraph
}

func TestDecodeWithWrongTitle(t *testing.T) {
testutil.CleanUp()
defer testutil.CleanUp()

var post model.Post
err := post.Decode([]byte(`<!--
id: abcdefghijklmnopqrst
Expand All @@ -498,6 +612,9 @@ Paragraph
}

func TestPostDecodeWithCorrectMarkdown(t *testing.T) {
testutil.CleanUp()
defer testutil.CleanUp()

var post model.Post
err := post.Decode([]byte(`<!--
id: abcdefghijklmnopqrst
Expand Down

0 comments on commit 0265d6f

Please sign in to comment.