From 08c121c21a7e429e43e2d51fa4a3d8bd945c5d01 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Mon, 16 Feb 2026 21:51:17 +0900 Subject: 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 --- backend/taskqueue/processor_test.go | 41 ++++++++++++++++++++++++ backend/taskqueue/tasks_test.go | 63 +++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 backend/taskqueue/processor_test.go create mode 100644 backend/taskqueue/tasks_test.go (limited to 'backend/taskqueue') diff --git a/backend/taskqueue/processor_test.go b/backend/taskqueue/processor_test.go new file mode 100644 index 0000000..3646b4c --- /dev/null +++ b/backend/taskqueue/processor_test.go @@ -0,0 +1,41 @@ +package taskqueue + +import ( + "testing" +) + +func TestCalcCodeHash(t *testing.T) { + // Same code + same testcaseID should produce same hash + hash1 := calcCodeHash("echo hello", 1) + hash2 := calcCodeHash("echo hello", 1) + if hash1 != hash2 { + t.Errorf("same input produced different hashes: %q vs %q", hash1, hash2) + } + + // Different code should produce different hash + hash3 := calcCodeHash("echo world", 1) + if hash1 == hash3 { + t.Errorf("different code produced same hash: %q", hash1) + } + + // Different testcaseID should produce different hash + hash4 := calcCodeHash("echo hello", 2) + if hash1 == hash4 { + t.Errorf("different testcaseID produced same hash: %q", hash1) + } + + // Hash should be a valid hex md5 (32 characters) + if len(hash1) != 32 { + t.Errorf("hash length = %d, want 32", len(hash1)) + } +} + +func TestCalcCodeHash_EmptyCode(t *testing.T) { + hash := calcCodeHash("", 0) + if hash == "" { + t.Error("hash should not be empty for empty code") + } + if len(hash) != 32 { + t.Errorf("hash length = %d, want 32", len(hash)) + } +} 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", "