🧪 Rapport Tests Pest Laravel — PREPROD

20/10/2026 08:32:57 · ✅ Tous les tests passent

1825
Total
1819
Passés
0
Échoués
6
Ignorés
1861.9s
Durée
StatutClasseTestDuréeMessage
✅ Tests.Api.Inpulse.InpulseTest Sync products 0.038s
✅ Tests.Features.ActivityLog.ActivityLogDetailsTest Details modal is hidden until an entry is requested 11.262s
✅ Tests.Features.ActivityLog.ActivityLogDetailsTest Requesting an entry renders its changes 9.575s
✅ Tests.Features.ActivityLog.ActivityLogDetailsTest Table delegates details to the modal component 9.604s
✅ Tests.Features.ActivityLog.ActivityLogManagerOwnerTest Manager settings are owned by the main client 10.322s
✅ Tests.Features.ActivityLog.ActivityLogManagerOwnerTest Manager account itself is owned by the main client 9.165s
✅ Tests.Features.ActivityLog.ActivityLogManagerOwnerTest Main client stays its own owner 9.231s
✅ Tests.Features.ActivityLog.ActivityLogManagerOwnerTest Logs recorded under a manager display the main client 9.065s
✅ Tests.Features.ActivityLog.ActivityLogManagerOwnerTest Logs recorded under a deleted manager display the main client 9.322s
✅ Tests.Features.ActivityLog.ActivityLogManagerOwnerTest Empty recorded name falls back instead of showing blank 8.994s
✅ Tests.Features.ActivityLog.ActivityLogTest Dirty only update keeps ownership separate from changes and author 9.229s
✅ Tests.Features.ActivityLog.ActivityLogTest Nested impersonation keeps original author and target owner 8.976s
✅ Tests.Features.ActivityLog.ActivityLogTest Direct impersonation displays the target instead of repeating the author 9.239s
✅ Tests.Features.ActivityLog.ActivityLogTest Family impersonation is displayed as its parent client 8.841s
✅ Tests.Features.ActivityLog.ActivityLogTest Legacy impersonation does not guess the target from ownership 8.646s
✅ Tests.Features.ActivityLog.ActivityLogTest Unowned template does not inherit the impersonated restaurant 8.870s
✅ Tests.Features.ActivityLog.ActivityLogTest Client settings and family templates resolve the client 8.754s
✅ Tests.Features.ActivityLog.ActivityLogTest Direct owner edits and deletes keep the snapshot 8.966s
✅ Tests.Features.ActivityLog.ActivityLogTest Filters match owner names ids and combine without matching the author 9.045s
✅ Tests.Features.ActivityLog.ActivityLogTest Activity page displays most specific owner and applies unified search 9.068s
✅ Tests.Features.ActivityLog.ActivityLogTest Activity page uses the current locale 9.234s
✅ Tests.Features.ActivityLog.ActivityLogTest Legacy author does not override recorded ownership 9.333s
✅ Tests.Features.ActivityLog.ActivityLogTest Models without ownership do not inherit the acting account 9.144s
✅ Tests.Features.ActivityLog.ActivityLogTest Owner snapshot does not follow later restaurant transfers 9.201s
✅ Tests.Features.ActivityLog.ActivityLogTest Legacy recorded ownership is still displayed and filterable 9.785s
✅ Tests.Features.Api.ApiSessionIsolationTest Api token does not open a web session 0.302s
✅ Tests.Features.Api.ApiSessionIsolationTest Login rejects bad password even when a web session exists 0.416s
✅ Tests.Features.Api.ApiSessionIsolationTest Login with valid password still issues a token 0.264s
✅ Tests.Features.Api.ApiSessionIsolationTest Api logout does not destroy the web session 0.209s
✅ Tests.Features.Api.ApiSessionIsolationTest Client api token does not open a client web session 0.205s
✅ Tests.Features.Api.ApiSessionIsolationTest Client api logout does not destroy the client web session 0.211s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline saint denis june 1 reproduces counter bug 8.771s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline pfc fruit legume june 1 reproduces counter bug 8.856s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline saint denis excursion time is counter times 600 8.768s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest nominal single measure every 10 min still works 8.894s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline logger issue day csv reproduces error-day behavior 9.029s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline logger issue day csv with connectivity checks 12.843s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline logger issue day mod nico 1 csv reproduces error-day behavior 9.785s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline logger issue day mod nico 2 csv reproduces error-day behavior 9.589s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline quick june 2026 csv 31.745s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest replay OK_CASE quick nevers marzy csv 11.473s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest replay TEMP_KO_CONN_OK_CASE_WITH_EXCLUSION quick villeneuve csv 14.764s
✅ Tests.Features.Loggers.FridgeLoggersTest Temperatures 10.711s
✅ Tests.Features.Loggers.FridgeLoggersTest Several measures 8.979s
✅ Tests.Features.Loggers.FridgeLoggersTest Connection 9.794s
✅ Tests.Features.Loggers.FridgeLoggersTest Epv cauderan 15.247s
✅ Tests.Features.Loggers.FridgeLoggersTest Terrasse saint pol 9.365s
✅ Tests.Features.Loggers.FridgeLoggersTest Global connection 12.454s
✅ Tests.Features.Loggers.FridgeLoggersTest ClosedDates logger 9.821s
✅ Tests.Features.Loggers.FridgeLoggersTest ClosedDates logger 9.418s
✅ Tests.Features.Loggers.FridgeLoggersTest ClosedDates contacts 9.602s
✅ Tests.Features.Loggers.FridgeLoggersTest ClosedDates connexion contacts 9.064s
✅ Tests.Features.Loggers.FridgeLoggersTest ClosedDates connexion contacts 8.971s
✅ Tests.Features.Loggers.FridgeLoggersTest Case cirl 16.971s
✅ Tests.Features.Loggers.FridgeLoggersTest No data alerts 11.875s
✅ Tests.Features.Loggers.FridgeLoggersTest NoDataAlerts AllLoggers 9.628s
✅ Tests.Features.Loggers.FridgeLoggersTest NoDataAlerts ResumeBeforeSecondAlert 10.587s
✅ Tests.Features.Loggers.FridgeLoggersTest NoDataAlerts MultipleLoggers 12.094s
✅ Tests.Features.Loggers.FridgeLoggersTest NoDataAlert IgnoresInactiveLoggers 8.882s
✅ Tests.Features.Loggers.LoggerClosedDatesScenariosTest back_to_normal after exclusion sends no email when issue was never alerted 9.363s
✅ Tests.Features.Loggers.LoggerClosedDatesScenariosTest deferred issue resolved during exclusion is not promoted when exclusion ends 8.832s
✅ Tests.Features.Loggers.LoggerConnectionScenariosTest scenario stable produces one batch per measurement 8.512s
✅ Tests.Features.Loggers.LoggerConnectionScenariosTest scenario stable and unstable accept inLimits OK KO 8.503s
✅ Tests.Features.Loggers.LoggerConnectionScenariosTest scenario unstable produces one burst with backlog since last reception 9.218s
✅ Tests.Features.Loggers.LoggerConnectionScenariosTest scenario stable then unstable then noData then unstable then stable ends in stable_ok 8.834s
✅ Tests.Features.Loggers.LoggerConnectionScenariosTest stable_ok to stable_ko triggers temperature_issue 8.519s
✅ Tests.Features.Loggers.LoggerConnectionScenariosTest scenario stable then noData then unstable then stable 8.913s
✅ Tests.Features.Loggers.LoggerConnectionScenariosTest connection scenario shapes with data set "dataset "stable → unstable → noData → unstable → stable"" 8.665s
✅ Tests.Features.Loggers.LoggerConnectionScenariosTest connection scenario shapes with data set "dataset "stable → noData → unstable → stable"" 8.248s
✅ Tests.Features.Loggers.LoggerPeriodicTemperatureTickTest periodic tick triggers dizzy temperature issue after ko readings then silence 8.796s
✅ Tests.Features.Loggers.LoggerPeriodicTemperatureTickTest periodic tick does not run when last reading temperature is in limits 8.498s
✅ Tests.Features.Loggers.LoggerPeriodicTemperatureTickTest periodic tick sends temperature reminder when excursion remains open without new data 8.568s
✅ Tests.Features.Loggers.LoggerPeriodicTemperatureTickTest periodic tick does nothing when window has no readings 8.738s
✅ Tests.Features.Loggers.LoggerSimulationTickTest does nothing when simulation is disabled 8.558s
✅ Tests.Features.Loggers.LoggerSimulationTickTest injects a reading for each eligible logger when enabled 8.785s
✅ Tests.Features.Loggers.LoggerSimulationTickTest respects the restaurant allowlist 8.765s
✅ Tests.Features.Loggers.LoggerSimulationTickTest dry-run does not persist any reading 8.568s
✅ Tests.Features.Loggers.LoggerSimulationTickTest an excursion produces an out-of-limits reading 8.614s
✅ Tests.Features.Loggers.LoggerSimulationTickTest an inactive logger is not simulated 8.933s
✅ Tests.Features.Loggers.LoggerTemperatureReminderTest reminder event type mirrors initial temperature issue 0.046s
✅ Tests.Features.Loggers.LoggerTemperatureReminderTest sendsTemperatureReminder identifies reminder events 0.044s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest dizzy temperature issue variant distinguishes co-occurring dizzy_started 0.043s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest dizzy ended alert variant covers temperature outcomes 0.042s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest temperature and resolution alerts are suppressed when dizzy ended covers them 0.044s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "stable_ok → stable_ko"" 0.052s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "stable_ok → unstable_ok"" 0.043s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "stable_ok → unstable_ko"" 0.043s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "stable_ko → stable_ok"" 0.045s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "stable_ko → unstable_ok"" 0.044s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "stable_ko → unstable_ko"" 0.042s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ok → stable_ok"" 0.048s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ok → stable_ko"" 0.046s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ok → unstable_ko"" 0.045s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ko → stable_ok"" 0.043s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ko → stable_ko"" 0.044s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ko → unstable_ok"" 0.042s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "first batch (no previous state)"" 0.045s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest window state is derived from analysis flags with data set "dataset "stable ok"" 0.045s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest window state is derived from analysis flags with data set "dataset "stable ko"" 0.042s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest window state is derived from analysis flags with data set "dataset "unstable ok"" 0.043s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest window state is derived from analysis flags with data set "dataset "unstable ko"" 0.045s
⏭️ Tests.Perf.ActivityLogsPerfTest Benchmark 0.000s
⏭️ Tests.Perf.ActivityLogsPerfTest Functional correctness 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest IsAuditLinked is true for a plan born from an audit 0.002s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest IsAuditLinked is false for a standalone plan 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest IsAuditLinked is false for another recordable type 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest IsAuditLinked is false when the id is missing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest ToRecipients on an empty collection 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest ToRecipients uses the name attribute of a local contact 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest ToRecipients concatenates firstname and lastname of a national contact 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest ToRecipients falls back to firstname when name is empty 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest ToRecipients deduplicates by email regardless of case 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest ToRecipients preserves the original case of the email 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest No pivot row means subscribed 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest Pivot with pa alerts on means subscribed 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest Pivot with pa alerts off means opted out 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest IsSubscribedToAuditPlans handles the query builder shape 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest ToRecipients skips contacts without email 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Parse period date reads french format and starts the day 0.027s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Parse period date ends the day when asked 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Parse period date falls back to today when missing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Parse period date falls back to today when unreadable 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Resolve per page uses default when missing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Resolve per page keeps requested value 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Resolve per page caps excessive value 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Resolve per page ignores zero and negative 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Collect audit record ids keeps only audit records 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Collect audit record ids deduplicates and drops null ids 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Collect audit record ids returns empty array when no audit 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Split files by kind treats both image and photo as photos 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Split files by kind keeps documents apart 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Split files by kind excludes commentary files 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Transform audit exposes both identifiers and name 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Transform audit returns null for a plan created manually 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Transform audit returns null when audit record is missing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Transform audit tolerates an audit record without its audit 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Transform employee exposes identity 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Transform employee returns null when unassigned 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Get attached file delegates to repository 0.007s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Get attached file returns null when repository refuses 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryControllerTest Restaurant matches its own action plan 0.008s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryControllerTest Restaurant does not match another restaurants action plan 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryControllerTest Null current entity is denied 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryControllerTest Client with access to owning restaurant is allowed 0.003s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryControllerTest Client without access to owning restaurant is denied 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryControllerTest Non restaurant userable type is denied even if id coincides 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest BuildRow does not crash when planFiles is eloquent collection 0.059s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest BuildRow returns dash when no files or comments 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest BuildRow merges plan comments into commentaries 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest BuildRow counts photos and documents 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest BuildRow counts old files when no period given 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest BuildRow excludes file outside window when period given 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest BuildRow counts file inside window when period given 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest ResolveSource returns action plan label when recordable type null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest ResolveSource returns action plan label for action plan class 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest ResolveSource returns audit label for audit record class 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest ResolveSource falls back to class basename for unknown type 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest BuildRow uses changelog snapshot not final plan responsible 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest BuildRow responsible varies between two changelogs of the same plan 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest BuildRow returns dash when changelog has no assigned snapshot 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest BuildRow uses plan responsible when no changelog 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest BuildRow uses changelog status date and author when changelog given 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest BuildRow falls back to dash when changelog has no status or employee 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryExportTest BuildRow uses plan status and creation date when no changelog 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest RecordableTypeForModule returns audit record class for audits 0.005s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest RecordableTypeForModule returns null for unknown module 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetBoardData calculates percent correctly 0.002s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetBoardData returns dash percent when no plans 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetBoardData returns 100 percent when all done 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetDaysData formats kpi string with percent 0.004s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetDaysData returns dash when total is zero 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetDaysData uses zero finished when day absent from finished 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetTableViewData delegates to repo 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetPopupItems delegates to repo 0.002s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest FindById delegates to repo 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetAuditLinkedActionPlans chains repo calls 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetByAuditRecordId keeps the plans of the owner 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetByAuditRecordId drops the plans of another restaurant 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetByAuditRecordId single foreign plan never reaches the detail branch 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetByAuditRecordId lets a client see the plans of its restaurants 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetByAuditRecordId denies non restaurant userable even if id is accessible 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetByAuditRecordId returns nothing without current entity 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveRestaurantForOwner returns a restaurant of the client 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveRestaurantForOwner refuses a restaurant outside the client scope 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveRestaurantForOwner refuses when the entity has no scope 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveRestaurantForOwner refuses without current entity 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest CountByAuditRecordId delegates to repo 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetDetailsData separates documents from images 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetDetailsData returns status changelogs collection 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetDetailsData excludes assignment events from the journal 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetDetailsData returns empty data when no files or changelogs 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveOrphanTag returns supprimee when category is deleted 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveOrphanTag returns national when nat category and loc only settings 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveOrphanTag returns local when loc category and nat only settings 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveOrphanTag returns null when category matches active scope 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetDetailsData builds photo gallery urls in order 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest FormatHomeKpi returns dash when total is zero 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest FormatHomeKpi formats percentage and fraction 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest FormatHomeKpi rounds percentage 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest PopupTypeIcon returns expected icon per type 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ApplyDynamicFilterValues unsets all sections when everything empty 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ApplyDynamicFilterValues populates categories when present 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ApplyDynamicFilterValues populates responsable names when present 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ApplyDynamicFilterValues unsets statuses when setting is null even with statuses 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ApplyDynamicFilterValues populates statuses when setting and statuses present 0.004s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ApplyDynamicFilterValues unsets statuses when setting present but no statuses 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveFilterCategories returns loc categories when loc only 0.002s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveFilterCategories returns nat categories when nat only 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveFilterCategories merges loc and nat sorted by position 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveFilterCategories appends orphan categories with tag 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveLocFilterCategories delegates to repo with userable id and class 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveNatFilterCategories delegates to repo with client family id 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest GetHomeCardData returns required keys 0.011s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest GetDaysData returns empty array 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest GetBoardData returns stub structure 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest GetTableViewData returns empty collection 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest GetPopupItems returns empty paginator 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest FindById returns null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest GetAuditLinkedActionPlans returns empty collection 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest GetByAuditRecordId returns empty collection 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest ResolveRestaurantForOwner returns null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest CountByAuditRecordId returns zero 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest BuildFilters returns empty array 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest FindAttachedFile returns null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest PopupTypeIcon returns expected icon per type 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest UpdateSetting rejects invalid field 0.006s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest UpdateSetting propagates repo failure 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest GetIndexPageData creates settings when missing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest GetIndexPageData does not recreate settings when present 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest GetIndexPageData returns early when settings setup fails 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest GetIndexPageData creates statuses when missing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest GetIndexPageData does not duplicate statuses when present 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest GetCategories for client family returns family own categories 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest GetCategories without family returns only restaurant categories 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest GetCategories with family and loc param returns only restaurant categories 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest GetCategories with family and nat param returns only family categories 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest GetCategories with family passes active only to repo 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest GetCategories does not filter locally disabled family categories 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest GetCategories with family and loc nat param returns both 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest UpdateCategory returns success with model when repo succeeds 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest UpdateCategory returns failure when repo returns null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest ToggleCategory returns success with model when repo succeeds 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest ToggleCategory returns failure when repo returns null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest BulkDelete returns success when repo succeeds 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest BulkDelete returns failure when repo fails 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest GetIndexPageData includes settings in return 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest IsConfiguredForRestaurant returns false when no setting 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest IsConfiguredForRestaurant returns false when no active statuses 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest IsConfiguredForRestaurant returns true via loc categories 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest IsConfiguredForRestaurant returns true via nat categories 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest IsConfiguredForRestaurant returns true when loc missing but nat has categories 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest IsConfiguredForRestaurant returns false when no categories anywhere 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest IsConfiguredForRestaurant returns false when loc no categories and nat disabled 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest IsConfiguredForRestaurant returns false when nat no categories and loc disabled 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest IsConfiguredForRestaurant returns false when neither loc nor nat 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest UpdateSetting accepts all whitelisted fields with data set "photos_enabled" 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest UpdateSetting accepts all whitelisted fields with data set "photos_required" 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest UpdateSetting accepts all whitelisted fields with data set "commentaries_enabled" 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest UpdateSetting accepts all whitelisted fields with data set "commentaries_required" 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest UpdateSetting accepts all whitelisted fields with data set "documents_enabled" 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest UpdateSetting accepts all whitelisted fields with data set "documents_required" 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest UpdateSetting accepts all whitelisted fields with data set "reminder_date_enabled" 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest UpdateSetting accepts all whitelisted fields with data set "reminder_date_required" 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest ResolveActiveCategories without family uses loc categories 0.009s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest ResolveActiveCategories with loc only uses loc categories 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest ResolveActiveCategories with nat only uses family categories 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest ResolveActiveCategories with loc and nat merges both 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData creates settings when missing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData does not recreate settings when present 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData counts past reminder as urgent 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData passes through the access scope 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData excludes future reminder from urgent count 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData excludes null reminder from urgent count 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData excludes draft from urgent count 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData urgent count sums across statuses 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData excludes finished status from urgent count 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData excludes plan with finished at from urgent count even on non finished status 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData returns no urgent when no statuses 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData statuses sorted by position 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData includes plan finished within 7 days 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData excludes plan finished more than 7 days ago 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData old finished plan excluded from urgent count 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetUrgentPlansData flattens urgent plans across statuses 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetUrgentPlansData sorts by reminded at ascending 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetUrgentPlansData excludes plan with finished at regardless of status 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetUrgentPlansData passes through the access scope settings and statuses 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest ComputeFinishedAt sets when finished statuses id matches 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest ComputeFinishedAt clears when finished statuses id set but status differs 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest ComputeFinishedAt stays null without a configured final status 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest ComputeFinishedAt clears an existing date without a configured final status 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest ComputeFinishedAt preserves existing finished at when already finished 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest ComputeFinishedAt clears when settings is null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest IsFinishedStatus true when configured id matches 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest IsFinishedStatus false when configured id differs 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest IsFinishedStatus is false without a configured final status 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest ResolveIsDraftOnUpdate stays draft when still requested as draft 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest ResolveIsDraftOnUpdate finalizes draft when requested as final 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest ResolveIsDraftOnUpdate ignores draft request on already finalized plan 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest ResolveIsDraftOnUpdate stays final when already finalized and no save mode 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest DeleteFileAttachment delegates to repo when the file belongs to the tenant 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest DeleteFileAttachment refuses a file outside the tenant 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetPlansForRecord delegates to repo with correct type and id 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData passes employee id to status twin 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData passes null employee id through unchanged 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetAuditPlansCount passes employee id to record twin 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetPlansForRecord keeps plan without finished at 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetPlansForRecord keeps plan finished within 7 days 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetPlansForRecord excludes plan finished more than 7 days ago 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest AuditRecordHasValidatedTask delegates to repo 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest AuditRecordHasValidatedTask bypasses gate for finished period 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest AuditRecordHasValidatedTask delegates to repo when period unknown 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetAuditPlansCount returns zero when no plans 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetAuditPlansCount includes finished plans in count 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetAuditPlansCount counts active and finished plans 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetAuditPlansCount excludes drafts from count 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetAuditPlansCount hasUrgent true when reminder in past 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetAuditPlansCount hasUrgent false when reminder after tomorrow 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetAuditPlansCount hasUrgent false when no reminder 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetAuditPlansCount hasUrgent false when only draft has past reminder 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest FilterByModuleAccess excludes employee with module in forbidden 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest FilterByModuleAccess includes employee without forbidden modules 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest FilterByModuleAccess includes employee with other forbidden module 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest FilterByModuleAccess restores current employee when filtered out 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetResponsableEmployees returns a collection 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetResponsableEmployees delegates to repo with correct restaurant 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetResponsableEmployees filters out employees without module access 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetResponsableEmployees preserves current employee when access revoked 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest FilterByModuleAccess does not duplicate current employee already in list 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest SanitizeFileName replaces spaces with dashes 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest SanitizeFileName strips special characters but keeps dashes 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest SanitizeFileName strips underscores 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest SanitizeFileName keeps already safe name with dash unchanged 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest BuildStorePayload uses category name and icon when not locked 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest BuildStorePayload locked category overrides resolved category 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest BuildStorePayload refuses an audit record outside the tenant 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest BuildStorePayload falls back to empty strings when no category or status 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest BuildStorePayload defaults recordable type to action plan when absent 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest BuildStorePayload turns empty selects into null not zero 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest BuildUpdatePayload freezes category and description once the plan is saved 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest BuildUpdatePayload accepts the submitted values while the plan is a draft 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest BuildUpdatePayload falls back to plan statuses name when status not found 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest BuildUpdatePayload turns empty selects into null not zero 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveSyncAuthorEmployeeId accepts an employee of the restaurant 0.023s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveSyncAuthorEmployeeId accepts a numeric string 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveSyncAuthorEmployeeId rejects an employee of another restaurant 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveSyncAuthorEmployeeId rejects empty zero and garbage 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetCategoriesToSync delegates and returns array 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetSettingsToSync delegates and returns array 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetActionPlansToSync delegates and returns array 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetAttachedFilesToSync delegates and returns array 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetCommentsToSync delegates and returns array 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetStatusesToSync returns empty array when no settings id 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetStatusesToSync delegates when settings id provided 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetStatusesToSyncForRestaurantTablet returns empty when settings missing 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetStatusesToSyncForRestaurantTablet delegates with tablet sync date 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetStatusesToSyncForRestaurantTablet ignores last sync when forced 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogStatusChange does not log when statuses id is null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogStatusChange does not log when status unchanged 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogStatusChange logs when status changes 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogStatusChange logs when old status was null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogStatusChange records tablet author and assigned snapshot 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogStatusChange ignores a tablet author foreign to the restaurant 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogAssignment does not log when plan has no employee 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogAssignment does not log when assignee is unchanged 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogAssignment logs the initial assignment when previous is null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogAssignment logs a reassignment 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest SyncAttachedFile returns invalid file error when file is null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest SyncAttachedFile returns invalid file error when file not valid 0.007s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest SyncAttachedFile returns error when action plan not found 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest SyncAttachedFile returns error when storage fails 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest SyncAttachedFile returns success with record id on new file 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns false when no setting 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns false when no active statuses 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns true via loc categories 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns true via nat categories 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns true when loc missing but nat has categories 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns false when no categories anywhere 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns false when loc no categories and nat disabled 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns false when nat no categories and loc disabled 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns false when neither loc nor nat 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveStatusId takes the server name when id already valid 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveStatusId matches by name when id is stale sqlite id 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveStatusId returns null id when no match by name 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveStatusId handles null name without error 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveStatusId recovers the id from the name when the payload has no id 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveCategoryId keeps id when already valid 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveCategoryId matches by label when id is stale 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveCategoryId returns null when no match 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents new plan not draft not finished fires created only 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents new plan created directly finished fires both in order 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents new plan as draft fires nothing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents new plan draft and finished fires nothing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents existing plan leaving draft fires created 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents existing plan leaving draft and finished fires both 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents existing plan transitioning to finished fires finished only 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents existing plan already finished fires nothing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents existing plan still draft fires nothing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents existing plan no change fires nothing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogAssignment now records the author and the previous assignee 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogAssignment records no author when the tablet sends none 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogReminderChange does not log when the date is unchanged 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogReminderChange logs when the date moves 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogReminderChange logs a date being cleared 0.000s
✅ Tests.Unit.ActionPlan.StatusChangelogTimelineTest Apply on an empty journal returns an empty collection 0.014s
✅ Tests.Unit.ActionPlan.StatusChangelogTimelineTest Apply sorts events chronologically 0.000s
✅ Tests.Unit.ActionPlan.StatusChangelogTimelineTest An assignment is ordered before a status change of the same instant 0.000s
✅ Tests.Unit.ActionPlan.StatusChangelogTimelineTest A status change before any assignment has no known assignee 0.000s
✅ Tests.Unit.ActionPlan.StatusChangelogTimelineTest A status change after an assignment resolves that assignee 0.000s
✅ Tests.Unit.ActionPlan.StatusChangelogTimelineTest A reassignment only applies to later events 0.000s
✅ Tests.Unit.ActionPlan.StatusChangelogTimelineTest An assignment event carries the assignee it institutes 0.000s
✅ Tests.Unit.ActionPlan.StatusChangelogTimelineTest JournalLines renders one single line for a batch that changed two fields 0.000s
✅ Tests.Unit.ActionPlan.StatusChangelogTimelineTest The line of a batch carries every field the save changed 0.000s
✅ Tests.Unit.ActionPlan.StatusChangelogTimelineTest A change of the reminder date alone still produces a line 0.000s
✅ Tests.Unit.ActionPlan.StatusChangelogTimelineTest An event without batch forms its own line 0.000s
✅ Tests.Unit.ActionPlan.StatusChangelogTimelineTest ResolvedState is a snapshot and never leaks a later value 0.000s
✅ Tests.Unit.ActionPlan.StatusChangelogTimelineTest JournalLines ignores the events of another module 0.000s
✅ Tests.Unit.ActivityLog.BulkDeleteActivityLogGuardTest Loggable builder expands mass deletes 0.003s
✅ Tests.Unit.ActivityLog.BulkDeleteActivityLogGuardTest Every logged model routes through the loggable builder 0.066s
✅ Tests.Unit.ActivityLog.BulkDeleteActivityLogGuardTest No new raw bulk delete on a logged table 0.439s
✅ Tests.Unit.ActivityLog.BulkDeleteActivityLogGuardTest No new raw bulk insert on a logged table 0.126s
✅ Tests.Unit.ActivityLog.BulkDeleteActivityLogGuardTest No new eloquent bulk insert on a logged model 0.114s
✅ Tests.Unit.ActivityLog.LoggableBuilderTest The builder is wired onto the model 0.034s
✅ Tests.Unit.ActivityLog.LoggableBuilderTest Mass delete fires the deleted event once per row 0.002s
✅ Tests.Unit.ActivityLog.LoggableBuilderTest A plain builder would have lost every event 0.001s
✅ Tests.Unit.ActivityLog.LoggableBuilderTest Mass delete on a soft deleting model logs and soft deletes 0.002s
✅ Tests.Unit.Alert.AuditContactPivotsTest The opt in is read in a single query for the whole population 0.003s
✅ Tests.Unit.Alert.AuditContactPivotsTest Only contacts whose master switch is on are submitted to the opt in query 0.000s
✅ Tests.Unit.Alert.AuditContactPivotsTest Pivot values follow the double condition 0.000s
✅ Tests.Unit.Alert.AuditContactPivotsTest Every contact gets a pivot row even when nobody is opted in 0.000s
✅ Tests.Unit.Alert.AuditContactPivotsTest A non array iterable is traversed twice without being exhausted 0.000s
✅ Tests.Unit.Alert.AuditContactPivotsTest An empty population produces an empty map 0.000s
✅ Tests.Unit.Api.AdoriaStaleMenuPurgeTest Synchronize soft deletes production tasks missing from api for active days 0.060s
✅ Tests.Unit.Api.AdoriaStaleMenuPurgeTest Synchronize does not purge when api day has no importable recipes 0.051s
✅ Tests.Unit.Api.AdoriaSyncFixtureBenchmarkTest Sync replay fixture is idempotent and reports timings 0.054s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Get data throws when menu request fails 0.050s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Get data treats menu plan 404 as empty 0.047s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Get data still throws when menu returns server error 0.042s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Menu plan 404 is treated as empty http error 0.043s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Get data throws on html error body that is not json 0.043s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Kitchen catalog is cached across calls 0.046s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Kitchen failure does not abort menu import 0.043s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Test connection returns false instead of throwing 0.045s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Test connection returns true when multi step setup is incomplete 0.043s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Test connection returns false when organization token is rejected 0.042s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Sync adoria connexion job uses retries and api sync queue 0.041s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Sync adoria api defaults to single job mode 0.041s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Sync adoria api per connexion mode shortens parent timeout 0.041s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Src api token is trimmed on assignment 0.045s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Src api token trim ignores non string values 0.040s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Equilibre get data throws when auth token request fails 0.045s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Equilibre get data throws when site id is rejected by api 0.041s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Equilibre test connection returns false instead of throwing on invalid site 0.041s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Equilibre test connection returns true when api legitimately has no data 0.044s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Compass test connection returns false instead of throwing 0.042s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Easilys test connection returns true when id site not yet selected 0.044s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Easilys get data throws when id site is missing 0.042s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Easilys get data throws when every request fails 0.042s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Easilys get data keeps empty payload when api responds 0.043s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Easilys test connection returns false when every request fails 0.044s
✅ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Equilibre daily resync does not duplicate control reception import 8.533s
✅ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Equilibre daily resync does not duplicate product imports 8.968s
✅ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Equilibre without prepare sync reproduces duplicate imports 9.079s
✅ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Equilibre orphan product import is relinked not duplicated 9.553s
✅ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Easilys resync does not duplicate control reception and product imports 9.144s
✅ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Compass resync does not duplicate control reception and product imports 8.485s
✅ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Get existing data depends on restaurant context 8.635s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Merge unions recipes only present in one source 9.423s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Merge keeps primary id when same recipe has different ids 9.363s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Merge treats labels as case and whitespace insensitive 8.902s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Merge keeps distinct recipes that share the same numeric id 9.202s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Diff counts partial overlap between sources 8.925s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Parse connection config ignores legacy use menu report flag 8.965s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Test connection probes configured site receipts not sites list 9.937s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Test connection without id site probes sites for first save 10.341s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Test connection falls back to categorymenus when receipts are forbidden 9.474s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Test connection fails when site endpoint has no data key 9.832s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Resolve id sites appends children of the parent site 10.119s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Occurrence key keeps same id with different labels distinct 9.712s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Synchronize imports distinct recipes that share the same numeric id 9.956s
✅ Tests.Unit.Api.EquilibreSyncFixtureBenchmarkTest Sync replay fixture is idempotent and reports timings 0.091s
✅ Tests.Unit.Api.ImportApisSyncGuardsTest Ajax is active toggle does not reset import apis on local service 0.145s
✅ Tests.Unit.Api.ImportApisSyncGuardsTest Ajax is active toggle does not reset import apis on indep service 0.048s
✅ Tests.Unit.Api.ImportApisSyncGuardsTest Full form submit without import apis resets them 0.046s
✅ Tests.Unit.Api.ImportApisSyncGuardsTest Sync query excludes inactive restaurants but keeps client family connexions 0.050s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Une photo de tache est acceptee 0.018s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Un php renomme en jpg est refuse sur son contenu 0.069s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Un php garde son extension est refuse avant meme le contenu 0.001s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Un fichier sans extension est refuse 0.002s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Un document bureautique reste accepte 0.001s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Un pdf est refuse sur la photo et accepte sur le document 0.001s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Un svg est refuse car il s execute dans notre origine 0.001s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Une page html est refusee 0.001s
✅ Tests.Unit.AttachedFiles.AttachedFileSyncServiceTest SyncAttachedFile dispatches to action plan sync service by default 0.004s
✅ Tests.Unit.AttachedFiles.AttachedFileSyncServiceTest SyncAttachedFile dispatches to audit sync service for audit action task 0.000s
✅ Tests.Unit.AttachedFiles.AttachedFileSyncServiceTest SyncAttachedFile rejects unknown attachable type 0.000s
✅ Tests.Unit.Audits.AuditActionConsigneUploadTest Une consigne pdf est acceptee 0.002s
✅ Tests.Unit.Audits.AuditActionConsigneUploadTest Une consigne image reste acceptee 0.001s
✅ Tests.Unit.Audits.AuditActionConsigneUploadTest Une consigne php est refusee avec un message 0.001s
✅ Tests.Unit.Audits.AuditActionConsigneUploadTest Un upload en echec est refuse avec un message sans 500 0.000s
✅ Tests.Unit.Audits.AuditActionConsigneUploadTest L image du plan de nettoyage reste limitee aux images 0.012s
✅ Tests.Unit.Audits.AuditActionTaskCommentsTest GetCommentsCount counts each comment row 0.003s
✅ Tests.Unit.Audits.AuditActionTaskCommentsTest GetCommentsCount adds legacy field to comment rows 0.000s
✅ Tests.Unit.Audits.AuditActionTaskCommentsTest GetCommentsCount ignores blank legacy field 0.000s
✅ Tests.Unit.Audits.AuditActionTaskCommentsTest GetCommentsCount counts legacy field starting with a symbol 0.000s
✅ Tests.Unit.Audits.AuditActionTaskCommentsTest GetFirstCommentText prefers legacy field 0.000s
✅ Tests.Unit.Audits.AuditActionTaskCommentsTest GetFirstCommentText returns oldest comment row by created at 0.000s
✅ Tests.Unit.Audits.AuditActionTaskCommentsTest GetFirstCommentText breaks created at tie with id 0.001s
✅ Tests.Unit.Audits.AuditActionTaskCommentsTest GetFirstCommentText returns null without any comment 0.000s
✅ Tests.Unit.Audits.AuditActionTaskCommentsTest GetSortedComments returns rows in entry order and reindexed 0.001s
✅ Tests.Unit.Audits.AuditEmployeeReferentialTest National copy never touches the forbidden employees pivot 0.087s
✅ Tests.Unit.Audits.AuditEmployeeReferentialTest Local copy still copies the forbidden employees pivot 0.051s
✅ Tests.Unit.Audits.AuditEmployeeReferentialTest National update never touches the forbidden employees pivot 0.046s
✅ Tests.Unit.Audits.AuditEmployeeReferentialTest Local update still forbids everyone when no employee is checked 0.058s
✅ Tests.Unit.Audits.AuditEmployeeReferentialTest Local update forbids only the unchecked employees 0.052s
✅ Tests.Unit.Audits.AuditEmployeeReferentialTest National edit page never loads the employee referential 0.059s
✅ Tests.Unit.Audits.AuditEmployeeReferentialTest Local edit page still loads the employee referential 0.046s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditsToSync enriches each audit with forbidden employees ids 0.004s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditDirectoriesToSync enriches audits ids and removes audits relation 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionsToSync prefixes consigne when present 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionsToSync leaves empty consigne untouched 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionsToSync forwards lastSync and withTrashed to repository 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditExtraActionsToSync delegates and returns array 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync forwards fix 5677 filters to repository 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync disables incremental filter on reset 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync enables incremental filter when no reset nor resend 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync skips tasks without allAuditAction or audit 0.002s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync sorts national before local and recomputes positions 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync aggregates images and uses last as task image 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync leaves image null when no images 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync copies fields from allAuditAction and unserializes extraActions 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync sets extraActions null when empty 0.002s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync survives corrupted extraActions and keeps other tasks 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask returns status false when no id and no match by valid until 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask resolves by ovh id when tablet uses ovh 0.002s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask resolves directly by id when tablet has no ovh 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask resolves via 2023 11 17 hardcoded range and skips general fallback 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask falls through to general range when 2023 11 17 range is ambiguous 0.002s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask falls back to general day range for non 2023 11 17 dates 0.002s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask returns status false when day range fallback is ambiguous 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask does not update when task is already done 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask returns validation errors when task invalid without resolving ids 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask fills task and sets technical fields 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask resolves related ids after validation 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask returns success with id when save succeeds 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask returns failure without id when save fails 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask delegates finished cycle to task generator after save 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask returns regenerated tasks debug payload 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask ignores invalid image and follows no image path 0.002s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask returns invalid image error when size zero 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask attaches image and saves when move and creation succeed 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask does not save when image creation fails 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest AddAuditActionTaskImage uses ovh lookup when tablet uses ovh 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest AddAuditActionTaskImage uses direct lookup when tablet has no ovh 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest AddAuditActionTaskImage returns status false when task not found 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest AddAuditActionTaskImage returns status false when image missing 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest AddAuditActionTaskImage returns status false when image invalid 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest AddAuditActionTaskImage returns invalid image error when size zero 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest AddAuditActionTaskImage uses task date not today for destination and returns created image 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest AddAuditActionTaskImage reports failure when created image does not exist 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAttachedFile returns invalid file error when file is null 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAttachedFile returns invalid file error when file not valid 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAttachedFile returns error when task not found 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAttachedFile returns error when storage fails 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAttachedFile returns success with record id on new file 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAttachedFilesToSync delegates and returns array 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask confronte la tache au restaurant appelant 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest AddAuditActionTaskImage confronte la tache au restaurant appelant 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAttachedFile confronte la tache au restaurant appelant 0.000s
✅ Tests.Unit.Audits.AuditTaskServiceTest GetEditData returns comments and documents for existing task 0.016s
✅ Tests.Unit.Audits.AuditTaskServiceTest AddComment creates comment when text non empty 0.000s
✅ Tests.Unit.Audits.AuditTaskServiceTest AddComment trims text before creating 0.000s
✅ Tests.Unit.Audits.AuditTaskServiceTest AddComment is noop when text empty or blank 0.000s
✅ Tests.Unit.Audits.AuditTaskServiceTest DeleteComment delegates to repository 0.000s
✅ Tests.Unit.Audits.AuditTaskServiceTest DeleteDocument delegates to repository 0.000s
✅ Tests.Unit.Audits.AuditTaskServiceTest GetDocumentForView delegates to repository 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest GetFilters returns the three filter groups with their labels 0.003s
✅ Tests.Unit.Audits.AuditsBoardServiceTest GetRecords passes the client hook values to the repository 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest GetRecords accepts a null restaurant id 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest GetTasks passes the client hook value and a hardcoded page size 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest ExpandCalendarPeriod widens a week by one week on each side 0.001s
✅ Tests.Unit.Audits.AuditsBoardServiceTest ExpandCalendarPeriod widens a thirty day month by one month on each side 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest ExpandCalendarPeriod overshoots by two months when the month ends on the 31st 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest ExpandCalendarPeriod widens a year by one year on each side 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest ExpandCalendarPeriod never goes past today 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest ExpandCalendarPeriod returns the period untouched for an unknown periodicity 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest ExpandCalendarPeriod mutates the carbon instances it receives 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarCellPeriod spans from the start day to the end of its week 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarCellPeriod spans to the end of the month 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarCellPeriod spans to the end of the year 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarCellPeriod covers the single day for an unknown periodicity 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarCellPeriod mutates the start date it receives 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarDetailPeriod extends only the end to its period 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarDetailPeriod leaves the bounds alone for all 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarDetailPeriod extends the end to the end of its month 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarDetailPeriod only reaches the end of day for an unknown periodicity 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest GetCalendarAggregates asks for the extended flag and keys by restaurant 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest GetCalendarAggregates defaults the family filter to an empty array 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest BuildCalendarCells gives every active restaurant a cell even without audits 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest BuildCalendarCells skips inactive restaurants entirely 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest BuildCalendarCells fills the aggregates and formats the ratio 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest BuildCalendarCells ignores aggregates for unknown restaurants 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest BuildCalendarCells marks a restaurant closed over a whole week 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest BuildCalendarCells does not mark closed when the restaurant opens once 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest BuildCalendarCells never computes closed beyond a week 0.001s
✅ Tests.Unit.Audits.AuditsBoardServiceTest GetSelectedFamilyNames joins the names of the selected families 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest GetSelectedFamilyNames returns an empty string without a family filter 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest GetSelectedFamilyNames ignores ids the client does not own 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarRowClass flags a non conforme record first 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarRowClass warns on a record that was not done 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarRowClass marks a record in progress as pending 0.002s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarRowClass returns no class for anything else 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest BuildRecordPdfData returns null when the record does not exist 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest GetIndexPageData returns the action and its ordered extra actions 0.009s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest GetIndexPageData returns null when the action does not exist 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest GetIndexPageData returns null when the action belongs to someone else 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest GetCreatePageData returns a blank action with colors and type labels 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest GetCreatePageData returns null for a foreign action 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest GetEditPageData returns the extra action with colors and type labels 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest GetEditPageData leaves auditAction null when the relation is orphan 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest GetEditPageData returns null for a foreign extra action 0.002s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest StoreExtraAction sets owner active position and parent then saves 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest StoreExtraAction lets the post overwrite the computed position and active 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest StoreExtraAction returns null and saves nothing for a foreign action 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest UpdateExtraAction returns the saved branch with the filled action 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest UpdateExtraAction returns the save failed branch when the repository refuses 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest UpdateExtraAction returns the not found branch for a foreign extra action 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest DeleteExtraAction returns status true when the repository deletes 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest DeleteExtraAction returns status false with an error when the delete fails 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest DeleteExtraAction returns a bare false status for a foreign extra action 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest ReorderExtraActions numbers the given ids from one 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest ReorderExtraActions skips empty ids without burning a position 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest ReorderExtraActions reuses the position of a row the repository refused 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest ReorderExtraActions returns false for a foreign action 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest NormalizeTemperatureInput promotes the custom fields on the quantity type 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest NormalizeTemperatureInput ignores the custom fields on other types 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest NormalizeTemperatureInput turns empty bounds into null 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest NormalizeTemperatureInput falls back on the minimum for an empty default 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest NormalizeTemperatureInput falls back on one when there is no minimum 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest NormalizeTemperatureInput leaves filled values alone 0.000s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest GetHistoryFilters returns static filters config 0.008s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest GetRecordsForHistory delegates to repository and returns its result 0.001s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest GetTasksForHistory delegates to repository with given perPage 0.000s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest GetTasksForHistory defaults perPage to 250 0.000s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest FindAuditRecordForExport delegates to repository 0.000s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest FindAuditRecordForExport returns null when not found 0.000s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest CanAccessRecordForExport returns false when record is null 0.002s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest CanAccessRecordForExport returns true when client guard regardless of authUserId 0.000s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest CanAccessRecordForExport returns true when not client guard and authUserId matches restaurant 0.000s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest CanAccessRecordForExport returns false when not client guard and authUserId does not match 0.000s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest BuildDirectPdfExportData returns null when record not found 0.000s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest GetXlsHistoryFilename is harmonized on the resolved period 0.003s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest GetXlsTasksHistoryFilename is harmonized on the resolved period 0.000s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest GetActionsPopupData returns null when record not found 0.000s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest GetPopupData returns default view without repository call when type is unknown 0.000s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest GetRecordDetailsById returns null when task not found 0.001s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest PrepareDocumentDownload returns file when linked task exists 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetIndexPageData groups audits by period 0.005s
✅ Tests.Unit.Audits.AuditsParametersServiceTest StoreAudit sets defaults and syncs contacts when save succeeds 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest StoreAudit does not sync contacts when save fails 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetEditPageData returns null when audit not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetEditPageData returns null when audit belongs to another restaurant 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetEditPageData returns full data when audit belongs to restaurant 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetTasksActionsPageData returns null when audit not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetTasksActionsPageData returns null for a foreign audit 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetTasksActionsPageData returns data for an owned audit 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest UpdateAudit returns not found when audit missing 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest UpdateAudit returns not found when foreign audit and not same family 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest UpdateAudit falls through to not found when family matches but active key absent 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetShowPageData returns null when audit not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetShowPageData returns null when audit belongs to another restaurant 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetShowPageData returns audit and periods when owned 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DestroyAudit returns deleted false when audit not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DestroyAudit returns deleted false when foreign audit 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DestroyAudit returns deleted true when owned and delete succeeds 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DestroyAudit returns deleted false when delete fails 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest ImportXlsxRows returns status false when file invalid 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest ExportAuditActions returns null when audit not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest ReorderAudits upserts position for each valid id and skips empty 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest ReorderAudits skips id not found by repository 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest ReorderActions upserts position without active field 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest CreateAction returns null when audit not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest CreateAction defaults coefficent to one when empty 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest CreateAction keeps provided coefficent 0.002s
✅ Tests.Unit.Audits.AuditsParametersServiceTest CreateAction creates extra actions when provided by import 0.001s
✅ Tests.Unit.Audits.AuditsParametersServiceTest CreateAction does not create extra actions when absent 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetCreateDirectoryPageData returns expected structure 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetEditDirectoryPageData returns null when directory not found 0.001s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetEditDirectoryPageData combines audits without directory and directory audits 0.001s
✅ Tests.Unit.Audits.AuditsParametersServiceTest SaveDirectory creates new directory with defaults when directoryId null 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest SaveDirectory uses provided name and color 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest SaveDirectory assigns new audits to directory when save succeeds 0.001s
✅ Tests.Unit.Audits.AuditsParametersServiceTest SaveDirectory does not assign audits when save fails 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest SaveDirectory update mode unassigns removed audits and keeps still selected ones 0.001s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DeleteDirectory returns deleted false when directory not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DeleteDirectory returns deleted false when foreign directory 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DeleteDirectory moves audits out when moveAudits true 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DeleteDirectory deletes audits when moveAudits false 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DeleteDirectory returns deleted false when repository delete fails 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest The tenant is forwarded to the repository when deleting a directory 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetShowDirectoryPageData returns null when directory not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetShowDirectoryPageData groups audits by period without ownership check 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest ToggleDirectoryActive returns status false when directory not found 0.000s
✅ Tests.Unit.Audits.CentralAuditsBoardServiceTest CreatedAt counts in the records period centrally but not for a client 0.012s
✅ Tests.Unit.Audits.CentralAuditsBoardServiceTest The central records screen is not paginated while the client one is 0.000s
✅ Tests.Unit.Audits.CentralAuditsBoardServiceTest The realisation filter constrains tasks centrally but not for a client 0.000s
✅ Tests.Unit.Audits.CentralAuditsBoardServiceTest The client xls filenames use the generic module label and the period 0.001s
✅ Tests.Unit.Audits.CentralAuditsBoardServiceTest The central xls filenames take the module label from the restaurant 0.001s
✅ Tests.Unit.Audits.CentralAuditsBoardServiceTest The central xls filename falls back to the generic label without a module name 0.000s
✅ Tests.Unit.Audits.CentralAuditsBoardServiceTest The pdf filename is the same for both domains and prefers the start date 0.001s
✅ Tests.Unit.Audits.LocalAuditServiceTest GetTaskDetailData returns null when task not found 0.004s
✅ Tests.Unit.Audits.LocalAuditServiceTest GetTaskDetailData returns task and extraActions when found 0.000s
✅ Tests.Unit.Audits.LocalAuditServiceTest GetTaskDetailData passes null auditActionId when no auditAction 0.000s
✅ Tests.Unit.Audits.LocalAuditServiceTest UpdateTask returns null when task not found 0.002s
✅ Tests.Unit.Audits.LocalAuditServiceTest UpdateTask returns success true and task when update succeeds 0.000s
✅ Tests.Unit.Audits.LocalAuditServiceTest UpdateTask returns success false when update fails 0.000s
✅ Tests.Unit.Audits.LocalAuditServiceTest UpdateTasksBatch skips task not found by repository 0.000s
✅ Tests.Unit.Audits.LocalAuditServiceTest UpdateTasksBatch skips update when rate empty 0.000s
✅ Tests.Unit.Audits.LocalAuditServiceTest UpdateTasksBatch updates task with expected data when rate present 0.000s
✅ Tests.Unit.Audits.LocalAuditServiceTest UpdateTasksBatch defaults comment and extraActions when absent 0.000s
✅ Tests.Unit.Audits.LocalAuditServiceTest UpdateTasksBatch calls tasksUpdated once when auditRecord present 0.007s
✅ Tests.Unit.Audits.LocalAuditServiceTest UpdateTasksBatch does not call tasksUpdated when no auditRecord 0.000s
✅ Tests.Unit.Audits.LocalAuditServiceTest UpdateTasksBatch retains audit and auditRecord from first resolving task 0.000s
✅ Tests.Unit.Audits.LocalAuditServiceTest UpdateTasksBatch does not regenerate cycle when period is not finished 0.000s
✅ Tests.Unit.Audits.LocalAuditServiceTest UpdateTasksBatch does not regenerate cycle when achievement is not done 0.000s
✅ Tests.Unit.Audits.LocalAuditServiceTest RemoveTaskImage returns false when image not found 0.001s
✅ Tests.Unit.Audits.LocalAuditServiceTest CheckDirectoryPassword returns true when password matches 0.000s
✅ Tests.Unit.Audits.MultiAuditServiceTest GetIndexData returns empty collections and null employee 0.004s
✅ Tests.Unit.Audits.MultiAuditServiceTest GetTasksPageData returns null 0.000s
✅ Tests.Unit.Audits.MultiAuditServiceTest GetTaskDetailData returns null when entity is null 0.000s
✅ Tests.Unit.Audits.MultiAuditServiceTest GetTaskDetailData scopes lookup to client restaurant ids 0.001s
✅ Tests.Unit.Audits.MultiAuditServiceTest GetTaskDetailData returns task and extraActions when found 0.000s
✅ Tests.Unit.Audits.MultiAuditServiceTest GetTaskDetailData passes null auditActionId when no auditAction 0.000s
✅ Tests.Unit.Audits.MultiAuditServiceTest UpdateTask returns null 0.000s
✅ Tests.Unit.Audits.MultiAuditServiceTest UpdateTasksBatch is a noop 0.000s
✅ Tests.Unit.Audits.MultiAuditServiceTest AddTaskImage returns null 0.000s
✅ Tests.Unit.Audits.MultiAuditServiceTest RemoveTaskImage returns false 0.000s
✅ Tests.Unit.Audits.MultiAuditServiceTest GetDirectoryViewData returns periods and directory with empty audits 0.000s
✅ Tests.Unit.Audits.MultiAuditServiceTest CheckDirectoryPassword returns true when password matches 0.000s
✅ Tests.Unit.Audits.MultiAuditsExtraActionsServiceTest OwnerColumn is the family column nationally and the restaurant column locally 0.004s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest OwnerColumn is the family column nationally and the restaurant column locally 0.001s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest ManagesForbiddenEmployees is off nationally and on locally 0.000s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest TaskScopeArgument scopes the regeneration to the family nationally 0.000s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest TaskScopeArgument stays empty locally so the command does nothing 0.000s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest TaskScopeArgument returns on both contexts instead of recursing 0.001s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest InheritsFromFamily is false nationally because a family is the top 0.000s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest DirectoryIsAccessible requires strict family ownership nationally 0.000s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest DirectoryIsAccessible is unconditionally true locally 0.000s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest DeleteDirectory guards on the family column nationally 0.000s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest StoreAudit asks for the contacts of its own owner in both contexts 0.001s
✅ Tests.Unit.Audits.SimpleAuditsParametersServiceTest GetShowPageData returns audits and folders from repository 0.004s
✅ Tests.Unit.Audits.SimpleAuditsParametersServiceTest GetAreaPopupData uses new audit and includes all periods when id is null 0.000s
✅ Tests.Unit.Audits.SimpleAuditsParametersServiceTest GetAreaPopupData uses existing audit and filters periods to its own period 0.002s
✅ Tests.Unit.Audits.SimpleAuditsParametersServiceTest GetAreaPopupData parent values only include audits without actions 0.000s
✅ Tests.Unit.Audits.SimpleAuditsParametersServiceTest GetActionPopupData creates new action when actionId is null 0.000s
✅ Tests.Unit.Audits.SimpleAuditsParametersServiceTest GetActionPopupData finds local override action when actionId given 0.002s
✅ Tests.Unit.Audits.SimpleAuditsParametersServiceTest GetActionPopupData returns null audit when audit not found even with trashed 0.000s
⏭️ Tests.Unit.CleaningPlan.CleaningPlanObserverTest Activating parent propagates to children 0.000s
⏭️ Tests.Unit.CleaningPlan.CleaningPlanObserverTest Deactivating parent propagates to children 0.000s
⏭️ Tests.Unit.CleaningPlan.CleaningPlanObserverTest Unchanged value does not touch children 0.000s
⏭️ Tests.Unit.CleaningPlan.CleaningPlanObserverTest Parent without children does not throw 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanParentOptionRulesTest Loc own active zone is proposable 0.002s
✅ Tests.Unit.CleaningPlan.CleaningPlanParentOptionRulesTest Loc own disabled zone stays proposable 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanParentOptionRulesTest Loc active national zone is proposable 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanParentOptionRulesTest Loc disabled national zone is not proposable 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanParentOptionRulesTest Loc national zone refused by this restaurant is not proposable 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanParentOptionRulesTest Loc zone of another restaurant is never proposable 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanParentOptionRulesTest Loc restaurant without family only sees its own 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanParentOptionRulesTest Nat active national zone is proposable 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanParentOptionRulesTest Nat disabled national zone is not proposable 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanParentOptionRulesTest Nat local zone of an establishment is not proposable 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanParentOptionRulesTest Nat zone of another family is not proposable 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanParentOptionRulesTest Zone without parent is in inactive branch only if itself disabled 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanParentOptionRulesTest Active zone under disabled parent is in inactive branch 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanParentOptionRulesTest Inactive ancestor is detected at any depth 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanParentOptionRulesTest Fully active chain is not in inactive branch 0.001s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGenerationPureLogicTest Always expected valid until without expiration uses year 3000 0.004s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGenerationPureLogicTest Always expected valid until with expiration adds days from valid from 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGenerationPureLogicTest Always expected valid until when valid from null uses fallback now 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGenerationPureLogicTest Valid from copy is not mutated when computing expected until 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGenerationPureLogicTest Day skip when closed and week closure covers task slot 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGenerationPureLogicTest Day not skipped when restaurant marked open 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGenerationPureLogicTest Frequency loop indices match service loop 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGenerationPureLogicTest Frequency one does not require index number in query 0.001s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGenerationPureLogicTest Frequency greater than one requires index per iteration 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGenerationPureLogicTest Always branch should create new row when expected until already passed 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGenerationPureLogicTest Always branch should not create new row when expected until still future 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGenerationPureLogicTest Idempotence window same calendar day 0.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Nat plan disabled at loc does not generate tasks 0.242s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Nat action disabled at loc does not generate tasks 0.130s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Closed restaurant stops generation 0.113s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Always is idempotent then regenerates when expired path hits 0.136s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Frequency increase from one reuses existing task as main 0.134s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Frequency generates indexed children linked to first task 0.145s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Only action id generates only target action tasks 0.130s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Always updates valid until without modifying existing valid from 0.130s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Always friday only with expiration catch up after expiry on saturday 0.129s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Loc action on nat plan still generates when nat action disabled at loc 0.118s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Day task not skipped when week closure does not cover full action slot 0.126s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Day task skipped when week closure covers full action slot 0.136s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Day task skipped when week closure is full day with same start end hour 0.112s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Frequency generation is idempotent on same period window 0.124s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Week task skipped when restaurant closed all week period 0.114s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Nat parent disabled blocks child nat action generation regression 0.122s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Nat loc disabled and several generations 0.287s
✅ Tests.Unit.CleaningPlan.RestaurantCleaningPlanActionActiveTest Active zero disables family action 0.006s
✅ Tests.Unit.CleaningPlan.RestaurantCleaningPlanActionActiveTest Active one keeps family action when not disabled list 0.000s
✅ Tests.Unit.CleaningPlan.RestaurantNatLocCleaningPlanActionTest Loc action active when restaurant id matches and active one 0.001s
✅ Tests.Unit.CleaningPlan.RestaurantNatLocCleaningPlanActionTest Loc action inactive when active zero 0.000s
✅ Tests.Unit.CleaningPlan.RestaurantNatLocCleaningPlanActionTest Nat action active when family matches and no disabled list 0.000s
✅ Tests.Unit.CleaningPlan.RestaurantNatLocCleaningPlanActionTest Nat action inactive when disabled for plan at loc 0.000s
✅ Tests.Unit.CleaningPlan.RestaurantNatLocCleaningPlanActionTest Nat action still active when sibling action disabled on same plan 0.000s
✅ Tests.Unit.CleaningPlan.RestaurantNatLocCleaningPlanActionTest Nat action inactive when national row inactive without effective override 0.000s
✅ Tests.Unit.CleaningPlan.RestaurantNatLocCleaningPlanActionTest Nat action inactive when active zero even if base active one 0.000s
✅ Tests.Unit.CleaningPlan.RestaurantNatLocCleaningPlanActionTest Nat action false when family mismatch 0.000s
✅ Tests.Unit.CleaningPlan.RestaurantNatLocCleaningPlanActionTest Loc action uses effective not only base active for restaurant row 0.000s
✅ Tests.Unit.CleaningPlan.RestaurantNatLocCleaningPlanActionTest Loc action on nat plan evaluated as restaurant row 0.000s
✅ Tests.Unit.CleaningPlan.RestaurantNatLocCleaningPlanActionTest Nat disabled list ignored for pure loc action same restaurant id 0.000s
✅ Tests.Unit.Common.Export.ExportFilenameTest builds establishment then module then single-day period 0.003s
✅ Tests.Unit.Common.Export.ExportFilenameTest builds a date range period 0.000s
✅ Tests.Unit.Common.Export.ExportFilenameTest collapses a same-day range to a single date 0.000s
✅ Tests.Unit.Common.Export.ExportFilenameTest settings export has no period 0.000s
✅ Tests.Unit.Common.Export.ExportFilenameTest appends extension only when requested 0.000s
✅ Tests.Unit.Common.Export.ExportFilenameTest strips accents, apostrophes and special characters 0.000s
✅ Tests.Unit.Common.Export.ExportFilenameTest normalizes slashes, dashes and repeated separators 0.000s
✅ Tests.Unit.Common.Export.ExportFilenameTest parses d/m/Y period strings 0.000s
✅ Tests.Unit.Common.Export.ExportFilenameTest parses ISO Y-m-d date strings without throwing 0.000s
✅ Tests.Unit.Common.Export.ExportFilenameTest parses a mixed ISO/dmy range 0.000s
✅ Tests.Unit.Common.Export.ExportFilenameTest skips missing establishment and period gracefully 0.000s
✅ Tests.Unit.Common.Export.ExportFilenameTest strips characters that are illegal in a filename or header 0.002s
✅ Tests.Unit.Common.Export.ExportFilenameTest does not double the extension 0.000s
✅ Tests.Unit.Common.Export.ExportFilenameTest swaps reversed period bounds 0.000s
✅ Tests.Unit.Common.Export.ExportFilenameTest rejects invalid and relative date strings 0.000s
✅ Tests.Unit.Common.Export.ExportFilenameTest caps overly long components 0.004s
✅ Tests.Unit.Common.Export.ExportFilenameTest falls back to export when everything is empty 0.000s
✅ Tests.Unit.Common.Export.ExportFilenameTest ignores null and empty module parts 0.000s
✅ Tests.Unit.Common.Export.ModuleNameForRestaurantTest resolves the module name of the given restaurant without a logged-in restaurant 0.005s
✅ Tests.Unit.Common.Export.ModuleNameForRestaurantTest a restaurant resolves its own module name, as exports from the national or central back-office need 0.000s
✅ Tests.Unit.Common.ExportDispatchResponseTest History page is safe 0.002s
✅ Tests.Unit.Common.ExportDispatchResponseTest Download url is unsafe 0.000s
✅ Tests.Unit.Common.ExportDispatchResponseTest Export xls trigger url is unsafe 0.000s
✅ Tests.Unit.Common.ExportDispatchResponseTest Cooking temperature xls trigger url is unsafe 0.000s
✅ Tests.Unit.Common.ExportDispatchResponseTest Pdf export trigger url is unsafe 0.000s
✅ Tests.Unit.Common.ExportDispatchResponseTest Foreign host is unsafe 0.000s
✅ Tests.Unit.Common.ExportDispatchResponseTest Empty and null are unsafe 0.000s
✅ Tests.Unit.Common.ExportDispatchResponseTest In app browser exit urls are unsafe 0.000s
✅ Tests.Unit.Common.ExportToSpreadsheetActionTest Writes rows to file 0.026s
✅ Tests.Unit.Common.ExportToSpreadsheetActionTest Writes headers when there are no rows 0.006s
✅ Tests.Unit.Common.ReadSpreadsheetActionTest Reads rows keyed by header 0.007s
✅ Tests.Unit.Console.FixCorruptedExtraActionsTest Une valeur abimee par un emoji est reparee 0.049s
✅ Tests.Unit.Console.FixCorruptedExtraActionsTest Tableaux imbriques et scalaires sont repares 0.043s
✅ Tests.Unit.Console.FixCorruptedExtraActionsTest Une perte qui atteint la chaine suivante est refusee et non mal reparee 0.042s
✅ Tests.Unit.Console.FixCorruptedExtraActionsTest La reparation ne change que les prefixes de longueur 0.042s
✅ Tests.Unit.Console.FixCorruptedExtraActionsTest Une valeur tronquee est refusee 0.042s
✅ Tests.Unit.Console.FixCorruptedExtraActionsTest Une valeur qui n est pas du serialize est refusee 0.042s
✅ Tests.Unit.Console.FixCorruptedExtraActionsTest Une valeur saine reste identique 0.042s
✅ Tests.Unit.Export.AuditRecordExportTest No action plan returns two dashes 0.003s
✅ Tests.Unit.Export.AuditRecordExportTest Action plan returns description then status 0.001s
✅ Tests.Unit.Export.AuditRecordExportTest Action plan with null description falls back to dash 0.000s
✅ Tests.Unit.Export.AuditRecordExportTest Action plan with null status falls back to dash 0.000s
✅ Tests.Unit.Export.AuditRecordExportTest Action plan without description nor status 0.000s
✅ Tests.Unit.Fridges.FridgeZoneModeTest Area without task nor fridge keeps the mode without zones 0.070s
✅ Tests.Unit.Fridges.FridgeZoneModeTest Task given only to a fridge of an area switches to zone mode 0.064s
✅ Tests.Unit.Fridges.FridgeZoneModeTest Task given only to an inactive fridge of an area keeps the mode without zones 0.067s
✅ Tests.Unit.Fridges.FridgeZoneModeTest Area with an inactive task only keeps the mode without zones 0.068s
✅ Tests.Unit.Fridges.FridgeZoneModeTest National fridge without zone receives nothing in zone mode 0.078s
✅ Tests.Unit.Fridges.FridgeZoneModeTest Fridge without zone receives nothing once one zone counts 0.068s
✅ Tests.Unit.Fridges.FridgeZoneModeTest Area with task but without fridge keeps the mode without zones 0.061s
✅ Tests.Unit.Fridges.FridgeZoneModeTest Filled record of the ongoing slot is retired and stays in the history 0.063s
✅ Tests.Unit.Fridges.FridgeZoneModeTest Records of an ended slot are kept on a mode change 0.067s
✅ Tests.Unit.Fridges.FridgeZoneModeTest Deactivating a fridge keeps its late records 0.062s
✅ Tests.Unit.Fridges.FridgeZoneModeTest Deleting a task keeps its late records 0.054s
✅ Tests.Unit.Fridges.FridgeZoneModeTest Task generator service applies the same rule 0.056s
✅ Tests.Unit.Fridges.FridgeZoneModeTest Regenerating a past day keeps its records 0.055s
✅ Tests.Unit.Http.Middleware.CorsMiddlewareTest Reflects localhost 5200 on sync tablet for hot reload 0.005s
✅ Tests.Unit.Http.Middleware.CorsMiddlewareTest Allows hot reload origin on any path outside production 0.000s
✅ Tests.Unit.Http.Middleware.CorsMiddlewareTest Blocks hot reload origin in production 0.000s
✅ Tests.Unit.Http.Middleware.CorsMiddlewareTest Allows options preflight from localhost 5200 on sync tablet 0.000s
✅ Tests.Unit.Http.Middleware.CorsMiddlewareTest Allows https localhost without port on any path in production 0.000s
✅ Tests.Unit.Http.Middleware.CorsMiddlewareTest Allows 127 0 0 1 with port on sync paths 0.000s
✅ Tests.Unit.Http.Middleware.CorsMiddlewareTest Does not reflect untrusted origin on sync tablet 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Time object is never blank 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse keeps minutes with data set "texte HH:MM" 0.002s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse keeps minutes with data set "texte minuit" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse keeps minutes with data set "texte heure sur 1 chiffre" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse keeps minutes with data set "texte heure seule" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse keeps minutes with data set "texte avec espaces" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse keeps minutes with data set "cellule heure Excel (DateTimeImmutable)" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse keeps minutes with data set "cellule heure Excel (DateTime)" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse keeps minutes with data set "nombre entier = heure" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse keeps minutes with data set "nombre entier 23" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse keeps minutes with data set "nombre entier 0" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse rejects out of range or unreadable values with data set "heure hors plage" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse rejects out of range or unreadable values with data set "minutes hors plage" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse rejects out of range or unreadable values with data set "avec secondes" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse rejects out of range or unreadable values with data set "format français" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse rejects out of range or unreadable values with data set "minutes sur 1 chiffre" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse rejects out of range or unreadable values with data set "texte libre" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse rejects out of range or unreadable values with data set "nombre hors plage" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse rejects out of range or unreadable values with data set "nombre décimal" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse rejects out of range or unreadable values with data set "négatif" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Parse rejects out of range or unreadable values with data set "booléen" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Is blank with data set "null" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Is blank with data set "chaîne vide" 0.000s
✅ Tests.Unit.Import.ExcelTimeParserTest Is blank with data set "espaces" 0.000s
✅ Tests.Unit.Jobs.SyncRestaurantManagerContactsJobTest It synchronizes each restaurant in the batch 0.006s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest countAlertsGroupedByLogger groups sent SMS-triggering alerts by logger, across restaurants 9.640s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest generate identifies only the logger above the threshold and reaches a conclusion for it 9.491s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest generate excludes CIRL restaurants by default and includes them with withCirl 9.100s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest generate with onlyCirl keeps CIRL restaurants and drops the others 8.730s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest generate includes a logger below the alert threshold when SMS volume exceeds it 8.642s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest diagnoseLogger sets peakAlertDay to the day with the most alerts 9.046s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest diagnoseLogger sets peakAlertDay to the earliest day when two days tie 9.064s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest diagnoseLogger ignores alert_sent=false events when computing peakAlertDay 8.970s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest generate excludes a logger below the alert threshold when events have no SMS recipient 9.091s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest generateForRestaurants diagnoses every active logger of the restaurant, including those under the mail threshold 9.273s
✅ Tests.Unit.Loggers.ContactsSnapshotBuilderTest snapshot marks all channels active with empty skipped_reason 9.028s
✅ Tests.Unit.Loggers.ContactsSnapshotBuilderTest snapshot marks contact in closed dates with skipped_reason closed_dates 8.490s
✅ Tests.Unit.Loggers.ContactsSnapshotBuilderTest snapshot marks inactive channels and nc alerts with distinct skipped_reason 8.487s
✅ Tests.Unit.Loggers.DiagnosisSummaryFormatterTest isAdjustable is true only for A/B/C/F 0.002s
✅ Tests.Unit.Loggers.DiagnosisSummaryFormatterTest formatAction for C omits the justification stat and only states the reduction 0.000s
✅ Tests.Unit.Loggers.DiagnosisSummaryFormatterTest formatAction for B omits the readings-coverage justification stat 0.000s
✅ Tests.Unit.Loggers.DiagnosisSummaryFormatterTest formatAction for F omits the historical-coverage stat 0.000s
✅ Tests.Unit.Loggers.DiagnosisSummaryFormatterTest formatAction for F appends the restaurant timezone when provided 0.000s
✅ Tests.Unit.Loggers.DiagnosisSummaryFormatterTest formatActionLines for A lists both temperature steps when present 0.000s
✅ Tests.Unit.Loggers.DiagnosisSummaryFormatterTest formatActionLines for C lists both duration steps when present 0.000s
✅ Tests.Unit.Loggers.DiagnosisSummaryFormatterTest format includes the shared header for adjustable categories, formatAction does not 0.001s
✅ Tests.Unit.Loggers.DiagnosisSummaryFormatterTest format for non-adjustable categories is unchanged and self-contained 0.000s
✅ Tests.Unit.Loggers.DizzyBackToNormalFutureLogTest dizzy_back_to_normal (standalone) chart still includes a resolving log timestamped after "now" 8.603s
✅ Tests.Unit.Loggers.DizzyChartPeriodBuilderTest dizzy chart periods pair started and ended within day 0.001s
✅ Tests.Unit.Loggers.DizzyChartPeriodBuilderTest dizzy chart periods continue open dizzy until end of day 0.000s
✅ Tests.Unit.Loggers.DizzyChartPeriodBuilderTest dizzy chart periods inherit dizzy state from before day start 0.000s
✅ Tests.Unit.Loggers.DizzyChartPeriodBuilderTest dizzy chart periods format overlays in the day timezone 0.000s
✅ Tests.Unit.Loggers.DizzyEndedTempOngoingSuppressionTest temp_ongoing dizzy_ended is suppressed when already notified since the active issue started 8.228s
✅ Tests.Unit.Loggers.DizzyEndedTempOngoingSuppressionTest temp_ongoing dizzy_ended is sent when no notification has fired since the active issue started 8.416s
✅ Tests.Unit.Loggers.DizzyEndedTempOngoingSuppressionTest temp_ongoing dizzy_ended stays suppressed across repeated flaps even when no temperature_issue event was ever recorded 8.502s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailCopyTest period expected points cover dizzy started to now not a near-zero duration 0.045s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailCopyTest dizzy issue mail context uses reception-period counts since dizzy started 0.056s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailCopyTest dizzy temperature issue mail keeps period ratio on first sentence and window on temperatures 0.046s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest chart svg renders a polyline for multiple temperature points 0.044s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest chart svg is empty with fewer than two points 0.042s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest mail context builder exposes dizzy period stats 0.046s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest mail context builder exposes compliant since for back to normal 0.059s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest mail context builder uses window scope for dizzy back to normal with started 0.056s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy mail stats include ignored logs in window scope 0.059s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy temperature issue chart uses logs since dizzy started while stats stay on window 0.049s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest mail context builder exposes dizzy ended period recap 0.049s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended stats include ignored logs like the chart 0.057s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended temp resolved exposes compliant since from reference log 0.047s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended temp appeared does not expose compliant since 0.048s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended period start uses dizzy started when older than sliding window 0.046s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended temp appeared exposes anomaly started at from reference log 0.046s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended period start uses sliding window when dizzy started is more recent 0.046s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended mail context uses recap ended_at instead of now for stats and chart 0.044s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueRepeatSuppressionTest dizzy_temperature_issue is not re-sent on a repeat flap while an alert is already active 8.233s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueRepeatSuppressionTest dizzy_temperature_issue is sent when no alert is currently active and a 2nd reading already confirms it 8.322s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueRepeatSuppressionTest dizzy_temperature_issue is deferred when only one reading has been received 8.251s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueRepeatSuppressionTest a deferred dizzy_temperature_issue is sent once a second reading confirms it 8.898s
✅ Tests.Unit.Loggers.ExclusionWindowOptimizerTest optimize recommends an exclusion window when a recurring daily block would be suppressed by it 11.398s
✅ Tests.Unit.Loggers.ExclusionWindowOptimizerTest optimize returns null when there are too few alerts to find a candidate window 8.692s
✅ Tests.Unit.Loggers.ExclusionWindowOptimizerTest optimize returns null when the baseline has no episodes to begin with 9.124s
✅ Tests.Unit.Loggers.FridgeLoggerLogObserverTest created delegates to the timescale sync service 0.047s
✅ Tests.Unit.Loggers.FridgeLoggerLogObserverTest updated delegates to the timescale sync service 0.045s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionProvisioningTest complète jusqu'à mois courant + 12 à partir de la dernière partition existante 0.045s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionProvisioningTest les bornes suivent minuit Europe/Paris, heure d'été comme d'hiver 0.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionProvisioningTest idempotente : rien à créer quand la fenêtre est déjà couverte 0.044s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionProvisioningTest refuse une structure sans partition MAXVALUE en dernière position 0.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionProvisioningTest refuse une dernière borne non alignée sur un début de mois 0.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionProvisioningTest reorganizeSql découpe p_future en gardant une partition MAXVALUE en dernier 0.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest mois courant + 1 mois précédent (rétention non-prod) garde les 2 dernières partitions nommées 0.045s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest mois courant + 2 mois précédents (rétention PROD) garde les 3 dernières partitions nommées 0.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest p_future (MAXVALUE, boundary null) n'est jamais éligible, même avec la rétention minimale 0.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest aucune partition éligible quand la rétention couvre déjà tout l'historique nommé 0.046s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest un cutoff trop récent (bug de calcul) déclenche le garde-fou 0.049s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest monthsToKeepForEnvironment : 3 en production, 2 ailleurs 0.045s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest rangesByName : la première partition (p_old) part de 0, chaque suivante part de la borne précédente 0.045s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest rangesByName : après purge, la première partition restante est bornée à son mois nominal, pas à 0 0.044s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest nominalLowerBound : début du mois pour p_YYYY_MM, null pour p_old, exception si incohérent 0.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest timescaleHasEnoughData : bloque si timescale a nettement moins de lignes que mysql sur la période 0.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest timescaleHasEnoughData : seuil absolu, un écart de 1% sur un gros volume bloque 0.044s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest timescaleHasEnoughData : autorise un écart mineur (dédup connue) et l'égalité stricte 0.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest timescaleHasEnoughData : timescale plus fourni que mysql ne bloque jamais 0.044s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest recordedAtWindow : borne recorded_at avec 1 jour de marge de chaque côté 0.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest recordedAtWindow : pas de borne haute pour une partition MAXVALUE 0.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogPurgePartitionsTest refuse de purger quand TSDB_READ_ENABLED=false, sans toucher à mysql 0.064s
✅ Tests.Unit.Loggers.FridgeLoggerLogPurgePartitionsTest --dry-run reste disponible quand TSDB_READ_ENABLED=false 0.058s
✅ Tests.Unit.Loggers.FridgeLoggerLogPurgePartitionsTest purge autorisée quand TSDB_READ_ENABLED=true 0.050s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest reporting() stays on mysql when TSDB_READ_ENABLED is off 0.048s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest reporting() switches to timescale when TSDB_READ_ENABLED is on 0.046s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest reporting() still benefits from the recorded_at mirroring when on timescale 0.047s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest the default (bare) query builder is unaffected by the flag 0.046s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest eager-loaded relations stay on mysql even when the parent is queried on timescale 0.046s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest the self-referential logAlertSend relation is unaffected (already pinned to mysql on its own) 0.045s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest relations are left alone when the parent stays on mysql 0.045s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest whereBetween on timestamp mirrors recorded_at with a 1 day safety margin on timescale 0.050s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest whereBetween on timestamp is left untouched on mysql 0.047s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest a lower-bound where on timestamp mirrors recorded_at on timescale 0.048s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest an upper-bound where on timestamp mirrors recorded_at on timescale 0.045s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest an equality where on timestamp is not mirrored (too risky to assume exact recorded_at match) 0.045s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest a where on a column other than timestamp is left untouched on timescale 0.045s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest does nothing when sync is disabled 0.048s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest does nothing when the benchmark override targets timescale as the primary connection 0.047s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest does nothing when the log has no id yet 0.048s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest does nothing when the log has no recorded_at 0.047s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest upserts the log into timescale with matching bindings when enabled 0.049s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest catches a failed upsert and logs it instead of breaking the caller 0.047s
✅ Tests.Unit.Loggers.FridgeLoggerPdfChartBuilderTest pdf day windows cover each restaurant-local day of the period 0.048s
✅ Tests.Unit.Loggers.FridgeLoggerPdfChartBuilderTest pdf day window for martinique includes paris 06:00 of that date 0.044s
✅ Tests.Unit.Loggers.FridgeLoggerRefactorBenchmarkTest Stable ok reports refactored overhead vs legacy 25.943s
✅ Tests.Unit.Loggers.FridgeLoggerRefactorBenchmarkTest Query profiler classifies sql 8.573s
✅ Tests.Unit.Loggers.HistoryDataControllerSopalogTest grouped by day: totals, anomalies and comments match the seeded rows 8.760s
✅ Tests.Unit.Loggers.HistoryDataControllerSopalogTest grouped by day and logger: per-logger temperature stats and area fallback 8.692s
✅ Tests.Unit.Loggers.HistoryDataControllerSopalogTest conformity filter keeps only days with an anomaly 9.519s
✅ Tests.Unit.Loggers.HistoryDataControllerSopalogTest conformity filter set to confirmed keeps only days without anomaly 9.277s
✅ Tests.Unit.Loggers.HistoryDataControllerSopalogTest comments filter keeps only days with a comment 8.380s
✅ Tests.Unit.Loggers.HistoryDataControllerSopalogTest ungrouped mode aggregates the whole period into a single bucket 8.621s
✅ Tests.Unit.Loggers.LogAnnotatorTest ignored out-of-range logs keep a physical snapshot without joining the alert streak 0.048s
✅ Tests.Unit.Loggers.LogAnnotatorTest ignored in-range logs stay at zero counters 0.043s
✅ Tests.Unit.Loggers.LogAnnotatorTest ignored out-of-range logs do not continue the live alerting streak 0.044s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter reports logger-level exclusion when contacts would be eligible 0.047s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter reports all-contacts exclusion when every channel is excluded 0.046s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter reports no active subscribers when contacts are inactive 0.045s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter filters out contacts without nc alerts subscription 0.044s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter shows contact name only without email or phone 0.044s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter labels contact exclusion as exclusion alertes capteurs 0.046s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest generatesMailOrSms excludes dizzy_started 0.044s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest generatesMailOrSms excludes dizzy_ended without mail variant 0.045s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest generatesMailOrSms includes dizzy_ended with mail variant or alert_sent 0.044s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest generatesMailOrSms includes temperature issue 0.044s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter labels temperature issue after dizzy ended 0.047s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest appearsInAlertHistory includes dizzy_started without notification 0.045s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest appearsInAlertHistory includes dizzy ended without variant 0.043s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter reports awaiting second reading reason 0.045s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest countNotifications tallies sent and not sent mail or sms events 0.045s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest sentAlertsIndexByLogId groups sent contacts by channel 0.044s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest formatSentAlertLinesForLog shows sms and email lines with contacts 0.044s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest formatSentAlertLinesForLog shows only sms when email was not sent 0.043s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest formatSentAlertLinesForLog returns empty when no sent events exist for log 0.044s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers use linked log coordinates 0.049s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers use timestamp when recorded_at is shifted 0.043s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers style back to normal with green checkmark 0.044s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers style dizzy ended temp resolved like back to normal 0.046s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers style dizzy ended recap as black icon on white 0.045s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers skip dizzy ended temp appeared 0.042s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers skip events without mail or sms 0.041s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest alert marker style uses grey for unsent alerts 0.042s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest dizzy ended temp appeared is excluded from chart 0.042s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest dizzy ended with prior alerts uses white recap style 0.043s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest icon char from class returns utf8 glyph 0.044s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest date bounds for a martinique day start at local midnight 0.048s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest day bounds from paris morning timestamp stay on the martinique calendar day 0.043s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest mysql utc offset for martinique is minus four hours 0.043s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest invalid timezone falls back to app timezone 0.045s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest formatHi converts a utc carbon to the restaurant clock 0.044s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest chart axis labels add the date at the start when the window spans two days 0.043s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest apply to logs sets display timezone used by measurement at 0.043s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest calendar period bounds keep paris dates identical for europe/paris 0.044s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest calendar period bounds reinterpret a paris day as martinique midnight 0.044s
✅ Tests.Unit.Loggers.LoggerExclusionChartPeriodBuilderTest exclusion chart periods ignore contact-level exclusions 0.005s
✅ Tests.Unit.Loggers.LoggerExclusionChartPeriodBuilderTest exclusion chart periods support full-day date exclusions 0.000s
✅ Tests.Unit.Loggers.LoggerExclusionChartPeriodBuilderTest exclusion chart periods merge overlapping week ranges 0.000s
✅ Tests.Unit.Loggers.LoggerReplayCsvOrderTest csv codec keeps chronological measurements within a batch and replay does not reverse them 0.047s
✅ Tests.Unit.Loggers.LoggerTemperatureChartPngRendererTest png chart is empty with fewer than two points 0.048s
✅ Tests.Unit.Loggers.LoggerTemperatureChartPngRendererTest png chart renders a valid PNG at the requested size for multiple points 0.050s
✅ Tests.Unit.Loggers.LoggerTemperatureChartPngRendererTest png chart stroke is dark rather than white 0.055s
✅ Tests.Unit.Loggers.LoggerTemperatureChartPngRendererTest png chart keeps the last temperature label inside the canvas 0.062s
✅ Tests.Unit.Loggers.LoggerTemperatureChartPurgerTest purge removes only day directories older than the retention window 0.050s
✅ Tests.Unit.Loggers.LoggerTemperatureChartPurgerTest purge is a no-op when the directory does not exist 0.045s
✅ Tests.Unit.Loggers.LoggerTemperatureChartSvgRendererTest svg chart plots timestamp even when recorded_at is two hours earlier 0.045s
✅ Tests.Unit.Loggers.LoggerTemperatureChartSvgRendererTest fridge logger log chart axis uses timestamp not recorded_at 0.044s
✅ Tests.Unit.Loggers.LoggerTemperatureChartSvgRendererTest svg chart axis labels use restaurant timezone not utc 0.045s
✅ Tests.Unit.Loggers.LoggerTemperatureChartSvgRendererTest chart axis uses restaurant timezone when provided 0.045s
✅ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest skips a logger whose last_log_id is already at or after until 8.740s
✅ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest processes a logger whose last_log_id is stale relative to until 8.834s
✅ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest skips a logger already caught up to until when no newer data arrived (re-run with same --until) 8.616s
✅ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest processes a logger with no prior last_log_id 8.624s
✅ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest processes a logger with a legacy last_log_id but no last_event yet 8.754s
✅ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest cutoff relies on the reading timestamp, not created_at 8.359s
✅ Tests.Unit.Loggers.NoDataAlertCoordinatorTest applyReconnectContext flags pending no data alert 8.552s
✅ Tests.Unit.Loggers.NoDataAlertCoordinatorTest resolveViaTemperatureReconnect clears flags and records merged resolution event 8.792s
✅ Tests.Unit.Loggers.ReceptionQualityAnalyzerTest classify returns category D for a clean, regular cadence multiple of 10 min 8.733s
✅ Tests.Unit.Loggers.ReceptionQualityAnalyzerTest classify returns category E when alerts fire on windows with low data completeness 8.658s
✅ Tests.Unit.Loggers.ReceptionQualityAnalyzerTest classify returns null for a normal, well-received sensor 8.434s
✅ Tests.Unit.Loggers.RestaurantIdFilterTest restaurant id filter parses single id 0.002s
✅ Tests.Unit.Loggers.RestaurantIdFilterTest restaurant id filter parses comma separated ids 0.000s
✅ Tests.Unit.Loggers.RestaurantIdFilterTest restaurant id filter trims spaces and deduplicates 0.000s
✅ Tests.Unit.Loggers.RestaurantIdFilterTest restaurant id filter returns null for empty value 0.000s
✅ Tests.Unit.Loggers.RestaurantIdFilterTest restaurant id filter rejects invalid tokens 0.000s
✅ Tests.Unit.Loggers.SmsPhoneDeduplicationTest uniqueByNormalizedPhone keeps one contact per distinct phone number 0.049s
✅ Tests.Unit.Loggers.SmsPhoneDeduplicationTest normalizePhone maps french national formats to e164 0.055s
✅ Tests.Unit.Loggers.SmsPhoneDeduplicationTest prepareMessage leaves short messages untouched even with degree symbol 0.046s
✅ Tests.Unit.Loggers.SmsPhoneDeduplicationTest prepareMessage keeps gsm7 french accents like E acute 0.045s
✅ Tests.Unit.Loggers.SmsPhoneDeduplicationTest prepareMessage only rewrites chars outside gsm7 when longer than 70 0.046s
✅ Tests.Unit.Loggers.SmsPhoneDeduplicationTest prepareMessage leaves real french donnees with e acute unchanged 0.048s
✅ Tests.Unit.Loggers.SopalogBrokerIsDateInClosedDatesTest Normal range hour inside returns true 0.003s
✅ Tests.Unit.Loggers.SopalogBrokerIsDateInClosedDatesTest Normal range hour outside returns false 0.000s
✅ Tests.Unit.Loggers.SopalogBrokerIsDateInClosedDatesTest Midnight crossing range hour before midnight should return true 0.000s
✅ Tests.Unit.Loggers.SopalogBrokerIsDateInClosedDatesTest Midnight crossing range hour after midnight should return true 0.000s
✅ Tests.Unit.Loggers.SopalogBrokerIsDateInClosedDatesTest Midnight crossing range start boundary should return true 0.000s
✅ Tests.Unit.Loggers.SopalogBrokerIsDateInClosedDatesTest Midnight crossing range end boundary should return true 0.000s
✅ Tests.Unit.Loggers.SopalogBrokerIsDateInClosedDatesTest Midnight crossing range hour clearly outside returns false 0.000s
✅ Tests.Unit.Loggers.SopalogBrokerIsDateInClosedDatesTest Midnight crossing range just before start returns false 0.000s
✅ Tests.Unit.Loggers.SopalogBrokerIsDateInClosedDatesTest Midnight crossing range just after end returns false 0.000s
✅ Tests.Unit.Loggers.SopalogBrokerIsDateInClosedDatesTest Closed all day when start equals end returns true at any hour 0.000s
✅ Tests.Unit.Loggers.StableTemperatureMailTest stable mail context builder starts chart fifteen minutes before anomaly 0.050s
✅ Tests.Unit.Loggers.StableTemperatureMailTest stable alert chart axis extends to now without including later compliant points 0.046s
✅ Tests.Unit.Loggers.StableTemperatureMailTest stable mail chart stays in viewbox when recorded_at is shifted from timestamp 0.047s
✅ Tests.Unit.Loggers.StableTemperatureMailTest stable mail context builder exposes compliant since on resolution 0.046s
✅ Tests.Unit.Loggers.TemperatureIssueContextTest back_to_normal during exclusion resolves a deferred temperature issue 9.195s
✅ Tests.Unit.Loggers.TemperatureIssueContextTest deferred issue without resolution stays pending 9.209s
✅ Tests.Unit.Loggers.TemperatureIssueContextTest isTempOngoingAlreadyNotified is true right after a temp_ongoing dizzy_ended was sent 9.015s
✅ Tests.Unit.Loggers.TemperatureIssueContextTest isTempOngoingAlreadyNotified is false once a resolution happened after the last dizzy_ended 8.721s
✅ Tests.Unit.Loggers.TemperatureIssueContextTest isTempOngoingAlreadyNotified is false when no dizzy_ended has fired yet 8.830s
✅ Tests.Unit.Loggers.TemperatureReminderEvaluatorTest reminder is not sent in the same batch as a fresh temperature issue 8.846s
✅ Tests.Unit.Loggers.TemperatureReminderEvaluatorTest reminder uses the latest issue after context refresh 8.702s
✅ Tests.Unit.Loggers.TemperatureReminderEvaluatorTest reminder is sent two hours after the active issue 8.596s
✅ Tests.Unit.Loggers.TemperatureReminderEvaluatorTest pending temperature issue suppressed by dizzy ended is never sent later 9.478s
✅ Tests.Unit.Loggers.TemperatureWalkerTest walks from previous temperature within the configured delta 0.002s
✅ Tests.Unit.Loggers.TemperatureWalkerTest starts at the center of the range when there is no previous reading 0.000s
✅ Tests.Unit.Loggers.TemperatureWalkerTest resets to the center of the range when reset-to-center is drawn 0.000s
✅ Tests.Unit.Loggers.TemperatureWalkerTest produces an out-of-limits reading when an excursion is drawn 0.000s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize recommends only category A when raising the max threshold alone resolves most alerts 9.933s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize recommends only category B when both thresholds must move to resolve most alerts 10.005s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize recommends only category C when the alerts are short excursions unaffected by threshold changes 9.964s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize surfaces both a threshold option and a duration option when both are independently viable 9.179s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize returns an empty list when there is nothing worth changing 8.788s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize surfaces +1°C and +2°C when the larger step reduces alerts much more 8.538s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize keeps only +1°C when +2°C barely improves further 8.714s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize keeps only +2°C when +1°C does not reduce alerts enough 8.652s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize surfaces +10 min and +20 min when the larger step reduces alerts much more 9.003s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize keeps only +10 min when +20 min barely improves further 9.111s
✅ Tests.Unit.Loggers.TimeClusteringAnalyzerTest findBestWindow finds a <=4h window covering more than 80% of the alerts 8.140s
✅ Tests.Unit.Loggers.TimeClusteringAnalyzerTest findBestWindow handles a window wrapping past midnight 8.416s
✅ Tests.Unit.Loggers.TimeClusteringAnalyzerTest findBestWindow returns a low-coverage window when alerts are spread evenly across the day 8.800s
✅ Tests.Unit.Loggers.TimeClusteringAnalyzerTest findBestWindow returns null when there are too few alerts to be meaningful 8.922s
✅ Tests.Unit.Loggers.WindowStateReplaySimulatorTest analyzeWindow matches TemperatureWindowAnalyzer::analyze() for the same logs and config 8.713s
✅ Tests.Unit.Loggers.WindowStateReplaySimulatorTest countIssueEpisodes counts one episode per sustained out-of-limits block 8.476s
✅ Tests.Unit.Loggers.WindowStateReplaySimulatorTest countIssueEpisodes counts a fresh episode after a full recovery in between 8.144s
✅ Tests.Unit.Loggers.WindowStateReplaySimulatorTest countIssueEpisodes returns 0 when nothing ever leaves the stable_ok state 8.670s
✅ Tests.Unit.Mail.MailPitTagsTest adds X-Tags header when mailpit_tags is configured 0.052s
✅ Tests.Unit.Mail.MailPitTagsTest does nothing when mailpit_tags is empty 0.043s
✅ Tests.Unit.Mail.MailPitTagsTest does not overwrite an existing X-Tags header 0.043s
✅ Tests.Unit.Mail.MailSimulatedTimestampTest sets mail date header from carbon test now 0.046s
✅ Tests.Unit.Mail.MailSimulatedTimestampTest does nothing when carbon test now is not set 0.043s
✅ Tests.Unit.Mail.MailSimulatedTimestampTest can prefix subject when LOGGER_MAIL_SUBJECT_SIMULATED_TIME is enabled 0.041s
✅ Tests.Unit.NotationServiceRegressionTest Check percent ne declenche pas d alerte quand total est zero 0.001s
✅ Tests.Unit.NotationServiceRegressionTest Check module data type number ne declenche pas d alerte quand periode fermee 0.000s
✅ Tests.Unit.NotationServiceRegressionTest Check module data type number alerte quand restaurant ouvert et total zero 0.000s
✅ Tests.Unit.NotationServiceRegressionTest Client check module data type number ne declenche pas d alerte quand periode fermee 0.002s
✅ Tests.Unit.NotationServiceRegressionTest Client check module data type number alerte quand restaurant ouvert et total zero 0.000s
✅ Tests.Unit.NotationServiceTest Check min records for period returns no alert when restaurant closed all period 0.002s
✅ Tests.Unit.NotationServiceTest Check percent returns no alert when precomputed percent is dash 0.000s
✅ Tests.Unit.OnboardingNotificationServiceTest First day uses one hour delay 0.001s
✅ Tests.Unit.OnboardingNotificationServiceTest Between day one and day three uses two hour delay 0.000s
✅ Tests.Unit.OnboardingNotificationServiceTest After day three uses six hour delay 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsClosedAllPeriodTest Period closure covers full week range returns true 0.001s
✅ Tests.Unit.Restaurant.RestaurantIsClosedAllPeriodTest Week all day closure every weekday in range returns true 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsClosedAllPeriodTest Week closure only weekends range has open weekday returns false 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsClosedAllPeriodTest Single date closure on same day returns true 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsClosedAllPeriodTest No closures returns false 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Normal range hour inside restaurant is closed 0.001s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Normal range hour outside restaurant is open 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Midnight crossing range hour before midnight should be closed 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Midnight crossing range hour after midnight should be closed 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Midnight crossing range start boundary should be closed 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Midnight crossing range end boundary should be closed 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Midnight crossing range hour clearly outside stays open 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Midnight crossing range just before start stays open 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Midnight crossing range just after end stays open 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Closed all day when start equals end stays closed at any hour 0.000s
✅ Tests.Unit.Routing.ModuleCsrfCoverageTest Every module write route served by session is covered by csrf 0.047s
✅ Tests.Unit.Routing.ModuleCsrfCoverageTest The module csrf verifier has no exemption 0.043s
✅ Tests.Unit.Support.DeviceTokenTest Token has the legacy format 128 lowercase hex chars 0.001s
✅ Tests.Unit.Support.DeviceTokenTest Token format matches the legacy sha512 generator 0.000s
✅ Tests.Unit.Support.DeviceTokenTest Tokens are unique over many draws 0.001s
✅ Tests.Unit.Support.DeviceTokenTest Token carries full entropy no constant or time based prefix 0.001s
✅ Tests.Unit.Support.MailAddressListTest Flatten keeps plain email strings 0.001s
✅ Tests.Unit.Support.MailAddressListTest Flatten unwraps nested list appended as a single cc item 0.000s
✅ Tests.Unit.Support.MailAddressListTest Flatten drops empty nested list that laravel turns into stdclass 0.000s
✅ Tests.Unit.Support.MailAddressListTest Flatten accepts address key used by laravel normalized recipients 0.000s
✅ Tests.Unit.Support.MailAddressListTest Flatten drops null and blank values 0.000s
✅ Tests.Unit.Support.MailAddressListTest Flatten wraps a single recipient string 0.000s
✅ Tests.Unit.Support.MailAddressListTest Flatten treats associative email map as one recipient 0.000s
✅ Tests.Unit.Support.MailAddressListTest Flatten extracts email from a list of maps 0.000s
✅ Tests.Unit.Support.MailAddressListTest Flatten handles json decoded scheduled job cc payload 0.000s
✅ Tests.Unit.Support.MailAddressListTest Flatten handles json decoded empty nested cc list 0.000s
✅ Tests.Unit.Support.SafeSerializeTest Une valeur saine est rendue telle quelle 0.045s
✅ Tests.Unit.Support.SafeSerializeTest Une valeur abimee rend null sans lever d erreur 0.044s
✅ Tests.Unit.Support.SafeSerializeTest Une valeur tronquee rend null sans lever d erreur 0.044s
✅ Tests.Unit.Support.SafeSerializeTest False serialise n est pas pris pour une erreur 0.043s
✅ Tests.Unit.Support.SafeSerializeTest Serialize retire les emojis meme imbriques 0.044s
✅ Tests.Unit.Support.SafeSerializeTest Serialize garde les caracteres sur trois octets 0.044s
✅ Tests.Unit.Support.SafeSerializeTest Serialize laisse les non chaines intactes 0.043s
✅ Tests.Unit.Support.SafeSerializeTest Serialize rend null plutot que lever sur une valeur non serialisable 0.042s
✅ Tests.Unit.Support.SafeSerializeTest Strip non bmp filtre aussi une chaine utf8 invalide 0.043s
✅ Tests.Unit.Support.SafeSerializeTest Une valeur abimee est ecrite dans le log sans lever 0.047s
✅ Tests.Unit.Support.SafeSerializeTest Une valeur non serialisable est ecrite dans le log sans lever 0.043s
✅ Tests.Unit.Support.SafeSerializeTest Une valeur saine n ecrit rien dans le log 0.043s
✅ Tests.Unit.Support.SafeSerializeTest Un objet serialise n est pas instancie 0.042s
✅ Tests.Unit.Support.SafeSerializeTest Un objet seul n est pas instancie 0.043s
✅ Tests.Unit.Support.SafeSerializeTest Tableaux et scalaires se lisent comme avant 0.043s
✅ Tests.Unit.Support.SafeSerializeTest Vide ou non chaine rend null 0.045s
✅ Tests.Unit.Support.SerializedColumnsModelsTest ExtraActions abime rend null sans lever 0.051s
✅ Tests.Unit.Support.SerializedColumnsModelsTest Icon titles abime rend un tableau vide sans lever 0.044s
✅ Tests.Unit.Support.SerializedColumnsModelsTest Icon titles sain est rendu tel quel 0.043s
✅ Tests.Unit.Support.SerializedColumnsModelsTest ExtraActions est ecrit sans emoji 0.043s
✅ Tests.Unit.Support.SerializedColumnsModelsTest Icon titles est ecrit sans emoji sur les deux modeles 0.042s
✅ Tests.Unit.Support.SerializedColumnsModelsTest Icon titles vide rend toujours un tableau vide 0.041s
✅ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Day creates audit record and action tasks 0.239s
✅ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Week period 0.230s
✅ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Month period 0.229s
✅ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Year period 0.229s
✅ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Trimester period 0.232s
✅ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Semester period 0.232s
✅ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Finished creates record without valid until and far future tasks 0.235s
✅ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Idempotent second run 0.235s
✅ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Client audits disabled skips action tasks 0.232s
✅ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Local override action active zero skips that action 0.228s
✅ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Inactive audit skips 0.222s
✅ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Restaurant closed skips 0.225s
✅ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Multiple actions create multiple tasks 0.240s
✅ Tests.Unit.TaskGeneration.AuditTaskGenerationTest National audit for family restaurant 0.230s
✅ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Artisan family option 0.257s
✅ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Day period generates 0.229s
✅ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Week period generates 0.226s
✅ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Month period generates 0.227s
✅ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Year period generates 0.226s
✅ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Custom period with start and end date 0.225s
✅ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Custom period outside window skips 0.223s
✅ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Idempotent second run 0.230s
✅ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Local override active zero skips 0.223s
✅ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Inactive checklist skips 0.224s
✅ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Inactive action skips 0.230s
✅ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Restaurant closed skips 0.229s
✅ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest National checklist for family restaurant 0.229s
✅ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Action filter via artisan 0.226s
✅ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Week period idempotent within week 0.232s
✅ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Day period generates 0.232s
✅ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Week period generates 0.225s
✅ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Month period generates 0.226s
✅ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Year period generates 0.225s
✅ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Idempotent second run 0.227s
✅ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Family parameters skip national when values without national 0.230s
✅ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Family parameters skip local when values without local 0.227s
✅ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Inactive action skips 0.223s
✅ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Restaurant closed skips 0.223s
✅ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Week period idempotent within week 0.231s
✅ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Artisan family option 0.226s
✅ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Both national and local when family allows both 0.227s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Day action generates 0.237s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Idempotent second run 0.231s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Week period generates 0.219s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Month period generates 0.222s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Year period generates 0.225s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Always creates open task and is idempotent while undone and valid 0.227s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Always with expirations days 0.222s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Always catch up outside action days when expirations set 0.228s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Frequency greater than one creates n indexed tasks 0.225s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Frequency migration from one to n reuses existing as main 0.230s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Closed restaurant via date skips 0.223s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Full day week closure skips day slot 0.223s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Partial week closure covering start end skips 0.233s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Nat plan disabled via client cleaning plan areas disabled 0.234s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Nat action disabled via client cleaning plan actions disabled 0.231s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Local override active zero skips national action 0.222s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Only action id filter 0.230s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Days filter skips when not matching 0.226s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Months filter skips when not matching 0.221s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Days filter does not skip always with expirations 0.222s
✅ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Service and artisan paths agree for day action 0.232s
✅ Tests.Unit.TaskGeneration.CloseStaleAuditsCommandTest Command closes stale audit on inactive restaurant only 0.389s
✅ Tests.Unit.TaskGeneration.CloseStaleAuditsCommandTest Command dry run leaves data untouched 0.221s
✅ Tests.Unit.TaskGeneration.DormantRestaurantsReportCommandTest Dormant report lists active restaurant with no open day 0.386s
✅ Tests.Unit.TaskGeneration.DormantRestaurantsReportCommandTest Dormant report ignores inactive restaurants 0.224s
✅ Tests.Unit.TaskGeneration.DormantRestaurantsReportCommandTest Dormant report ignores restaurant with insufficient history 0.223s
✅ Tests.Unit.TaskGeneration.FridgeKernelDecisionTest Fridge 01 kernel generates within local day only 0.230s
✅ Tests.Unit.TaskGeneration.FridgeKernelDecisionTest Fridge 03 kernel skips when closure covers full task slot 0.222s
✅ Tests.Unit.TaskGeneration.FridgeKernelDecisionTest Fridge 03 kernel generates when closure only partially overlaps slot 0.227s
✅ Tests.Unit.TaskGeneration.FridgeKernelDecisionTest Fridge 04 task generator skips when family forbids national tasks 0.219s
✅ Tests.Unit.TaskGeneration.FridgeKernelDecisionTest Independent restaurant generates fridge task 0.232s
✅ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Generates one record per fridge task day 0.230s
✅ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Idempotent second run creates no duplicate 0.235s
✅ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Inactive restaurant is skipped 0.224s
✅ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Restaurant closed via date is skipped 0.235s
✅ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Closed weekday on task skips that day 0.241s
✅ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Inactive fridge is skipped 0.245s
✅ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Inactive task is skipped 0.233s
✅ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Multiple fridges times multiple tasks 0.244s
✅ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest National task with local fridge 0.236s
✅ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest National fridge with local task 0.254s
✅ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Generate via family option 0.240s
✅ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Generate all via family helper runs fridge 0.245s
✅ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Overnight start after end still generates 0.230s
✅ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Timezone europe paris 0.228s
✅ Tests.Unit.TaskGeneration.KernelCallbackCoverageTest Kernel service temperature generates and is idempotent 0.243s
✅ Tests.Unit.TaskGeneration.KernelCallbackCoverageTest Kernel pnd delegates to task generator service 0.239s
✅ Tests.Unit.TaskGeneration.KernelCallbackCoverageTest Kernel audit creates record and is idempotent 0.255s
✅ Tests.Unit.TaskGeneration.KernelCallbackCoverageTest Kernel cpa creates task and is idempotent 0.236s
✅ Tests.Unit.TaskGeneration.KernelCallbackCoverageTest Kernel open close history purges unfinished fridge for closed yesterday 0.229s
✅ Tests.Unit.TaskGeneration.KernelCommandDivergenceTest Fridge 03 kernel and command both skip on full slot closure 0.233s
✅ Tests.Unit.TaskGeneration.KernelCommandDivergenceTest Cl 02 day checklist both paths skip on full day week closure 0.239s
✅ Tests.Unit.TaskGeneration.KernelCommandDivergenceTest Checklist partial slot closure both paths generate 0.234s
✅ Tests.Unit.TaskGeneration.LegacyRetirementCheckCommandTest Reports not ready when active restaurant is not canary 0.221s
✅ Tests.Unit.TaskGeneration.LegacyRetirementCheckCommandTest Reports not ready when a reconcile probe is saturated 0.224s
✅ Tests.Unit.TaskGeneration.LegacyRetirementCheckCommandTest Reports ready when all conditions are met 0.229s
✅ Tests.Unit.TaskGeneration.LockRenewalTest Renew extends expiry for matching owner 0.223s
✅ Tests.Unit.TaskGeneration.LockRenewalTest Renew is noop when owner does not match 0.216s
✅ Tests.Unit.TaskGeneration.LockRenewalTest Fridge generator renews lock while processing several tasks 0.233s
✅ Tests.Unit.TaskGeneration.LockRenewalTest Pnd generator never renews lock mid transaction 0.243s
✅ Tests.Unit.TaskGeneration.LockRenewalTest Pnd lock ttl scales with restaurant task volume 0.225s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Soft deleted fridge is skipped by command 0.232s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Soft deleted fridge task is skipped by command 0.230s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Minimum records is copied onto task day 0.233s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest National st task shared by two restaurants creates task days per area 0.398s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Adding area mid period creates additional task day 0.236s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest St family params skip national via task generator 0.223s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Lock area on parent with child creates task day on parent id quirk 0.281s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Pnd month frequency sets period start and end from periods 0.227s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Pnd period change on existing task is updated 0.229s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Pnd valid until pulled back to last open day 0.227s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Pnd inactive parent plan excludes child plan actions 0.223s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Pnd dry run creates no persisted tasks 0.231s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Checklist kernel skips day when full day week closure 0.222s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Checklist day creates new task on next day via kernel 0.234s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Soft deleted checklist is skipped 0.222s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Checklist family params skip national via task generator 0.223s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Audit custom outside window skips 0.222s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Audit custom inside window generates 0.233s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Audit expired current record is closed before new period 0.233s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Audit adds missing action tasks on existing record 0.243s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Audit family params skip national via task generator 0.230s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Cpa fully closed period skipped via task generator 0.220s
✅ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Cpa next week creates new task via command 0.232s
✅ Tests.Unit.TaskGeneration.NewRestaurantCanaryEnrollmentTest New restaurant created via eloquent is enrolled in canary mode 0.278s
✅ Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest Fridge day creates new record on next calendar day via kernel 0.236s
✅ Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest Pnd week creates new task on following week 0.230s
✅ Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest Pnd always creates new open task after expiration 0.225s
✅ Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest Kernel respects restaurant timezone for local day 0.232s
✅ Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest Two restaurants different timezones in same kernel chunk 0.399s
✅ Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest Task generator skips when lock already held 0.217s
✅ Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest Open close fix backfills fridge created at on past date 0.234s
✅ Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest Open close fix skips modules not selected 0.234s
✅ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Two rapid requests merge versions not rows 0.224s
✅ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Action scoped request does not merge with full module 0.221s
✅ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Lost wake up keeps request pending 0.219s
✅ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Db lock contention defers second owner 0.220s
✅ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Run now returns null modules when lock busy 0.218s
✅ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Compute next task generation at uses local timezone not plus 24h 0.222s
✅ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Request family filters to canary when canary exists 0.290s
✅ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Canary dual coverage idempotent single fridge record 0.242s
✅ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Pnd sync lock busy schedules reactive retry job 0.223s
✅ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Run now lock per module allows partial success 0.221s
✅ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile ignores pnd always backlog when valid open successor exists 0.236s
✅ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile enqueues pnd always when no open successor exists 0.238s
✅ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile still enqueues audit current expired for active restaurant 0.233s
✅ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile closes audit current expired as not done for inactive restaurant 0.230s
✅ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile dry run does not close stale audit on inactive restaurant 0.234s
✅ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile closes active restaurant audit immediately even when closed 0.232s
✅ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile dry run does not close active restaurant audit 0.228s
✅ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile skips pnd enqueue for closed restaurant 0.230s
✅ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile tracks and resets probe saturation streak 0.243s
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest Deletes unfinished fridge records for period 0.229s
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest Keeps done cleaning plan tasks 0.226s
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest Process for record is idempotent via tasks processed 0.223s
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest Process for record open day marks processed without deleting 0.218s
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest Closing one restaurant does not purge national service temperature task days 0.384s
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest Closing restaurant purges local service temperature task days 0.222s
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest Monday week purge when restaurant closed all week 0.233s
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest First of month month purge when closed all month 0.234s
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest Close then reopen marks processed without deleting finished fridge 0.230s
✅ Tests.Unit.TaskGeneration.RestaurantReopenTriggerTest Is closed flag cleared triggers full regeneration request 0.236s
✅ Tests.Unit.TaskGeneration.RestaurantReopenTriggerTest Is closed flag untouched save does not trigger 0.221s
✅ Tests.Unit.TaskGeneration.RestaurantReopenTriggerTest Closed date created triggers regeneration request 0.225s
✅ Tests.Unit.TaskGeneration.RestaurantReopenTriggerTest Closed date deleted triggers regeneration request 0.237s
✅ Tests.Unit.TaskGeneration.ServiceTemperaturePartialClosureTest Task inside partial closure is not generated 0.229s
✅ Tests.Unit.TaskGeneration.ServiceTemperaturePartialClosureTest Task overlapping open hours is generated 0.230s
✅ Tests.Unit.TaskGeneration.ServiceTemperaturePartialClosureTest Partial closure on another day does not skip 0.228s
✅ Tests.Unit.TaskGeneration.ServiceTemperaturePartialClosureTest Weekly task is generated when one day of the week is open 0.232s
✅ Tests.Unit.TaskGeneration.ServiceTemperaturePartialClosureTest Weekly task inside closure every day is not generated 0.229s
✅ Tests.Unit.TaskGeneration.ServiceTemperaturePartialClosureTest Is open at today still ignores partial closure 0.220s
✅ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Without areas creates one task day with null area 0.241s
✅ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest With areas creates one task day per area 0.231s
✅ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Cleanup deletes task days without area when areas exist 0.235s
✅ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Cleanup deletes task days with area when no areas 0.231s
✅ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Week period uses week window idempotence 0.240s
✅ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Closed weekday on task skips 0.232s
✅ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Inactive task skips 0.227s
✅ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Restaurant closed skips 0.224s
✅ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest National st task for family restaurant 0.225s
✅ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Lock fields copied when area is locked 0.228s
✅ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Artisan family option 0.228s
✅ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Idempotent day period second run 0.243s
✅ Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest Pnd always sync regeneration creates next open task 0.306s
✅ Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest Pnd always sync does not duplicate when open task already exists 0.291s
✅ Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest Pnd always service second run idempotent while open task valid 0.228s
✅ Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest Audit finished sync regenerates new current cycle 0.369s
✅ Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest Audit finished regenerate skipped when audit disabled 0.309s
✅ Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest Lock area creates task day when missing 0.281s
✅ Tests.Unit.TaskGeneration.TaskGenerationHealthCommandTest Health json report includes probe streaks 0.057s
✅ Tests.Unit.TaskGeneration.TaskGenerationHealthCommandTest Health console output warns when streak reaches threshold 0.054s
✅ Tests.Unit.TaskGeneration.TaskGenerationHealthCommandTest Health console output does not warn below threshold 0.052s
✅ Tests.Unit.TaskGeneration.TaskGenerationPerfLogTest Format field order for single restaurant 0.002s
✅ Tests.Unit.TaskGeneration.TaskGenerationPerfLogTest Format n greater than three does not list restaurant ids 0.000s
✅ Tests.Unit.TaskGeneration.TaskGenerationPerfLogTest Format n two or three can list ids 0.000s
✅ Tests.Unit.TaskGeneration.TaskGenerationPerfLogTest Format queued has no duration 0.000s
✅ Tests.Unit.TaskGeneration.TaskGenerationPerfLogTest Format slow suffix when above threshold 0.000s
✅ Tests.Unit.TaskGeneration.TaskGenerationPerfLogTest Format not slow when queued even if duration set 0.000s
✅ Tests.Unit.TaskGeneration.TaskGenerationPerfLogTest Format all modules as all 0.000s
✅ Tests.Unit.TaskGeneration.TaskGenerationPerfLogTest Summary is noop when disabled 0.000s
✅ Tests.Unit.TaskGeneration.TaskGenerationPerfLogTest Should not log queued daily scheduler 0.000s
✅ Tests.Unit.TaskGeneration.TaskGenerationPerfLogTest Batch stats tracks max without storing all durations 0.001s
✅ Tests.Unit.TaskGeneration.TaskGenerationPerfLogTest Format error is greppable with resto family module 0.000s
✅ Tests.Unit.TaskGeneration.TaskGenerationPerfLogTest Format error truncates long message and strips newlines 0.000s
✅ Tests.Unit.TaskGeneration.TaskGenerationPerfLogTest Format error flags lost connection regardless of exception type 0.000s
✅ Tests.Unit.TaskGeneration.TaskGenerationPerfLogTest Format error does not flag unrelated exception 0.000s
✅ Tests.Unit.TaskGeneration.TaskGenerationPerfLogTest Is likely lost connection is false for null 0.000s
✅ Tests.Unit.TaskGeneration.TaskGenerationPerfLogTest Failure is noop free when formatting without exception 0.000s
✅ Tests.Unit.Workflow.WorkflowTemperatureStepDoneTest Step without temperature has none 0.004s
✅ Tests.Unit.Workflow.WorkflowTemperatureStepDoneTest Empty string is not a temperature 0.000s
✅ Tests.Unit.Workflow.WorkflowTemperatureStepDoneTest Zero degree is a real measure 0.000s
✅ Tests.Unit.Workflow.WorkflowTemperatureStepDoneTest Decimal column is formatted without trailing zeros 0.000s
✅ Tests.Unit.Workflow.WorkflowTemperatureStepDoneTest Negative temperature is kept 0.000s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Backoffice pages are reachable 0.103s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Can update dynamic areas and section fields 0.085s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Rich text validates plain text length not html length 0.072s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Content title validates max string length 0.064s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Home sections title validates max string length 0.064s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Related article title validates max string length on content store 0.073s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Content title validates max string length on content store 0.063s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front renders rich text html unescaped 0.134s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Can search existing tags for backoffice autocomplete 0.060s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Video content draft then publish then toggle from list then delete 0.090s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Document flow with thematics and front visibility 0.091s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front home section and content pages are reachable 0.144s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front content detail displays related articles before similar contents 0.132s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front content detail shows similar contents ordered by shared tags without thematics 0.137s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front content detail fills similar contents with section peers without shared tags 0.129s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front content detail prioritizes same thematic before other similar contents 0.136s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front shows only active and published contents and blocks others 0.141s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front returns 404 for unknown section or unknown content 0.123s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front section without thematics is still reachable without thematic filter bar 0.126s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front section search and thematic filters apply across pagination 0.159s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front section search matches content tags 0.128s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front uses default thumbnail logo when content thumbnail is missing 0.125s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front home does not render sections without slug 0.113s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Youtube url formats are supported on front 0.133s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front access is forbidden when restaurant has no academy access 0.113s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Courses can be created and are visible on front section when upcoming and published 0.130s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Backoffice courses list orders drafts first then published by ascending date 0.066s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Courses draft cannot be activated publish and activate endpoint publishes 0.064s
✅ App.Modules.Academy.Tests.AcademyRichTextTest Plain text length ignores html tags 0.010s
✅ App.Modules.Academy.Tests.AcademyRichTextTest Plain text length collapses whitespace 0.000s
✅ App.Modules.Academy.Tests.AcademyRichTextTest Exceeds max plain text length 0.000s
✅ App.Modules.Academy.Tests.AcademyRichTextTest Html longer than column limit passes when plain text within limit 0.000s
✅ App.Modules.Alert.Tests.AlertServiceTest Update audit alerts writes client and cascades to contacts 0.003s
✅ App.Modules.Alert.Tests.AlertServiceTest Update audit alerts can disable 0.000s
✅ App.Modules.Alert.Tests.AlertServiceTest Sync restaurant manager contact creates contact from admin profile 0.001s
✅ App.Modules.Alert.Tests.AlertServiceTest Sync restaurant manager contact reuses matching manual contact 0.000s
✅ App.Modules.Alert.Tests.AlertServiceTest Sync restaurant manager contact updates existing contact 0.000s
✅ App.Modules.Alert.Tests.AlertServiceTest Sync restaurant manager contact merges duplicate after email change 0.000s
✅ App.Modules.Alert.Tests.AlertServiceTest Sync restaurant manager contact removes contact when admin email is removed 0.000s
✅ App.Modules.Alert.Tests.EloquentAlertRepositoryTest It never deletes the multisite report contact even when it is not in the kept restaurant ids 8.234s
✅ App.Modules.Alert.Tests.EloquentAlertRepositoryTest Find or create global contact reuses the existing restaurant id zero contact 8.319s
✅ App.Modules.Alert.Tests.EloquentAlertRepositoryTest Find or create global contact does not duplicate on repeated calls 8.950s
✅ App.Modules.Alert.Tests.GetAccessRestaurantsPreloadingTest Preloaded main client restaurants are reused without re querying 0.002s
✅ App.Modules.Alert.Tests.GetAccessRestaurantsPreloadingTest Preloaded main client restaurants preserve access filtering 0.001s
✅ App.Modules.Alert.Tests.NcSettingsDisplayDataTest Critical fridges are loaded once for all contacts 0.002s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Interface is bound to the eloquent repository 0.047s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Find latest returns null when no token 0.154s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Creates restaurant token with legacy and polymorphic columns 0.166s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Creates client token with legacy and polymorphic columns 0.114s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Find or create is idempotent and creates no duplicate 0.160s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Action is idempotent and returns a 64 char token 0.109s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Existing legacy row without userable is reused 0.149s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Soft deleted row is ignored and a new one is created 0.155s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Most recent non deleted row wins when several exist 0.157s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Tokens are isolated between entities and from other providers 0.255s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Restaurant and client with the same id do not collide on polymorphic columns 0.106s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Creating the token does not interfere with import apis sync 0.163s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Repeated calls within an outer transaction still create a single row 0.156s
✅ App.Modules.Api.OctopusToken.Tests.GenerateOctopusTokenActionTest Generates a 64 char token for a restaurant 0.058s
✅ App.Modules.Api.OctopusToken.Tests.GenerateOctopusTokenActionTest Returns the existing token when already created 0.048s
✅ App.Modules.Api.OctopusToken.Tests.GenerateOctopusTokenActionTest Refuses sub clients 0.046s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Superadmin generates a client token 0.177s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Client token generation is idempotent 0.178s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Sub client is rejected with 422 0.221s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Team member is forbidden on client endpoint 0.165s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Guest is rejected on client endpoint 0.107s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Unknown client returns 404 0.111s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Get is not allowed on the endpoint 0.190s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Superadmin generates an indep restaurant token 0.201s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Indep restaurant generation is idempotent 0.217s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Soft deleted token is ignored and replaced 0.219s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Team member is forbidden on indep endpoint 0.201s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Guest is rejected on indep endpoint 0.190s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Superadmin generates a local restaurant token 0.270s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Team member is forbidden on local endpoint 0.276s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Guest is rejected on local endpoint 0.220s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Missing csrf token is rejected when csrf is enforced 0.174s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Indep edit form shows the block 25.013s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Indep edit form prefills the existing token 24.967s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Indep create form has no block 25.357s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Indep onboarding edit form has no block 25.367s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Local edit form shows the block and create form does not 0.350s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Client edit form shows the block for main client only 25.337s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Team member does not see the block 0.161s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Generated client token can be used on api login 0.175s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Generated restaurant token can be used on api login 0.217s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Unknown token is rejected on api login 0.050s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest Block and generate url are rendered 0.055s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest Without token the generate button is visible and the field hidden 0.045s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest With token the field is visible prefilled and generate hidden 0.046s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest Token input is readonly password and has no name attribute 0.046s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest No element of the block carries a name attribute 0.046s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest Ajax call sends csrf header and uses post 0.045s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest Token is html escaped 0.045s
✅ App.Modules.Auth.Tests.AuthControllerLogoutTest Central logout route points to destroy under the central prefix 0.047s
✅ App.Modules.Auth.Tests.AuthControllerLogoutTest Central logout logs out the central and its establishment 0.045s
✅ App.Modules.Auth.Tests.AuthControllerLogoutTest Central logout under superpoulpe impersonation also logs out the establishment 0.045s
✅ App.Modules.Auth.Tests.AuthControllerLogoutTest Client logout revokes the establishments opened from its session 0.045s
✅ App.Modules.Auth.Tests.AuthControllerLogoutTest Establishment logout revokes nothing 0.046s
✅ App.Modules.Auth.Tests.AuthGuardTest From entity returns admin for admin model 0.048s
✅ App.Modules.Auth.Tests.AuthGuardTest From entity returns client for client model 0.045s
✅ App.Modules.Auth.Tests.AuthGuardTest From entity returns web for restaurant model 0.045s
✅ App.Modules.Auth.Tests.AuthGuardTest From entity returns central for restaurant central model 0.045s
✅ App.Modules.Auth.Tests.AuthGuardTest From userable type maps all known types 0.045s
✅ App.Modules.Auth.Tests.AuthGuardTest From userable type throws for unknown type 0.045s
✅ App.Modules.Auth.Tests.AuthGuardTest From domain returns admin for superpoulpe domain 0.047s
✅ App.Modules.Auth.Tests.AuthGuardTest From domain returns client for clients domain 0.044s
✅ App.Modules.Auth.Tests.AuthGuardTest From domain returns web for app domain 0.045s
✅ App.Modules.Auth.Tests.AuthGuardTest From domain returns null for unknown domain 0.043s
✅ App.Modules.Auth.Tests.AuthGuardTest From request returns central for app domain with central prefix 0.044s
✅ App.Modules.Auth.Tests.AuthGuardTest From request returns web for app domain without central prefix 0.045s
✅ App.Modules.Auth.Tests.AuthGuardTest From request returns null for unknown domain 0.046s
✅ App.Modules.Auth.Tests.AuthGuardTest Get redirect route name returns expected routes 0.046s
✅ App.Modules.Auth.Tests.AuthGuardTest Model returns correct model class for each guard 0.046s
✅ App.Modules.Auth.Tests.AuthGuardTest Get impersonation entry route name returns null for admin 0.046s
✅ App.Modules.Auth.Tests.AuthGuardTest Get impersonation entry route name returns route for impersonable guards 0.046s
✅ App.Modules.Auth.Tests.AuthGuardTest Is manager space only for client and central 0.047s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate returns null when no users match login 0.126s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate throws inactive when user is inactive 0.101s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate throws inactive when entity is inactive 0.102s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate throws use credentials disabled when sso only 0.110s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate throws password expired when highly secured and expired 0.103s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate does not throw when highly secured password is valid 0.106s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate does not check expiry when not highly secured 0.103s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate skips expiry check when no client 0.101s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate throws password expired for client entity 0.051s
✅ App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest Returns false when no temp password set 0.051s
✅ App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest Returns false when password does not match 0.049s
✅ App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest Returns false when expired 0.050s
✅ App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest Returns false when no expiry set 0.047s
✅ App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest Consumes and returns true when valid 0.050s
✅ App.Modules.Auth.Tests.CustomSessionLifetimeTest Revoked establishment session is ended 0.049s
✅ App.Modules.Auth.Tests.CustomSessionLifetimeTest Establishment session whose manager is still logged in goes through 0.046s
✅ App.Modules.Auth.Tests.CustomSessionLifetimeTest Revoked layer does not end a central sharing the session 0.045s
✅ App.Modules.Auth.Tests.CustomSessionLifetimeTest Expired manager logout reaches the controller 0.047s
✅ App.Modules.Auth.Tests.CustomSessionLifetimeTest Expired manager on another page is still logged out 0.047s
✅ App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest Policy applies to the main client that enables it 0.048s
✅ App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest Child client uses its parent policy 0.046s
✅ App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest Policy applies to a restaurant attached to a secured client 0.048s
✅ App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest Policy does not apply to a restaurant whose client disabled it 0.047s
✅ App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest Policy does not apply to an independent restaurant 0.044s
✅ App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest Rules include required confirmation and fifteen character minimum 0.045s
✅ App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest Password shorter than fifteen characters is rejected with the correct minimum 0.047s
✅ App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest Compliant fifteen character password is accepted 0.045s
✅ App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest Other security requirements are unchanged 0.045s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Consume token returns false when token does not match 0.052s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Consume token returns false when token is expired 0.049s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Consume token returns true and clears token when valid 0.048s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Consume token accepts token exactly at ttl boundary 0.048s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Is impersonating returns false when no session 0.046s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Start impersonation pushes layer to stack 0.045s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Start impersonation supports multi level stack 0.046s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Start impersonation with parent stack uses parent as base 0.045s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Current layer returns null when not impersonating 0.047s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Leave pops top layer and returns return url 0.047s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Leave clears legacy session keys 0.047s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Leave in multi level stack keeps remaining layers 0.046s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Leave without stack falls back to app login route 0.047s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Generate impersonation url tags it with a stable impersonator session key 0.049s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Is revoked once the impersonator session logs out 0.050s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Is not revoked while the impersonator session is still open 0.049s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Is not revoked by the logout of another impersonator session 0.050s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Impersonation started after the logout from the same session is not revoked 0.051s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Revocation cache failure does not block the logout 0.049s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Layer without impersonator session key is never revoked 0.046s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Client constraints use client type and own id 0.053s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Client manager constraints use parent id not subclient id 0.046s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Client and restaurant with same numeric id have distinct types 0.045s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Restaurant constraints exclude admin role 0.044s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Central constraints match username as email 0.044s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Constraints for unknown entity throws 0.047s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Execute falls back to app login when no user found 0.047s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Execute logs in resolved user and returns auth redirect 0.050s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Execute never calls login with a raw entity 0.049s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate throws invalid when login token not found 0.051s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate via password returns restaurant when credentials match 0.050s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate throws invalid when all credential paths fail 0.050s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate via temp password succeeds when not expired 0.056s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate via temp password throws invalid when expired 0.051s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate throws inactive when restaurant is inactive 0.051s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate throws password expired when highly secured and expired 0.053s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate succeeds without client 0.051s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate succeeds with non highly secured client 0.052s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Client not highly secured returns not highly secured 0.053s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Client never changed password returns expired 0.052s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Client changed recently returns valid 0.055s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Client within 7 days of expiry returns expiring soon 0.048s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Client past 180 days returns expired 0.050s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant with no client returns not highly secured 0.047s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant client not highly secured returns not highly secured 0.048s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant never changed password returns expired 0.046s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant changed recently returns valid 0.049s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant within 7 days of expiry returns expiring soon 0.050s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant past 180 days returns expired 0.051s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant tablet out of sync returns password change required 0.059s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant tablet with null last sync skips password change check 0.051s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Generate reset token stores token on user 0.054s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Generate reset token returns 64 char hex string 0.050s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Validate token returns true when token matches and not expired 0.050s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Validate token returns false when token does not match 0.050s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Validate token returns false when token is expired 0.050s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Consume token hashes password and clears token 0.208s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Consume token skips restaurant sync when userable missing 0.156s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Issue reset token always stores on restaurant for authenticate middleware 0.050s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Issue reset token mirrors on admin user when present 0.049s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Validate reset token uses restaurant admin email code 0.045s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Validate reset token rejects expired code 0.045s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Consume reset token updates restaurant when no admin user 0.154s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Consume reset token syncs admin user and restaurant 0.208s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Matches admin email is case insensitive 0.046s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Matches admin email falls back to admin user when admin email empty 0.047s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Verify password accepts restaurant admin password without admin user 0.203s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Verify password ignores admin user with empty password hash 0.209s
✅ App.Modules.Auth.Tests.SendPasswordExpiredResetLinkActionTest Sends via users broker for restaurant 0.061s
✅ App.Modules.Auth.Tests.SendPasswordExpiredResetLinkActionTest Sends via clients broker for client 0.047s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Create conversation throws when no participant is selected 0.055s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Update conversation throws when not found 0.047s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Update conversation throws when wrong restaurant 0.048s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Add message creates message and marks as read 0.054s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Mark conversation as read calls repository 0.049s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Delete conversation calls repository 0.056s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Get unread overview returns total and counts by accessible restaurant 0.048s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Unread count increases for other participant when one sends messages 9.364s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Create conversation with message creates message 0.049s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Bridge client user resolves via manager service 0.047s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Bridge client user sets null when no matching user 0.046s
✅ App.Modules.ComInApp.Tests.ComInAppServiceTest Add unread message count to employees adds count to employees 0.053s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Search delegates to repository 0.002s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Search passes null term 0.000s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Create hashes password and persists all fields 0.000s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Create stores null password when none provided 0.000s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Find or fail delegates to repository 0.000s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Update passes dto array to repository 0.002s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Update hashes password when present in dto array 0.000s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Update does not add password when absent from dto array 0.000s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Update propagates repository false 0.000s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Delete finds admin then delegates deletion 0.000s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Delete propagates repository false 0.000s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest All for central delegates to repository 0.004s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest Sync creates user when no id provided 0.000s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest Sync skips creation when email is empty 0.000s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest Sync with empty array does nothing 0.000s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest Sync updates email when id matches 0.001s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest Sync updates password when provided 0.000s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest Sync skips when user not found for id 0.000s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest Sync deletes user when delete flag set 0.000s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest Sync handles mixed operations 0.001s
✅ App.Modules.Users.Central.Tests.CentralServiceTest All delegates to repository 0.003s
✅ App.Modules.Users.Central.Tests.CentralServiceTest Find or fail delegates to repository 0.000s
✅ App.Modules.Users.Central.Tests.CentralServiceTest Create persists central and creates user 0.000s
✅ App.Modules.Users.Central.Tests.CentralServiceTest Create passes null restaurants as empty array 0.000s
✅ App.Modules.Users.Central.Tests.CentralServiceTest Update persists data and syncs user email 0.003s
✅ App.Modules.Users.Central.Tests.CentralServiceTest Update strips empty password before passing to repository 0.000s
✅ App.Modules.Users.Central.Tests.CentralServiceTest Update does not call user save when no user found 0.000s
✅ App.Modules.Users.Central.Tests.CentralServiceTest Update propagates repository false 0.000s
✅ App.Modules.Users.Central.Tests.CentralServiceTest Delete finds central then delegates 0.000s
✅ App.Modules.Users.Central.Tests.CentralServiceTest Delete propagates repository false 0.000s
✅ App.Modules.Users.Client.Tests.BuildManagerExportRowTest Builds row from bridge client 0.043s
✅ App.Modules.Users.Client.Tests.BuildManagerExportRowTest Blank names stay empty 0.048s
✅ App.Modules.Users.Client.Tests.ClientFamilyServiceTest Find or fail delegates to repository 0.002s
✅ App.Modules.Users.Client.Tests.ClientFamilyServiceTest Sync creates new family when no id 0.000s
✅ App.Modules.Users.Client.Tests.ClientFamilyServiceTest Sync skips new family when name is empty 0.000s
✅ App.Modules.Users.Client.Tests.ClientFamilyServiceTest Sync updates existing family 0.000s
✅ App.Modules.Users.Client.Tests.ClientFamilyServiceTest Sync deletes family without restaurants 0.000s
✅ App.Modules.Users.Client.Tests.ClientFamilyServiceTest Sync throws when deleting family with restaurants 0.002s
✅ App.Modules.Users.Client.Tests.ClientFamilyServiceTest Delete removes family without restaurants 0.000s
✅ App.Modules.Users.Client.Tests.ClientFamilyServiceTest Delete throws when family has restaurants 0.000s
✅ App.Modules.Users.Client.Tests.ClientGroupServiceTest Find or fail delegates to repository 0.003s
✅ App.Modules.Users.Client.Tests.ClientGroupServiceTest Create many persists each non empty name 0.001s
✅ App.Modules.Users.Client.Tests.ClientGroupServiceTest Create many skips empty names 0.000s
✅ App.Modules.Users.Client.Tests.ClientGroupServiceTest Update delegates to repository with name 0.000s
✅ App.Modules.Users.Client.Tests.ClientGroupServiceTest Delete finds then delegates 0.000s
✅ App.Modules.Users.Client.Tests.ClientGroupServiceTest Sync existing updates groups without delete flag 0.000s
✅ App.Modules.Users.Client.Tests.ClientGroupServiceTest Sync existing deletes groups with delete flag 0.000s
✅ App.Modules.Users.Client.Tests.ClientGroupServiceTest Sync existing handles mixed operations 0.000s
✅ App.Modules.Users.Client.Tests.ClientPolicyTest Manage audit alerts allows own manager 0.003s
✅ App.Modules.Users.Client.Tests.ClientPolicyTest Manage audit alerts allows self 0.000s
✅ App.Modules.Users.Client.Tests.ClientPolicyTest Manage audit alerts denies another hierarchy 0.000s
✅ App.Modules.Users.Client.Tests.ClientPolicyTest Manage audit alerts denies managers from another client 0.000s
✅ App.Modules.Users.Client.Tests.ClientPolicyTest Manage audit alerts denies when current entity is not a client 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest All delegates to repository 0.004s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Find or fail delegates to repository 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Create hashes password and sets is superadmin 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Create maps all dto fields 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Update passes dto array to repository 0.002s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Update cascades highly secured password to children 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Update does not cascade when highly secured password absent 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Update cascades use credentials to children 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Update propagates repository false 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Delete finds client and delegates 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Toggle updates only is active 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Count restaurants counts all for client 0.000s
✅ App.Modules.Users.Client.Tests.ExportManagersJobTest Exports managers and notifies with a downloadable file 0.067s
✅ App.Modules.Users.Client.Tests.ImportManagersJobTest Imports valid rows and reports errors for invalid ones 0.072s
✅ App.Modules.Users.Client.Tests.ImportManagersJobTest Reports a friendly error when the spreadsheet file cannot be read 0.048s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest View any allows superadmin 0.002s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest View any denies manager role 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest View any denies when no authenticated user 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Create allows superadmin 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Create denies manager role 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Edit allows self even when not superadmin 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Edit denies when manager belongs to another client 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Edit denies manager role editing someone else 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Edit allows superadmin editing another manager in same client 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Manage denies self 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Manage allows self when impersonating from superpoulpe and another superadmin exists 0.001s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Manage still denies self when impersonating from client 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Manage denies self via superpoulpe impersonation when only one active superadmin left 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Manage denies when manager belongs to another client 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Manage denies manager role as actor 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Manage allows non superadmin target regardless of superadmin count 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Manage denies superadmin target when no active superadmin left 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Manage denies superadmin target when it is the only active superadmin 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Manage allows superadmin target when more than one active superadmin 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Restaurants access denies superadmin target 0.000s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Restaurants access allows non superadmin target 0.000s
✅ App.Modules.Users.Client.Tests.ManagerReusingMainEmailTest Sub client reusing main email does not overwrite the superadmin 0.166s
✅ App.Modules.Users.Client.Tests.ManagerReusingMainEmailTest Sub client with its own email still gets its own manager user 0.166s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest All for client delegates to repository 0.001s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest All for client passes null term 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Find manager or fail delegates to repository 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Find user sub client delegates to client repository 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Find user for client delegates to repository 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Find first active superadmin delegates to repository 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Create sets parent id hashes password and marks active 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Create maps all optional dto fields 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Create throws duplicate manager exception on integrity violation 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Create rethrows other query exceptions 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Create refuses an email already used on the account 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Update syncs sub client when it exists 0.002s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Update writes to main client when no sub client 0.001s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Update strips empty password instead of overwriting it 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Update synchronizes user profile when identity fields change 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Update does not touch profile when no identity fields change 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Update stamps password last changed at on sub client only when password set 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Update translates role to is superadmin for sub client only 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Update clears restaurants and families access when promoted to superadmin 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Update does not touch restaurants or families access when staying manager 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Update propagates repository false 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Delete deletes sub client and user when sub client exists 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Delete only deletes user when no sub client 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Delete propagates repository false 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Update restaurant access writes to main client when no sub client 0.001s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Update restaurant access writes to sub client when it exists 0.001s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Get index view data attaches sub client and computed fields 0.001s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Get index view data defaults when no sub client 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Get index view data shows total restaurants for superadmin 0.000s
✅ App.Modules.Users.Client.Tests.MapImportRowToStoreDTOTest Maps basic fields 0.006s
✅ App.Modules.Users.Client.Tests.MapImportRowToStoreDTOTest Resolves family names to ids 0.000s
✅ App.Modules.Users.Client.Tests.MapImportRowToStoreDTOTest Maps oui non to booleans 0.000s
✅ App.Modules.Users.Client.Tests.PromoteManagerToSuperadminTest Returns data unchanged when role is absent 0.001s
✅ App.Modules.Users.Client.Tests.PromoteManagerToSuperadminTest Sets is superadmin false when staying manager 0.000s
✅ App.Modules.Users.Client.Tests.PromoteManagerToSuperadminTest Clears access and enables options when promoted to superadmin 0.000s
✅ App.Modules.Users.Employee.Tests.EmployeeObserverTest Clearing employee password also clears user password 0.015s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest All delegates to repository with restaurant id 0.005s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest All passes null term 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Find or fail returns employee when found 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Find or fail aborts when not found 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Create passes restaurant id and basic fields 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Create defaults color when null 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Create resolves dlc both 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Create resolves dlc only edit dlc 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Create defaults action plan edit level to full when null 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Create keeps provided action plan edit level 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Create calls sync relations with dto arrays 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Update active only sets flag and saves without full update 0.010s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Update keeps empty password so it can be removed 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Update keeps non empty password 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Update does not call sync when save fails 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Delete delegates to repository 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Bulk delete delegates with restaurant id 0.001s
✅ App.Modules.Users.Employee.Tests.MultiEmployeeServiceTest All delegates to repository with family id 0.020s
✅ App.Modules.Users.Employee.Tests.MultiEmployeeServiceTest All passes null term 0.000s
✅ App.Modules.Users.Employee.Tests.MultiEmployeeServiceTest Find or fail returns employee when found 0.000s
✅ App.Modules.Users.Employee.Tests.MultiEmployeeServiceTest Find or fail aborts when not found 0.000s
✅ App.Modules.Users.Employee.Tests.MultiEmployeeServiceTest Create passes family id and basic fields 0.000s
✅ App.Modules.Users.Employee.Tests.MultiEmployeeServiceTest Create touches family timestamp 0.000s
✅ App.Modules.Users.Employee.Tests.MultiEmployeeServiceTest Delete delegates to repository and returns true 0.000s
✅ App.Modules.Users.Employee.Tests.MultiEmployeeServiceTest Delete does not touch timestamp when repository fails 0.000s
✅ App.Modules.Users.Employee.Tests.MultiEmployeeServiceTest Update throws bad method call exception 0.000s
✅ App.Modules.Users.Employee.Tests.MultiEmployeeServiceTest Bulk delete throws bad method call exception 0.000s
✅ App.Modules.Users.Employee.Tests.UpdateDTOTest Password cannot be removed when required by client 0.005s
✅ App.Modules.Users.Employee.Tests.UpdateDTOTest Password can be removed when not required by client 0.001s
✅ App.Modules.Users.Employee.Tests.UpdateDTOTest Active only update does not require password 0.001s
✅ App.Modules.Users.Restaurant.Tests.CreateAccountRestaurantActionTest It passes a hashed password and admin password to the repository 0.259s
✅ App.Modules.Users.Restaurant.Tests.CreateAccountRestaurantActionTest It maps the other expected fields 0.155s
✅ App.Modules.Users.Restaurant.Tests.CreateTrialRestaurantActionTest It passes a hashed password and admin password to the repository 0.264s
✅ App.Modules.Users.Restaurant.Tests.CreateTrialRestaurantActionTest It derives the username from the email local part 0.154s
✅ App.Modules.Users.Restaurant.Tests.CreateTrialRestaurantActionTest It suffixes the username with the domain on collision 0.155s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Unchecking a provider soft deletes its polymorphic connexion 9.075s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Unchecking a provider soft deletes its legacy connexion 8.758s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Rechecking a provider restores its soft deleted connexion 8.709s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Disabled connexion is excluded from the default sync query 9.081s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Untouched providers are not affected 9.169s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Local restaurant service resets import apis when all boxes are unchecked 8.886s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Ajax is active toggle does not reset import apis on local service 8.923s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Ajax is active toggle does not reset import apis on indep service 8.721s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Inactive restaurant connexion is excluded from the sync query 9.102s
✅ App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest Export route is available for independent restaurants 0.051s
✅ App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest Independent restaurants page uses the queued export ui 0.054s
✅ App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest Independent restaurant query binds the search value and is lazy 0.051s
✅ App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest Independent restaurant service dispatches the export job 0.048s
✅ App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest Builds the restaurant export row 0.047s
✅ App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest Export job writes the file and notifies the requesting user 0.052s