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) } }