package chat
import "encoding/json"
import "net/http"
import "net/http/httptest"
import "testing"
import "time"
func TestSend(t *testing.T) {
var seen SendRequest
srv := httptest.NewServer(http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/chat/send" {
t.Errorf(
"path: got %q, want /chat/send", r.URL.Path)
}
json.NewDecoder(r.Body).Decode(&seen)
json.NewEncoder(w).Encode(Message{
From: "alice",
To: seen.To,
Text: seen.Text,
CreatedAt: time.Now(),
})
}))
defer srv.Close()
c := NewHTTPClient(srv.URL, "test-key")
msg, err := c.Send(SendRequest{
To: "team", Text: "hello",
})
if err != nil {
t.Fatal(err)
}
if msg.To != "team" || msg.Text != "hello" {
t.Errorf("msg: %+v", msg)
}
if seen.To != "team" {
t.Errorf("seen.To: got %q", seen.To)
}
}
func TestSetPermissions(t *testing.T) {
var seen SetPermissionsRequest
srv := httptest.NewServer(http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/chat/permissions/set" {
t.Errorf(
"path: got %q, want /chat/permissions/set",
r.URL.Path)
}
json.NewDecoder(r.Body).Decode(&seen)
w.WriteHeader(200)
}))
defer srv.Close()
c := NewHTTPClient(srv.URL, "test-key")
err := c.SetPermissions(SetPermissionsRequest{
Group: "team",
Permission: "post",
Owner: "alice",
Reader: "team",
})
if err != nil {
t.Fatal(err)
}
if seen.Group != "team" || seen.Permission != "post" {
t.Errorf(
"got %+v, want team/post", seen)
}
}
func TestSearch(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/chat/search" {
t.Errorf(
"path: got %q, want /chat/search", r.URL.Path)
}
json.NewEncoder(w).Encode(SearchResponse{
Messages: []*Message{
{From: "alice", To: "team", Text: "hello"},
{From: "bob", To: "team", Text: "world"},
},
})
}))
defer srv.Close()
c := NewHTTPClient(srv.URL, "test-key")
msgs, err := c.Search(SearchRequest{To: "team"})
if err != nil {
t.Fatal(err)
}
if len(msgs) != 2 {
t.Fatalf("len: got %d, want 2", len(msgs))
}
if msgs[0].Text != "hello" {
t.Errorf("msgs[0].Text: got %q", msgs[0].Text)
}
}