chipmunk/server_test.go

169 lines
5.0 KiB
Go

package chipmunk
import (
"bytes"
"fmt"
"io"
"net/http"
"net/http/httptest"
"testing"
)
func TestAdd(t *testing.T) {
defer clearContacts()
sm := http.NewServeMux()
AddRoutes(sm)
ts := httptest.NewServer(sm)
//adding normal user
u := fmt.Sprintf("%s%s?name=derek&number=1234", ts.URL, prefix["add"])
req, err := http.NewRequest("POST", u, nil)
resp, err := http.DefaultClient.Do(req)
if err != nil {
t.Fatalf("couldn't POST: %v", err)
}
if got, want := resp.StatusCode, http.StatusOK; got != want {
buf := &bytes.Buffer{}
io.Copy(buf, resp.Body)
t.Logf("%s", buf.Bytes())
t.Fatalf("bad request got incorrect status: got %d, want %d", got, want)
}
//testing poorly formed query
u = fmt.Sprintf("%s%s?this=derek&shouldfail=1234", ts.URL, prefix["add"])
req, err = http.NewRequest("POST", u, nil)
resp, err = http.DefaultClient.Do(req)
if err != nil {
t.Fatalf("couldn't POST: %v", err)
}
if got, want := resp.StatusCode, http.StatusBadRequest; got != want {
buf := &bytes.Buffer{}
io.Copy(buf, resp.Body)
t.Logf("%s", buf.Bytes())
t.Fatalf("bad request got incorrect status: got %d, want %d", got, want)
}
//adding same user twice
u = fmt.Sprintf("%s%s?name=derek&number=1234", ts.URL, prefix["add"])
req, err = http.NewRequest("POST", u, nil)
resp, err = http.DefaultClient.Do(req)
if err != nil {
t.Fatalf("couldn't POST: %v", err)
}
if got, want := resp.StatusCode, http.StatusBadRequest; got != want {
buf := &bytes.Buffer{}
io.Copy(buf, resp.Body)
t.Logf("%s", buf.Bytes())
t.Fatalf("bad request got incorrect status: got %d, want %d", got, want)
}
}
func TestDel(t *testing.T) {
defer clearContacts()
sm := http.NewServeMux()
AddRoutes(sm)
ts := httptest.NewServer(sm)
//adding normal user
u := fmt.Sprintf("%s%s?name=derek&number=1234", ts.URL, prefix["add"])
req, err := http.NewRequest("POST", u, nil)
resp, err := http.DefaultClient.Do(req)
if err != nil {
t.Fatalf("couldn't POST: %v", err)
}
if got, want := resp.StatusCode, http.StatusOK; got != want {
buf := &bytes.Buffer{}
io.Copy(buf, resp.Body)
t.Logf("%s", buf.Bytes())
t.Fatalf("bad request got incorrect status: got %d, want %d", got, want)
}
//remove user that doesn't exists
u = fmt.Sprintf("%s%s?name=doesnotexist", ts.URL, prefix["delete"])
req, err = http.NewRequest("DELETE", u, nil)
resp, err = http.DefaultClient.Do(req)
if err != nil {
t.Fatalf("couldn't DELETE: %v", err)
}
if got, want := resp.StatusCode, http.StatusNoContent; got != want {
buf := &bytes.Buffer{}
io.Copy(buf, resp.Body)
t.Logf("%s", buf.Bytes())
t.Fatalf("bad request got incorrect status: got %d, want %d", got, want)
}
//remove user that exists
u = fmt.Sprintf("%s%s?name=derek", ts.URL, prefix["delete"])
req, err = http.NewRequest("DELETE", u, nil)
resp, err = http.DefaultClient.Do(req)
if err != nil {
t.Fatalf("couldn't DELETE: %v", err)
}
if got, want := resp.StatusCode, http.StatusOK; got != want {
buf := &bytes.Buffer{}
io.Copy(buf, resp.Body)
t.Logf("%s", buf.Bytes())
t.Fatalf("bad request got incorrect status: got %d, want %d", got, want)
}
// attempt to get deleted user, should fail
u = fmt.Sprintf("%s%s?name=derek", ts.URL, prefix["search"])
req, err = http.NewRequest("GET", u, nil)
resp, err = http.DefaultClient.Do(req)
if err != nil {
t.Fatalf("couldn't GET: %v", err)
}
if got, want := resp.StatusCode, http.StatusNoContent; got != want {
buf := &bytes.Buffer{}
io.Copy(buf, resp.Body)
t.Logf("%s", buf.Bytes())
t.Fatalf("bad request got incorrect status: got %d, want %d", got, want)
}
}
func TestEdit(t *testing.T) {
defer clearContacts()
sm := http.NewServeMux()
AddRoutes(sm)
ts := httptest.NewServer(sm)
//adding normal user
u := fmt.Sprintf("%s%s?name=derek&number=1234", ts.URL, prefix["add"])
req, err := http.NewRequest("POST", u, nil)
resp, err := http.DefaultClient.Do(req)
if err != nil {
t.Fatalf("couldn't POST: %v", err)
}
if got, want := resp.StatusCode, http.StatusOK; got != want {
buf := &bytes.Buffer{}
io.Copy(buf, resp.Body)
t.Logf("%s", buf.Bytes())
t.Fatalf("bad request got incorrect status: got %d, want %d", got, want)
}
//edit user
u = fmt.Sprintf("%s%s?name=derek&edit=drock", ts.URL, prefix["edit"])
req, err = http.NewRequest("POST", u, nil)
resp, err = http.DefaultClient.Do(req)
if err != nil {
t.Fatalf("couldn't POST: %v", err)
}
if got, want := resp.StatusCode, http.StatusOK; got != want {
buf := &bytes.Buffer{}
io.Copy(buf, resp.Body)
t.Logf("%s", buf.Bytes())
t.Fatalf("bad request got incorrect status: got %d, want %d", got, want)
}
// get the edited user
u = fmt.Sprintf("%s%s?name=drock", ts.URL, prefix["search"])
req, err = http.NewRequest("GET", u, nil)
resp, err = http.DefaultClient.Do(req)
if err != nil {
t.Fatalf("couldn't GET: %v", err)
}
if got, want := resp.StatusCode, http.StatusOK; got != want {
buf := &bytes.Buffer{}
io.Copy(buf, resp.Body)
t.Logf("%s", buf.Bytes())
t.Fatalf("bad request got incorrect status: got %d, want %d", got, want)
}
}