todo-server/server/ajax/task_test.go

178 lines
4.1 KiB
Go

package ajax
import (
"encoding/json"
"local/todo-server/server/ajax/task"
"net/http"
"net/http/httptest"
"strings"
"testing"
)
func TestAjaxLoadTasks(t *testing.T) {
a := mockAjax()
func() {
w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/", nil)
a.loadTasks(w, r)
var result struct {
List []string `json:"list"`
}
if v := w.Code; v != http.StatusOK {
t.Error(v)
} else if err := json.NewDecoder(w.Body).Decode(&result); err != nil {
t.Error(err)
} else if len(result.List) != 0 {
t.Error(result)
}
}()
a.storageSetTask("list", "task", &task.Task{Title: "hi"})
func() {
w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/", nil)
a.loadTasks(w, r)
var result struct {
List []task.Task `json:"list"`
}
if v := w.Code; v != http.StatusOK {
t.Error(v)
} else if err := json.NewDecoder(w.Body).Decode(&result); err != nil {
t.Error(err)
} else if len(result.List) != 1 {
t.Error(result)
}
}()
}
func TestAjaxNewTask(t *testing.T) {
ajax := mockAjax()
w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/", strings.NewReader(`{
"title":"a"
}`))
ajax.newTask(w, r)
if v := w.Code; v != http.StatusOK {
t.Error(v)
}
results, err := ajax.storageListTasks("list")
if err != nil {
t.Fatal(err)
}
if len(results) != 1 {
t.Error(results)
}
}
func TestAjaxMakeTask(t *testing.T) {
ajax := mockAjax()
r := httptest.NewRequest("GET", "/", strings.NewReader(`{
"title":"a"
}`))
listID, task, err := ajax.makeTask(r)
if err != nil {
t.Fatal(err)
}
if listID != "list" {
t.Error(listID)
}
if task.Title != "a" {
t.Error(task)
}
}
func TestAjaxDeleteTask(t *testing.T) {
ajax := mockAjax()
ajax.storageSetTask("list", "b", &task.Task{Title: "c"})
w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/?id=b", nil)
ajax.deleteTask(w, r)
if v := w.Code; v != http.StatusOK {
t.Error(v)
}
results, err := ajax.storageListTasks("list")
if err != nil {
t.Fatal(err)
}
if len(results) != 0 {
t.Error(results)
}
if _, err := ajax.storageGetTask("list", "b"); err == nil {
t.Fatal(err)
}
}
func TestAjaxCompleteTask(t *testing.T) {
ajax := mockAjax()
ajax.storageSetTask("list", "b", &task.Task{Title: "c"})
for _, state := range []string{"1", "0"} {
w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/?id=b&compl="+state, nil)
ajax.completeTask(w, r)
if v := w.Code; v != http.StatusOK {
t.Error(v)
}
if task, err := ajax.storageGetTask("list", "b"); err != nil {
t.Fatal(err)
} else if task.Complete != (state == "1") {
t.Error(task)
}
}
}
func TestAjaxEditNote(t *testing.T) {
ajax := mockAjax()
ajax.storageSetTask("list", "b", &task.Task{Title: "c", Note: []string{"hi", "mom"}})
w := httptest.NewRecorder()
r := httptest.NewRequest("POST", "/?id=b&compl=0", strings.NewReader(`{
"note":"hello world i like tacos"
}`))
ajax.editNote(w, r)
if v := w.Code; v != http.StatusOK {
t.Error(v)
}
if task, err := ajax.storageGetTask("list", "b"); err != nil {
t.Fatal(err)
} else if len(task.Note) != 1 {
t.Error(task.Note)
}
}
func TestAjaxEditTask(t *testing.T) {
ajax := mockAjax()
ajax.storageSetTask("list", "b", &task.Task{Title: "c", Note: []string{"hi"}})
w := httptest.NewRecorder()
r := httptest.NewRequest("POST", "/?id=b&compl=0", strings.NewReader(`{
"title": "newtitle",
"note":"hello world i like tacos"
}`))
ajax.editTask(w, r)
if v := w.Code; v != http.StatusOK {
t.Error(v)
}
if task, err := ajax.storageGetTask("list", "b"); err != nil {
t.Fatal(err)
} else if task.Title != "newtitle" {
t.Error(task)
}
}
func TestAjaxMoveTask(t *testing.T) {
ajax := mockAjax()
ajax.storageSetTask("list", "b", &task.Task{Title: "c"})
w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/?id=b&to=listB", strings.NewReader(`{}`))
ajax.moveTask(w, r)
if v := w.Code; v != http.StatusOK {
t.Error(v)
}
if task, err := ajax.storageGetTask("list", "b"); err == nil {
t.Error(err, task)
}
if task, err := ajax.storageGetTask("listB", "b"); err != nil {
t.Error(err, task)
}
}