diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c49bd7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.env diff --git a/client_test.go b/client_test.go new file mode 100644 index 0000000..de1d441 --- /dev/null +++ b/client_test.go @@ -0,0 +1,132 @@ +package sn_test + +import ( + "bufio" + "fmt" + "log" + "os" + "strings" + "testing" + + sn "github.com/ekzyis/snappy" +) + +var ( + c = testClient() +) + +func TestQueryItems(t *testing.T) { + var ( + cursor *sn.ItemsCursor + err error + ) + + if cursor, err = c.Items(nil); err != nil { + t.Error(err) + return + } + + if len(cursor.Items) == 0 { + t.Error("items cursor empty") + return + } +} + +func TestMutationCreateComment(t *testing.T) { + var ( + parentId = 349 + text = "test comment" + err error + ) + + // TODO: return result, invoice, paymentMethod from CreateComment and run assertions on that + if _, err = c.CreateComment(parentId, text); err != nil { + t.Error(err) + return + } +} + +func TestMutationPostDiscussion(t *testing.T) { + var ( + title = "test discussion" + text = "test discussion text" + sub = "bitcoin" + err error + ) + + // TODO: return result, invoice, paymentMethod from CreateComment and run assertions on that + if _, err = c.PostDiscussion(title, text, sub); err != nil { + t.Error(err) + return + } +} + +func TestMutationPostLink(t *testing.T) { + var ( + url = "https://stacker.news" + title = "test discussion" + text = "test discussion text" + sub = "bitcoin" + err error + ) + + // TODO: return result, invoice, paymentMethod from CreateComment and run assertions on that + if _, err = c.PostLink(url, title, text, sub); err != nil { + t.Error(err) + return + } +} + +func testClient() *sn.Client { + loadEnv() + + baseUrl, set := os.LookupEnv("TEST_SN_BASE_URL") + if !set { + baseUrl = "http://localhost:3000" + } + log.Printf("baseUrl=%s\n", baseUrl) + + apiKey, set := os.LookupEnv("TEST_SN_API_KEY") + if !set { + log.Fatalf("TEST_SN_API_KEY is not set") + } + log.Printf("apiKey=%s\n", apiKey) + + return sn.NewClient( + sn.WithBaseUrl(baseUrl), + sn.WithApiKey(apiKey), + ) +} + +func loadEnv() { + var ( + f *os.File + s *bufio.Scanner + err error + ) + + if f, err = os.Open(".env"); err != nil { + log.Fatalf("error opening .env: %v", err) + } + defer f.Close() + + s = bufio.NewScanner(f) + s.Split(bufio.ScanLines) + for s.Scan() { + line := s.Text() + parts := strings.SplitN(line, "=", 2) + + // Check if we have exactly 2 parts (key and value) + if len(parts) == 2 { + os.Setenv(parts[0], parts[1]) + } else { + log.Fatalf(".env: invalid line: %s\n", line) + } + } + + // Check for errors during scanning + if err = s.Err(); err != nil { + fmt.Println("error scanning .env:", err) + } + +}