🧪 Rapport Tests Pest Laravel — PREPROD

08/10/2026 09:52:45 · ❌ 267 test(s) en échec

1789
Total
1516
Passés
267
Échoués
6
Ignorés
1944.5s
Durée
StatutClasseTestDuréeMessage
✅ Tests.Api.Inpulse.InpulseTest Sync products 0.006s
✅ Tests.Features.ActivityLog.ActivityLogDetailsTest Details modal is hidden until an entry is requested 12.223s
✅ Tests.Features.ActivityLog.ActivityLogDetailsTest Requesting an entry renders its changes 10.276s
✅ Tests.Features.ActivityLog.ActivityLogDetailsTest Table delegates details to the modal component 9.559s
✅ Tests.Features.ActivityLog.ActivityLogManagerOwnerTest Manager settings are owned by the main client 9.621s
✅ Tests.Features.ActivityLog.ActivityLogManagerOwnerTest Manager account itself is owned by the main client 9.823s
✅ Tests.Features.ActivityLog.ActivityLogManagerOwnerTest Main client stays its own owner 9.373s
✅ Tests.Features.ActivityLog.ActivityLogManagerOwnerTest Logs recorded under a manager display the main client 9.020s
✅ Tests.Features.ActivityLog.ActivityLogManagerOwnerTest Logs recorded under a deleted manager display the main client 8.940s
✅ Tests.Features.ActivityLog.ActivityLogManagerOwnerTest Empty recorded name falls back instead of showing blank 8.818s
✅ Tests.Features.ActivityLog.ActivityLogTest Dirty only update keeps ownership separate from changes and author 8.711s
✅ Tests.Features.ActivityLog.ActivityLogTest Nested impersonation keeps original author and target owner 8.793s
✅ Tests.Features.ActivityLog.ActivityLogTest Direct impersonation displays the target instead of repeating the author 9.052s
✅ Tests.Features.ActivityLog.ActivityLogTest Family impersonation is displayed as its parent client 8.667s
✅ Tests.Features.ActivityLog.ActivityLogTest Legacy impersonation does not guess the target from ownership 8.465s
✅ Tests.Features.ActivityLog.ActivityLogTest Unowned template does not inherit the impersonated restaurant 9.186s
✅ Tests.Features.ActivityLog.ActivityLogTest Client settings and family templates resolve the client 9.255s
✅ Tests.Features.ActivityLog.ActivityLogTest Direct owner edits and deletes keep the snapshot 8.676s
✅ Tests.Features.ActivityLog.ActivityLogTest Filters match owner names ids and combine without matching the author 8.799s
✅ Tests.Features.ActivityLog.ActivityLogTest Activity page displays most specific owner and applies unified search 8.887s
✅ Tests.Features.ActivityLog.ActivityLogTest Activity page uses the current locale 9.034s
✅ Tests.Features.ActivityLog.ActivityLogTest Legacy author does not override recorded ownership 9.165s
✅ Tests.Features.ActivityLog.ActivityLogTest Models without ownership do not inherit the acting account 9.126s
✅ Tests.Features.ActivityLog.ActivityLogTest Owner snapshot does not follow later restaurant transfers 9.175s
✅ Tests.Features.ActivityLog.ActivityLogTest Legacy recorded ownership is still displayed and filterable 9.406s
✅ Tests.Features.Api.ApiSessionIsolationTest Api token does not open a web session 0.300s
✅ Tests.Features.Api.ApiSessionIsolationTest Login rejects bad password even when a web session exists 0.418s
✅ Tests.Features.Api.ApiSessionIsolationTest Login with valid password still issues a token 0.259s
✅ Tests.Features.Api.ApiSessionIsolationTest Api logout does not destroy the web session 0.212s
✅ Tests.Features.Api.ApiSessionIsolationTest Client api token does not open a client web session 0.208s
✅ Tests.Features.Api.ApiSessionIsolationTest Client api logout does not destroy the client web session 0.208s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline saint denis june 1 reproduces counter bug 9.672s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline pfc fruit legume june 1 reproduces counter bug 9.040s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline saint denis excursion time is counter times 600 9.443s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest nominal single measure every 10 min still works 9.558s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline logger issue day csv reproduces error-day behavior 9.529s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline logger issue day csv with connectivity checks 12.926s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline logger issue day mod nico 1 csv reproduces error-day behavior 10.229s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline logger issue day mod nico 2 csv reproduces error-day behavior 10.731s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline quick june 2026 csv 32.265s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest replay OK_CASE quick nevers marzy csv 11.366s
✅ Tests.Features.Loggers.FridgeLoggerBatchReplayTest replay TEMP_KO_CONN_OK_CASE_WITH_EXCLUSION quick villeneuve csv 15.729s
✅ Tests.Features.Loggers.FridgeLoggersTest Temperatures 11.094s
✅ Tests.Features.Loggers.FridgeLoggersTest Several measures 9.295s
✅ Tests.Features.Loggers.FridgeLoggersTest Connection 9.667s
✅ Tests.Features.Loggers.FridgeLoggersTest Epv cauderan 16.019s
✅ Tests.Features.Loggers.FridgeLoggersTest Terrasse saint pol 10.431s
✅ Tests.Features.Loggers.FridgeLoggersTest Global connection 14.785s
✅ Tests.Features.Loggers.FridgeLoggersTest ClosedDates logger 9.725s
✅ Tests.Features.Loggers.FridgeLoggersTest ClosedDates logger 10.070s
✅ Tests.Features.Loggers.FridgeLoggersTest ClosedDates contacts 10.607s
✅ Tests.Features.Loggers.FridgeLoggersTest ClosedDates connexion contacts 10.003s
✅ Tests.Features.Loggers.FridgeLoggersTest ClosedDates connexion contacts 9.887s
✅ Tests.Features.Loggers.FridgeLoggersTest Case cirl 18.488s
✅ Tests.Features.Loggers.FridgeLoggersTest No data alerts 12.084s
✅ Tests.Features.Loggers.FridgeLoggersTest NoDataAlerts AllLoggers 9.441s
✅ Tests.Features.Loggers.FridgeLoggersTest NoDataAlerts ResumeBeforeSecondAlert 10.967s
✅ Tests.Features.Loggers.FridgeLoggersTest NoDataAlerts MultipleLoggers 12.301s
✅ Tests.Features.Loggers.FridgeLoggersTest NoDataAlert IgnoresInactiveLoggers 9.557s
✅ Tests.Features.Loggers.LoggerClosedDatesScenariosTest back_to_normal after exclusion sends no email when issue was never alerted 9.164s
✅ Tests.Features.Loggers.LoggerClosedDatesScenariosTest deferred issue resolved during exclusion is not promoted when exclusion ends 8.609s
✅ Tests.Features.Loggers.LoggerConnectionScenariosTest scenario stable produces one batch per measurement 8.641s
✅ Tests.Features.Loggers.LoggerConnectionScenariosTest scenario stable and unstable accept inLimits OK KO 10.417s
✅ Tests.Features.Loggers.LoggerConnectionScenariosTest scenario unstable produces one burst with backlog since last reception 9.333s
✅ Tests.Features.Loggers.LoggerConnectionScenariosTest scenario stable then unstable then noData then unstable then stable ends in stable_ok 9.981s
✅ Tests.Features.Loggers.LoggerConnectionScenariosTest stable_ok to stable_ko triggers temperature_issue 9.181s
✅ Tests.Features.Loggers.LoggerConnectionScenariosTest scenario stable then noData then unstable then stable 9.241s
✅ Tests.Features.Loggers.LoggerConnectionScenariosTest connection scenario shapes with data set "dataset "stable → unstable → noData → unstable → stable"" 9.056s
✅ Tests.Features.Loggers.LoggerConnectionScenariosTest connection scenario shapes with data set "dataset "stable → noData → unstable → stable"" 9.716s
✅ Tests.Features.Loggers.LoggerPeriodicTemperatureTickTest periodic tick triggers dizzy temperature issue after ko readings then silence 9.702s
✅ Tests.Features.Loggers.LoggerPeriodicTemperatureTickTest periodic tick does not run when last reading temperature is in limits 9.875s
✅ Tests.Features.Loggers.LoggerPeriodicTemperatureTickTest periodic tick sends temperature reminder when excursion remains open without new data 10.393s
✅ Tests.Features.Loggers.LoggerPeriodicTemperatureTickTest periodic tick does nothing when window has no readings 9.825s
✅ Tests.Features.Loggers.LoggerSimulationTickTest does nothing when simulation is disabled 9.324s
✅ Tests.Features.Loggers.LoggerSimulationTickTest injects a reading for each eligible logger when enabled 9.784s
✅ Tests.Features.Loggers.LoggerSimulationTickTest respects the restaurant allowlist 10.047s
✅ Tests.Features.Loggers.LoggerSimulationTickTest dry-run does not persist any reading 9.105s
✅ Tests.Features.Loggers.LoggerSimulationTickTest an excursion produces an out-of-limits reading 9.215s
✅ Tests.Features.Loggers.LoggerSimulationTickTest an inactive logger is not simulated 9.179s
✅ Tests.Features.Loggers.LoggerTemperatureReminderTest reminder event type mirrors initial temperature issue 0.047s
✅ Tests.Features.Loggers.LoggerTemperatureReminderTest sendsTemperatureReminder identifies reminder events 0.047s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest dizzy temperature issue variant distinguishes co-occurring dizzy_started 0.046s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest dizzy ended alert variant covers temperature outcomes 0.049s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest temperature and resolution alerts are suppressed when dizzy ended covers them 0.054s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "stable_ok → stable_ko"" 0.048s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "stable_ok → unstable_ok"" 0.049s
✅ 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.043s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "stable_ko → unstable_ko"" 0.044s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ok → stable_ok"" 0.044s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ok → stable_ko"" 0.044s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ok → unstable_ko"" 0.046s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ko → stable_ok"" 0.046s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ko → stable_ko"" 0.043s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ko → unstable_ok"" 0.044s
✅ 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.047s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest window state is derived from analysis flags with data set "dataset "stable ko"" 0.043s
✅ Tests.Features.Loggers.LoggerWindowTransitionsTest window state is derived from analysis flags with data set "dataset "unstable ok"" 0.044s
✅ 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.026s
✅ 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.006s
✅ 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.011s
✅ 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.039s
✅ 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.006s
✅ 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.000s
✅ 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 delegates to repo 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.001s
✅ 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 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.001s
✅ 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.011s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest ResolveActiveCategories with loc only uses loc categories 0.001s
✅ 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.001s
✅ 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.001s
✅ 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.001s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData returns no urgent when no statuses 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetIndexData statuses sorted by position 0.001s
✅ 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.001s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetUrgentPlansData flattens urgent plans across statuses 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetUrgentPlansData sorts by reminded at ascending 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanServiceTest GetUrgentPlansData excludes plan with finished at regardless of status 0.001s
✅ 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.020s
✅ 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.005s
✅ 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.000s
✅ 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.004s
✅ 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.000s
✅ 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.070s
✅ Tests.Unit.ActivityLog.BulkDeleteActivityLogGuardTest No new raw bulk delete on a logged table 0.496s
✅ Tests.Unit.ActivityLog.BulkDeleteActivityLogGuardTest No new raw bulk insert on a logged table 0.110s
✅ Tests.Unit.ActivityLog.BulkDeleteActivityLogGuardTest No new eloquent bulk insert on a logged model 0.116s
✅ Tests.Unit.ActivityLog.LoggableBuilderTest The builder is wired onto the model 0.036s
✅ 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.067s
✅ Tests.Unit.Api.AdoriaStaleMenuPurgeTest Synchronize does not purge when api day has no importable recipes 0.054s
✅ Tests.Unit.Api.AdoriaSyncFixtureBenchmarkTest Sync replay fixture is idempotent and reports timings 0.061s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Get data throws when menu request fails 0.054s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Get data treats menu plan 404 as empty 0.051s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Get data still throws when menu returns server error 0.046s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Menu plan 404 is treated as empty http error 0.044s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Get data throws on html error body that is not json 0.046s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Kitchen catalog is cached across calls 0.049s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Kitchen failure does not abort menu import 0.047s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Test connection returns false instead of throwing 0.046s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Test connection returns true when multi step setup is incomplete 0.046s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Test connection returns false when organization token is rejected 0.046s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Sync adoria connexion job uses retries and api sync queue 0.044s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Sync adoria api defaults to single job mode 0.046s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Sync adoria api per connexion mode shortens parent timeout 0.045s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Src api token is trimmed on assignment 0.052s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Src api token trim ignores non string values 0.048s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Equilibre get data throws when auth token request fails 0.046s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Equilibre get data throws when site id is rejected by api 0.047s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Equilibre test connection returns false instead of throwing on invalid site 0.047s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Equilibre test connection returns true when api legitimately has no data 0.048s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Compass test connection returns false instead of throwing 0.048s
❌ Tests.Unit.Api.ApiConnectionResilienceTest Easilys test connection returns true when id site not yet selected 0.053s Easilys test connection returns true when id site not yet selectedFailed asserting that false is true. at tests/Unit/Api/ApiConnectionResilienceTest.php:191
✅ Tests.Unit.Api.ApiConnectionResilienceTest Easilys get data throws when id site is missing 0.052s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Easilys get data throws when every request fails 0.047s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Easilys get data keeps empty payload when api responds 0.044s
✅ 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 9.374s
✅ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Equilibre daily resync does not duplicate product imports 9.966s
✅ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Equilibre without prepare sync reproduces duplicate imports 9.129s
✅ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Equilibre orphan product import is relinked not duplicated 9.037s
✅ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Easilys resync does not duplicate control reception and product imports 8.997s
✅ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Compass resync does not duplicate control reception and product imports 9.637s
✅ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Get existing data depends on restaurant context 9.272s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Merge unions recipes only present in one source 9.953s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Merge keeps primary id when same recipe has different ids 9.601s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Merge treats labels as case and whitespace insensitive 8.789s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Merge keeps distinct recipes that share the same numeric id 9.408s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Diff counts partial overlap between sources 9.079s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Parse connection config ignores legacy use menu report flag 8.522s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Test connection probes configured site receipts not sites list 8.453s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Test connection without id site probes sites for first save 8.893s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Test connection falls back to categorymenus when receipts are forbidden 9.741s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Test connection fails when site endpoint has no data key 8.907s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Resolve id sites appends children of the parent site 9.533s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Occurrence key keeps same id with different labels distinct 8.943s
✅ Tests.Unit.Api.EasilysProductionRecipesMergeTest Synchronize imports distinct recipes that share the same numeric id 8.844s
✅ Tests.Unit.Api.EquilibreSyncFixtureBenchmarkTest Sync replay fixture is idempotent and reports timings 0.066s
⚠️ Tests.Unit.Api.ImportApisSyncGuardsTest Ajax is active toggle does not reset import apis on local service 0.068s Ajax is active toggle does not reset import apis on local serviceArgumentCountError: Too few arguments to function App\Modules\Users\Restaurant\Services\LocalRestaurantService::__construct(), 5 passed in /var/www/octopus-haccp/tests/Unit/Api/ImportApisSyncGuardsTest.php on line 44 and exactly 6 expe
⚠️ Tests.Unit.Api.ImportApisSyncGuardsTest Ajax is active toggle does not reset import apis on indep service 0.048s Ajax is active toggle does not reset import apis on indep serviceArgumentCountError: App\Modules\Users\Restaurant\DTO\UpdateDTO::__construct(): Argument #25 ($csm_success_name) not passed at app/Modules/Users/Restaurant/DTO/UpdateDTO.php:39 at tests/Unit/Api/ImportApisSyncGuardsTest.php:179 at tests
⚠️ Tests.Unit.Api.ImportApisSyncGuardsTest Full form submit without import apis resets them 0.040s Full form submit without import apis resets themArgumentCountError: Too few arguments to function App\Modules\Users\Restaurant\Services\LocalRestaurantService::__construct(), 5 passed in /var/www/octopus-haccp/tests/Unit/Api/ImportApisSyncGuardsTest.php on line 86 and exactly 6 expected at app/Modul
✅ Tests.Unit.Api.ImportApisSyncGuardsTest Sync query excludes inactive restaurants but keeps client family connexions 0.047s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Une photo de tache est acceptee 0.009s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Un php renomme en jpg est refuse sur son contenu 0.017s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Un php garde son extension est refuse avant meme le contenu 0.000s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Un fichier sans extension est refuse 0.000s
✅ 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.000s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Un svg est refuse car il s execute dans notre origine 0.000s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Une page html est refusee 0.000s
✅ 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.AuditActionTaskCommentsTest GetCommentsCount counts each comment row 0.002s
✅ 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.000s
✅ 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.000s
⚠️ Tests.Unit.Audits.AuditEmployeeReferentialTest National copy never touches the forbidden employees pivot 0.046s National copy never touches the forbidden employees pivotArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditEmployeeReferentialTest.php on line 109 and exactly 3 expec
⚠️ Tests.Unit.Audits.AuditEmployeeReferentialTest Local copy still copies the forbidden employees pivot 0.036s Local copy still copies the forbidden employees pivotArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditEmployeeReferentialTest.php on line 136 and exactly 3 expected
⚠️ Tests.Unit.Audits.AuditEmployeeReferentialTest National update never touches the forbidden employees pivot 0.039s National update never touches the forbidden employees pivotArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditEmployeeReferentialTest.php on line 154 and exactly 3 exp
⚠️ Tests.Unit.Audits.AuditEmployeeReferentialTest Local update still forbids everyone when no employee is checked 0.058s Local update still forbids everyone when no employee is checkedArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditEmployeeReferentialTest.php on line 178 and exactly 3
⚠️ Tests.Unit.Audits.AuditEmployeeReferentialTest Local update forbids only the unchecked employees 0.040s Local update forbids only the unchecked employeesArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditEmployeeReferentialTest.php on line 199 and exactly 3 expected at a
⚠️ Tests.Unit.Audits.AuditEmployeeReferentialTest National edit page never loads the employee referential 0.043s National edit page never loads the employee referentialArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditEmployeeReferentialTest.php on line 216 and exactly 3 expecte
⚠️ Tests.Unit.Audits.AuditEmployeeReferentialTest Local edit page still loads the employee referential 0.052s Local edit page still loads the employee referentialArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditEmployeeReferentialTest.php on line 235 and exactly 3 expected a
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditsToSync enriches each audit with forbidden employees ids 0.005s
✅ 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 enables incremental filter when no reset nor resend 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync skips tasks without allAuditAction or audit 0.001s
✅ 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.000s
✅ 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.001s
✅ 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.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask falls back to general day range for non 2023 11 17 dates 0.000s
✅ 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.000s
✅ 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.001s
✅ 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.017s
✅ 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.000s
✅ 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.000s
✅ 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.011s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest GetIndexPageData returns null when the action does not exist 0.001s
✅ 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.000s
✅ 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.000s
✅ 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.002s
✅ 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.000s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest PrepareDocumentDownload returns file when linked task exists 0.000s
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest GetIndexPageData groups audits by period 0.005s GetIndexPageData groups audits by periodArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at app/Modules/
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest StoreAudit sets defaults and syncs contacts when save succeeds 0.000s StoreAudit sets defaults and syncs contacts when save succeedsArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 ex
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest StoreAudit does not sync contacts when save fails 0.000s StoreAudit does not sync contacts when save failsArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at app
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest GetEditPageData returns null when audit not found 0.000s GetEditPageData returns null when audit not foundArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at app
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest GetEditPageData returns null when audit belongs to another restaurant 0.000s GetEditPageData returns null when audit belongs to another restaurantArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exact
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest GetEditPageData returns full data when audit belongs to restaurant 0.000s GetEditPageData returns full data when audit belongs to restaurantArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest GetTasksActionsPageData returns null when audit not found 0.000s GetTasksActionsPageData returns null when audit not foundArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expecte
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest GetTasksActionsPageData returns null for a foreign audit 0.000s GetTasksActionsPageData returns null for a foreign auditArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest GetTasksActionsPageData returns data for an owned audit 0.000s GetTasksActionsPageData returns data for an owned auditArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest UpdateAudit returns not found when audit missing 0.000s UpdateAudit returns not found when audit missingArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at app/
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest UpdateAudit returns not found when foreign audit and not same family 0.000s UpdateAudit returns not found when foreign audit and not same familyArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactl
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest UpdateAudit falls through to not found when family matches but active key absent 0.000s UpdateAudit falls through to not found when family matches but active key absentArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 8
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest GetShowPageData returns null when audit not found 0.000s GetShowPageData returns null when audit not foundArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at app
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest GetShowPageData returns null when audit belongs to another restaurant 0.000s GetShowPageData returns null when audit belongs to another restaurantArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exact
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest GetShowPageData returns audit and periods when owned 0.000s GetShowPageData returns audit and periods when ownedArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest DestroyAudit returns deleted false when audit not found 0.000s DestroyAudit returns deleted false when audit not foundArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest DestroyAudit returns deleted false when foreign audit 0.000s DestroyAudit returns deleted false when foreign auditArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest DestroyAudit returns deleted true when owned and delete succeeds 0.000s DestroyAudit returns deleted true when owned and delete succeedsArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest DestroyAudit returns deleted false when delete fails 0.000s DestroyAudit returns deleted false when delete failsArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest ImportXlsxRows returns status false when file invalid 0.001s ImportXlsxRows returns status false when file invalidArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest ExportAuditActions returns null when audit not found 0.000s ExportAuditActions returns null when audit not foundArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest ReorderAudits upserts position for each valid id and skips empty 0.000s ReorderAudits upserts position for each valid id and skips emptyArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest ReorderAudits skips id not found by repository 0.000s ReorderAudits skips id not found by repositoryArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at app/Mo
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest ReorderActions upserts position without active field 0.000s ReorderActions upserts position without active fieldArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest CreateAction returns null when audit not found 0.000s CreateAction returns null when audit not foundArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at app/Mo
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest CreateAction defaults coefficent to one when empty 0.000s CreateAction defaults coefficent to one when emptyArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at ap
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest CreateAction keeps provided coefficent 0.000s CreateAction keeps provided coefficentArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at app/Modules/Hy
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest CreateAction creates extra actions when provided by import 0.000s CreateAction creates extra actions when provided by importArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expect
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest CreateAction does not create extra actions when absent 0.000s CreateAction does not create extra actions when absentArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected a
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest GetCreateDirectoryPageData returns expected structure 0.000s GetCreateDirectoryPageData returns expected structureArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest GetEditDirectoryPageData returns null when directory not found 0.000s GetEditDirectoryPageData returns null when directory not foundArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 ex
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest GetEditDirectoryPageData combines audits without directory and directory audits 0.000s GetEditDirectoryPageData combines audits without directory and directory auditsArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest SaveDirectory creates new directory with defaults when directoryId null 0.000s SaveDirectory creates new directory with defaults when directoryId nullArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exa
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest SaveDirectory uses provided name and color 0.000s SaveDirectory uses provided name and colorArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at app/Module
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest SaveDirectory assigns new audits to directory when save succeeds 0.000s SaveDirectory assigns new audits to directory when save succeedsArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest SaveDirectory does not assign audits when save fails 0.000s SaveDirectory does not assign audits when save failsArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest SaveDirectory update mode unassigns removed audits and keeps still selected ones 0.000s SaveDirectory update mode unassigns removed audits and keeps still selected onesArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 8
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest DeleteDirectory returns deleted false when directory not found 0.000s DeleteDirectory returns deleted false when directory not foundArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 ex
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest DeleteDirectory returns deleted false when foreign directory 0.000s DeleteDirectory returns deleted false when foreign directoryArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expe
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest DeleteDirectory moves audits out when moveAudits true 0.000s DeleteDirectory moves audits out when moveAudits trueArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest DeleteDirectory deletes audits when moveAudits false 0.000s DeleteDirectory deletes audits when moveAudits falseArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 expected at
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest DeleteDirectory returns deleted false when repository delete fails 0.000s DeleteDirectory returns deleted false when repository delete failsArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest The tenant is forwarded to the repository when deleting a directory 0.000s The tenant is forwarded to the repository when deleting a directoryArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest GetShowDirectoryPageData returns null when directory not found 0.000s GetShowDirectoryPageData returns null when directory not foundArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly 3 ex
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest GetShowDirectoryPageData groups audits by period without ownership check 0.000s GetShowDirectoryPageData groups audits by period without ownership checkArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and ex
⚠️ Tests.Unit.Audits.AuditsParametersServiceTest ToggleDirectoryActive returns status false when directory not found 0.000s ToggleDirectoryActive returns status false when directory not foundArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/AuditsParametersServiceTest.php on line 80 and exactly
✅ Tests.Unit.Audits.CentralAuditsBoardServiceTest CreatedAt counts in the records period centrally but not for a client 0.010s
✅ 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.000s
✅ 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.000s
✅ 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.001s
✅ 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.000s
✅ 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.003s
⚠️ Tests.Unit.Audits.MultiAuditsParametersServiceTest OwnerColumn is the family column nationally and the restaurant column locally 0.001s OwnerColumn is the family column nationally and the restaurant column locallyArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/MultiAuditsParametersServiceTest.php on line
⚠️ Tests.Unit.Audits.MultiAuditsParametersServiceTest ManagesForbiddenEmployees is off nationally and on locally 0.000s ManagesForbiddenEmployees is off nationally and on locallyArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/MultiAuditsParametersServiceTest.php on line 72 and exactly 3 e
⚠️ Tests.Unit.Audits.MultiAuditsParametersServiceTest TaskScopeArgument scopes the regeneration to the family nationally 0.000s TaskScopeArgument scopes the regeneration to the family nationallyArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/MultiAuditsParametersServiceTest.php on line 72 and exa
⚠️ Tests.Unit.Audits.MultiAuditsParametersServiceTest TaskScopeArgument stays empty locally so the command does nothing 0.000s TaskScopeArgument stays empty locally so the command does nothingArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/MultiAuditsParametersServiceTest.php on line 64 and exac
⚠️ Tests.Unit.Audits.MultiAuditsParametersServiceTest TaskScopeArgument returns on both contexts instead of recursing 0.000s TaskScopeArgument returns on both contexts instead of recursingArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/MultiAuditsParametersServiceTest.php on line 72 and exactl
⚠️ Tests.Unit.Audits.MultiAuditsParametersServiceTest InheritsFromFamily is false nationally because a family is the top 0.000s InheritsFromFamily is false nationally because a family is the topArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/MultiAuditsParametersServiceTest.php on line 72 and exa
⚠️ Tests.Unit.Audits.MultiAuditsParametersServiceTest DirectoryIsAccessible requires strict family ownership nationally 0.000s DirectoryIsAccessible requires strict family ownership nationallyArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/MultiAuditsParametersServiceTest.php on line 72 and exac
⚠️ Tests.Unit.Audits.MultiAuditsParametersServiceTest DirectoryIsAccessible is unconditionally true locally 0.000s DirectoryIsAccessible is unconditionally true locallyArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/MultiAuditsParametersServiceTest.php on line 64 and exactly 3 expect
⚠️ Tests.Unit.Audits.MultiAuditsParametersServiceTest DeleteDirectory guards on the family column nationally 0.000s DeleteDirectory guards on the family column nationallyArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/MultiAuditsParametersServiceTest.php on line 231 and exactly 3 expe
⚠️ Tests.Unit.Audits.MultiAuditsParametersServiceTest StoreAudit asks for the contacts of its own owner in both contexts 0.000s StoreAudit asks for the contacts of its own owner in both contextsArgumentCountError: Too few arguments to function App\Modules\Hygiene\Audits\Services\AuditsParametersService::__construct(), 2 passed in /var/www/octopus-haccp/tests/Unit/Audits/MultiAuditsParametersServiceTest.php on line 276 and ex
✅ Tests.Unit.Audits.SimpleAuditsParametersServiceTest GetShowPageData returns audits and folders from repository 0.003s
✅ 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.000s
✅ 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.000s
✅ 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.000s
✅ Tests.Unit.CleaningPlan.CleaningPlanTaskGenerationPureLogicTest Always expected valid until without expiration uses year 3000 0.003s
✅ 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.000s
✅ 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.142s Nat plan disabled at loc does not generate tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Task
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Nat action disabled at loc does not generate tasks 0.110s Nat action disabled at loc does not generate tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Ta
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Closed restaurant stops generation 0.109s Closed restaurant stops generationUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationErro
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Always is idempotent then regenerates when expired path hits 0.124s Always is idempotent then regenerates when expired path hitsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Frequency increase from one reuses existing task as main 0.109s Frequency increase from one reuses existing task as mainUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Frequency generates indexed children linked to first task 0.112s Frequency generates indexed children linked to first taskUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to lo
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Only action id generates only target action tasks 0.110s Only action id generates only target action tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Tas
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Always updates valid until without modifying existing valid from 0.115s Always updates valid until without modifying existing valid fromUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attemptin
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Always friday only with expiration catch up after expiry on saturday 0.112s Always friday only with expiration catch up after expiry on saturdayUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attem
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Loc action on nat plan still generates when nat action disabled at loc 0.119s Loc action on nat plan still generates when nat action disabled at locUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while att
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Day task not skipped when week closure does not cover full action slot 0.117s Day task not skipped when week closure does not cover full action slotUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while att
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Day task skipped when week closure covers full action slot 0.118s Day task skipped when week closure covers full action slotUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to l
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Day task skipped when week closure is full day with same start end hour 0.111s Day task skipped when week closure is full day with same start end hourUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while at
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Frequency generation is idempotent on same period window 0.117s Frequency generation is idempotent on same period windowUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Week task skipped when restaurant closed all week period 0.110s Week task skipped when restaurant closed all week periodUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Nat parent disabled blocks child nat action generation regression 0.115s Nat parent disabled blocks child nat action generation regressionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempti
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Nat loc disabled and several generations 0.174s Nat loc disabled and several generationsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerati
✅ 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.005s
✅ 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.001s
✅ 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.017s
✅ Tests.Unit.Common.ExportToSpreadsheetActionTest Writes headers when there are no rows 0.006s
✅ Tests.Unit.Common.ReadSpreadsheetActionTest Reads rows keyed by header 0.006s
✅ Tests.Unit.Console.FixCorruptedExtraActionsTest Une valeur abimee par un emoji est reparee 0.045s
✅ Tests.Unit.Console.FixCorruptedExtraActionsTest Tableaux imbriques et scalaires sont repares 0.044s
✅ Tests.Unit.Console.FixCorruptedExtraActionsTest Une perte qui atteint la chaine suivante est refusee et non mal reparee 0.047s
✅ Tests.Unit.Console.FixCorruptedExtraActionsTest La reparation ne change que les prefixes de longueur 0.046s
✅ Tests.Unit.Console.FixCorruptedExtraActionsTest Une valeur tronquee est refusee 0.044s
✅ Tests.Unit.Console.FixCorruptedExtraActionsTest Une valeur qui n est pas du serialize est refusee 0.045s
✅ Tests.Unit.Console.FixCorruptedExtraActionsTest Une valeur saine reste identique 0.043s
✅ 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.069s Area without task nor fridge keeps the mode without zonesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to lo
⚠️ Tests.Unit.Fridges.FridgeZoneModeTest Task given to a fridge of an area switches to zone mode 0.065s Task given to a fridge of an area switches to zone modeUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log:
⚠️ Tests.Unit.Fridges.FridgeZoneModeTest National fridge without zone receives nothing in zone mode 0.068s National fridge without zone receives nothing in zone modeUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to l
⚠️ Tests.Unit.Fridges.FridgeZoneModeTest Fridge without zone receives nothing once one zone counts 0.072s Fridge without zone receives nothing once one zone countsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to lo
⚠️ Tests.Unit.Fridges.FridgeZoneModeTest Switched off area does not count and its fridges receive nothing 0.061s Switched off area does not count and its fridges receive nothingUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attemptin
⚠️ Tests.Unit.Fridges.FridgeZoneModeTest Area under a switched off parent is switched off 0.065s Area under a switched off parent is switched offUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Task
⚠️ Tests.Unit.Fridges.FridgeZoneModeTest Area with task but without fridge keeps the mode without zones 0.071s Area with task but without fridge keeps the mode without zonesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting
⚠️ Tests.Unit.Fridges.FridgeZoneModeTest Filled record of an ended window is retired and stays in the history 0.062s Filled record of an ended window is retired and stays in the historyUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attem
⚠️ Tests.Unit.Fridges.FridgeZoneModeTest Task generator service applies the same rule 0.056s Task generator service applies the same ruleUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGene
⚠️ Tests.Unit.Fridges.FridgeZoneModeTest Regenerating a past day keeps its records 0.058s Regenerating a past day keeps its recordsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerat
✅ Tests.Unit.Http.Middleware.CorsMiddlewareTest Reflects localhost 5200 on sync tablet for hot reload 0.004s
✅ 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.008s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest countAlertsGroupedByLogger groups sent SMS-triggering alerts by logger, across restaurants 9.284s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest generate identifies only the logger above the threshold and reaches a conclusion for it 8.932s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest generate excludes CIRL restaurants by default and includes them with withCirl 8.875s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest generate with onlyCirl keeps CIRL restaurants and drops the others 8.979s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest generate includes a logger below the alert threshold when SMS volume exceeds it 8.787s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest diagnoseLogger sets peakAlertDay to the day with the most alerts 9.283s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest diagnoseLogger sets peakAlertDay to the earliest day when two days tie 9.071s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest diagnoseLogger ignores alert_sent=false events when computing peakAlertDay 9.339s
✅ Tests.Unit.Loggers.AlertOptimizationReportServiceTest generate excludes a logger below the alert threshold when events have no SMS recipient 9.370s
✅ Tests.Unit.Loggers.ContactsSnapshotBuilderTest snapshot marks all channels active with empty skipped_reason 10.014s
✅ Tests.Unit.Loggers.ContactsSnapshotBuilderTest snapshot marks contact in closed dates with skipped_reason closed_dates 9.580s
✅ Tests.Unit.Loggers.ContactsSnapshotBuilderTest snapshot marks inactive channels and nc alerts with distinct skipped_reason 9.032s
✅ 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" 9.032s
✅ 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 9.682s
✅ Tests.Unit.Loggers.DizzyEndedTempOngoingSuppressionTest temp_ongoing dizzy_ended is sent when no notification has fired since the active issue started 9.589s
✅ Tests.Unit.Loggers.DizzyEndedTempOngoingSuppressionTest temp_ongoing dizzy_ended stays suppressed across repeated flaps even when no temperature_issue event was ever recorded 9.378s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailCopyTest period expected points cover dizzy started to now not a near-zero duration 0.046s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailCopyTest dizzy issue mail context uses reception-period counts since dizzy started 0.058s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailCopyTest dizzy temperature issue mail keeps period ratio on first sentence and window on temperatures 0.048s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest chart svg renders a polyline for multiple temperature points 0.051s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest chart svg is empty with fewer than two points 0.050s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest mail context builder exposes dizzy period stats 0.058s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest mail context builder exposes compliant since for back to normal 0.062s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest mail context builder uses window scope for dizzy back to normal with started 0.062s
✅ 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.048s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended stats include ignored logs like the chart 0.058s
✅ 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.050s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended temp appeared exposes anomaly started at from reference log 0.050s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended period start uses sliding window when dizzy started is more recent 0.052s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended mail context uses recap ended_at instead of now for stats and chart 0.049s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueRepeatSuppressionTest dizzy_temperature_issue is not re-sent on a repeat flap while an alert is already active 9.393s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueRepeatSuppressionTest dizzy_temperature_issue is sent when no alert is currently active and a 2nd reading already confirms it 8.519s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueRepeatSuppressionTest dizzy_temperature_issue is deferred when only one reading has been received 8.674s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueRepeatSuppressionTest a deferred dizzy_temperature_issue is sent once a second reading confirms it 9.058s
✅ Tests.Unit.Loggers.ExclusionWindowOptimizerTest optimize recommends an exclusion window when a recurring daily block would be suppressed by it 12.178s
✅ Tests.Unit.Loggers.ExclusionWindowOptimizerTest optimize returns null when there are too few alerts to find a candidate window 8.411s
✅ Tests.Unit.Loggers.ExclusionWindowOptimizerTest optimize returns null when the baseline has no episodes to begin with 8.793s
✅ 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.044s
✅ 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.044s
✅ 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.042s
✅ 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.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest un cutoff trop récent (bug de calcul) déclenche le garde-fou 0.042s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest monthsToKeepForEnvironment : 3 en production, 2 ailleurs 0.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest rangesByName : la première partition (p_old) part de 0, chaque suivante part de la borne précédente 0.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest rangesByName : après purge, la première partition restante est bornée à son mois nominal, pas à 0 0.046s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest nominalLowerBound : début du mois pour p_YYYY_MM, null pour p_old, exception si incohérent 0.046s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest timescaleHasEnoughData : bloque si timescale a nettement moins de lignes que mysql sur la période 0.049s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest timescaleHasEnoughData : seuil absolu, un écart de 1% sur un gros volume bloque 0.046s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest timescaleHasEnoughData : autorise un écart mineur (dédup connue) et l'égalité stricte 0.046s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest timescaleHasEnoughData : timescale plus fourni que mysql ne bloque jamais 0.045s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest recordedAtWindow : borne recorded_at avec 1 jour de marge de chaque côté 0.045s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest recordedAtWindow : pas de borne haute pour une partition MAXVALUE 0.044s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest reporting() stays on mysql when TSDB_READ_ENABLED is off 0.050s
✅ 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.053s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest the default (bare) query builder is unaffected by the flag 0.047s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest eager-loaded relations stay on mysql even when the parent is queried on timescale 0.050s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest the self-referential logAlertSend relation is unaffected (already pinned to mysql on its own) 0.046s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest relations are left alone when the parent stays on mysql 0.044s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest whereBetween on timestamp mirrors recorded_at with a 1 day safety margin on timescale 0.046s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest whereBetween on timestamp is left untouched on mysql 0.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest a lower-bound where on timestamp mirrors recorded_at on timescale 0.043s
✅ 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.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest a where on a column other than timestamp is left untouched on timescale 0.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest does nothing when sync is disabled 0.047s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest does nothing when the benchmark override targets timescale as the primary connection 0.043s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest does nothing when the log has no id yet 0.044s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest does nothing when the log has no recorded_at 0.045s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest upserts the log into timescale with matching bindings when enabled 0.047s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest catches a failed upsert and logs it instead of breaking the caller 0.046s
✅ Tests.Unit.Loggers.FridgeLoggerPdfChartBuilderTest pdf day windows cover each restaurant-local day of the period 0.046s
✅ 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 26.363s
✅ Tests.Unit.Loggers.FridgeLoggerRefactorBenchmarkTest Query profiler classifies sql 9.366s
✅ Tests.Unit.Loggers.HistoryDataControllerSopalogTest grouped by day: totals, anomalies and comments match the seeded rows 9.758s
✅ Tests.Unit.Loggers.HistoryDataControllerSopalogTest grouped by day and logger: per-logger temperature stats and area fallback 9.472s
✅ Tests.Unit.Loggers.HistoryDataControllerSopalogTest conformity filter keeps only days with an anomaly 9.344s
✅ Tests.Unit.Loggers.HistoryDataControllerSopalogTest conformity filter set to confirmed keeps only days without anomaly 9.437s
✅ Tests.Unit.Loggers.HistoryDataControllerSopalogTest comments filter keeps only days with a comment 9.070s
✅ Tests.Unit.Loggers.HistoryDataControllerSopalogTest ungrouped mode aggregates the whole period into a single bucket 9.221s
✅ Tests.Unit.Loggers.LogAnnotatorTest ignored out-of-range logs keep a physical snapshot without joining the alert streak 0.051s
✅ Tests.Unit.Loggers.LogAnnotatorTest ignored in-range logs stay at zero counters 0.050s
✅ Tests.Unit.Loggers.LogAnnotatorTest ignored out-of-range logs do not continue the live alerting streak 0.049s
✅ 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.051s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter filters out contacts without nc alerts subscription 0.048s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter shows contact name only without email or phone 0.047s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter labels contact exclusion as exclusion alertes capteurs 0.048s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest generatesMailOrSms excludes dizzy_started 0.050s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest generatesMailOrSms excludes dizzy_ended without mail variant 0.046s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest generatesMailOrSms includes dizzy_ended with mail variant or alert_sent 0.045s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest generatesMailOrSms includes temperature issue 0.046s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter labels temperature issue after dizzy ended 0.052s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest appearsInAlertHistory includes dizzy_started without notification 0.046s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest appearsInAlertHistory includes dizzy ended without variant 0.045s
✅ 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.047s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest formatSentAlertLinesForLog shows sms and email lines with contacts 0.046s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest formatSentAlertLinesForLog shows only sms when email was not sent 0.045s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest formatSentAlertLinesForLog returns empty when no sent events exist for log 0.045s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers use linked log coordinates 0.054s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers use timestamp when recorded_at is shifted 0.047s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers style back to normal with green checkmark 0.045s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers style dizzy ended temp resolved like back to normal 0.045s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers style dizzy ended recap as black icon on white 0.046s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers skip dizzy ended temp appeared 0.046s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers skip events without mail or sms 0.047s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest alert marker style uses grey for unsent alerts 0.046s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest dizzy ended temp appeared is excluded from chart 0.046s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest dizzy ended with prior alerts uses white recap style 0.046s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest icon char from class returns utf8 glyph 0.048s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest date bounds for a martinique day start at local midnight 0.054s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest day bounds from paris morning timestamp stay on the martinique calendar day 0.048s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest mysql utc offset for martinique is minus four hours 0.046s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest invalid timezone falls back to app timezone 0.051s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest formatHi converts a utc carbon to the restaurant clock 0.049s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest chart axis labels add the date at the start when the window spans two days 0.047s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest apply to logs sets display timezone used by measurement at 0.048s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest calendar period bounds keep paris dates identical for europe/paris 0.049s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest calendar period bounds reinterpret a paris day as martinique midnight 0.048s
✅ 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.052s
✅ Tests.Unit.Loggers.LoggerTemperatureChartPngRendererTest png chart is empty with fewer than two points 0.053s
✅ Tests.Unit.Loggers.LoggerTemperatureChartPngRendererTest png chart renders a valid PNG at the requested size for multiple points 0.055s
✅ Tests.Unit.Loggers.LoggerTemperatureChartPngRendererTest png chart stroke is dark rather than white 0.059s
✅ Tests.Unit.Loggers.LoggerTemperatureChartPngRendererTest png chart keeps the last temperature label inside the canvas 0.064s
✅ Tests.Unit.Loggers.LoggerTemperatureChartPurgerTest purge removes only day directories older than the retention window 0.049s
✅ 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.049s
✅ Tests.Unit.Loggers.LoggerTemperatureChartSvgRendererTest fridge logger log chart axis uses timestamp not recorded_at 0.047s
✅ Tests.Unit.Loggers.LoggerTemperatureChartSvgRendererTest svg chart axis labels use restaurant timezone not utc 0.047s
✅ Tests.Unit.Loggers.LoggerTemperatureChartSvgRendererTest chart axis uses restaurant timezone when provided 0.047s
✅ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest skips a logger whose last_log_id is already at or after until 9.140s
✅ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest processes a logger whose last_log_id is stale relative to until 9.053s
✅ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest skips a logger already caught up to until when no newer data arrived (re-run with same --until) 9.168s
✅ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest processes a logger with no prior last_log_id 8.997s
✅ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest processes a logger with a legacy last_log_id but no last_event yet 9.007s
✅ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest cutoff relies on the reading timestamp, not created_at 9.538s
✅ Tests.Unit.Loggers.NoDataAlertCoordinatorTest applyReconnectContext flags pending no data alert 9.519s
✅ Tests.Unit.Loggers.NoDataAlertCoordinatorTest resolveViaTemperatureReconnect clears flags and records merged resolution event 9.039s
✅ Tests.Unit.Loggers.ReceptionQualityAnalyzerTest classify returns category D for a clean, regular cadence multiple of 10 min 8.970s
✅ Tests.Unit.Loggers.ReceptionQualityAnalyzerTest classify returns category E when alerts fire on windows with low data completeness 8.617s
✅ Tests.Unit.Loggers.ReceptionQualityAnalyzerTest classify returns null for a normal, well-received sensor 8.586s
✅ 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.052s
✅ 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.048s
✅ Tests.Unit.Loggers.SmsPhoneDeduplicationTest prepareMessage only rewrites chars outside gsm7 when longer than 70 0.049s
✅ Tests.Unit.Loggers.SmsPhoneDeduplicationTest prepareMessage leaves real french donnees with e acute unchanged 0.046s
✅ Tests.Unit.Loggers.SopalogBrokerIsDateInClosedDatesTest Normal range hour inside returns true 0.002s
✅ 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.047s
✅ 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.046s
✅ 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.213s
✅ Tests.Unit.Loggers.TemperatureIssueContextTest deferred issue without resolution stays pending 10.125s
✅ Tests.Unit.Loggers.TemperatureIssueContextTest isTempOngoingAlreadyNotified is true right after a temp_ongoing dizzy_ended was sent 10.915s
✅ Tests.Unit.Loggers.TemperatureIssueContextTest isTempOngoingAlreadyNotified is false once a resolution happened after the last dizzy_ended 9.565s
✅ Tests.Unit.Loggers.TemperatureIssueContextTest isTempOngoingAlreadyNotified is false when no dizzy_ended has fired yet 9.431s
✅ Tests.Unit.Loggers.TemperatureReminderEvaluatorTest reminder is not sent in the same batch as a fresh temperature issue 9.082s
✅ Tests.Unit.Loggers.TemperatureReminderEvaluatorTest reminder uses the latest issue after context refresh 9.080s
✅ Tests.Unit.Loggers.TemperatureReminderEvaluatorTest reminder is sent two hours after the active issue 10.560s
✅ Tests.Unit.Loggers.TemperatureReminderEvaluatorTest pending temperature issue suppressed by dizzy ended is never sent later 10.501s
✅ 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.466s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize recommends only category B when both thresholds must move to resolve most alerts 10.299s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize recommends only category C when the alerts are short excursions unaffected by threshold changes 9.650s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize surfaces both a threshold option and a duration option when both are independently viable 9.061s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize returns an empty list when there is nothing worth changing 10.531s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize surfaces +1°C and +2°C when the larger step reduces alerts much more 10.532s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize keeps only +1°C when +2°C barely improves further 10.054s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize keeps only +2°C when +1°C does not reduce alerts enough 9.029s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize surfaces +10 min and +20 min when the larger step reduces alerts much more 9.289s
✅ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize keeps only +10 min when +20 min barely improves further 9.104s
✅ Tests.Unit.Loggers.TimeClusteringAnalyzerTest findBestWindow finds a <=4h window covering more than 80% of the alerts 8.954s
✅ Tests.Unit.Loggers.TimeClusteringAnalyzerTest findBestWindow handles a window wrapping past midnight 9.632s
✅ Tests.Unit.Loggers.TimeClusteringAnalyzerTest findBestWindow returns a low-coverage window when alerts are spread evenly across the day 9.184s
✅ Tests.Unit.Loggers.TimeClusteringAnalyzerTest findBestWindow returns null when there are too few alerts to be meaningful 9.392s
✅ Tests.Unit.Loggers.WindowStateReplaySimulatorTest analyzeWindow matches TemperatureWindowAnalyzer::analyze() for the same logs and config 9.703s
✅ Tests.Unit.Loggers.WindowStateReplaySimulatorTest countIssueEpisodes counts one episode per sustained out-of-limits block 8.724s
✅ Tests.Unit.Loggers.WindowStateReplaySimulatorTest countIssueEpisodes counts a fresh episode after a full recovery in between 8.999s
✅ Tests.Unit.Loggers.WindowStateReplaySimulatorTest countIssueEpisodes returns 0 when nothing ever leaves the stable_ok state 10.596s
✅ Tests.Unit.Mail.MailPitTagsTest adds X-Tags header when mailpit_tags is configured 0.058s
✅ Tests.Unit.Mail.MailPitTagsTest does nothing when mailpit_tags is empty 0.045s
✅ Tests.Unit.Mail.MailPitTagsTest does not overwrite an existing X-Tags header 0.050s
✅ Tests.Unit.Mail.MailSimulatedTimestampTest sets mail date header from carbon test now 0.049s
✅ Tests.Unit.Mail.MailSimulatedTimestampTest does nothing when carbon test now is not set 0.044s
✅ Tests.Unit.Mail.MailSimulatedTimestampTest can prefix subject when LOGGER_MAIL_SUBJECT_SIMULATED_TIME is enabled 0.044s
✅ 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.001s
✅ 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.051s
✅ Tests.Unit.Routing.ModuleCsrfCoverageTest The module csrf verifier has no exemption 0.048s
✅ 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.050s
✅ Tests.Unit.Support.SafeSerializeTest Une valeur abimee rend null sans lever d erreur 0.049s
✅ Tests.Unit.Support.SafeSerializeTest Une valeur tronquee rend null sans lever d erreur 0.046s
✅ Tests.Unit.Support.SafeSerializeTest False serialise n est pas pris pour une erreur 0.046s
✅ Tests.Unit.Support.SafeSerializeTest Serialize retire les emojis meme imbriques 0.045s
✅ Tests.Unit.Support.SafeSerializeTest Serialize garde les caracteres sur trois octets 0.046s
✅ Tests.Unit.Support.SafeSerializeTest Serialize laisse les non chaines intactes 0.047s
✅ Tests.Unit.Support.SafeSerializeTest Serialize rend null plutot que lever sur une valeur non serialisable 0.045s
✅ Tests.Unit.Support.SafeSerializeTest Strip non bmp filtre aussi une chaine utf8 invalide 0.048s
✅ 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.052s
✅ Tests.Unit.Support.SafeSerializeTest Une valeur saine n ecrit rien dans le log 0.045s
✅ Tests.Unit.Support.SafeSerializeTest Vide ou non chaine rend null 0.045s
✅ Tests.Unit.Support.SerializedColumnsModelsTest ExtraActions abime rend null sans lever 0.053s
✅ Tests.Unit.Support.SerializedColumnsModelsTest Icon titles abime rend un tableau vide sans lever 0.049s
✅ Tests.Unit.Support.SerializedColumnsModelsTest Icon titles sain est rendu tel quel 0.045s
✅ Tests.Unit.Support.SerializedColumnsModelsTest ExtraActions est ecrit sans emoji 0.044s
✅ Tests.Unit.Support.SerializedColumnsModelsTest Icon titles est ecrit sans emoji sur les deux modeles 0.045s
✅ Tests.Unit.Support.SerializedColumnsModelsTest Icon titles vide rend toujours un tableau vide 0.046s
⚠️ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Day creates audit record and action tasks 0.255s Day creates audit record and action tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerat
⚠️ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Week period 0.232s Week periodUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=command resto
⚠️ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Month period 0.231s Month periodUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=command rest
⚠️ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Year period 0.235s Year periodUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=command resto
⚠️ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Trimester period 0.233s Trimester periodUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=command
⚠️ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Semester period 0.232s Semester periodUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=command r
⚠️ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Finished creates record without valid until and far future tasks 0.230s Finished creates record without valid until and far future tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attemptin
⚠️ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Idempotent second run 0.232s Idempotent second runUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=com
⚠️ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Client audits disabled skips action tasks 0.238s Client audits disabled skips action tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerat
⚠️ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Local override action active zero skips that action 0.236s Local override action active zero skips that actionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##T
⚠️ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Inactive audit skips 0.223s Inactive audit skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=comm
⚠️ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Restaurant closed skips 0.242s Restaurant closed skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=c
⚠️ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Multiple actions create multiple tasks 0.239s Multiple actions create multiple tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGeneration
⚠️ Tests.Unit.TaskGeneration.AuditTaskGenerationTest National audit for family restaurant 0.229s National audit for family restaurantUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationEr
⚠️ Tests.Unit.TaskGeneration.AuditTaskGenerationTest Artisan family option 0.228s Artisan family optionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=com
⚠️ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Day period generates 0.229s Day period generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=comm
⚠️ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Week period generates 0.226s Week period generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=com
⚠️ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Month period generates 0.227s Month period generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=co
⚠️ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Year period generates 0.230s Year period generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=com
⚠️ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Custom period with start and end date 0.230s Custom period with start and end dateUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationE
⚠️ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Custom period outside window skips 0.228s Custom period outside window skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationErro
⚠️ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Idempotent second run 0.228s Idempotent second runUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=com
⚠️ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Local override active zero skips 0.226s Local override active zero skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError
⚠️ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Inactive checklist skips 0.225s Inactive checklist skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=
⚠️ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Inactive action skips 0.228s Inactive action skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=com
⚠️ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Restaurant closed skips 0.226s Restaurant closed skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=c
⚠️ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest National checklist for family restaurant 0.227s National checklist for family restaurantUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerati
⚠️ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Action filter via artisan 0.225s Action filter via artisanUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger
⚠️ Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest Week period idempotent within week 0.228s Week period idempotent within weekUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationErro
⚠️ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Day period generates 0.234s Day period generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=comm
⚠️ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Week period generates 0.230s Week period generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=com
⚠️ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Month period generates 0.227s Month period generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=co
⚠️ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Year period generates 0.231s Year period generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=com
⚠️ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Idempotent second run 0.227s Idempotent second runUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=com
⚠️ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Family parameters skip national when values without national 0.227s Family parameters skip national when values without nationalUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to
⚠️ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Family parameters skip local when values without local 0.227s Family parameters skip local when values without localUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log:
⚠️ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Inactive action skips 0.228s Inactive action skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=com
⚠️ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Restaurant closed skips 0.224s Restaurant closed skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=c
⚠️ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Week period idempotent within week 0.229s Week period idempotent within weekUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationErro
⚠️ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Artisan family option 0.226s Artisan family optionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=com
⚠️ Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest Both national and local when family allows both 0.238s Both national and local when family allows bothUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskG
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Day action generates 0.232s Day action generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=comm
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Idempotent second run 0.227s Idempotent second runUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=com
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Week period generates 0.222s Week period generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=gen
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Month period generates 0.221s Month period generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=ge
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Year period generates 0.227s Year period generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=gen
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Always creates open task and is idempotent while undone and valid 0.224s Always creates open task and is idempotent while undone and validUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempti
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Always with expirations days 0.221s Always with expirations daysUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trig
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Always catch up outside action days when expirations set 0.226s Always catch up outside action days when expirations setUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Frequency greater than one creates n indexed tasks 0.228s Frequency greater than one creates n indexed tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Ta
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Frequency migration from one to n reuses existing as main 0.224s Frequency migration from one to n reuses existing as mainUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to lo
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Closed restaurant via date skips 0.221s Closed restaurant via date skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Full day week closure skips day slot 0.220s Full day week closure skips day slotUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationEr
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Partial week closure covering start end skips 0.223s Partial week closure covering start end skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGen
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Nat plan disabled via client cleaning plan areas disabled 0.227s Nat plan disabled via client cleaning plan areas disabledUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to lo
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Nat action disabled via client cleaning plan actions disabled 0.228s Nat action disabled via client cleaning plan actions disabledUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting t
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Local override active zero skips national action 0.220s Local override active zero skips national actionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Task
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Only action id filter 0.228s Only action id filterUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=com
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Days filter skips when not matching 0.222s Days filter skips when not matchingUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationErr
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Months filter skips when not matching 0.219s Months filter skips when not matchingUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationE
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Days filter does not skip always with expirations 0.224s Days filter does not skip always with expirationsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Tas
⚠️ Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest Service and artisan paths agree for day action 0.226s Service and artisan paths agree for day actionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGe
⚠️ Tests.Unit.TaskGeneration.CloseStaleAuditsCommandTest Command closes stale audit on inactive restaurant only 0.413s Command closes stale audit on inactive restaurant onlyUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskG
✅ Tests.Unit.TaskGeneration.CloseStaleAuditsCommandTest Command dry run leaves data untouched 0.226s
⚠️ Tests.Unit.TaskGeneration.DormantRestaurantsReportCommandTest Dormant report lists active restaurant with no open day 0.400s Dormant report lists active restaurant with no open dayUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: dorman
⚠️ Tests.Unit.TaskGeneration.DormantRestaurantsReportCommandTest Dormant report ignores inactive restaurants 0.235s Dormant report ignores inactive restaurantsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: dormant_restaurant
⚠️ Tests.Unit.TaskGeneration.DormantRestaurantsReportCommandTest Dormant report ignores restaurant with insufficient history 0.237s Dormant report ignores restaurant with insufficient historyUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: do
⚠️ Tests.Unit.TaskGeneration.FridgeKernelDecisionTest Fridge 01 kernel generates within local day only 0.235s Fridge 01 kernel generates within local day onlyUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Task
⚠️ Tests.Unit.TaskGeneration.FridgeKernelDecisionTest Fridge 03 kernel skips when closure covers full task slot 0.219s Fridge 03 kernel skips when closure covers full task slotUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to lo
⚠️ Tests.Unit.TaskGeneration.FridgeKernelDecisionTest Fridge 03 kernel generates when closure only partially overlaps slot 0.224s Fridge 03 kernel generates when closure only partially overlaps slotUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attem
⚠️ Tests.Unit.TaskGeneration.FridgeKernelDecisionTest Fridge 04 task generator skips when family forbids national tasks 0.218s Fridge 04 task generator skips when family forbids national tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempti
⚠️ Tests.Unit.TaskGeneration.FridgeKernelDecisionTest Independent restaurant generates fridge task 0.228s Independent restaurant generates fridge taskUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGene
⚠️ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Generates one record per fridge task day 0.232s Generates one record per fridge task dayUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerati
⚠️ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Idempotent second run creates no duplicate 0.235s Idempotent second run creates no duplicateUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenera
✅ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Inactive restaurant is skipped 0.222s
⚠️ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Restaurant closed via date is skipped 0.228s Restaurant closed via date is skippedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationE
⚠️ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Closed weekday on task skips that day 0.222s Closed weekday on task skips that dayUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationE
⚠️ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Inactive fridge is skipped 0.231s Inactive fridge is skippedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigge
⚠️ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Inactive task is skipped 0.225s Inactive task is skippedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=
⚠️ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Multiple fridges times multiple tasks 0.240s Multiple fridges times multiple tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationE
⚠️ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest National task with local fridge 0.252s National task with local fridgeUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError t
⚠️ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest National fridge with local task 0.230s National fridge with local taskUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError t
⚠️ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Generate via family option 0.229s Generate via family optionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigge
⚠️ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Generate all via family helper runs fridge 0.230s Generate all via family helper runs fridgeUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenera
⚠️ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Overnight start after end still generates 0.228s Overnight start after end still generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerat
⚠️ Tests.Unit.TaskGeneration.FridgeTaskGenerationTest Timezone europe paris 0.235s Timezone europe parisUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=com
⚠️ Tests.Unit.TaskGeneration.KernelCallbackCoverageTest Kernel service temperature generates and is idempotent 0.241s Kernel service temperature generates and is idempotentUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log:
⚠️ Tests.Unit.TaskGeneration.KernelCallbackCoverageTest Kernel pnd delegates to task generator service 0.239s Kernel pnd delegates to task generator serviceUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGe
⚠️ Tests.Unit.TaskGeneration.KernelCallbackCoverageTest Kernel audit creates record and is idempotent 0.241s Kernel audit creates record and is idempotentUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGen
⚠️ Tests.Unit.TaskGeneration.KernelCallbackCoverageTest Kernel cpa creates task and is idempotent 0.220s Kernel cpa creates task and is idempotentUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerat
✅ Tests.Unit.TaskGeneration.KernelCallbackCoverageTest Kernel open close history purges unfinished fridge for closed yesterday 0.231s
⚠️ Tests.Unit.TaskGeneration.KernelCommandDivergenceTest Fridge 03 kernel and command both skip on full slot closure 0.227s Fridge 03 kernel and command both skip on full slot closureUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to
⚠️ Tests.Unit.TaskGeneration.KernelCommandDivergenceTest Cl 02 day checklist both paths skip on full day week closure 0.223s Cl 02 day checklist both paths skip on full day week closureUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to
⚠️ Tests.Unit.TaskGeneration.KernelCommandDivergenceTest Checklist partial slot closure both paths generate 0.222s Checklist partial slot closure both paths generateUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Ta
⚠️ Tests.Unit.TaskGeneration.LegacyRetirementCheckCommandTest Reports not ready when active restaurant is not canary 0.223s Reports not ready when active restaurant is not canaryUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: legacy_
⚠️ Tests.Unit.TaskGeneration.LegacyRetirementCheckCommandTest Reports not ready when a reconcile probe is saturated 0.228s Reports not ready when a reconcile probe is saturatedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: legacy_r
⚠️ Tests.Unit.TaskGeneration.LegacyRetirementCheckCommandTest Reports ready when all conditions are met 0.225s Reports ready when all conditions are metUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: legacy_retirement_ch
✅ Tests.Unit.TaskGeneration.LockRenewalTest Renew extends expiry for matching owner 0.229s
✅ Tests.Unit.TaskGeneration.LockRenewalTest Renew is noop when owner does not match 0.222s
⚠️ Tests.Unit.TaskGeneration.LockRenewalTest Fridge generator renews lock while processing several tasks 0.228s Fridge generator renews lock while processing several tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to
⚠️ Tests.Unit.TaskGeneration.LockRenewalTest Pnd generator never renews lock mid transaction 0.221s Pnd generator never renews lock mid transactionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskG
⚠️ Tests.Unit.TaskGeneration.LockRenewalTest Pnd lock ttl scales with restaurant task volume 0.226s Pnd lock ttl scales with restaurant task volumeUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskG
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Soft deleted fridge is skipped by command 0.229s Soft deleted fridge is skipped by commandUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerat
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Soft deleted fridge task is skipped by command 0.222s Soft deleted fridge task is skipped by commandUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGe
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Minimum records is copied onto task day 0.225s Minimum records is copied onto task dayUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGeneratio
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest National st task shared by two restaurants creates task days per area 0.387s National st task shared by two restaurants creates task days per areaUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while atte
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Adding area mid period creates additional task day 0.223s Adding area mid period creates additional task dayUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Ta
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest St family params skip national via task generator 0.216s St family params skip national via task generatorUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Tas
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Lock area on parent with child creates task day on parent id quirk 0.272s Lock area on parent with child creates task day on parent id quirkUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Pnd month frequency sets period start and end from periods 0.221s Pnd month frequency sets period start and end from periodsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to l
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Pnd period change on existing task is updated 0.221s Pnd period change on existing task is updatedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGen
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Pnd valid until pulled back to last open day 0.225s Pnd valid until pulled back to last open dayUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGene
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Pnd inactive parent plan excludes child plan actions 0.220s Pnd inactive parent plan excludes child plan actionsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Pnd dry run creates no persisted tasks 0.227s Pnd dry run creates no persisted tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGeneration
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Checklist kernel skips day when full day week closure 0.228s Checklist kernel skips day when full day week closureUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: #
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Checklist day creates new task on next day via kernel 0.217s Checklist day creates new task on next day via kernelUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: #
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Soft deleted checklist is skipped 0.227s Soft deleted checklist is skippedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Checklist family params skip national via task generator 0.220s Checklist family params skip national via task generatorUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Audit custom outside window skips 0.227s Audit custom outside window skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Audit custom inside window generates 0.229s Audit custom inside window generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationEr
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Audit expired current record is closed before new period 0.231s Audit expired current record is closed before new periodUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Audit adds missing action tasks on existing record 0.237s Audit adds missing action tasks on existing recordUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Ta
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Audit family params skip national via task generator 0.238s Audit family params skip national via task generatorUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Cpa fully closed period skipped via task generator 0.217s Cpa fully closed period skipped via task generatorUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Ta
⚠️ Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest Cpa next week creates new task via command 0.224s Cpa next week creates new task via commandUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenera
❌ Tests.Unit.TaskGeneration.NewRestaurantCanaryEnrollmentTest New restaurant created via eloquent is enrolled in canary mode 0.272s New restaurant created via eloquent is enrolled in canary modeUn restaurant créé via Eloquent doit être automatiquement enrôlé en mode canary. Failed asserting that false is true. at tests/Unit/TaskGeneration/NewRestaurantCanaryEnrollmentTest.php:84
⚠️ Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest Fridge day creates new record on next calendar day via kernel 0.223s Fridge day creates new record on next calendar day via kernelUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting t
⚠️ Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest Pnd week creates new task on following week 0.219s Pnd week creates new task on following weekUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGener
⚠️ Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest Pnd always creates new open task after expiration 0.221s Pnd always creates new open task after expirationUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Tas
⚠️ Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest Kernel respects restaurant timezone for local day 0.225s Kernel respects restaurant timezone for local dayUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Tas
⚠️ Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest Two restaurants different timezones in same kernel chunk 0.383s Two restaurants different timezones in same kernel chunkUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log
⚠️ Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest Task generator skips when lock already held 0.219s Task generator skips when lock already heldUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: lock.contention Co
⚠️ Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest Open close fix backfills fridge created at on past date 0.232s Open close fix backfills fridge created at on past dateUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log:
⚠️ Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest Open close fix skips modules not selected 0.230s Open close fix skips modules not selectedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerat
⚠️ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Two rapid requests merge versions not rows 0.222s Two rapid requests merge versions not rowsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenera
⚠️ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Action scoped request does not merge with full module 0.216s Action scoped request does not merge with full moduleUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: #
⚠️ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Lost wake up keeps request pending 0.218s Lost wake up keeps request pendingUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationErro
⚠️ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Db lock contention defers second owner 0.222s Db lock contention defers second ownerUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: lock.contention Context
⚠️ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Run now returns null modules when lock busy 0.216s Run now returns null modules when lock busyUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: lock.contention Co
✅ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Compute next task generation at uses local timezone not plus 24h 0.223s
⚠️ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Request family filters to canary when canary exists 0.286s Request family filters to canary when canary existsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##T
⚠️ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Canary dual coverage idempotent single fridge record 0.232s Canary dual coverage idempotent single fridge recordUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##
⚠️ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Pnd sync lock busy schedules reactive retry job 0.227s Pnd sync lock busy schedules reactive retry jobUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: lock.contentio
⚠️ Tests.Unit.TaskGeneration.PhaseETriggerSystemTest Run now lock per module allows partial success 0.217s Run now lock per module allows partial successUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: lock.contention
⚠️ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile ignores pnd always backlog when valid open successor exists 0.224s Reconcile ignores pnd always backlog when valid open successor existsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while atte
⚠️ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile enqueues pnd always when no open successor exists 0.226s Reconcile enqueues pnd always when no open successor existsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to
⚠️ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile still enqueues audit current expired for active restaurant 0.227s Reconcile still enqueues audit current expired for active restaurantUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attem
⚠️ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile closes audit current expired as not done for inactive restaurant 0.228s Reconcile closes audit current expired as not done for inactive restaurantUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while
⚠️ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile dry run does not close stale audit on inactive restaurant 0.229s Reconcile dry run does not close stale audit on inactive restaurantUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attemp
⚠️ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile closes active restaurant audit immediately even when closed 0.230s Reconcile closes active restaurant audit immediately even when closedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while atte
⚠️ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile dry run does not close active restaurant audit 0.227s Reconcile dry run does not close active restaurant auditUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log
⚠️ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile skips pnd enqueue for closed restaurant 0.233s Reconcile skips pnd enqueue for closed restaurantUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Tas
⚠️ Tests.Unit.TaskGeneration.ReconcileCommandTest Reconcile tracks and resets probe saturation streak 0.232s Reconcile tracks and resets probe saturation streakUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##T
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest Deletes unfinished fridge records for period 0.227s
⚠️ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest Keeps done cleaning plan tasks 0.224s Keeps done cleaning plan tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError tr
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest Process for record is idempotent via tasks processed 0.230s
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest Process for record open day marks processed without deleting 0.223s
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest Closing one restaurant does not purge national service temperature task days 0.387s
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest Closing restaurant purges local service temperature task days 0.225s
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest Monday week purge when restaurant closed all week 0.235s
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest First of month month purge when closed all month 0.245s
✅ Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest Close then reopen marks processed without deleting finished fridge 0.228s
❌ Tests.Unit.TaskGeneration.RestaurantReopenTriggerTest Is closed flag cleared triggers full regeneration request 0.233s Is closed flag cleared triggers full regeneration requestModule fridge attendu suite à la réouverture. Failed asserting that an array contains 'fridge'. at tests/Unit/TaskGeneration/RestaurantReopenTriggerTest.php:46
✅ Tests.Unit.TaskGeneration.RestaurantReopenTriggerTest Is closed flag untouched save does not trigger 0.224s
❌ Tests.Unit.TaskGeneration.RestaurantReopenTriggerTest Closed date created triggers regeneration request 0.220s Closed date created triggers regeneration requestFailed asserting that false is true. at tests/Unit/TaskGeneration/RestaurantReopenTriggerTest.php:76
❌ Tests.Unit.TaskGeneration.RestaurantReopenTriggerTest Closed date deleted triggers regeneration request 0.222s Closed date deleted triggers regeneration requestFailed asserting that false is true. at tests/Unit/TaskGeneration/RestaurantReopenTriggerTest.php:99
⚠️ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Without areas creates one task day with null area 0.234s Without areas creates one task day with null areaUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Tas
⚠️ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest With areas creates one task day per area 0.231s With areas creates one task day per areaUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerati
⚠️ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Cleanup deletes task days without area when areas exist 0.230s Cleanup deletes task days without area when areas existUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log:
⚠️ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Cleanup deletes task days with area when no areas 0.233s Cleanup deletes task days with area when no areasUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Tas
⚠️ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Week period uses week window idempotence 0.231s Week period uses week window idempotenceUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerati
⚠️ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Closed weekday on task skips 0.225s Closed weekday on task skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trig
⚠️ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Inactive task skips 0.229s Inactive task skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=comma
⚠️ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Restaurant closed skips 0.228s Restaurant closed skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=c
⚠️ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest National st task for family restaurant 0.228s National st task for family restaurantUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGeneration
⚠️ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Lock fields copied when area is locked 0.229s Lock fields copied when area is lockedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGeneration
⚠️ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Artisan family option 0.231s Artisan family optionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError trigger=com
⚠️ Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest Idempotent day period second run 0.230s Idempotent day period second runUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationError
⚠️ Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest Pnd always sync regeneration creates next open task 0.289s Pnd always sync regeneration creates next open taskUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##T
⚠️ Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest Pnd always sync does not duplicate when open task already exists 0.278s Pnd always sync does not duplicate when open task already existsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attemptin
⚠️ Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest Pnd always service second run idempotent while open task valid 0.228s Pnd always service second run idempotent while open task validUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting
⚠️ Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest Audit finished sync regenerates new current cycle 0.291s Audit finished sync regenerates new current cycleUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##Tas
⚠️ Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest Audit finished regenerate skipped when audit disabled 0.286s Audit finished regenerate skipped when audit disabledUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation_errors-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: #
⚠️ Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest Lock area creates task day when missing 0.276s Lock area creates task day when missingUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ##TaskGenerationRefact
⚠️ Tests.Unit.TaskGeneration.TaskGenerationHealthCommandTest Health json report includes probe streaks 0.058s Health json report includes probe streaksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: health.snapshot Cont
⚠️ Tests.Unit.TaskGeneration.TaskGenerationHealthCommandTest Health console output warns when streak reaches threshold 0.054s Health console output warns when streak reaches thresholdUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: heal
⚠️ Tests.Unit.TaskGeneration.TaskGenerationHealthCommandTest Health console output does not warn below threshold 0.057s Health console output does not warn below thresholdUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-08.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: health.sna
✅ 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.118s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Can update dynamic areas and section fields 0.078s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Rich text validates plain text length not html length 0.069s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Content title validates max string length 0.066s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Home sections title validates max string length 0.060s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Related article title validates max string length on content store 0.081s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Content title validates max string length on content store 0.060s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front renders rich text html unescaped 0.144s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Can search existing tags for backoffice autocomplete 0.062s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Video content draft then publish then toggle from list then delete 0.085s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Document flow with thematics and front visibility 0.092s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front home section and content pages are reachable 0.153s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front content detail displays related articles before similar contents 0.128s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front content detail shows similar contents ordered by shared tags without thematics 0.131s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front content detail fills similar contents with section peers without shared tags 0.132s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front content detail prioritizes same thematic before other similar contents 0.132s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front shows only active and published contents and blocks others 0.150s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front returns 404 for unknown section or unknown content 0.119s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front section without thematics is still reachable without thematic filter bar 0.123s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front section search and thematic filters apply across pagination 0.160s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front section search matches content tags 0.129s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front uses default thumbnail logo when content thumbnail is missing 0.122s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front home does not render sections without slug 0.117s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Youtube url formats are supported on front 0.142s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front access is forbidden when restaurant has no academy access 0.116s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Courses can be created and are visible on front section when upcoming and published 0.126s
✅ App.Modules.Academy.Tests.AcademyModuleFeatureTest Backoffice courses list orders drafts first then published by ascending date 0.067s
✅ 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.008s
✅ 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 10.551s
✅ App.Modules.Alert.Tests.EloquentAlertRepositoryTest Find or create global contact reuses the existing restaurant id zero contact 10.640s
✅ App.Modules.Alert.Tests.EloquentAlertRepositoryTest Find or create global contact does not duplicate on repeated calls 9.660s
✅ 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.049s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Find latest returns null when no token 0.182s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Creates restaurant token with legacy and polymorphic columns 0.163s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Creates client token with legacy and polymorphic columns 0.112s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Find or create is idempotent and creates no duplicate 0.163s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Action is idempotent and returns a 64 char token 0.125s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Existing legacy row without userable is reused 0.142s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Soft deleted row is ignored and a new one is created 0.145s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Most recent non deleted row wins when several exist 0.149s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Tokens are isolated between entities and from other providers 0.283s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Restaurant and client with the same id do not collide on polymorphic columns 0.114s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Creating the token does not interfere with import apis sync 0.174s
✅ App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest Repeated calls within an outer transaction still create a single row 0.152s
✅ App.Modules.Api.OctopusToken.Tests.GenerateOctopusTokenActionTest Generates a 64 char token for a restaurant 0.054s
✅ App.Modules.Api.OctopusToken.Tests.GenerateOctopusTokenActionTest Returns the existing token when already created 0.046s
✅ App.Modules.Api.OctopusToken.Tests.GenerateOctopusTokenActionTest Refuses sub clients 0.049s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Superadmin generates a client token 0.172s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Client token generation is idempotent 0.170s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Sub client is rejected with 422 0.226s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Team member is forbidden on client endpoint 0.182s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Guest is rejected on client endpoint 0.105s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Unknown client returns 404 0.110s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Get is not allowed on the endpoint 0.185s
✅ 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.221s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Soft deleted token is ignored and replaced 0.213s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Team member is forbidden on indep endpoint 0.209s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Guest is rejected on indep endpoint 0.148s
✅ 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.267s
✅ 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.167s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Indep edit form shows the block 28.044s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Indep edit form prefills the existing token 31.083s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Indep create form has no block 28.928s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Indep onboarding edit form has no block 32.341s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Local edit form shows the block and create form does not 0.349s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Client edit form shows the block for main client only 27.090s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Team member does not see the block 0.163s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Generated client token can be used on api login 0.173s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Generated restaurant token can be used on api login 0.227s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest Unknown token is rejected on api login 0.052s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest Block and generate url are rendered 0.056s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest Without token the generate button is visible and the field hidden 0.047s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest With token the field is visible prefilled and generate hidden 0.049s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest Token input is readonly password and has no name attribute 0.048s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest No element of the block carries a name attribute 0.050s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest Ajax call sends csrf header and uses post 0.049s
✅ App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest Token is html escaped 0.054s
✅ App.Modules.Auth.Tests.AuthControllerLogoutTest Central logout route points to destroy under the central prefix 0.054s
✅ App.Modules.Auth.Tests.AuthControllerLogoutTest Central logout logs out the central and its establishment 0.052s
✅ App.Modules.Auth.Tests.AuthControllerLogoutTest Central logout under superpoulpe impersonation also logs out the establishment 0.050s
✅ App.Modules.Auth.Tests.AuthControllerLogoutTest Client logout revokes the establishments opened from its session 0.050s
✅ App.Modules.Auth.Tests.AuthControllerLogoutTest Establishment logout revokes nothing 0.049s
✅ App.Modules.Auth.Tests.AuthGuardTest From entity returns admin for admin model 0.055s
✅ App.Modules.Auth.Tests.AuthGuardTest From entity returns client for client model 0.059s
✅ App.Modules.Auth.Tests.AuthGuardTest From entity returns web for restaurant model 0.067s
✅ App.Modules.Auth.Tests.AuthGuardTest From entity returns central for restaurant central model 0.052s
✅ App.Modules.Auth.Tests.AuthGuardTest From userable type maps all known types 0.050s
✅ App.Modules.Auth.Tests.AuthGuardTest From userable type throws for unknown type 0.049s
✅ App.Modules.Auth.Tests.AuthGuardTest From domain returns admin for superpoulpe domain 0.048s
✅ App.Modules.Auth.Tests.AuthGuardTest From domain returns client for clients domain 0.049s
✅ App.Modules.Auth.Tests.AuthGuardTest From domain returns web for app domain 0.051s
✅ App.Modules.Auth.Tests.AuthGuardTest From domain returns null for unknown domain 0.049s
✅ App.Modules.Auth.Tests.AuthGuardTest From request returns central for app domain with central prefix 0.048s
✅ App.Modules.Auth.Tests.AuthGuardTest From request returns web for app domain without central prefix 0.050s
✅ App.Modules.Auth.Tests.AuthGuardTest From request returns null for unknown domain 0.052s
✅ App.Modules.Auth.Tests.AuthGuardTest Get redirect route name returns expected routes 0.048s
✅ App.Modules.Auth.Tests.AuthGuardTest Model returns correct model class for each guard 0.050s
✅ App.Modules.Auth.Tests.AuthGuardTest Get impersonation entry route name returns null for admin 0.049s
✅ App.Modules.Auth.Tests.AuthGuardTest Get impersonation entry route name returns route for impersonable guards 0.049s
✅ App.Modules.Auth.Tests.AuthGuardTest Is manager space only for client and central 0.048s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate returns null when no users match login 0.132s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate throws inactive when user is inactive 0.104s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate throws inactive when entity is inactive 0.103s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate throws use credentials disabled when sso only 0.111s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate throws password expired when highly secured and expired 0.106s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate does not throw when highly secured password is valid 0.107s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate does not check expiry when not highly secured 0.109s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate skips expiry check when no client 0.125s
✅ 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.052s
✅ App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest Returns false when password does not match 0.049s
✅ App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest Returns false when expired 0.049s
✅ App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest Returns false when no expiry set 0.050s
✅ App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest Consumes and returns true when valid 0.050s
✅ App.Modules.Auth.Tests.CustomSessionLifetimeTest Revoked establishment session is ended 0.050s
✅ App.Modules.Auth.Tests.CustomSessionLifetimeTest Establishment session whose manager is still logged in goes through 0.048s
✅ App.Modules.Auth.Tests.CustomSessionLifetimeTest Revoked layer does not end a central sharing the session 0.050s
✅ App.Modules.Auth.Tests.CustomSessionLifetimeTest Expired manager logout reaches the controller 0.059s
✅ App.Modules.Auth.Tests.CustomSessionLifetimeTest Expired manager on another page is still logged out 0.066s
✅ App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest Policy applies to the main client that enables it 0.051s
✅ App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest Child client uses its parent policy 0.049s
✅ App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest Policy applies to a restaurant attached to a secured client 0.052s
✅ App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest Policy does not apply to a restaurant whose client disabled it 0.048s
✅ App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest Policy does not apply to an independent restaurant 0.049s
✅ App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest Rules include required confirmation and fifteen character minimum 0.046s
✅ 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.047s
✅ App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest Other security requirements are unchanged 0.049s
✅ 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.051s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Consume token accepts token exactly at ttl boundary 0.050s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Is impersonating returns false when no session 0.054s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Start impersonation pushes layer to stack 0.047s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Start impersonation supports multi level stack 0.047s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Start impersonation with parent stack uses parent as base 0.050s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Current layer returns null when not impersonating 0.048s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Leave pops top layer and returns return url 0.050s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Leave clears legacy session keys 0.050s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Leave in multi level stack keeps remaining layers 0.049s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Leave without stack falls back to app login route 0.048s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Generate impersonation url tags it with a stable impersonator session key 0.050s
✅ 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.051s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Is not revoked by the logout of another impersonator session 0.051s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Impersonation started after the logout from the same session is not revoked 0.052s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Revocation cache failure does not block the logout 0.051s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Layer without impersonator session key is never revoked 0.050s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Client constraints use client type and own id 0.055s
✅ 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.049s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Restaurant constraints exclude admin role 0.048s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Central constraints match username as email 0.048s
✅ 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.048s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Execute logs in resolved user and returns auth redirect 0.049s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Execute never calls login with a raw entity 0.050s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate throws invalid when login token not found 0.053s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate via password returns restaurant when credentials match 0.065s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate throws invalid when all credential paths fail 0.057s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate via temp password succeeds when not expired 0.066s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate via temp password throws invalid when expired 0.056s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate throws inactive when restaurant is inactive 0.050s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate throws password expired when highly secured and expired 0.050s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate succeeds without client 0.054s
✅ 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.048s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Client changed recently returns valid 0.053s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Client within 7 days of expiry returns expiring soon 0.050s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Client past 180 days returns expired 0.049s
✅ 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.049s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant never changed password returns expired 0.056s
✅ 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.052s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant past 180 days returns expired 0.053s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant tablet out of sync returns password change required 0.060s
✅ 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.053s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Generate reset token returns 64 char hex string 0.047s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Validate token returns true when token matches and not expired 0.047s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Validate token returns false when token does not match 0.047s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Validate token returns false when token is expired 0.048s
✅ 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.159s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Issue reset token always stores on restaurant for authenticate middleware 0.052s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Issue reset token mirrors on admin user when present 0.050s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Validate reset token uses restaurant admin email code 0.048s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Validate reset token rejects expired code 0.050s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Consume reset token updates restaurant when no admin user 0.153s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Consume reset token syncs admin user and restaurant 0.207s
✅ 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.045s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Verify password accepts restaurant admin password without admin user 0.202s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Verify password ignores admin user with empty password hash 0.218s
✅ App.Modules.Auth.Tests.SendPasswordExpiredResetLinkActionTest Sends via users broker for restaurant 0.074s
✅ App.Modules.Auth.Tests.SendPasswordExpiredResetLinkActionTest Sends via clients broker for client 0.052s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Create conversation throws when no participant is selected 0.050s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Update conversation throws when not found 0.048s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Update conversation throws when wrong restaurant 0.049s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Add message creates message and marks as read 0.056s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Mark conversation as read calls repository 0.048s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Delete conversation calls repository 0.047s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Get unread overview returns total and counts by accessible restaurant 0.046s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Unread count increases for other participant when one sends messages 9.182s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Create conversation with message creates message 0.052s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Bridge client user resolves via manager service 0.046s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Bridge client user sets null when no matching user 0.049s
✅ App.Modules.ComInApp.Tests.ComInAppServiceTest Add unread message count to employees adds count to employees 0.055s
✅ 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.003s
✅ 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.044s
✅ App.Modules.Users.Client.Tests.BuildManagerExportRowTest Blank names stay empty 0.046s
✅ 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.001s
✅ 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.000s
✅ 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.002s
✅ 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.062s Exports managers and notifies with a downloadable fileOpenSpout\Common\Exception\IOException: Unable to open file /var/www/octopus-haccp/storage/app/exports/ad839f0b-8812-48a2-a9df-7f689d395a02.xlsx: fopen(/var/www/octopus-haccp/storage/app/exports/ad839f0b-8812-48a2-a9df-7f689d395a02.xlsx): Failed
✅ App.Modules.Users.Client.Tests.ImportManagersJobTest Imports valid rows and reports errors for invalid ones 0.058s
✅ App.Modules.Users.Client.Tests.ImportManagersJobTest Reports a friendly error when the spreadsheet file cannot be read 0.047s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest View any allows superadmin 0.001s
✅ 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.163s
✅ App.Modules.Users.Client.Tests.ManagerReusingMainEmailTest Sub client with its own email still gets its own manager user 0.159s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest All for client delegates to repository 0.002s
✅ 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.001s
✅ 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.032s
✅ 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.004s
✅ 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.153s
✅ App.Modules.Users.Restaurant.Tests.CreateTrialRestaurantActionTest It passes a hashed password and admin password to the repository 0.258s
✅ App.Modules.Users.Restaurant.Tests.CreateTrialRestaurantActionTest It derives the username from the email local part 0.153s
✅ App.Modules.Users.Restaurant.Tests.CreateTrialRestaurantActionTest It suffixes the username with the domain on collision 0.151s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Unchecking a provider soft deletes its polymorphic connexion 8.818s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Unchecking a provider soft deletes its legacy connexion 8.906s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Rechecking a provider restores its soft deleted connexion 8.803s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Disabled connexion is excluded from the default sync query 8.994s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Untouched providers are not affected 8.938s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Local restaurant service resets import apis when all boxes are unchecked 9.576s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Ajax is active toggle does not reset import apis on local service 8.925s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Ajax is active toggle does not reset import apis on indep service 9.339s
✅ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Inactive restaurant connexion is excluded from the sync query 9.175s
✅ App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest Export route is available for independent restaurants 0.052s
✅ App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest Independent restaurants page uses the queued export ui 0.053s
✅ App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest Independent restaurant query binds the search value and is lazy 0.046s
✅ App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest Independent restaurant service dispatches the export job 0.047s
✅ App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest Builds the restaurant export row 0.046s
✅ App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest Export job writes the file and notifies the requesting user 0.053s