diff --git a/.gitignore b/.gitignore index 487ea6b..fcb2d1b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ api/data/ node_modules/ __pycache__/ deploy-webhook.log +.phpunit.result.cache diff --git a/api/.phpunit.result.cache b/api/.phpunit.result.cache deleted file mode 100644 index 2e98ac9..0000000 --- a/api/.phpunit.result.cache +++ /dev/null @@ -1 +0,0 @@ -{"version":2,"defects":{"Monitor\\Api\\Tests\\Controller\\StreamControllerTest::testStreamSendsHeartbeatsWhenNothingChanges":8,"Monitor\\Api\\Tests\\Controller\\StreamControllerTest::testStreamEmitsUpdateEventWhenAResourceChangesBetweenPolls":8,"Monitor\\Api\\Tests\\Controller\\StreamControllerTest::testStreamStopsAfterMaxIterations":8,"Monitor\\Api\\Tests\\Sync\\CodebergSyncServiceTest::testInactiveProjectIsNotSynced":7,"Monitor\\Api\\Tests\\ApplicationTest::testFullFlowCreateUpdateAndDeleteRepoConfigWithAdminKey":7},"times":{"Monitor\\Api\\Tests\\ApplicationTest::testUnknownRouteReturns404":0.069,"Monitor\\Api\\Tests\\ApplicationTest::testWrongMethodReturns405":0.001,"Monitor\\Api\\Tests\\ApplicationTest::testWritingWithoutAgentKeyReturns401":0,"Monitor\\Api\\Tests\\ApplicationTest::testRegisterAgentRequiresAdminKey":0,"Monitor\\Api\\Tests\\ApplicationTest::testFullFlowRegisterAgentThenCreateTicket":0.001,"Monitor\\Api\\Tests\\ApplicationTest::testActivityWithUnknownTicketReturns422WithoutInternals":0.001,"Monitor\\Api\\Tests\\ApplicationTest::testPatchUnknownTicketReturns404":0.001,"Monitor\\Api\\Tests\\ApplicationTest::testStreamRouteIsPublicAndReturnsAStreamResponse":0,"Monitor\\Api\\Tests\\Auth\\AdminAuthenticatorTest::testAuthenticateAcceptsCorrectKey":0,"Monitor\\Api\\Tests\\Auth\\AdminAuthenticatorTest::testAuthenticateRejectsWrongKey":0,"Monitor\\Api\\Tests\\Auth\\AdminAuthenticatorTest::testAuthenticateRejectsWhenNoAdminKeyConfigured":0,"Monitor\\Api\\Tests\\Auth\\AdminAuthenticatorTest::testAuthenticateRejectsMissingHeader":0,"Monitor\\Api\\Tests\\Auth\\AgentAuthenticatorTest::testAuthenticateReturnsAgentForValidKey":0.001,"Monitor\\Api\\Tests\\Auth\\AgentAuthenticatorTest::testAuthenticateReturnsNullWithoutHeader":0.001,"Monitor\\Api\\Tests\\Auth\\AgentAuthenticatorTest::testAuthenticateReturnsNullForWrongKey":0.001,"Monitor\\Api\\Tests\\Auth\\ApiKeyGeneratorTest::testGenerateProducesUnique64CharHexKeys":0,"Monitor\\Api\\Tests\\Auth\\ApiKeyGeneratorTest::testHashIsDeterministicSha256":0,"Monitor\\Api\\Tests\\ConfigTest::testDefaultsAreUsedWhenNothingConfigured":0,"Monitor\\Api\\Tests\\ConfigTest::testExplicitEnvArrayDoesNotFallBackToProcessEnvironment":0,"Monitor\\Api\\Tests\\ConfigTest::testValuesCanBeOverridden":0,"Monitor\\Api\\Tests\\Controller\\AgentControllerTest::testRegisterRejectsMissingDisplayName":0,"Monitor\\Api\\Tests\\Controller\\AgentControllerTest::testRegisterRejectsUnknownRole":0,"Monitor\\Api\\Tests\\Controller\\AgentControllerTest::testRegisterReturns201WithApiKey":0,"Monitor\\Api\\Tests\\Controller\\AgentControllerTest::testActivityRejectsMismatchedAgentId":0,"Monitor\\Api\\Tests\\Controller\\AgentControllerTest::testActivityRejectsMissingState":0,"Monitor\\Api\\Tests\\Controller\\AgentControllerTest::testActivityUpdatesOwnState":0,"Monitor\\Api\\Tests\\Controller\\AgentControllerTest::testIndexListsAgents":0,"Monitor\\Api\\Tests\\Controller\\EventControllerTest::testCreateRejectsMissingFields":0,"Monitor\\Api\\Tests\\Controller\\EventControllerTest::testCreateRejectsInvalidSeverity":0,"Monitor\\Api\\Tests\\Controller\\EventControllerTest::testCreateReturns201":0,"Monitor\\Api\\Tests\\Controller\\EventControllerTest::testIndexReturnsEvents":0,"Monitor\\Api\\Tests\\Controller\\KpiControllerTest::testReportRejectsMissingValue":0,"Monitor\\Api\\Tests\\Controller\\KpiControllerTest::testReportRejectsNonNumericValue":0,"Monitor\\Api\\Tests\\Controller\\KpiControllerTest::testReportReturns201WithKpi":0,"Monitor\\Api\\Tests\\Controller\\KpiControllerTest::testIndexListsKpis":0,"Monitor\\Api\\Tests\\Controller\\StreamControllerTest::testStreamSendsHeartbeatsWhenNothingChanges":0,"Monitor\\Api\\Tests\\Controller\\StreamControllerTest::testStreamEmitsUpdateEventWhenAResourceChangesBetweenPolls":0,"Monitor\\Api\\Tests\\Controller\\StreamControllerTest::testStreamStopsAfterMaxIterations":0,"Monitor\\Api\\Tests\\Controller\\SystemControllerTest::testIndexImportsLegacyStatusFile":0,"Monitor\\Api\\Tests\\Controller\\SystemControllerTest::testReportStatusRejectsInvalidStatus":0,"Monitor\\Api\\Tests\\Controller\\SystemControllerTest::testReportStatusReturnsUpdatedSystem":0,"Monitor\\Api\\Tests\\Controller\\TicketControllerTest::testIndexReturnsAllTickets":0,"Monitor\\Api\\Tests\\Controller\\TicketControllerTest::testCreateRejectsMissingTitle":0,"Monitor\\Api\\Tests\\Controller\\TicketControllerTest::testCreateReturns201WithTicket":0,"Monitor\\Api\\Tests\\Controller\\TicketControllerTest::testCreateRejectsInvalidColumnWith422":0,"Monitor\\Api\\Tests\\Controller\\TicketControllerTest::testUpdateMovesTicket":0,"Monitor\\Api\\Tests\\Controller\\TicketControllerTest::testUpdatePropagatesNotFoundForUnknownTicket":0,"Monitor\\Api\\Tests\\Db\\DatabaseTest::testMigrateCreatesAllTables":0.001,"Monitor\\Api\\Tests\\Db\\DatabaseTest::testMigrateIsIdempotent":0.001,"Monitor\\Api\\Tests\\Db\\DatabaseTest::testNowReturnsIso8601Utc":0,"Monitor\\Api\\Tests\\Http\\RequestTest::testCreateNormalizesTrailingSlash":0,"Monitor\\Api\\Tests\\Http\\RequestTest::testCreateKeepsRootPath":0,"Monitor\\Api\\Tests\\Http\\RequestTest::testHeaderLookupIsCaseInsensitive":0,"Monitor\\Api\\Tests\\Http\\RequestTest::testHeaderReturnsNullWhenMissing":0,"Monitor\\Api\\Tests\\Http\\RequestTest::testCreateStoresQueryAndBody":0,"Monitor\\Api\\Tests\\Http\\ResponseTest::testJsonResponseCarriesStatusAndBody":0,"Monitor\\Api\\Tests\\Http\\ResponseTest::testErrorResponseDefaultsToGivenStatus":0,"Monitor\\Api\\Tests\\Http\\ResponseTest::testJsonResponseIsNotAStream":0,"Monitor\\Api\\Tests\\Http\\ResponseTest::testStreamResponseExposesTheWriterWithoutBody":0,"Monitor\\Api\\Tests\\Http\\RouterTest::testMatchesStaticRoute":0,"Monitor\\Api\\Tests\\Http\\RouterTest::testExtractsPathParams":0,"Monitor\\Api\\Tests\\Http\\RouterTest::testReturnsNullForUnknownPath":0,"Monitor\\Api\\Tests\\Http\\RouterTest::testThrowsMethodNotAllowedForKnownPathWrongMethod":0,"Monitor\\Api\\Tests\\Http\\RouterTest::testCarriesAuthRequirement":0,"Monitor\\Api\\Tests\\Realtime\\ChangeFeedTest::testCurrentFingerprintCoversAllFiveResources":0,"Monitor\\Api\\Tests\\Realtime\\ChangeFeedTest::testDiffIsEmptyWithoutChanges":0,"Monitor\\Api\\Tests\\Realtime\\ChangeFeedTest::testDiffReportsOnlyTheChangedResource":0,"Monitor\\Api\\Tests\\Realtime\\ChangeFeedTest::testDiffReportsMultipleChangedResources":0,"Monitor\\Api\\Tests\\Repository\\AgentRepositoryTest::testRegisterAssignsLowestFreeDesk":0,"Monitor\\Api\\Tests\\Repository\\AgentRepositoryTest::testUserRoleNeverGetsADesk":0,"Monitor\\Api\\Tests\\Repository\\AgentRepositoryTest::testOverflowAgentGetsNoDeskWhenAllOccupied":0,"Monitor\\Api\\Tests\\Repository\\AgentRepositoryTest::testRegisterRejectsUnknownRole":0,"Monitor\\Api\\Tests\\Repository\\AgentRepositoryTest::testFindByApiKeyReturnsMatchingAgent":0,"Monitor\\Api\\Tests\\Repository\\AgentRepositoryTest::testFindByApiKeyReturnsNullForUnknownKey":0,"Monitor\\Api\\Tests\\Repository\\AgentRepositoryTest::testUpdateActivityChangesStateAndTicket":0,"Monitor\\Api\\Tests\\Repository\\AgentRepositoryTest::testUpdateActivityRejectsUnknownTicket":0,"Monitor\\Api\\Tests\\Repository\\AgentRepositoryTest::testUpdateActivityThrowsForUnknownAgent":0,"Monitor\\Api\\Tests\\Repository\\AgentRepositoryTest::testAllListsAgentsWithoutApiKeyHash":0,"Monitor\\Api\\Tests\\Repository\\AgentRepositoryTest::testFingerprintChangesWhenAnAgentIsRegistered":0,"Monitor\\Api\\Tests\\Repository\\EventRepositoryTest::testCreateStoresEvent":0,"Monitor\\Api\\Tests\\Repository\\EventRepositoryTest::testCreateRejectsInvalidSeverity":0,"Monitor\\Api\\Tests\\Repository\\EventRepositoryTest::testLatestReturnsNewestFirst":0,"Monitor\\Api\\Tests\\Repository\\EventRepositoryTest::testLatestRespectsDefaultLimitOfFive":0,"Monitor\\Api\\Tests\\Repository\\EventRepositoryTest::testLatestClampsLimitToAtLeastOne":0,"Monitor\\Api\\Tests\\Repository\\EventRepositoryTest::testFingerprintChangesWhenAnEventIsCreated":0,"Monitor\\Api\\Tests\\Repository\\KpiRepositoryTest::testReportCreatesKpiWithCurrentValue":0,"Monitor\\Api\\Tests\\Repository\\KpiRepositoryTest::testReportAppendsHistoryAndUpdatesCurrentValue":0,"Monitor\\Api\\Tests\\Repository\\KpiRepositoryTest::testHistoryIsLimited":0,"Monitor\\Api\\Tests\\Repository\\KpiRepositoryTest::testFindReturnsNullForUnknownKey":0,"Monitor\\Api\\Tests\\Repository\\KpiRepositoryTest::testAllListsAllKpis":0,"Monitor\\Api\\Tests\\Repository\\KpiRepositoryTest::testFingerprintChangesWhenAValueIsReported":0,"Monitor\\Api\\Tests\\Repository\\LegacyStatusFileReaderTest::testReadsValidLines":0,"Monitor\\Api\\Tests\\Repository\\LegacyStatusFileReaderTest::testSkipsMalformedLines":0,"Monitor\\Api\\Tests\\Repository\\LegacyStatusFileReaderTest::testReturnsEmptyArrayForMissingFile":0,"Monitor\\Api\\Tests\\Repository\\SystemRepositoryTest::testReportStatusInsertsSystem":0,"Monitor\\Api\\Tests\\Repository\\SystemRepositoryTest::testReportStatusRejectsInvalidStatus":0,"Monitor\\Api\\Tests\\Repository\\SystemRepositoryTest::testReportStatusUpdatesExistingSystem":0,"Monitor\\Api\\Tests\\Repository\\SystemRepositoryTest::testImportLegacyRowsDoesNotOverwriteApiSourcedSystem":0,"Monitor\\Api\\Tests\\Repository\\SystemRepositoryTest::testImportLegacyRowsCreatesNewLegacySystem":0,"Monitor\\Api\\Tests\\Repository\\SystemRepositoryTest::testAllOrdersErrorsFirstAndLimitsToNineTiles":0,"Monitor\\Api\\Tests\\Repository\\SystemRepositoryTest::testFingerprintChangesWhenStatusIsReported":0,"Monitor\\Api\\Tests\\Repository\\TicketRepositoryTest::testCreateDefaultsToBacklogColumn":0,"Monitor\\Api\\Tests\\Repository\\TicketRepositoryTest::testCreateRejectsUnknownColumn":0,"Monitor\\Api\\Tests\\Repository\\TicketRepositoryTest::testUpdateMovesTicketToAnotherColumn":0,"Monitor\\Api\\Tests\\Repository\\TicketRepositoryTest::testUpdateRejectsUnknownColumn":0,"Monitor\\Api\\Tests\\Repository\\TicketRepositoryTest::testUpdateThrowsNotFoundForMissingTicket":0,"Monitor\\Api\\Tests\\Repository\\TicketRepositoryTest::testAllFiltersByColumn":0,"Monitor\\Api\\Tests\\Repository\\TicketRepositoryTest::testAllOrdersByColumnThenCreatedAt":0,"Monitor\\Api\\Tests\\Repository\\TicketRepositoryTest::testUpsertFromCodebergCreatesNewTicket":0,"Monitor\\Api\\Tests\\Repository\\TicketRepositoryTest::testUpsertFromCodebergUpdatesExistingBacklogTicket":0,"Monitor\\Api\\Tests\\Repository\\TicketRepositoryTest::testUpsertFromCodebergDoesNotResetManuallyMovedTicket":0,"Monitor\\Api\\Tests\\Repository\\TicketRepositoryTest::testFingerprintChangesWhenATicketIsCreated":0,"Monitor\\Api\\Tests\\Repository\\TicketRepositoryTest::testFingerprintIsStableWithoutChanges":0,"Monitor\\Api\\Tests\\Sync\\CodebergSyncServiceTest::testSyncCreatesBacklogAndDoneTickets":0.004,"Monitor\\Api\\Tests\\Sync\\CodebergSyncServiceTest::testSyncNormalizesLabelColorRegardlessOfLeadingHash":0,"Monitor\\Api\\Tests\\Sync\\CodebergSyncServiceTest::testSyncDoesNotResetManuallyMovedTicket":0.001,"Monitor\\Api\\Tests\\Sync\\CurlCodebergClientTest::testListIssuesParsesSinglePage":0.003,"Monitor\\Api\\Tests\\Sync\\CurlCodebergClientTest::testListIssuesStopsWhenPageEmpty":0,"Monitor\\Api\\Tests\\Sync\\CurlCodebergClientTest::testListIssuesSendsAuthorizationHeaderWhenTokenGiven":0,"Monitor\\Api\\Tests\\Sync\\CurlCodebergClientTest::testThrowsOnHttpError":0,"Monitor\\Api\\Tests\\ApplicationTest::testCodebergWebhookWithoutSignatureReturns401":0,"Monitor\\Api\\Tests\\ApplicationTest::testCodebergWebhookWithValidSignatureIsAccepted":0.001,"Monitor\\Api\\Tests\\Auth\\WebhookAuthenticatorTest::testAcceptsForgejoSignature":0,"Monitor\\Api\\Tests\\Auth\\WebhookAuthenticatorTest::testAcceptsGiteaSignatureHeaderForCompatibility":0,"Monitor\\Api\\Tests\\Auth\\WebhookAuthenticatorTest::testRejectsSignatureCreatedWithAnotherSecret":0,"Monitor\\Api\\Tests\\Auth\\WebhookAuthenticatorTest::testRejectsSignatureForDifferentPayload":0,"Monitor\\Api\\Tests\\Auth\\WebhookAuthenticatorTest::testRejectsRequestWithoutSignature":0,"Monitor\\Api\\Tests\\Auth\\WebhookAuthenticatorTest::testRejectsEverythingWhenNoSecretIsConfigured":0,"Monitor\\Api\\Tests\\Controller\\WebhookControllerTest::testIssueEventRequestsASync":0,"Monitor\\Api\\Tests\\Controller\\WebhookControllerTest::testPingIsAnsweredWithoutRequestingASync":0,"Monitor\\Api\\Tests\\Controller\\WebhookControllerTest::testUnknownEventStillRequestsASync":0,"Monitor\\Api\\Tests\\Sync\\SyncTriggerTest::testConsumeReportsNothingWhenNoSyncWasRequested":0,"Monitor\\Api\\Tests\\Sync\\SyncTriggerTest::testConsumeReportsRequestedSyncExactlyOnce":0,"Monitor\\Api\\Tests\\Sync\\SyncTriggerTest::testRepeatedRequestsCollapseIntoOneSync":0,"Monitor\\Api\\Tests\\Sync\\SyncTriggerTest::testRequestCreatesMissingDirectory":0,"Monitor\\Api\\Tests\\Repository\\AgentRepositoryTest::testRegisterAndUpdateActivityReportFreshAgentAsPresent":0,"Monitor\\Api\\Tests\\Repository\\AgentRepositoryTest::testFindByIdReportsAgentAsAbsentAfterPresenceTimeout":0,"Monitor\\Api\\Tests\\Repository\\TicketRepositoryTest::testUpsertFromCodebergMovesTicketBetweenSyncManagedColumns":0,"Monitor\\Api\\Tests\\Sync\\CodebergSyncServiceTest::testSyncMapsOpenIssueLabelToBoardColumn#automate -> bereit":0.001,"Monitor\\Api\\Tests\\Sync\\CodebergSyncServiceTest::testSyncMapsOpenIssueLabelToBoardColumn#wip -> in_arbeit":0.001,"Monitor\\Api\\Tests\\Sync\\CodebergSyncServiceTest::testSyncMapsOpenIssueLabelToBoardColumn#testing -> testing":0.001,"Monitor\\Api\\Tests\\Sync\\CodebergSyncServiceTest::testSyncMovesTicketBetweenAutomatedColumnsWhenLabelChanges":0.002,"Monitor\\Api\\Tests\\Sync\\CodebergSyncServiceTest::testSyncClosesTicketFromAnyAutomatedColumnIntoDone":0.002,"Monitor\\Api\\Tests\\Sync\\SyncScheduleTest::testUsesTheRegularIntervalWhileEverythingWorks":0.001,"Monitor\\Api\\Tests\\Sync\\SyncScheduleTest::testRetriesQuicklyAfterAFailure":0,"Monitor\\Api\\Tests\\Sync\\SyncScheduleTest::testBacksOffExponentiallyWhileFailuresContinue":0,"Monitor\\Api\\Tests\\Sync\\SyncScheduleTest::testNeverWaitsLongerThanTheRegularInterval":0,"Monitor\\Api\\Tests\\Sync\\SyncScheduleTest::testSurvivesAnAbsurdNumberOfFailures":0,"Monitor\\Api\\Tests\\Sync\\SyncScheduleTest::testShortIntervalIsNotStretchedByTheRetryBase":0,"Monitor\\Api\\Tests\\ApplicationTest::testProjectListIsPublic":0,"Monitor\\Api\\Tests\\ApplicationTest::testProjectWritesRequireAdminKey#anlegen":0,"Monitor\\Api\\Tests\\ApplicationTest::testProjectWritesRequireAdminKey#aendern":0,"Monitor\\Api\\Tests\\ApplicationTest::testProjectWritesRequireAdminKey#loeschen":0,"Monitor\\Api\\Tests\\ApplicationTest::testProjectLifecycleWithAdminKey":0.001,"Monitor\\Api\\Tests\\ApplicationTest::testTicketsOfDeactivatedProjectDisappearFromTheBoard":0.001,"Monitor\\Api\\Tests\\ApplicationTest::testPreflightIsAnsweredWithoutAuth":0,"Monitor\\Api\\Tests\\Controller\\ProjectControllerTest::testIndexListsActiveAndInactiveProjects":0.001,"Monitor\\Api\\Tests\\Controller\\ProjectControllerTest::testCreateReturns201AndRequestsImmediateSync":0,"Monitor\\Api\\Tests\\Controller\\ProjectControllerTest::testCreateWithoutRepoReturns422":0,"Monitor\\Api\\Tests\\Controller\\ProjectControllerTest::testUpdateChangesColorWithoutTriggeringSync":0,"Monitor\\Api\\Tests\\Controller\\ProjectControllerTest::testReactivatingAProjectRequestsSync":0,"Monitor\\Api\\Tests\\Controller\\ProjectControllerTest::testUpdateWithUnusableColorReturns422":0,"Monitor\\Api\\Tests\\Controller\\ProjectControllerTest::testDeleteRemovesProject":0,"Monitor\\Api\\Tests\\Controller\\ProjectControllerTest::testDeleteOfUnknownProjectIsNotFound":0,"Monitor\\Api\\Tests\\Realtime\\ChangeFeedTest::testCurrentFingerprintCoversAllResources":0,"Monitor\\Api\\Tests\\Repository\\ProjectRepositoryTest::testCreateUsesRepoAsNameAndAssignsDefaultColor":0,"Monitor\\Api\\Tests\\Repository\\ProjectRepositoryTest::testCreateRequiresOwnerAndRepo":0,"Monitor\\Api\\Tests\\Repository\\ProjectRepositoryTest::testCreateRejectsDuplicateRepo":0,"Monitor\\Api\\Tests\\Repository\\ProjectRepositoryTest::testCreateNormalizesColorWithoutLeadingHash":0,"Monitor\\Api\\Tests\\Repository\\ProjectRepositoryTest::testCreateRejectsUnusableColor":0,"Monitor\\Api\\Tests\\Repository\\ProjectRepositoryTest::testUpdateChangesColorAndVisibility":0,"Monitor\\Api\\Tests\\Repository\\ProjectRepositoryTest::testUpdateRejectsEmptyName":0,"Monitor\\Api\\Tests\\Repository\\ProjectRepositoryTest::testUpdateOfUnknownProjectIsNotFound":0,"Monitor\\Api\\Tests\\Repository\\ProjectRepositoryTest::testAllActiveSkipsDeactivatedProjects":0,"Monitor\\Api\\Tests\\Repository\\ProjectRepositoryTest::testDeleteRemovesProjectWithItsTickets":0,"Monitor\\Api\\Tests\\Repository\\ProjectRepositoryTest::testDeleteKeepsAgentWorkingOnADeletedTicket":0,"Monitor\\Api\\Tests\\Repository\\ProjectRepositoryTest::testSeedFromEnvironmentAdoptsExistingCodebergTickets":0,"Monitor\\Api\\Tests\\Repository\\ProjectRepositoryTest::testSeedFromEnvironmentRunsOnlyOnce":0,"Monitor\\Api\\Tests\\Repository\\ProjectRepositoryTest::testFingerprintChangesWithEveryEdit":0,"Monitor\\Api\\Tests\\Sync\\CodebergSyncServiceTest::testSyncCoversEveryActiveProject":0,"Monitor\\Api\\Tests\\Sync\\CodebergSyncServiceTest::testIssueNumbersOfDifferentProjectsDoNotCollide":0.001,"Monitor\\Api\\Tests\\Sync\\CodebergSyncServiceTest::testInactiveProjectIsNotSynced":0,"Monitor\\Api\\Tests\\Sync\\CodebergSyncServiceTest::testFailingProjectDoesNotStopTheOthersButIsReported":0,"Monitor\\Api\\Tests\\Sync\\CodebergSyncServiceTest::testSeedProjectIsNotRecreatedAfterDeletion":0,"Monitor\\Api\\Tests\\ApplicationTest::testRepoConfigsIndexIsPublic":0.001,"Monitor\\Api\\Tests\\ApplicationTest::testCreateRepoConfigRequiresAdminKey":0,"Monitor\\Api\\Tests\\ApplicationTest::testFullFlowCreateUpdateAndDeleteRepoConfigWithAdminKey":0.001,"Monitor\\Api\\Tests\\Controller\\RepoConfigControllerTest::testIndexReturnsEmptyListInitially":0,"Monitor\\Api\\Tests\\Controller\\RepoConfigControllerTest::testCreateReturns201WithNewRepo":0,"Monitor\\Api\\Tests\\Controller\\RepoConfigControllerTest::testCreateRejectsInvalidColorWith422":0,"Monitor\\Api\\Tests\\Controller\\RepoConfigControllerTest::testUpdateReturnsUpdatedRepo":0,"Monitor\\Api\\Tests\\Controller\\RepoConfigControllerTest::testDeleteReturnsDeletedTrue":0,"Monitor\\Api\\Tests\\Repository\\RepoConfigRepositoryTest::testAllIsEmptyWithoutConfiguredProjects":0,"Monitor\\Api\\Tests\\Repository\\RepoConfigRepositoryTest::testCreateNormalizesColorAndAppendsAtEndOfSortOrder":0,"Monitor\\Api\\Tests\\Repository\\RepoConfigRepositoryTest::testCreateRejectsMissingOwnerOrRepo":0,"Monitor\\Api\\Tests\\Repository\\RepoConfigRepositoryTest::testCreateRejectsInvalidColor":0,"Monitor\\Api\\Tests\\Repository\\RepoConfigRepositoryTest::testCreateRejectsDuplicateOwnerRepo":0,"Monitor\\Api\\Tests\\Repository\\RepoConfigRepositoryTest::testUpdateChangesFields":0,"Monitor\\Api\\Tests\\Repository\\RepoConfigRepositoryTest::testUpdateUnknownIdThrowsNotFound":0,"Monitor\\Api\\Tests\\Repository\\RepoConfigRepositoryTest::testDeleteRemovesEntry":0,"Monitor\\Api\\Tests\\Repository\\RepoConfigRepositoryTest::testDeleteUnknownIdThrowsNotFound":0,"Monitor\\Api\\Tests\\Sync\\CodebergSyncServiceTest::testSyncCreatesBacklogAndDoneTicketsColoredByProject":0.004,"Monitor\\Api\\Tests\\Sync\\CodebergSyncServiceTest::testSyncKeepsIssuesFromDifferentProjectsSeparateAndColorsThemPerProject":0.001}} \ No newline at end of file