aboutsummaryrefslogtreecommitdiffhomepage
path: root/backend/taskqueue/tasks_test.go
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-16 21:51:17 +0900
committernsfisis <nsfisis@gmail.com>2026-02-16 21:51:17 +0900
commit08c121c21a7e429e43e2d51fa4a3d8bd945c5d01 (patch)
tree6912af4982952945d5c3402fb748ac09e63993cd /backend/taskqueue/tasks_test.go
parent946ba064bcf625e32faf1f202e243fa6b2aa8e27 (diff)
downloadphperkaigi-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.go63
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())
+ }
+}