| Test | Status | Time |
|---|---|---|
| TestSessionMiddleware_ValidCookie | PASS | 0.000s |
| TestSessionMiddleware_NoCookie | PASS | 0.000s |
| TestSessionMiddleware_InvalidCookie | PASS | 0.000s |
| TestSessionMiddleware_IdleExpired | PASS | 0.000s |
| TestCSRFMiddleware_AllowsGETWithoutOrigin | PASS | 0.000s |
| TestCSRFMiddleware_AllowsPOSTWithCorrectOrigin | PASS | 0.000s |
| TestCSRFMiddleware_BlocksPOSTWithWrongOrigin | PASS | 0.000s |
| TestCSRFMiddleware_AllowsPOSTWithoutOrigin | PASS | 0.000s |
| TestCSRFMiddleware_AllowsPUTWithCorrectOrigin | PASS | 0.000s |
| TestCSRFMiddleware_BlocksDELETEWithWrongOrigin | PASS | 0.000s |
| TestCSRFMiddleware_AllowsGETWithWrongOrigin | PASS | 0.000s |
| TestCSRFMiddleware_EmptyOriginAllowsAll | PASS | 0.000s |
| TestAuthMiddlewareValidToken | PASS | 0.000s |
| TestAuthMiddlewareInvalidToken | PASS | 0.000s |
| TestAuthMiddlewareMissingHeader | PASS | 0.000s |
| Test | Status | Time |
|---|---|---|
| TestMemoryStore_CreateAndGet | PASS | 0.000s |
| TestMemoryStore_GetNotFound | PASS | 0.000s |
| TestMemoryStore_Delete | PASS | 0.000s |
| TestMemoryStore_TTLExpiry | PASS | 0.020s |
| TestMemoryStore_SetStateAndGetAndDeleteState | PASS | 0.000s |
| TestMemoryStore_SetRevokedJTIAndIsJTIRevoked | PASS | 0.000s |
| TestMemoryStore_StateExpiry | PASS | 0.020s |
| Test | Status | Time |
|---|---|---|
| TestMigrateUpDown | PASS | 2.590s |
| Test | Status | Time |
|---|---|---|
| TestAuthHandler_Init | PASS | 0.000s |
| TestAuthHandler_Init_NoReturnURL | PASS | 0.000s |
| TestAuthHandler_Init_AbsoluteReturnURL | PASS | 0.000s |
| TestAuthHandler_Session_NoCookie | PASS | 0.000s |
| TestAuthHandler_Session_WithSession | PASS | 0.000s |
| TestAuthHandler_Logout | PASS | 0.000s |
| TestAuthHandler_Logout_Idempotent | PASS | 0.000s |
| TestAuthHandler_Logout_WithIDToken | PASS | 0.000s |
| TestUpsertUser_InsertNewUser | PASS | 1.280s |
| TestUpsertUser_UpdateExisting | PASS | 0.570s |
| TestUpsertUser_NullImage | PASS | 0.500s |
| TestHealth | PASS | 0.480s |
| TestReady_Success | PASS | 0.470s |
| TestReady_DBDown | PASS | 0.040s |
| TestCheck_Success | PASS | 0.600s |
| TestCheck_DBDown | PASS | 0.050s |
| TestReady_ContextTimeout | PASS | 0.580s |
| TestCheck_NilRequest | PASS | 0.500s |
| TestUserHealth_NoAuth | PASS | 0.650s |
| TestUserHealth_ApiKey | PASS | 0.470s |
| TestUserHealth_SessionCookie | PASS | 1.270s |
| TestUserHealth_ExpiredSession | PASS | 0.540s |
| TestUserHealth_InvalidApiKey | PASS | 0.480s |
| TestCreatePipeline_Success | PASS | 0.470s |
| TestCreatePipeline_MissingName | PASS | 0.450s |
| TestCreatePipeline_InvalidProjectId | PASS | 0.510s |
| TestGetPipeline_Success | PASS | 0.530s |
| TestGetPipeline_NotFound | PASS | 0.520s |
| TestListPipelinesByProject | PASS | 0.580s |
| TestListPipelinesByProject_NotFound | PASS | 0.470s |
| TestListPipelines_FilterEnabled | PASS | 1.380s |
| TestUpdatePipeline_Success | PASS | 0.700s |
| TestUpdatePipeline_NotFound | PASS | 0.470s |
| TestDeletePipeline_Success | PASS | 0.510s |
| TestDeletePipeline_NotFound | PASS | 0.480s |
| TestGetProjectDetail_IncludesPipelines | PASS | 0.470s |
| TestCreateProject_Success | PASS | 1.610s |
| TestCreateProject_MissingName | PASS | 1.320s |
| TestCreateProject_TooShortName | PASS | 0.460s |
| TestGetProject_Success | PASS | 0.540s |
| TestGetProject_NotFound | PASS | 0.480s |
| TestListProjects_DefaultPagination | PASS | 0.430s |
| TestListProjects_SortByNameAsc | PASS | 0.380s |
| TestListProjects_InvalidSortField | PASS | 0.390s |
| TestUpdateProject_Success | PASS | 0.440s |
| TestUpdateProject_NotFound | PASS | 0.490s |
| TestDeleteProject_Success | PASS | 0.430s |
| TestDeleteProject_NotFound | PASS | 0.420s |
| TestProjectEndpoints_NoSession | PASS | 0.510s |
| TestCreateRepository_Success | PASS | 0.510s |
| TestCreateRepository_InvalidName | PASS | 0.410s |
| TestCreateRepository_MissingName | PASS | 0.500s |
| TestGetRepository_Success | PASS | 0.410s |
| TestGetRepository_NotFound | PASS | 0.420s |
| TestListRepositories | PASS | 0.450s |
| TestUpdateRepository_Success | PASS | 1.910s |
| TestUpdateRepository_NotFound | PASS | 0.480s |
| TestDeleteRepository_Success | PASS | 0.480s |
| TestDeleteRepository_NotFound | PASS | 0.460s |
| TestCheckRepositoryHealth | PASS | 0.400s |
| TestRepositoryEndpoints_NoSession | PASS | 0.470s |
| TestCreateRun_Success | PASS | 0.430s |
| TestCreateRun_MissingPipelineID | PASS | 0.400s |
| TestCreateRun_InvalidPipelineID | PASS | 0.400s |
| TestCreateRun_InvalidJSON | PASS | 0.400s |
| TestCreateRun_InvalidSourceType | PASS | 0.520s |
| TestGetRun_Success | PASS | 0.430s |
| TestGetRun_NotFound | PASS | 0.610s |
| TestListRuns_ReturnsDefaultPagination | PASS | 0.460s |
| TestListRuns_CustomLimitAndOffset | PASS | 0.430s |
| TestListRuns_LimitValidation/default_when_missing | PASS | 0.010s |
| TestListRuns_LimitValidation/valid_limit | PASS | 0.000s |
| TestListRuns_LimitValidation/max_limit_capped | PASS | 0.000s |
| TestListRuns_LimitValidation/negative_limit_uses_default | PASS | 0.000s |
| TestListRuns_LimitValidation/zero_limit_uses_default | PASS | 0.000s |
| TestListRuns_LimitValidation/invalid_format_uses_default | PASS | 0.000s |
| TestListRuns_LimitValidation | PASS | 0.470s |
| TestListRuns_FilterByPhase | PASS | 0.430s |
| TestListRuns_FilterByMultiplePhases | PASS | 0.450s |
| TestListRuns_FilterByInvalidPhase | PASS | 0.430s |
| TestListRuns_FilterProjectID | PASS | 0.560s |
| TestListRuns_FilterPipelineID | PASS | 0.480s |
| TestListRuns_FilterSourceType | PASS | 0.460s |
| TestListRuns_FilterCreatedAfter | PASS | 0.430s |
| TestListRuns_FilterCreatedBefore | PASS | 0.610s |
| TestListRuns_FilterSource | PASS | 0.460s |
| TestListRuns_SortByStartedAt | PASS | 0.640s |
| TestListRuns_FilterMultipleCriteria | PASS | 0.440s |
| TestListRuns_SortByCreatedAtDesc | PASS | 0.410s |
| TestListRuns_SortByUpdatedAtAsc | PASS | 0.460s |
| TestListRuns_InvalidSortField | PASS | 0.450s |
| TestListRuns_CursorPagination | PASS | 0.480s |
| TestUpdateRun_PhaseOnly | PASS | 0.430s |
| TestUpdateRun_Completed | PASS | 0.500s |
| TestUpdateRun_Failed | PASS | 1.230s |
| TestUpdateRun_NotFound | PASS | 0.460s |
| TestUpdateRun_InvalidPhase | PASS | 0.440s |
| TestUpdateRun_NoAuth | PASS | 0.430s |
| TestIdempotency_NoKey | PASS | 0.420s |
| TestIdempotency_SameKeySameBody | PASS | 0.450s |
| TestIdempotency_SameKeyDifferentBody | PASS | 0.430s |
| TestHubPublishAndReceive | PASS | 0.000s |
| TestHubFilterPhaseMatch | PASS | 0.000s |
| TestHubFilterPhaseMismatch | PASS | 0.200s |
| TestHubFilterSourceType | PASS | 0.200s |
| TestSubscribeSSE_NoAuth | PASS | 0.420s |
| TestSubscribeSSE_InvalidAPIKey | PASS | 0.410s |
| TestRunCreationPublishesSSEEvent | PASS | 0.680s |
| TestSubscribeSSE_Heartbeat | PASS | 0.770s |
| TestVikunjaWebhook_Success | PASS | 0.450s |
| TestVikunjaWebhook_MissingEvent | PASS | 0.570s |
| TestVikunjaWebhook_NoProjectConfigured | PASS | 0.610s |
| TestVikunjaWebhook_ProjectNotFound | PASS | 0.410s |
| TestVikunjaWebhook_NoPipeline | PASS | 0.460s |
| TestVikunjaWebhook_InvalidJSON | PASS | 0.420s |
| Test | Status | Time |
|---|
| Test | Status | Time |
|---|---|---|
| TestMockExecutor_Start | PASS | 0.000s |
| TestMockExecutor_Interface | PASS | 0.000s |
| Test | Status | Time |
|---|
| Test | Status | Time |
|---|