diff --git a/status_test.go b/status_test.go index fa9d10e..c9a2cdc 100644 --- a/status_test.go +++ b/status_test.go @@ -66,6 +66,75 @@ func TestGetStatus(t *testing.T) { } } +func TestGetStatusCard(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/api/v1/statuses/1234567/card" { + http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound) + return + } + fmt.Fprintln(w, `{"Title": "zzz"}`) + return + })) + defer ts.Close() + + client := NewClient(&Config{ + Server: ts.URL, + ClientID: "foo", + ClientSecret: "bar", + AccessToken: "zoo", + }) + _, err := client.GetStatusCard(context.Background(), 123) + if err == nil { + t.Fatalf("should be fail: %v", err) + } + card, err := client.GetStatusCard(context.Background(), 1234567) + if err != nil { + t.Fatalf("should not be fail: %v", err) + } + if card.Title != "zzz" { + t.Fatalf("want %q but %q", "zzz", card.Title) + } +} + +func TestGetStatusContext(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/api/v1/statuses/1234567/context" { + http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound) + return + } + fmt.Fprintln(w, `{"ancestors": [{"Content": "zzz"},{"Content": "bbb"}]}`) + return + })) + defer ts.Close() + + client := NewClient(&Config{ + Server: ts.URL, + ClientID: "foo", + ClientSecret: "bar", + AccessToken: "zoo", + }) + _, err := client.GetStatusContext(context.Background(), 123) + if err == nil { + t.Fatalf("should be fail: %v", err) + } + context, err := client.GetStatusContext(context.Background(), 1234567) + if err != nil { + t.Fatalf("should not be fail: %v", err) + } + if len(context.Ancestors) != 2 { + t.Fatalf("Ancestors should have 2 entries but %q", len(context.Ancestors)) + } + if context.Ancestors[0].Content != "zzz" { + t.Fatalf("want %q but %q", "zzz", context.Ancestors[0].Content) + } + if context.Ancestors[1].Content != "bbb" { + t.Fatalf("want %q but %q", "bbb", context.Ancestors[1].Content) + } + if len(context.Descendants) > 0 { + t.Fatalf("Descendants should not be included") + } +} + func TestGetRebloggedBy(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/api/v1/statuses/1234567/reblogged_by" { @@ -258,6 +327,122 @@ func TestUnfavourite(t *testing.T) { } } +func TestGetTimelineHashtag(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/api/v1/timelines/tag/zzz" { + http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound) + return + } + fmt.Fprintln(w, `[{"Content": "zzz"},{"Content": "yyy"}]`) + return + })) + defer ts.Close() + + client := NewClient(&Config{ + Server: ts.URL, + ClientID: "foo", + ClientSecret: "bar", + AccessToken: "zoo", + }) + _, err := client.GetTimelineHashtag(context.Background(), "notfound") + if err == nil { + t.Fatalf("should be fail: %v", err) + } + tags, err := client.GetTimelineHashtag(context.Background(), "zzz") + if err != nil { + t.Fatalf("should not be fail: %v", err) + } + if len(tags) != 2 { + t.Fatalf("should have %q entries but %q", "2", len(tags)) + } + if tags[0].Content != "zzz" { + t.Fatalf("want %q but %q", "zzz", tags[0].Content) + } + if tags[1].Content != "yyy" { + t.Fatalf("want %q but %q", "zzz", tags[1].Content) + } +} + +func TestDeleteStatus(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/api/v1/statuses/1234567" { + http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound) + return + } + if r.Method != "DELETE" { + http.Error(w, http.StatusText(http.StatusNotFound), http.StatusMethodNotAllowed) + return + } + return + })) + defer ts.Close() + + client := NewClient(&Config{ + Server: ts.URL, + ClientID: "foo", + ClientSecret: "bar", + AccessToken: "zoo", + }) + err := client.DeleteStatus(context.Background(), 123) + if err == nil { + t.Fatalf("should be fail: %v", err) + } + err = client.DeleteStatus(context.Background(), 1234567) + if err != nil { + t.Fatalf("should not be fail: %v", err) + } +} + +func TestSearch(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/api/v1/search" { + http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound) + return + } + if r.RequestURI != "/api/v1/search?q=q&resolve=false" { + http.Error(w, http.StatusText(http.StatusNotFound), http.StatusBadRequest) + return + } + + fmt.Fprintln(w, ` + {"accounts":[{"Username": "zzz"},{"Username": "yyy"}], + "statuses":[{"Content": "aaa"}], + "hashtags":["tag","tag2","tag3"] + }`) + return + })) + defer ts.Close() + + client := NewClient(&Config{ + Server: ts.URL, + ClientID: "foo", + ClientSecret: "bar", + AccessToken: "zoo", + }) + ret, err := client.Search(context.Background(), "q", false) + if err != nil { + t.Fatalf("should not be fail: %v", err) + } + if len(ret.Accounts) != 2 { + t.Fatalf("Accounts have %q entries, but %q", "2", len(ret.Accounts)) + } + if ret.Accounts[0].Username != "zzz" { + t.Fatalf("Accounts Username should %q , but %q", "zzz", ret.Accounts[0].Username) + } + if len(ret.Statuses) != 1 { + t.Fatalf("Statuses have %q entries, but %q", "1", len(ret.Statuses)) + } + if ret.Statuses[0].Content != "aaa" { + t.Fatalf("Statuses Content should %q , but %q", "aaa", ret.Statuses[0].Content) + } + if len(ret.Hashtags) != 3 { + t.Fatalf("Hashtags have %q entries, but %q", "3", len(ret.Hashtags)) + } + if ret.Hashtags[2] != "tag3" { + t.Fatalf("Hashtags[2] should %q , but %q", "tag3", ret.Hashtags[2]) + } +} + func TestUploadMedia(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/api/v1/media" {