From ee77d9d3b790ea1554b81b2513e12a4e58033afb Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Tue, 12 Nov 2019 14:47:33 -0700 Subject: [PATCH] Unittest tasks --- server/ajax/ajax.go | 4 +- server/ajax/storage.go | 7 +- server/ajax/storage_test.go | 61 +++++++++++++++++ server/ajax/task.go | 2 +- server/ajax/task_test.go | 130 ++++++++++++++++++++++++++++++++++++ 5 files changed, 200 insertions(+), 4 deletions(-) create mode 100644 server/ajax/storage_test.go diff --git a/server/ajax/ajax.go b/server/ajax/ajax.go index 75b1a92..8749bac 100644 --- a/server/ajax/ajax.go +++ b/server/ajax/ajax.go @@ -67,7 +67,9 @@ func (a *Ajax) HandleAjax(w http.ResponseWriter, r *http.Request) { } else if v := params.Get("setHideList"); v != "" { foo = a.setHideList } - if err := foo(w, r); err != nil { + if err := foo(w, r); err == storage.ErrNotFound { + http.Error(w, err.Error(), http.StatusNotFound) + } else if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } diff --git a/server/ajax/storage.go b/server/ajax/storage.go index 6542201..833d65e 100644 --- a/server/ajax/storage.go +++ b/server/ajax/storage.go @@ -49,8 +49,11 @@ func (a *Ajax) storageGetTask(listID, taskID string) (*task.Task, error) { return &task, err } -func (a *Ajax) storageSetTask(listID, taskID string, task *task.Task) error { - return a.storageSet(path.Join(listID, taskID), *task) +func (a *Ajax) storageSetTask(listID, taskID string, newTask *task.Task) error { + if newTask == nil { + newTask = &task.Task{} + } + return a.storageSet(path.Join(listID, taskID), *newTask) } func (a *Ajax) storageDelTask(listID, taskID string) error { diff --git a/server/ajax/storage_test.go b/server/ajax/storage_test.go new file mode 100644 index 0000000..f43d466 --- /dev/null +++ b/server/ajax/storage_test.go @@ -0,0 +1,61 @@ +package ajax + +import ( + "local/todo-server/server/ajax/task" + "net/http/httptest" + "testing" +) + +func TestAjaxStorageCur(t *testing.T) { + ajax := mockAjax() + r := httptest.NewRequest("POST", "/?id=abc", nil) + listID, taskID, tags := ajax.Cur(r) + if listID != "list" { + t.Error(listID) + } + if taskID != "abc" { + t.Error(taskID) + } + if len(tags) != 0 { + t.Error(tags) + } +} + +func TestAjaxStorageListTasks(t *testing.T) { + ajax := mockAjax() + ajax.storageSetTask("a", "b", &task.Task{Title: "x"}) + ajax.storageSetTask("a", "c", &task.Task{Title: "y"}) + ajax.storageSetTask("a", "d", &task.Task{Title: "z"}) + filter := func(task *task.Task) bool { + return task.Title == "x" || task.Title == "y" + } + + if results, err := ajax.storageListTasks("a"); err != nil { + t.Error(err) + } else if len(results) != 3 { + t.Error(results) + } + + if results, err := ajax.storageListTasks("a", filter); err != nil { + t.Error(err) + } else if len(results) != 2 { + t.Error(results) + } +} + +func TestAjaxStorageGetSetDelTask(t *testing.T) { + ajax := mockAjax() + if _, err := ajax.storageGetTask("a", "b"); err == nil { + t.Error(err) + } else if err := ajax.storageSetTask("a", "b", &task.Task{Title: "c"}); err != nil { + t.Error(err) + } else if task, err := ajax.storageGetTask("a", "b"); err != nil { + t.Error(err) + } else if task.Title != "c" { + t.Error(err) + } else if err := ajax.storageDelTask("a", "b"); err != nil { + t.Error(err) + } else if _, err := ajax.storageGetTask("a", "b"); err == nil { + t.Error(err) + } +} diff --git a/server/ajax/task.go b/server/ajax/task.go index 6fd84aa..f998adf 100644 --- a/server/ajax/task.go +++ b/server/ajax/task.go @@ -119,7 +119,7 @@ func (a *Ajax) moveTask(w http.ResponseWriter, r *http.Request) error { if err != nil { return err } - a.storageSetTask(listID, taskID, nil) + a.storageDelTask(listID, taskID) return a.storageSetTask(toList, taskID, task) } diff --git a/server/ajax/task_test.go b/server/ajax/task_test.go index bf78efe..ec3cdb5 100644 --- a/server/ajax/task_test.go +++ b/server/ajax/task_test.go @@ -5,6 +5,7 @@ import ( "local/todo-server/server/ajax/task" "net/http" "net/http/httptest" + "strings" "testing" ) @@ -45,3 +46,132 @@ func TestAjaxLoadTasks(t *testing.T) { } }() } + +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) + } +}