diff --git a/templated_tests/go/taskmgr/internal/cli/parser_test.go b/templated_tests/go/taskmgr/internal/cli/parser_test.go index 104ca07..5f6e66f 100644 --- a/templated_tests/go/taskmgr/internal/cli/parser_test.go +++ b/templated_tests/go/taskmgr/internal/cli/parser_test.go @@ -11,3 +11,14 @@ func TestParseArgs(t *testing.T) { t.Errorf("Expected args ['MyTask'], got %v", rest) } } + +func TestParseArgsEmptyInput(t *testing.T) { + cmd, rest := ParseArgs([]string{}) + if cmd != "" { + t.Errorf("Expected cmd '', got '%s'", cmd) + } + if rest != nil { + t.Errorf("Expected args nil, got %v", rest) + } +} + diff --git a/templated_tests/go/taskmgr/internal/tasks/store_test.go b/templated_tests/go/taskmgr/internal/tasks/store_test.go index 044ab5c..64f1473 100644 --- a/templated_tests/go/taskmgr/internal/tasks/store_test.go +++ b/templated_tests/go/taskmgr/internal/tasks/store_test.go @@ -58,3 +58,91 @@ func TestFileStore(t *testing.T) { t.Errorf("Expected persisted 'Updated' task, got %v", list) } } + +func TestRemoveLoadTasksError(t *testing.T) { + dir, err := ioutil.TempDir("", "taskmgr_test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(dir) + + testFile := filepath.Join(dir, "tasks.json") + store := NewFileStore(testFile) + + // Create a file with invalid JSON to simulate load error + if err := ioutil.WriteFile(testFile, []byte("{invalid json"), 0644); err != nil { + t.Fatalf("Failed to write invalid JSON: %v", err) + } + + err = store.Remove(0) + if err == nil { + t.Error("Expected error when removing task with invalid JSON file, got nil") + } +} + + +func TestUpdateLoadTasksError(t *testing.T) { + dir, err := ioutil.TempDir("", "taskmgr_test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(dir) + + testFile := filepath.Join(dir, "tasks.json") + store := NewFileStore(testFile) + + // Create a file with invalid JSON to simulate load error + if err := ioutil.WriteFile(testFile, []byte("{invalid json"), 0644); err != nil { + t.Fatalf("Failed to write invalid JSON: %v", err) + } + + err = store.Update(0, Task{Title: "Updated"}) + if err == nil { + t.Error("Expected error when updating task with invalid JSON file, got nil") + } +} + + +func TestListLoadTasksError(t *testing.T) { + dir, err := ioutil.TempDir("", "taskmgr_test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(dir) + + testFile := filepath.Join(dir, "tasks.json") + store := NewFileStore(testFile) + + // Create a file with invalid JSON to simulate load error + if err := ioutil.WriteFile(testFile, []byte("{invalid json"), 0644); err != nil { + t.Fatalf("Failed to write invalid JSON: %v", err) + } + + list := store.List() + if len(list) != 0 { + t.Errorf("Expected empty list on load error, got %d tasks", len(list)) + } +} + + +func TestAddLoadTasksError(t *testing.T) { + dir, err := ioutil.TempDir("", "taskmgr_test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(dir) + + testFile := filepath.Join(dir, "tasks.json") + store := NewFileStore(testFile) + + // Create a file with invalid JSON to simulate load error + if err := ioutil.WriteFile(testFile, []byte("{invalid json"), 0644); err != nil { + t.Fatalf("Failed to write invalid JSON: %v", err) + } + + err = store.Add(Task{Title: "Example"}) + if err == nil { + t.Error("Expected error when adding task with invalid JSON file, got nil") + } +} + diff --git a/templated_tests/go/taskmgr/internal/tasks/tasks_test.go b/templated_tests/go/taskmgr/internal/tasks/tasks_test.go index cf275fe..de21e5b 100644 --- a/templated_tests/go/taskmgr/internal/tasks/tasks_test.go +++ b/templated_tests/go/taskmgr/internal/tasks/tasks_test.go @@ -48,3 +48,268 @@ func TestTaskManager(t *testing.T) { t.Errorf("Expected persisted task 'First' to be done, got %v", newList) } } + +func TestUndoDoneOutOfRange(t *testing.T) { + dir, err := ioutil.TempDir("", "taskmgr_tasks_test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(dir) + + store := NewFileStore(filepath.Join(dir, "tasks.json")) + manager := NewTaskManager(store) + + err = manager.Add(Task{Title: "Task 1", Done: true}) + if err != nil { + t.Fatal("Error adding task:", err) + } + + err = manager.UndoDone("1") + if err == nil || err.Error() != "invalid index" { + t.Errorf("Expected 'invalid index' error, got %v", err) + } +} + + +func TestMarkAllDone(t *testing.T) { + dir, err := ioutil.TempDir("", "taskmgr_tasks_test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(dir) + + store := NewFileStore(filepath.Join(dir, "tasks.json")) + manager := NewTaskManager(store) + + tasks := []Task{ + {Title: "Task 1", Done: false}, + {Title: "Task 2", Done: false}, + } + + err = manager.BulkAdd(tasks) + if err != nil { + t.Fatal("Error adding tasks:", err) + } + + err = manager.MarkAllDone() + if err != nil { + t.Errorf("Expected no error, got %v", err) + } + + list := manager.List() + for _, task := range list { + if !task.Done { + t.Error("Expected all tasks to be marked done") + } + } +} + + +func TestRemoveOutOfRange(t *testing.T) { + dir, err := ioutil.TempDir("", "taskmgr_tasks_test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(dir) + + store := NewFileStore(filepath.Join(dir, "tasks.json")) + manager := NewTaskManager(store) + + err = manager.Add(Task{Title: "Task 1"}) + if err != nil { + t.Fatal("Error adding task:", err) + } + + err = manager.Remove("1") + if err == nil || err.Error() != "invalid index" { + t.Errorf("Expected 'invalid index' error, got %v", err) + } +} + + +func TestMarkDoneOutOfRange(t *testing.T) { + dir, err := ioutil.TempDir("", "taskmgr_tasks_test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(dir) + + store := NewFileStore(filepath.Join(dir, "tasks.json")) + manager := NewTaskManager(store) + + err = manager.Add(Task{Title: "Task 1"}) + if err != nil { + t.Fatal("Error adding task:", err) + } + + err = manager.MarkDone("1") + if err == nil || err.Error() != "invalid index" { + t.Errorf("Expected 'invalid index' error, got %v", err) + } +} + + +func TestFindByDescription(t *testing.T) { + dir, err := ioutil.TempDir("", "taskmgr_tasks_test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(dir) + + store := NewFileStore(filepath.Join(dir, "tasks.json")) + manager := NewTaskManager(store) + + manager.Add(Task{Title: "Task 1", Description: "Common Description"}) + manager.Add(Task{Title: "Task 2", Description: "Common Description"}) + + tasks := manager.FindByDescription("Common Description") + if len(tasks) != 2 { + t.Errorf("Expected to find 2 tasks, got %d", len(tasks)) + } +} + + +func TestFindByTitle(t *testing.T) { + dir, err := ioutil.TempDir("", "taskmgr_tasks_test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(dir) + + store := NewFileStore(filepath.Join(dir, "tasks.json")) + manager := NewTaskManager(store) + + manager.Add(Task{Title: "Unique Title"}) + + task := manager.FindByTitle("Unique Title") + if task == nil || task.Title != "Unique Title" { + t.Errorf("Expected to find task with title 'Unique Title', got %v", task) + } +} + + +func TestUndoDone(t *testing.T) { + dir, err := ioutil.TempDir("", "taskmgr_tasks_test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(dir) + + store := NewFileStore(filepath.Join(dir, "tasks.json")) + manager := NewTaskManager(store) + + err = manager.Add(Task{Title: "Task to Undo", Done: true}) + if err != nil { + t.Fatal("Error adding task:", err) + } + + err = manager.UndoDone("0") + if err != nil { + t.Errorf("Expected no error, got %v", err) + } + + list := manager.List() + if list[0].Done { + t.Error("Expected task to be marked not done") + } +} + + +func TestRemoveValidIndex(t *testing.T) { + dir, err := ioutil.TempDir("", "taskmgr_tasks_test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(dir) + + store := NewFileStore(filepath.Join(dir, "tasks.json")) + manager := NewTaskManager(store) + + err = manager.Add(Task{Title: "Task to Remove"}) + if err != nil { + t.Fatal("Error adding task:", err) + } + + err = manager.Remove("0") + if err != nil { + t.Errorf("Expected no error, got %v", err) + } + + list := manager.List() + if len(list) != 0 { + t.Errorf("Expected no tasks, got %d", len(list)) + } +} + + +func TestCountDone(t *testing.T) { + dir, err := ioutil.TempDir("", "taskmgr_tasks_test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(dir) + + store := NewFileStore(filepath.Join(dir, "tasks.json")) + manager := NewTaskManager(store) + + tasks := []Task{ + {Title: "Task 1", Done: true}, + {Title: "Task 2", Done: false}, + {Title: "Task 3", Done: true}, + } + + err = manager.BulkAdd(tasks) + if err != nil { + t.Fatal("Error adding tasks:", err) + } + + doneCount := manager.CountDone() + if doneCount != 2 { + t.Errorf("Expected 2 done tasks, got %d", doneCount) + } +} + + +func TestBulkAdd(t *testing.T) { + dir, err := ioutil.TempDir("", "taskmgr_tasks_test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(dir) + + store := NewFileStore(filepath.Join(dir, "tasks.json")) + manager := NewTaskManager(store) + + tasks := []Task{ + {Title: "Task 1"}, + {Title: "Task 2"}, + } + + err = manager.BulkAdd(tasks) + if err != nil { + t.Fatal("Error adding tasks:", err) + } + + list := manager.List() + if len(list) != 2 { + t.Errorf("Expected 2 tasks, got %d", len(list)) + } +} + + +func TestMarkDoneInvalidIndex(t *testing.T) { + dir, err := ioutil.TempDir("", "taskmgr_tasks_test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(dir) + + store := NewFileStore(filepath.Join(dir, "tasks.json")) + manager := NewTaskManager(store) + + err = manager.MarkDone("invalid") + if err == nil { + t.Error("Expected error for invalid index, got nil") + } +} +