diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-16 21:51:17 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-16 21:51:17 +0900 |
| commit | 08c121c21a7e429e43e2d51fa4a3d8bd945c5d01 (patch) | |
| tree | 6912af4982952945d5c3402fb748ac09e63993cd /backend/taskqueue/tasks_test.go | |
| parent | 946ba064bcf625e32faf1f202e243fa6b2aa8e27 (diff) | |
| download | phperkaigi-2026-albatross-08c121c21a7e429e43e2d51fa4a3d8bd945c5d01.tar.gz phperkaigi-2026-albatross-08c121c21a7e429e43e2d51fa4a3d8bd945c5d01.tar.zst phperkaigi-2026-albatross-08c121c21a7e429e43e2d51fa4a3d8bd945c5d01.zip | |
test(backend): add unit tests for admin handlers and taskqueue
Add comprehensive tests for previously untested packages:
- admin: middleware auth checks, CRUD handlers for users/games/problems/testcases
- taskqueue: task creation, payload serialization, code hash calculation
- api: expose SetUserInContext helper for cross-package test support
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'backend/taskqueue/tasks_test.go')
| -rw-r--r-- | backend/taskqueue/tasks_test.go | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/backend/taskqueue/tasks_test.go b/backend/taskqueue/tasks_test.go new file mode 100644 index 0000000..5eaaf71 --- /dev/null +++ b/backend/taskqueue/tasks_test.go @@ -0,0 +1,63 @@ +package taskqueue + +import ( + "encoding/json" + "testing" +) + +func TestNewTaskRunTestcase(t *testing.T) { + task, err := newTaskRunTestcase(1, 2, 3, 4, "php", "<?php echo 1;", "input", "output") + if err != nil { + t.Fatalf("newTaskRunTestcase returned error: %v", err) + } + if task.Type() != string(TaskTypeRunTestcase) { + t.Errorf("task type = %q, want %q", task.Type(), TaskTypeRunTestcase) + } + + var payload TaskPayloadRunTestcase + if err := json.Unmarshal(task.Payload(), &payload); err != nil { + t.Fatalf("failed to unmarshal payload: %v", err) + } + if payload.GameID != 1 { + t.Errorf("GameID = %d, want 1", payload.GameID) + } + if payload.UserID != 2 { + t.Errorf("UserID = %d, want 2", payload.UserID) + } + if payload.SubmissionID != 3 { + t.Errorf("SubmissionID = %d, want 3", payload.SubmissionID) + } + if payload.TestcaseID != 4 { + t.Errorf("TestcaseID = %d, want 4", payload.TestcaseID) + } + if payload.Language != "php" { + t.Errorf("Language = %q, want %q", payload.Language, "php") + } + if payload.Code != "<?php echo 1;" { + t.Errorf("Code = %q, want %q", payload.Code, "<?php echo 1;") + } + if payload.Stdin != "input" { + t.Errorf("Stdin = %q, want %q", payload.Stdin, "input") + } + if payload.Stdout != "output" { + t.Errorf("Stdout = %q, want %q", payload.Stdout, "output") + } +} + +func TestTaskResultRunTestcase_Interface(t *testing.T) { + result := &TaskResultRunTestcase{ + TaskPayload: &TaskPayloadRunTestcase{GameID: 42}, + Status: "pass", + Stdout: "hello", + Stderr: "", + } + + var _ TaskResult = result + + if result.Type() != TaskTypeRunTestcase { + t.Errorf("Type() = %q, want %q", result.Type(), TaskTypeRunTestcase) + } + if result.GameID() != 42 { + t.Errorf("GameID() = %d, want 42", result.GameID()) + } +} |
