From e5d11f63aa22ead16e777ab3200b1bebda30c55f Mon Sep 17 00:00:00 2001 From: 178inaba <178inaba@users.noreply.github.com> Date: Tue, 2 May 2017 22:36:06 +0900 Subject: [PATCH 1/5] Add xsearch --- cmd/mstdn/cmd_mikami.go | 19 +------------------ cmd/mstdn/cmd_xsearch.go | 14 +++++++++----- cmd/mstdn/main.go | 5 +++-- 3 files changed, 13 insertions(+), 25 deletions(-) diff --git a/cmd/mstdn/cmd_mikami.go b/cmd/mstdn/cmd_mikami.go index ec3449e..b46cc1f 100644 --- a/cmd/mstdn/cmd_mikami.go +++ b/cmd/mstdn/cmd_mikami.go @@ -1,26 +1,9 @@ package main import ( - "fmt" - - "github.com/PuerkitoBio/goquery" "github.com/urfave/cli" ) func cmdMikami(c *cli.Context) error { - doc, err := goquery.NewDocument("http://mastodonsearch.jp/cross/?q=三上") - if err != nil { - return err - } - doc.Find(".post").Each(func(n int, elem *goquery.Selection) { - href, ok := elem.Find(".mst_content a").Attr("href") - if !ok { - return - } - text := elem.Find(".mst_content p").Text() - fmt.Println(href) - fmt.Println(text) - fmt.Println() - }) - return nil + return xsearch(c.App.Metadata["xsearch_url"].(string), "三上", c.App.Writer) } diff --git a/cmd/mstdn/cmd_xsearch.go b/cmd/mstdn/cmd_xsearch.go index 1544d9f..92cef85 100644 --- a/cmd/mstdn/cmd_xsearch.go +++ b/cmd/mstdn/cmd_xsearch.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "io" "net/url" "github.com/PuerkitoBio/goquery" @@ -9,12 +10,16 @@ import ( ) func cmdXSearch(c *cli.Context) error { - u, err := url.Parse("http://mastodonsearch.jp/cross/") + return xsearch(c.App.Metadata["xsearch_url"].(string), c.Args().First(), c.App.Writer) +} + +func xsearch(xsearchRawurl, query string, w io.Writer) error { + u, err := url.Parse(xsearchRawurl) if err != nil { return err } params := url.Values{} - params.Set("q", c.Args().First()) + params.Set("q", query) u.RawQuery = params.Encode() doc, err := goquery.NewDocument(u.String()) if err != nil { @@ -26,9 +31,8 @@ func cmdXSearch(c *cli.Context) error { return } text := elem.Find(".mst_content p").Text() - fmt.Println(href) - fmt.Println(text) - fmt.Println() + fmt.Fprintf(w, "%s\n", href) + fmt.Fprintf(w, "%s\n\n", text) }) return nil } diff --git a/cmd/mstdn/main.go b/cmd/mstdn/main.go index a53c7f7..392f748 100644 --- a/cmd/mstdn/main.go +++ b/cmd/mstdn/main.go @@ -361,8 +361,9 @@ func run() int { client := mastodon.NewClient(config) app.Metadata = map[string]interface{}{ - "client": client, - "config": config, + "client": client, + "config": config, + "xsearch_url": "http://mastodonsearch.jp/cross/", } if config.AccessToken == "" { return authenticate(client, config, file) From 6bbd57e8481cba6b101ab7bee726284c81d7f0f4 Mon Sep 17 00:00:00 2001 From: 178inaba <178inaba@users.noreply.github.com> Date: Wed, 3 May 2017 02:29:15 +0900 Subject: [PATCH 2/5] Rename xsearch -> xSearch --- cmd/mstdn/cmd_mikami.go | 2 +- cmd/mstdn/cmd_xsearch.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/mstdn/cmd_mikami.go b/cmd/mstdn/cmd_mikami.go index b46cc1f..abbfc18 100644 --- a/cmd/mstdn/cmd_mikami.go +++ b/cmd/mstdn/cmd_mikami.go @@ -5,5 +5,5 @@ import ( ) func cmdMikami(c *cli.Context) error { - return xsearch(c.App.Metadata["xsearch_url"].(string), "三上", c.App.Writer) + return xSearch(c.App.Metadata["xsearch_url"].(string), "三上", c.App.Writer) } diff --git a/cmd/mstdn/cmd_xsearch.go b/cmd/mstdn/cmd_xsearch.go index 92cef85..2c7950b 100644 --- a/cmd/mstdn/cmd_xsearch.go +++ b/cmd/mstdn/cmd_xsearch.go @@ -10,10 +10,10 @@ import ( ) func cmdXSearch(c *cli.Context) error { - return xsearch(c.App.Metadata["xsearch_url"].(string), c.Args().First(), c.App.Writer) + return xSearch(c.App.Metadata["xsearch_url"].(string), c.Args().First(), c.App.Writer) } -func xsearch(xsearchRawurl, query string, w io.Writer) error { +func xSearch(xsearchRawurl, query string, w io.Writer) error { u, err := url.Parse(xsearchRawurl) if err != nil { return err From a796ca03c54a6fd8338b63eb7c94b70e2cc12ad6 Mon Sep 17 00:00:00 2001 From: 178inaba <178inaba@users.noreply.github.com> Date: Wed, 3 May 2017 02:32:36 +0900 Subject: [PATCH 3/5] Add TestXSearch --- cmd/mstdn/cmd_xsearch_test.go | 60 +++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 cmd/mstdn/cmd_xsearch_test.go diff --git a/cmd/mstdn/cmd_xsearch_test.go b/cmd/mstdn/cmd_xsearch_test.go new file mode 100644 index 0000000..1c91aca --- /dev/null +++ b/cmd/mstdn/cmd_xsearch_test.go @@ -0,0 +1,60 @@ +package main + +import ( + "bytes" + "fmt" + "net/http" + "net/http/httptest" + "strings" + "testing" +) + +func TestXSearch(t *testing.T) { + canErr := true + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if canErr { + canErr = false + http.Error(w, http.StatusText(http.StatusInternalServerError), 9999) + return + } else if r.URL.Query().Get("q") == "empty" { + fmt.Fprintln(w, `

test status

`) + return + } + + fmt.Fprintln(w, `

test status

`) + })) + defer ts.Close() + + err := xSearch(":", "", nil) + if err == nil { + t.Fatalf("should be fail: %v", err) + } + + err = xSearch(ts.URL, "", nil) + if err == nil { + t.Fatalf("should be fail: %v", err) + } + + buf := bytes.NewBuffer(nil) + err = xSearch(ts.URL, "empty", buf) + if err != nil { + t.Fatalf("should not be fail: %v", err) + } + result := buf.String() + if result != "" { + t.Fatalf("the search result should be empty: %s", result) + } + + buf = bytes.NewBuffer(nil) + err = xSearch(ts.URL, "test", buf) + if err != nil { + t.Fatalf("should not be fail: %v", err) + } + result = buf.String() + if !strings.Contains(result, "http://example.com/@test/1") { + t.Fatalf("%q should be contained in output of search: %s", "http://example.com/@test/1", result) + } + if !strings.Contains(result, "test status") { + t.Fatalf("%q should be contained in output of search: %s", "test status", result) + } +} From d0504fea0f59e1cc4eec5da67ded9c47d88cc19f Mon Sep 17 00:00:00 2001 From: 178inaba <178inaba@users.noreply.github.com> Date: Wed, 3 May 2017 03:05:36 +0900 Subject: [PATCH 4/5] Add TestCmdXSearch and TestCmdMikami --- cmd/mstdn/cmd_mikami_test.go | 41 +++++++++++++++++++++++++++++++++++ cmd/mstdn/cmd_test.go | 1 + cmd/mstdn/cmd_xsearch_test.go | 16 ++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 cmd/mstdn/cmd_mikami_test.go diff --git a/cmd/mstdn/cmd_mikami_test.go b/cmd/mstdn/cmd_mikami_test.go new file mode 100644 index 0000000..3fe9eae --- /dev/null +++ b/cmd/mstdn/cmd_mikami_test.go @@ -0,0 +1,41 @@ +package main + +import ( + "bytes" + "fmt" + "net/http" + "strings" + "testing" + + "github.com/urfave/cli" +) + +func TestCmdMikami(t *testing.T) { + ok := false + buf := bytes.NewBuffer(nil) + testWithServer( + func(w http.ResponseWriter, r *http.Request) { + if r.URL.Query().Get("q") == "三上" { + ok = true + fmt.Fprintln(w, `

三上

`) + } + }, + func(app *cli.App) { + app.Writer = buf + err := app.Run([]string{"mstdn", "mikami"}) + if err != nil { + t.Fatalf("should not be fail: %v", err) + } + }, + ) + if !ok { + t.Fatal("should be search Mikami") + } + result := buf.String() + if !strings.Contains(result, "http://example.com/@test/1") { + t.Fatalf("%q should be contained in output of search: %s", "http://example.com/@test/1", result) + } + if !strings.Contains(result, "三上") { + t.Fatalf("%q should be contained in output of search: %s", "三上", result) + } +} diff --git a/cmd/mstdn/cmd_test.go b/cmd/mstdn/cmd_test.go index 5bba072..14043c3 100644 --- a/cmd/mstdn/cmd_test.go +++ b/cmd/mstdn/cmd_test.go @@ -30,6 +30,7 @@ func testWithServer(h http.HandlerFunc, testFuncs ...func(*cli.App)) string { "config": &mastodon.Config{ Server: "https://example.com", }, + "xsearch_url": ts.URL, } for _, f := range testFuncs { diff --git a/cmd/mstdn/cmd_xsearch_test.go b/cmd/mstdn/cmd_xsearch_test.go index 1c91aca..f3dc105 100644 --- a/cmd/mstdn/cmd_xsearch_test.go +++ b/cmd/mstdn/cmd_xsearch_test.go @@ -7,8 +7,24 @@ import ( "net/http/httptest" "strings" "testing" + + "github.com/urfave/cli" ) +func TestCmdXSearch(t *testing.T) { + testWithServer( + func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintln(w, `

test status

`) + }, + func(app *cli.App) { + err := app.Run([]string{"mstdn", "xsearch", "test"}) + if err != nil { + t.Fatalf("should not be fail: %v", err) + } + }, + ) +} + func TestXSearch(t *testing.T) { canErr := true ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { From 5e8f3ded436272734758b214b4751ce8e8d9a234 Mon Sep 17 00:00:00 2001 From: 178inaba <178inaba@users.noreply.github.com> Date: Wed, 3 May 2017 03:50:32 +0900 Subject: [PATCH 5/5] Fix README --- cmd/mstdn/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/mstdn/README.md b/cmd/mstdn/README.md index 6b2dd22..cc6f01c 100644 --- a/cmd/mstdn/README.md +++ b/cmd/mstdn/README.md @@ -28,6 +28,7 @@ COMMANDS: delete delete status init initialize profile mikami search mikami + xsearch cross search help, h Shows a list of commands or help for one command GLOBAL OPTIONS: