118 lines
3.1 KiB
Go
118 lines
3.1 KiB
Go
package handler
|
|
|
|
import (
|
|
"net/http"
|
|
"testing"
|
|
)
|
|
|
|
func TestMatchLearningAuditAction(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
method string
|
|
path string
|
|
action string
|
|
entityType string
|
|
entityID string
|
|
}{
|
|
{
|
|
name: "test create",
|
|
method: http.MethodPost,
|
|
path: "/api/tests",
|
|
action: "learning.test_create",
|
|
entityType: "learning_test",
|
|
},
|
|
{
|
|
name: "question reorder",
|
|
method: http.MethodPost,
|
|
path: "/api/tests/7/questions/reorder",
|
|
action: "learning.question_reorder",
|
|
entityType: "learning_test",
|
|
entityID: "7",
|
|
},
|
|
{
|
|
name: "question update",
|
|
method: http.MethodPut,
|
|
path: "/api/tests/7/questions/9",
|
|
action: "learning.question_update",
|
|
entityType: "learning_question",
|
|
entityID: "9",
|
|
},
|
|
{
|
|
name: "attempt submit",
|
|
method: http.MethodPost,
|
|
path: "/api/attempts/11/submit",
|
|
action: "learning.attempt_submit",
|
|
entityType: "learning_attempt",
|
|
entityID: "11",
|
|
},
|
|
{
|
|
name: "course update",
|
|
method: http.MethodPatch,
|
|
path: "/api/courses/5",
|
|
action: "learning.course_update",
|
|
entityType: "learning_course",
|
|
entityID: "5",
|
|
},
|
|
{
|
|
name: "lesson create",
|
|
method: http.MethodPost,
|
|
path: "/api/courses/5/lessons",
|
|
action: "learning.lesson_create",
|
|
entityType: "learning_course",
|
|
entityID: "5",
|
|
},
|
|
{
|
|
name: "lesson video upload",
|
|
method: http.MethodPost,
|
|
path: "/api/lessons/3/video",
|
|
action: "learning.lesson_video_upload",
|
|
entityType: "learning_lesson",
|
|
entityID: "3",
|
|
},
|
|
{
|
|
name: "access grant create",
|
|
method: http.MethodPost,
|
|
path: "/api/access/course/5",
|
|
action: "learning.access_grant_create",
|
|
entityType: "learning_access",
|
|
entityID: "access/course/5",
|
|
},
|
|
{
|
|
name: "public token revoke",
|
|
method: http.MethodDelete,
|
|
path: "/api/public-tokens/13",
|
|
action: "learning.public_token_revoke",
|
|
entityType: "learning_public_token",
|
|
entityID: "13",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := matchLearningAuditAction(tt.method, tt.path)
|
|
if got.Action != tt.action || got.EntityType != tt.entityType || got.EntityID != tt.entityID {
|
|
t.Fatalf("unexpected action: got %#v, want action=%q entityType=%q entityID=%q", got, tt.action, tt.entityType, tt.entityID)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestMatchLearningAuditActionUnknown(t *testing.T) {
|
|
got := matchLearningAuditAction(http.MethodPost, "/public/learning/tokens/token/resolve")
|
|
if got.Action != "" {
|
|
t.Fatalf("expected no audit action, got %#v", got)
|
|
}
|
|
}
|
|
|
|
func TestExtractAuditEntityID(t *testing.T) {
|
|
if got := extractAuditEntityID([]byte(`{"id":42}`)); got != "42" {
|
|
t.Fatalf("numeric id = %q, want 42", got)
|
|
}
|
|
if got := extractAuditEntityID([]byte(`{"id":"abc"}`)); got != "abc" {
|
|
t.Fatalf("string id = %q, want abc", got)
|
|
}
|
|
if got := extractAuditEntityID([]byte(`{"title":"missing"}`)); got != "" {
|
|
t.Fatalf("missing id = %q, want empty", got)
|
|
}
|
|
}
|