todo-server/server/ajax/task/task_test.go

72 lines
1.5 KiB
Go

package task
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"net/http/httptest"
"testing"
)
func TestNew(t *testing.T) {
if _, err := New(toReq(map[string]interface{}{})); err != nil {
t.Error(err)
}
if _, err := New(toReq(map[string]interface{}{"title": ""})); err == nil {
t.Error(err)
}
if task, err := New(toReq(map[string]interface{}{"title": "i want dogs /a,b,c/"})); err != nil {
t.Error(err)
} else if task.Title != "i want dogs" {
t.Error(task.Title)
} else if fmt.Sprint(task.Tags) != "[a b c]" {
t.Error(task.Tags)
} else {
was := task.Edited
task.touch()
if was == task.Edited {
t.Error(was)
}
was = task.Edited
task.SetNote("hell\nno")
if was == task.Edited {
t.Error(was)
} else if len(task.Note) != 2 {
t.Error(task.Note)
}
}
}
func toReq(m map[string]interface{}) *http.Request {
if m == nil {
m = map[string]interface{}{}
}
els := map[string]interface{}{
"title": "title",
"prio": 1,
"tags": "a, b,c",
"duedate": "2010-02-03 05:06:07",
"note": "hello\nworld\ni\nam a note\nand\ni have\nlots\nof\nlines",
}
for k := range els {
if _, ok := m[k]; !ok {
m[k] = els[k]
}
}
b, _ := json.Marshal(m)
return httptest.NewRequest("POST", "/paht", bytes.NewReader(b))
}
func TestJSONMarshal(t *testing.T) {
task := &Task{Tags: []string{"a", "b"}}
b, _ := json.Marshal(task)
var m map[string]interface{}
json.Unmarshal(b, &m)
if v, ok := m["tags"]; !ok {
t.Error(ok, m)
} else if v != "a, b" {
t.Error(v, m)
}
}