| ✅ |
Tests.Api.Inpulse.InpulseTest |
Sync products |
0.017s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogDetailsTest |
Details modal is hidden until an entry is requested |
9.540s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogDetailsTest |
Requesting an entry renders its changes |
8.719s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogDetailsTest |
Table delegates details to the modal component |
8.677s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogManagerOwnerTest |
Manager settings are owned by the main client |
8.578s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogManagerOwnerTest |
Manager account itself is owned by the main client |
8.817s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogManagerOwnerTest |
Main client stays its own owner |
8.254s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogManagerOwnerTest |
Logs recorded under a manager display the main client |
8.018s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogManagerOwnerTest |
Logs recorded under a deleted manager display the main client |
8.554s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogManagerOwnerTest |
Empty recorded name falls back instead of showing blank |
8.963s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogTest |
Dirty only update keeps ownership separate from changes and author |
8.442s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogTest |
Nested impersonation keeps original author and target owner |
9.138s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogTest |
Direct impersonation displays the target instead of repeating the author |
9.542s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogTest |
Family impersonation is displayed as its parent client |
8.650s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogTest |
Legacy impersonation does not guess the target from ownership |
8.267s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogTest |
Unowned template does not inherit the impersonated restaurant |
8.870s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogTest |
Client settings and family templates resolve the client |
8.675s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogTest |
Direct owner edits and deletes keep the snapshot |
8.361s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogTest |
Filters match owner names ids and combine without matching the author |
8.475s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogTest |
Activity page displays most specific owner and applies unified search |
8.269s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogTest |
Activity page uses the current locale |
8.394s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogTest |
Legacy author does not override recorded ownership |
8.102s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogTest |
Models without ownership do not inherit the acting account |
8.148s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogTest |
Owner snapshot does not follow later restaurant transfers |
8.313s |
|
| ✅ |
Tests.Features.ActivityLog.ActivityLogTest |
Legacy recorded ownership is still displayed and filterable |
8.268s |
|
| ✅ |
Tests.Features.Api.ApiSessionIsolationTest |
Api token does not open a web session |
0.279s |
|
| ✅ |
Tests.Features.Api.ApiSessionIsolationTest |
Login rejects bad password even when a web session exists |
0.413s |
|
| ✅ |
Tests.Features.Api.ApiSessionIsolationTest |
Login with valid password still issues a token |
0.257s |
|
| ✅ |
Tests.Features.Api.ApiSessionIsolationTest |
Api logout does not destroy the web session |
0.205s |
|
| ✅ |
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.205s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggerBatchReplayTest |
baseline saint denis june 1 reproduces counter bug |
8.721s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggerBatchReplayTest |
baseline pfc fruit legume june 1 reproduces counter bug |
8.295s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggerBatchReplayTest |
baseline saint denis excursion time is counter times 600 |
8.652s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggerBatchReplayTest |
nominal single measure every 10 min still works |
9.052s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggerBatchReplayTest |
baseline logger issue day csv reproduces error-day behavior |
9.335s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggerBatchReplayTest |
baseline logger issue day csv with connectivity checks |
12.976s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggerBatchReplayTest |
baseline logger issue day mod nico 1 csv reproduces error-day behavior |
9.643s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggerBatchReplayTest |
baseline logger issue day mod nico 2 csv reproduces error-day behavior |
9.071s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggerBatchReplayTest |
baseline quick june 2026 csv |
30.935s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggerBatchReplayTest |
replay OK_CASE quick nevers marzy csv |
11.680s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggerBatchReplayTest |
replay TEMP_KO_CONN_OK_CASE_WITH_EXCLUSION quick villeneuve csv |
19.291s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
Temperatures |
10.211s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
Several measures |
8.677s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
Connection |
9.183s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
Epv cauderan |
14.204s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
Terrasse saint pol |
9.526s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
Global connection |
12.465s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
ClosedDates logger |
9.002s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
ClosedDates logger |
9.168s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
ClosedDates contacts |
9.455s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
ClosedDates connexion contacts |
8.718s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
ClosedDates connexion contacts |
8.641s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
Case cirl |
16.373s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
No data alerts |
10.749s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
NoDataAlerts AllLoggers |
8.706s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
NoDataAlerts ResumeBeforeSecondAlert |
10.326s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
NoDataAlerts MultipleLoggers |
11.670s |
|
| ✅ |
Tests.Features.Loggers.FridgeLoggersTest |
NoDataAlert IgnoresInactiveLoggers |
8.931s |
|
| ✅ |
Tests.Features.Loggers.LoggerClosedDatesScenariosTest |
back_to_normal after exclusion sends no email when issue was never alerted |
9.021s |
|
| ✅ |
Tests.Features.Loggers.LoggerClosedDatesScenariosTest |
deferred issue resolved during exclusion is not promoted when exclusion ends |
8.435s |
|
| ✅ |
Tests.Features.Loggers.LoggerConnectionScenariosTest |
scenario stable produces one batch per measurement |
8.082s |
|
| ✅ |
Tests.Features.Loggers.LoggerConnectionScenariosTest |
scenario stable and unstable accept inLimits OK KO |
8.312s |
|
| ✅ |
Tests.Features.Loggers.LoggerConnectionScenariosTest |
scenario unstable produces one burst with backlog since last reception |
8.357s |
|
| ✅ |
Tests.Features.Loggers.LoggerConnectionScenariosTest |
scenario stable then unstable then noData then unstable then stable ends in stable_ok |
8.585s |
|
| ✅ |
Tests.Features.Loggers.LoggerConnectionScenariosTest |
stable_ok to stable_ko triggers temperature_issue |
8.862s |
|
| ✅ |
Tests.Features.Loggers.LoggerConnectionScenariosTest |
scenario stable then noData then unstable then stable |
8.370s |
|
| ✅ |
Tests.Features.Loggers.LoggerConnectionScenariosTest |
connection scenario shapes with data set "dataset "stable → unstable → noData → unstable → stable"" |
8.751s |
|
| ✅ |
Tests.Features.Loggers.LoggerConnectionScenariosTest |
connection scenario shapes with data set "dataset "stable → noData → unstable → stable"" |
8.371s |
|
| ✅ |
Tests.Features.Loggers.LoggerPeriodicTemperatureTickTest |
periodic tick triggers dizzy temperature issue after ko readings then silence |
8.661s |
|
| ✅ |
Tests.Features.Loggers.LoggerPeriodicTemperatureTickTest |
periodic tick does not run when last reading temperature is in limits |
8.977s |
|
| ✅ |
Tests.Features.Loggers.LoggerPeriodicTemperatureTickTest |
periodic tick sends temperature reminder when excursion remains open without new data |
9.019s |
|
| ✅ |
Tests.Features.Loggers.LoggerPeriodicTemperatureTickTest |
periodic tick does nothing when window has no readings |
9.115s |
|
| ✅ |
Tests.Features.Loggers.LoggerSimulationTickTest |
does nothing when simulation is disabled |
8.131s |
|
| ✅ |
Tests.Features.Loggers.LoggerSimulationTickTest |
injects a reading for each eligible logger when enabled |
8.247s |
|
| ✅ |
Tests.Features.Loggers.LoggerSimulationTickTest |
respects the restaurant allowlist |
8.779s |
|
| ✅ |
Tests.Features.Loggers.LoggerSimulationTickTest |
dry-run does not persist any reading |
8.612s |
|
| ✅ |
Tests.Features.Loggers.LoggerSimulationTickTest |
an excursion produces an out-of-limits reading |
8.349s |
|
| ✅ |
Tests.Features.Loggers.LoggerSimulationTickTest |
an inactive logger is not simulated |
9.129s |
|
| ✅ |
Tests.Features.Loggers.LoggerTemperatureReminderTest |
reminder event type mirrors initial temperature issue |
0.045s |
|
| ✅ |
Tests.Features.Loggers.LoggerTemperatureReminderTest |
sendsTemperatureReminder identifies reminder events |
0.041s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
dizzy temperature issue variant distinguishes co-occurring dizzy_started |
0.040s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
dizzy ended alert variant covers temperature outcomes |
0.047s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
temperature and resolution alerts are suppressed when dizzy ended covers them |
0.050s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
transition planner returns expected events with data set "dataset "stable_ok → stable_ko"" |
0.040s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
transition planner returns expected events with data set "dataset "stable_ok → unstable_ok"" |
0.039s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
transition planner returns expected events with data set "dataset "stable_ok → unstable_ko"" |
0.039s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
transition planner returns expected events with data set "dataset "stable_ko → stable_ok"" |
0.038s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
transition planner returns expected events with data set "dataset "stable_ko → unstable_ok"" |
0.038s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
transition planner returns expected events with data set "dataset "stable_ko → unstable_ko"" |
0.038s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
transition planner returns expected events with data set "dataset "unstable_ok → stable_ok"" |
0.039s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
transition planner returns expected events with data set "dataset "unstable_ok → stable_ko"" |
0.040s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
transition planner returns expected events with data set "dataset "unstable_ok → unstable_ko"" |
0.042s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
transition planner returns expected events with data set "dataset "unstable_ko → stable_ok"" |
0.040s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
transition planner returns expected events with data set "dataset "unstable_ko → stable_ko"" |
0.041s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
transition planner returns expected events with data set "dataset "unstable_ko → unstable_ok"" |
0.042s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
transition planner returns expected events with data set "dataset "first batch (no previous state)"" |
0.042s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
window state is derived from analysis flags with data set "dataset "stable ok"" |
0.043s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
window state is derived from analysis flags with data set "dataset "stable ko"" |
0.041s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
window state is derived from analysis flags with data set "dataset "unstable ok"" |
0.039s |
|
| ✅ |
Tests.Features.Loggers.LoggerWindowTransitionsTest |
window state is derived from analysis flags with data set "dataset "unstable ko"" |
0.039s |
|
| ⏭️ |
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.023s |
|
| ✅ |
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.008s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryControllerTest |
Restaurant does not match another restaurants action plan |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryControllerTest |
Null current entity is denied |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryControllerTest |
Client with access to owning restaurant is allowed |
0.003s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryControllerTest |
Client without access to owning restaurant is denied |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryControllerTest |
Non restaurant userable type is denied even if id coincides |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryExportTest |
BuildRow does not crash when planFiles is eloquent collection |
0.026s |
|
| ✅ |
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 keeps the plans of the owner |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
GetByAuditRecordId drops the plans of another restaurant |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
GetByAuditRecordId single foreign plan never reaches the detail branch |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
GetByAuditRecordId lets a client see the plans of its restaurants |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
GetByAuditRecordId denies non restaurant userable even if id is accessible |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
GetByAuditRecordId returns nothing without current entity |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ResolveRestaurantForOwner returns a restaurant of the client |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ResolveRestaurantForOwner refuses a restaurant outside the client scope |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ResolveRestaurantForOwner refuses when the entity has no scope |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ResolveRestaurantForOwner refuses without current entity |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
CountByAuditRecordId delegates to repo |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
GetDetailsData separates documents from images |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
GetDetailsData returns status changelogs collection |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
GetDetailsData excludes assignment events from the journal |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
GetDetailsData returns empty data when no files or changelogs |
0.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ResolveOrphanTag returns supprimee when category is deleted |
0.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ResolveOrphanTag returns national when nat category and loc only settings |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ResolveOrphanTag returns local when loc category and nat only settings |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ResolveOrphanTag returns null when category matches active scope |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
GetDetailsData builds photo gallery urls in order |
0.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
FormatHomeKpi returns dash when total is zero |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
FormatHomeKpi formats percentage and fraction |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
FormatHomeKpi rounds percentage |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
PopupTypeIcon returns expected icon per type |
0.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ApplyDynamicFilterValues unsets all sections when everything empty |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ApplyDynamicFilterValues populates categories when present |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ApplyDynamicFilterValues populates responsable names when present |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ApplyDynamicFilterValues unsets statuses when setting is null even with statuses |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ApplyDynamicFilterValues populates statuses when setting and statuses present |
0.004s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ApplyDynamicFilterValues unsets statuses when setting present but no statuses |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ResolveFilterCategories returns loc categories when loc only |
0.002s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ResolveFilterCategories returns nat categories when nat only |
0.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ResolveFilterCategories merges loc and nat sorted by position |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest |
ResolveFilterCategories appends orphan categories with tag |
0.000s |
|
| ✅ |
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.012s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest |
GetDaysData returns empty array |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest |
GetBoardData returns stub structure |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest |
GetTableViewData returns empty collection |
0.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest |
GetPopupItems returns empty paginator |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest |
FindById returns null |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest |
GetAuditLinkedActionPlans returns empty collection |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest |
GetByAuditRecordId returns empty collection |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest |
ResolveRestaurantForOwner returns null |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest |
CountByAuditRecordId returns zero |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest |
BuildFilters returns empty array |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest |
FindAttachedFile returns null |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest |
PopupTypeIcon returns expected icon per type |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
UpdateSetting rejects invalid field |
0.006s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
UpdateSetting propagates repo failure |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
GetIndexPageData creates settings when missing |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
GetIndexPageData does not recreate settings when present |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
GetIndexPageData returns early when settings setup fails |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
GetIndexPageData creates statuses when missing |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
GetIndexPageData does not duplicate statuses when present |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
GetCategories for client family returns family own categories |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
GetCategories without family returns only restaurant categories |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
GetCategories with family and loc param returns only restaurant categories |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
GetCategories with family and nat param returns only family categories |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
GetCategories with family passes active only to repo |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
GetCategories does not filter locally disabled family categories |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
GetCategories with family and loc nat param returns both |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
UpdateCategory returns success with model when repo succeeds |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
UpdateCategory returns failure when repo returns null |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
ToggleCategory returns success with model when repo succeeds |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
ToggleCategory returns failure when repo returns null |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
BulkDelete returns success when repo succeeds |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
BulkDelete returns failure when repo fails |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
GetIndexPageData includes settings in return |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
IsConfiguredForRestaurant returns false when no setting |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
IsConfiguredForRestaurant returns false when no active statuses |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
IsConfiguredForRestaurant returns true via loc categories |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
IsConfiguredForRestaurant returns true via nat categories |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
IsConfiguredForRestaurant returns true when loc missing but nat has categories |
0.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
IsConfiguredForRestaurant returns false when no categories anywhere |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
IsConfiguredForRestaurant returns false when loc no categories and nat disabled |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
IsConfiguredForRestaurant returns false when nat no categories and loc disabled |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
IsConfiguredForRestaurant returns false when neither loc nor nat |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
UpdateSetting accepts all whitelisted fields with data set "photos_enabled" |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
UpdateSetting accepts all whitelisted fields with data set "photos_required" |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
UpdateSetting accepts all whitelisted fields with data set "commentaries_enabled" |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
UpdateSetting accepts all whitelisted fields with data set "commentaries_required" |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
UpdateSetting accepts all whitelisted fields with data set "documents_enabled" |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
UpdateSetting accepts all whitelisted fields with data set "documents_required" |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
UpdateSetting accepts all whitelisted fields with data set "reminder_date_enabled" |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanParametersServiceTest |
UpdateSetting accepts all whitelisted fields with data set "reminder_date_required" |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
ResolveActiveCategories without family uses loc categories |
0.010s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
ResolveActiveCategories with loc only uses loc categories |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
ResolveActiveCategories with nat only uses family categories |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
ResolveActiveCategories with loc and nat merges both |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData creates settings when missing |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData does not recreate settings when present |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData counts past reminder as urgent |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData passes through the access scope |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData excludes future reminder from urgent count |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData excludes null reminder from urgent count |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData excludes draft from urgent count |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData urgent count sums across statuses |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData excludes finished status from urgent count |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData excludes plan with finished at from urgent count even on non finished status |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData returns no urgent when no statuses |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData statuses sorted by position |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData includes plan finished within 7 days |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData excludes plan finished more than 7 days ago |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData old finished plan excluded from urgent count |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetUrgentPlansData flattens urgent plans across statuses |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetUrgentPlansData sorts by reminded at ascending |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetUrgentPlansData excludes plan with finished at regardless of status |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetUrgentPlansData passes through the access scope settings and statuses |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
ComputeFinishedAt sets when finished statuses id matches |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
ComputeFinishedAt clears when finished statuses id set but status differs |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
ComputeFinishedAt stays null without a configured final status |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
ComputeFinishedAt clears an existing date without a configured final status |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
ComputeFinishedAt preserves existing finished at when already finished |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
ComputeFinishedAt clears when settings is null |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
IsFinishedStatus true when configured id matches |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
IsFinishedStatus false when configured id differs |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
IsFinishedStatus is false without a configured final status |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
ResolveIsDraftOnUpdate stays draft when still requested as draft |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
ResolveIsDraftOnUpdate finalizes draft when requested as final |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
ResolveIsDraftOnUpdate ignores draft request on already finalized plan |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
ResolveIsDraftOnUpdate stays final when already finalized and no save mode |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
DeleteFileAttachment delegates to repo when the file belongs to the tenant |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
DeleteFileAttachment refuses a file outside the tenant |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetPlansForRecord delegates to repo with correct type and id |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData passes employee id to status twin |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetIndexData passes null employee id through unchanged |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetAuditPlansCount passes employee id to record twin |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetPlansForRecord keeps plan without finished at |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetPlansForRecord keeps plan finished within 7 days |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetPlansForRecord excludes plan finished more than 7 days ago |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
AuditRecordHasValidatedTask delegates to repo |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
AuditRecordHasValidatedTask bypasses gate for finished period |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
AuditRecordHasValidatedTask delegates to repo when period unknown |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetAuditPlansCount returns zero when no plans |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetAuditPlansCount includes finished plans in count |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetAuditPlansCount counts active and finished plans |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetAuditPlansCount excludes drafts from count |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetAuditPlansCount hasUrgent true when reminder in past |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetAuditPlansCount hasUrgent false when reminder after tomorrow |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetAuditPlansCount hasUrgent false when no reminder |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetAuditPlansCount hasUrgent false when only draft has past reminder |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
FilterByModuleAccess excludes employee with module in forbidden |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
FilterByModuleAccess includes employee without forbidden modules |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
FilterByModuleAccess includes employee with other forbidden module |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
FilterByModuleAccess restores current employee when filtered out |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetResponsableEmployees returns a collection |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetResponsableEmployees delegates to repo with correct restaurant |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetResponsableEmployees filters out employees without module access |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
GetResponsableEmployees preserves current employee when access revoked |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
FilterByModuleAccess does not duplicate current employee already in list |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
SanitizeFileName replaces spaces with dashes |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
SanitizeFileName strips special characters but keeps dashes |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
SanitizeFileName strips underscores |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
SanitizeFileName keeps already safe name with dash unchanged |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
BuildStorePayload uses category name and icon when not locked |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
BuildStorePayload locked category overrides resolved category |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
BuildStorePayload refuses an audit record outside the tenant |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
BuildStorePayload falls back to empty strings when no category or status |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
BuildStorePayload defaults recordable type to action plan when absent |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
BuildStorePayload turns empty selects into null not zero |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
BuildUpdatePayload freezes category and description once the plan is saved |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
BuildUpdatePayload accepts the submitted values while the plan is a draft |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
BuildUpdatePayload falls back to plan statuses name when status not found |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanServiceTest |
BuildUpdatePayload turns empty selects into null not zero |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
ResolveSyncAuthorEmployeeId accepts an employee of the restaurant |
0.031s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
ResolveSyncAuthorEmployeeId accepts a numeric string |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
ResolveSyncAuthorEmployeeId rejects an employee of another restaurant |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
ResolveSyncAuthorEmployeeId rejects empty zero and garbage |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
GetCategoriesToSync delegates and returns array |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
GetSettingsToSync delegates and returns array |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
GetActionPlansToSync delegates and returns array |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
GetAttachedFilesToSync delegates and returns array |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
GetCommentsToSync delegates and returns array |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
GetStatusesToSync returns empty array when no settings id |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
GetStatusesToSync delegates when settings id provided |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
GetStatusesToSyncForRestaurantTablet returns empty when settings missing |
0.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
GetStatusesToSyncForRestaurantTablet delegates with tablet sync date |
0.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
GetStatusesToSyncForRestaurantTablet ignores last sync when forced |
0.001s |
|
| ✅ |
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.002s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
LogStatusChange logs when old status was null |
0.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
LogStatusChange records tablet author and assigned snapshot |
0.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
LogStatusChange ignores a tablet author foreign to the restaurant |
0.001s |
|
| ✅ |
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.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
LogAssignment logs a reassignment |
0.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
SyncAttachedFile returns invalid file error when file is null |
0.000s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
SyncAttachedFile returns invalid file error when file not valid |
0.007s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
SyncAttachedFile returns error when action plan not found |
0.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
SyncAttachedFile returns error when storage fails |
0.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
SyncAttachedFile returns success with record id on new file |
0.001s |
|
| ✅ |
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.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
IsConfiguredForRestaurant returns true via nat categories |
0.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
IsConfiguredForRestaurant returns true when loc missing but nat has categories |
0.001s |
|
| ✅ |
Tests.Unit.ActionPlan.ActionPlanSyncServiceTest |
IsConfiguredForRestaurant returns false when no categories anywhere |
0.001s |
|
| ✅ |
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.062s |
|
| ✅ |
Tests.Unit.ActivityLog.BulkDeleteActivityLogGuardTest |
No new raw bulk delete on a logged table |
0.397s |
|
| ✅ |
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.109s |
|
| ✅ |
Tests.Unit.ActivityLog.LoggableBuilderTest |
The builder is wired onto the model |
0.050s |
|
| ✅ |
Tests.Unit.ActivityLog.LoggableBuilderTest |
Mass delete fires the deleted event once per row |
0.003s |
|
| ✅ |
Tests.Unit.ActivityLog.LoggableBuilderTest |
A plain builder would have lost every event |
0.002s |
|
| ✅ |
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.062s |
|
| ✅ |
Tests.Unit.Api.AdoriaStaleMenuPurgeTest |
Synchronize does not purge when api day has no importable recipes |
0.045s |
|
| ✅ |
Tests.Unit.Api.AdoriaSyncFixtureBenchmarkTest |
Sync replay fixture is idempotent and reports timings |
0.050s |
|
| ✅ |
Tests.Unit.Api.AdoriaSyncResilienceTest |
Get data throws when menu request fails |
0.047s |
|
| ✅ |
Tests.Unit.Api.AdoriaSyncResilienceTest |
Get data treats menu plan 404 as empty |
0.041s |
|
| ✅ |
Tests.Unit.Api.AdoriaSyncResilienceTest |
Get data still throws when menu returns server error |
0.041s |
|
| ✅ |
Tests.Unit.Api.AdoriaSyncResilienceTest |
Menu plan 404 is treated as empty http error |
0.041s |
|
| ✅ |
Tests.Unit.Api.AdoriaSyncResilienceTest |
Get data throws on html error body that is not json |
0.042s |
|
| ✅ |
Tests.Unit.Api.AdoriaSyncResilienceTest |
Kitchen catalog is cached across calls |
0.043s |
|
| ✅ |
Tests.Unit.Api.AdoriaSyncResilienceTest |
Kitchen failure does not abort menu import |
0.042s |
|
| ✅ |
Tests.Unit.Api.AdoriaSyncResilienceTest |
Test connection returns false instead of throwing |
0.041s |
|
| ✅ |
Tests.Unit.Api.AdoriaSyncResilienceTest |
Test connection returns true when multi step setup is incomplete |
0.041s |
|
| ✅ |
Tests.Unit.Api.AdoriaSyncResilienceTest |
Test connection returns false when organization token is rejected |
0.043s |
|
| ✅ |
Tests.Unit.Api.AdoriaSyncResilienceTest |
Sync adoria connexion job uses retries and api sync queue |
0.043s |
|
| ✅ |
Tests.Unit.Api.AdoriaSyncResilienceTest |
Sync adoria api defaults to single job mode |
0.042s |
|
| ✅ |
Tests.Unit.Api.AdoriaSyncResilienceTest |
Sync adoria api per connexion mode shortens parent timeout |
0.041s |
|
| ✅ |
Tests.Unit.Api.ApiConnectionResilienceTest |
Src api token is trimmed on assignment |
0.045s |
|
| ✅ |
Tests.Unit.Api.ApiConnectionResilienceTest |
Src api token trim ignores non string values |
0.048s |
|
| ✅ |
Tests.Unit.Api.ApiConnectionResilienceTest |
Equilibre get data throws when auth token request fails |
0.041s |
|
| ✅ |
Tests.Unit.Api.ApiConnectionResilienceTest |
Equilibre get data throws when site id is rejected by api |
0.040s |
|
| ✅ |
Tests.Unit.Api.ApiConnectionResilienceTest |
Equilibre test connection returns false instead of throwing on invalid site |
0.040s |
|
| ✅ |
Tests.Unit.Api.ApiConnectionResilienceTest |
Equilibre test connection returns true when api legitimately has no data |
0.039s |
|
| ✅ |
Tests.Unit.Api.ApiConnectionResilienceTest |
Compass test connection returns false instead of throwing |
0.039s |
|
| ❌ |
Tests.Unit.Api.ApiConnectionResilienceTest |
Easilys test connection returns true when id site not yet selected |
0.042s |
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.039s |
|
| ✅ |
Tests.Unit.Api.ApiConnectionResilienceTest |
Easilys get data throws when every request fails |
0.039s |
|
| ✅ |
Tests.Unit.Api.ApiConnectionResilienceTest |
Easilys get data keeps empty payload when api responds |
0.040s |
|
| ✅ |
Tests.Unit.Api.ApiConnectionResilienceTest |
Easilys test connection returns false when every request fails |
0.039s |
|
| ✅ |
Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest |
Equilibre daily resync does not duplicate control reception import |
8.959s |
|
| ✅ |
Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest |
Equilibre daily resync does not duplicate product imports |
8.774s |
|
| ✅ |
Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest |
Equilibre without prepare sync reproduces duplicate imports |
8.397s |
|
| ✅ |
Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest |
Equilibre orphan product import is relinked not duplicated |
8.425s |
|
| ✅ |
Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest |
Easilys resync does not duplicate control reception and product imports |
8.561s |
|
| ✅ |
Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest |
Compass resync does not duplicate control reception and product imports |
8.515s |
|
| ✅ |
Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest |
Get existing data depends on restaurant context |
8.478s |
|
| ✅ |
Tests.Unit.Api.EasilysProductionRecipesMergeTest |
Merge unions recipes only present in one source |
7.627s |
|
| ✅ |
Tests.Unit.Api.EasilysProductionRecipesMergeTest |
Merge keeps primary id when same recipe has different ids |
8.197s |
|
| ✅ |
Tests.Unit.Api.EasilysProductionRecipesMergeTest |
Merge treats labels as case and whitespace insensitive |
7.944s |
|
| ✅ |
Tests.Unit.Api.EasilysProductionRecipesMergeTest |
Merge keeps distinct recipes that share the same numeric id |
8.245s |
|
| ✅ |
Tests.Unit.Api.EasilysProductionRecipesMergeTest |
Diff counts partial overlap between sources |
8.071s |
|
| ✅ |
Tests.Unit.Api.EasilysProductionRecipesMergeTest |
Parse connection config ignores legacy use menu report flag |
8.344s |
|
| ✅ |
Tests.Unit.Api.EasilysProductionRecipesMergeTest |
Test connection probes configured site receipts not sites list |
7.881s |
|
| ✅ |
Tests.Unit.Api.EasilysProductionRecipesMergeTest |
Test connection without id site probes sites for first save |
8.190s |
|
| ✅ |
Tests.Unit.Api.EasilysProductionRecipesMergeTest |
Test connection falls back to categorymenus when receipts are forbidden |
8.663s |
|
| ✅ |
Tests.Unit.Api.EasilysProductionRecipesMergeTest |
Test connection fails when site endpoint has no data key |
8.202s |
|
| ✅ |
Tests.Unit.Api.EasilysProductionRecipesMergeTest |
Resolve id sites appends children of the parent site |
8.396s |
|
| ✅ |
Tests.Unit.Api.EasilysProductionRecipesMergeTest |
Occurrence key keeps same id with different labels distinct |
9.297s |
|
| ✅ |
Tests.Unit.Api.EasilysProductionRecipesMergeTest |
Synchronize imports distinct recipes that share the same numeric id |
8.904s |
|
| ✅ |
Tests.Unit.Api.EquilibreSyncFixtureBenchmarkTest |
Sync replay fixture is idempotent and reports timings |
0.068s |
|
| ⚠️ |
Tests.Unit.Api.ImportApisSyncGuardsTest |
Ajax is active toggle does not reset import apis on local service |
0.062s |
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.043s |
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.037s |
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.048s |
|
| ✅ |
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.028s |
|
| ✅ |
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.001s |
|
| ✅ |
Tests.Unit.AttachedFiles.AllowedUploadTest |
Un document bureautique reste accepte |
0.001s |
|
| ✅ |
Tests.Unit.AttachedFiles.AllowedUploadTest |
Un pdf est refuse sur la photo et accepte sur le document |
0.001s |
|
| ✅ |
Tests.Unit.AttachedFiles.AllowedUploadTest |
Un svg est refuse car il s execute dans notre origine |
0.000s |
|
| ✅ |
Tests.Unit.AttachedFiles.AllowedUploadTest |
Une page html est refusee |
0.001s |
|
| ✅ |
Tests.Unit.AttachedFiles.AttachedFileSyncServiceTest |
SyncAttachedFile dispatches to action plan sync service by default |
0.004s |
|
| ✅ |
Tests.Unit.AttachedFiles.AttachedFileSyncServiceTest |
SyncAttachedFile dispatches to audit sync service for audit action task |
0.000s |
|
| ✅ |
Tests.Unit.AttachedFiles.AttachedFileSyncServiceTest |
SyncAttachedFile rejects unknown attachable type |
0.000s |
|
| ✅ |
Tests.Unit.Audits.AuditActionConsigneUploadTest |
Une consigne pdf est acceptee |
0.002s |
|
| ✅ |
Tests.Unit.Audits.AuditActionConsigneUploadTest |
Une consigne image reste acceptee |
0.001s |
|
| ✅ |
Tests.Unit.Audits.AuditActionConsigneUploadTest |
Une consigne php est refusee avec un message |
0.000s |
|
| ✅ |
Tests.Unit.Audits.AuditActionConsigneUploadTest |
Un upload en echec est refuse avec un message sans 500 |
0.000s |
|
| ✅ |
Tests.Unit.Audits.AuditActionConsigneUploadTest |
L image du plan de nettoyage reste limitee aux images |
0.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.043s |
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.035s |
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.037s |
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.050s |
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.041s |
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.040s |
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.044s |
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 disables incremental filter on reset |
0.000s |
|
| ✅ |
Tests.Unit.Audits.AuditSyncServiceTest |
GetAuditActionTasksToSync enables incremental filter when no reset nor resend |
0.000s |
|
| ✅ |
Tests.Unit.Audits.AuditSyncServiceTest |
GetAuditActionTasksToSync skips tasks without allAuditAction or audit |
0.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.001s |
|
| ✅ |
Tests.Unit.Audits.AuditSyncServiceTest |
SyncAuditActionTask returns success with id when save succeeds |
0.001s |
|
| ✅ |
Tests.Unit.Audits.AuditSyncServiceTest |
SyncAuditActionTask returns failure without id when save fails |
0.000s |
|
| ✅ |
Tests.Unit.Audits.AuditSyncServiceTest |
SyncAuditActionTask delegates finished cycle to task generator after save |
0.001s |
|
| ✅ |
Tests.Unit.Audits.AuditSyncServiceTest |
SyncAuditActionTask returns regenerated tasks debug payload |
0.001s |
|
| ✅ |
Tests.Unit.Audits.AuditSyncServiceTest |
SyncAuditActionTask ignores invalid image and follows no image path |
0.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.015s |
|
| ✅ |
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.008s |
|
| ✅ |
Tests.Unit.Audits.AuditsExtraActionsServiceTest |
GetIndexPageData returns null when the action does not exist |
0.000s |
|
| ✅ |
Tests.Unit.Audits.AuditsExtraActionsServiceTest |
GetIndexPageData returns null when the action belongs to someone else |
0.000s |
|
| ✅ |
Tests.Unit.Audits.AuditsExtraActionsServiceTest |
GetCreatePageData returns a blank action with colors and type labels |
0.000s |
|
| ✅ |
Tests.Unit.Audits.AuditsExtraActionsServiceTest |
GetCreatePageData returns null for a foreign action |
0.000s |
|
| ✅ |
Tests.Unit.Audits.AuditsExtraActionsServiceTest |
GetEditPageData returns the extra action with colors and type labels |
0.000s |
|
| ✅ |
Tests.Unit.Audits.AuditsExtraActionsServiceTest |
GetEditPageData leaves auditAction null when the relation is orphan |
0.000s |
|
| ✅ |
Tests.Unit.Audits.AuditsExtraActionsServiceTest |
GetEditPageData returns null for a foreign extra action |
0.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.007s |
|
| ✅ |
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.004s |
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.000s |
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.009s |
|
| ✅ |
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.003s |
|
| ✅ |
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.005s |
|
| ✅ |
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.135s |
Nat plan disabled at loc does not generate tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.co |
| ⚠️ |
Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest |
Nat action disabled at loc does not generate tasks |
0.114s |
Nat action disabled at loc does not generate tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation. |
| ⚠️ |
Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest |
Closed restaurant stops generation |
0.108s |
Closed restaurant stops generationUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.completed
Contex |
| ⚠️ |
Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest |
Always is idempotent then regenerates when expired path hits |
0.113s |
Always is idempotent then regenerates when expired path hitsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: g |
| ⚠️ |
Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest |
Frequency increase from one reuses existing task as main |
0.111s |
Frequency increase from one reuses existing task as mainUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: gener |
| ⚠️ |
Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest |
Frequency generates indexed children linked to first task |
0.116s |
Frequency generates indexed children linked to first taskUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: gene |
| ⚠️ |
Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest |
Only action id generates only target action tasks |
0.113s |
Only action id generates only target action tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.c |
| ⚠️ |
Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest |
Always updates valid until without modifying existing valid from |
0.114s |
Always updates valid until without modifying existing valid fromUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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 |
Always friday only with expiration catch up after expiry on saturday |
0.113s |
Always friday only with expiration catch up after expiry on saturdayUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting t |
| ⚠️ |
Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest |
Loc action on nat plan still generates when nat action disabled at loc |
0.115s |
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-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting |
| ⚠️ |
Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest |
Day task not skipped when week closure does not cover full action slot |
0.112s |
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-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting |
| ⚠️ |
Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest |
Day task skipped when week closure covers full action slot |
0.115s |
Day task skipped when week closure covers full action slotUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: gen |
| ⚠️ |
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-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attemptin |
| ⚠️ |
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-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: gener |
| ⚠️ |
Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest |
Week task skipped when restaurant closed all week period |
0.107s |
Week task skipped when restaurant closed all week periodUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: gener |
| ⚠️ |
Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest |
Nat parent disabled blocks child nat action generation regression |
0.108s |
Nat parent disabled blocks child nat action generation regressionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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 |
Nat loc disabled and several generations |
0.169s |
Nat loc disabled and several generationsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.completed
|
| ✅ |
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.001s |
|
| ✅ |
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.003s |
|
| ✅ |
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.004s |
|
| ✅ |
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.019s |
|
| ✅ |
Tests.Unit.Common.ExportToSpreadsheetActionTest |
Writes headers when there are no rows |
0.004s |
|
| ✅ |
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.042s |
|
| ✅ |
Tests.Unit.Console.FixCorruptedExtraActionsTest |
Une perte qui atteint la chaine suivante est refusee et non mal reparee |
0.041s |
|
| ✅ |
Tests.Unit.Console.FixCorruptedExtraActionsTest |
La reparation ne change que les prefixes de longueur |
0.042s |
|
| ✅ |
Tests.Unit.Console.FixCorruptedExtraActionsTest |
Une valeur tronquee est refusee |
0.043s |
|
| ✅ |
Tests.Unit.Console.FixCorruptedExtraActionsTest |
Une valeur qui n est pas du serialize est refusee |
0.042s |
|
| ✅ |
Tests.Unit.Console.FixCorruptedExtraActionsTest |
Une valeur saine reste identique |
0.042s |
|
| ✅ |
Tests.Unit.Export.AuditRecordExportTest |
No action plan returns two dashes |
0.003s |
|
| ✅ |
Tests.Unit.Export.AuditRecordExportTest |
Action plan returns description then status |
0.001s |
|
| ✅ |
Tests.Unit.Export.AuditRecordExportTest |
Action plan with null description falls back to dash |
0.000s |
|
| ✅ |
Tests.Unit.Export.AuditRecordExportTest |
Action plan with null status falls back to dash |
0.000s |
|
| ✅ |
Tests.Unit.Export.AuditRecordExportTest |
Action plan without description nor status |
0.000s |
|
| ✅ |
Tests.Unit.Fridges.FridgeZoneModeTest |
Area without task nor fridge keeps the mode without zones |
0.065s |
|
| ✅ |
Tests.Unit.Fridges.FridgeZoneModeTest |
Task given to a fridge of an area switches to zone mode |
0.061s |
|
| ✅ |
Tests.Unit.Fridges.FridgeZoneModeTest |
National fridge without zone receives nothing in zone mode |
0.067s |
|
| ✅ |
Tests.Unit.Fridges.FridgeZoneModeTest |
Fridge without zone receives nothing once one zone counts |
0.066s |
|
| ✅ |
Tests.Unit.Fridges.FridgeZoneModeTest |
Switched off area does not count and its fridges receive nothing |
0.063s |
|
| ✅ |
Tests.Unit.Fridges.FridgeZoneModeTest |
Area under a switched off parent is switched off |
0.061s |
|
| ✅ |
Tests.Unit.Fridges.FridgeZoneModeTest |
Area with task but without fridge keeps the mode without zones |
0.061s |
|
| ✅ |
Tests.Unit.Fridges.FridgeZoneModeTest |
Filled record of an ended window is retired and stays in the history |
0.063s |
|
| ⚠️ |
Tests.Unit.Fridges.FridgeZoneModeTest |
Task generator service applies the same rule |
0.055s |
Task generator service applies the same ruleUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.comple |
| ⚠️ |
Tests.Unit.Fridges.FridgeZoneModeTest |
Regenerating a past day keeps its records |
0.055s |
Regenerating a past day keeps its recordsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.completed |
| ✅ |
Tests.Unit.Http.Middleware.CorsMiddlewareTest |
Reflects localhost 5200 on sync tablet for hot reload |
0.003s |
|
| ✅ |
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.007s |
|
| ✅ |
Tests.Unit.Loggers.AlertOptimizationReportServiceTest |
countAlertsGroupedByLogger groups sent SMS-triggering alerts by logger, across restaurants |
9.131s |
|
| ✅ |
Tests.Unit.Loggers.AlertOptimizationReportServiceTest |
generate identifies only the logger above the threshold and reaches a conclusion for it |
8.559s |
|
| ✅ |
Tests.Unit.Loggers.AlertOptimizationReportServiceTest |
generate excludes CIRL restaurants by default and includes them with withCirl |
8.351s |
|
| ✅ |
Tests.Unit.Loggers.AlertOptimizationReportServiceTest |
generate with onlyCirl keeps CIRL restaurants and drops the others |
8.234s |
|
| ✅ |
Tests.Unit.Loggers.AlertOptimizationReportServiceTest |
generate includes a logger below the alert threshold when SMS volume exceeds it |
8.057s |
|
| ✅ |
Tests.Unit.Loggers.AlertOptimizationReportServiceTest |
diagnoseLogger sets peakAlertDay to the day with the most alerts |
8.473s |
|
| ✅ |
Tests.Unit.Loggers.AlertOptimizationReportServiceTest |
diagnoseLogger sets peakAlertDay to the earliest day when two days tie |
8.269s |
|
| ✅ |
Tests.Unit.Loggers.AlertOptimizationReportServiceTest |
diagnoseLogger ignores alert_sent=false events when computing peakAlertDay |
8.651s |
|
| ✅ |
Tests.Unit.Loggers.AlertOptimizationReportServiceTest |
generate excludes a logger below the alert threshold when events have no SMS recipient |
8.439s |
|
| ✅ |
Tests.Unit.Loggers.ContactsSnapshotBuilderTest |
snapshot marks all channels active with empty skipped_reason |
8.344s |
|
| ✅ |
Tests.Unit.Loggers.ContactsSnapshotBuilderTest |
snapshot marks contact in closed dates with skipped_reason closed_dates |
8.427s |
|
| ✅ |
Tests.Unit.Loggers.ContactsSnapshotBuilderTest |
snapshot marks inactive channels and nc alerts with distinct skipped_reason |
7.818s |
|
| ✅ |
Tests.Unit.Loggers.DiagnosisSummaryFormatterTest |
isAdjustable is true only for A/B/C/F |
0.002s |
|
| ✅ |
Tests.Unit.Loggers.DiagnosisSummaryFormatterTest |
formatAction for C omits the justification stat and only states the reduction |
0.000s |
|
| ✅ |
Tests.Unit.Loggers.DiagnosisSummaryFormatterTest |
formatAction for B omits the readings-coverage justification stat |
0.000s |
|
| ✅ |
Tests.Unit.Loggers.DiagnosisSummaryFormatterTest |
formatAction for F omits the historical-coverage stat |
0.000s |
|
| ✅ |
Tests.Unit.Loggers.DiagnosisSummaryFormatterTest |
formatAction for F appends the restaurant timezone when provided |
0.000s |
|
| ✅ |
Tests.Unit.Loggers.DiagnosisSummaryFormatterTest |
formatActionLines for A lists both temperature steps when present |
0.000s |
|
| ✅ |
Tests.Unit.Loggers.DiagnosisSummaryFormatterTest |
formatActionLines for C lists both duration steps when present |
0.000s |
|
| ✅ |
Tests.Unit.Loggers.DiagnosisSummaryFormatterTest |
format includes the shared header for adjustable categories, formatAction does not |
0.001s |
|
| ✅ |
Tests.Unit.Loggers.DiagnosisSummaryFormatterTest |
format for non-adjustable categories is unchanged and self-contained |
0.000s |
|
| ✅ |
Tests.Unit.Loggers.DizzyBackToNormalFutureLogTest |
dizzy_back_to_normal (standalone) chart still includes a resolving log timestamped after "now" |
8.482s |
|
| ✅ |
Tests.Unit.Loggers.DizzyChartPeriodBuilderTest |
dizzy chart periods pair started and ended within day |
0.001s |
|
| ✅ |
Tests.Unit.Loggers.DizzyChartPeriodBuilderTest |
dizzy chart periods continue open dizzy until end of day |
0.000s |
|
| ✅ |
Tests.Unit.Loggers.DizzyChartPeriodBuilderTest |
dizzy chart periods inherit dizzy state from before day start |
0.000s |
|
| ✅ |
Tests.Unit.Loggers.DizzyChartPeriodBuilderTest |
dizzy chart periods format overlays in the day timezone |
0.000s |
|
| ✅ |
Tests.Unit.Loggers.DizzyEndedTempOngoingSuppressionTest |
temp_ongoing dizzy_ended is suppressed when already notified since the active issue started |
8.402s |
|
| ✅ |
Tests.Unit.Loggers.DizzyEndedTempOngoingSuppressionTest |
temp_ongoing dizzy_ended is sent when no notification has fired since the active issue started |
8.508s |
|
| ✅ |
Tests.Unit.Loggers.DizzyEndedTempOngoingSuppressionTest |
temp_ongoing dizzy_ended stays suppressed across repeated flaps even when no temperature_issue event was ever recorded |
8.392s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailCopyTest |
period expected points cover dizzy started to now not a near-zero duration |
0.045s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailCopyTest |
dizzy issue mail context uses reception-period counts since dizzy started |
0.053s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailCopyTest |
dizzy temperature issue mail keeps period ratio on first sentence and window on temperatures |
0.044s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailTest |
chart svg renders a polyline for multiple temperature points |
0.041s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailTest |
chart svg is empty with fewer than two points |
0.039s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailTest |
mail context builder exposes dizzy period stats |
0.047s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailTest |
mail context builder exposes compliant since for back to normal |
0.055s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailTest |
mail context builder uses window scope for dizzy back to normal with started |
0.055s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailTest |
dizzy mail stats include ignored logs in window scope |
0.055s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailTest |
dizzy temperature issue chart uses logs since dizzy started while stats stay on window |
0.045s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailTest |
mail context builder exposes dizzy ended period recap |
0.044s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailTest |
dizzy ended stats include ignored logs like the chart |
0.054s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailTest |
dizzy ended temp resolved exposes compliant since from reference log |
0.045s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailTest |
dizzy ended temp appeared does not expose compliant since |
0.046s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailTest |
dizzy ended period start uses dizzy started when older than sliding window |
0.045s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailTest |
dizzy ended temp appeared exposes anomaly started at from reference log |
0.044s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailTest |
dizzy ended period start uses sliding window when dizzy started is more recent |
0.043s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueMailTest |
dizzy ended mail context uses recap ended_at instead of now for stats and chart |
0.041s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueRepeatSuppressionTest |
dizzy_temperature_issue is not re-sent on a repeat flap while an alert is already active |
8.780s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueRepeatSuppressionTest |
dizzy_temperature_issue is sent when no alert is currently active and a 2nd reading already confirms it |
8.387s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueRepeatSuppressionTest |
dizzy_temperature_issue is deferred when only one reading has been received |
8.789s |
|
| ✅ |
Tests.Unit.Loggers.DizzyTemperatureIssueRepeatSuppressionTest |
a deferred dizzy_temperature_issue is sent once a second reading confirms it |
8.361s |
|
| ✅ |
Tests.Unit.Loggers.ExclusionWindowOptimizerTest |
optimize recommends an exclusion window when a recurring daily block would be suppressed by it |
11.599s |
|
| ✅ |
Tests.Unit.Loggers.ExclusionWindowOptimizerTest |
optimize returns null when there are too few alerts to find a candidate window |
8.173s |
|
| ✅ |
Tests.Unit.Loggers.ExclusionWindowOptimizerTest |
optimize returns null when the baseline has no episodes to begin with |
7.755s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogObserverTest |
created delegates to the timescale sync service |
0.049s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogObserverTest |
updated delegates to the timescale sync service |
0.041s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionProvisioningTest |
complète jusqu'à mois courant + 12 à partir de la dernière partition existante |
0.043s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionProvisioningTest |
les bornes suivent minuit Europe/Paris, heure d'été comme d'hiver |
0.042s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionProvisioningTest |
idempotente : rien à créer quand la fenêtre est déjà couverte |
0.046s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionProvisioningTest |
refuse une structure sans partition MAXVALUE en dernière position |
0.064s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionProvisioningTest |
refuse une dernière borne non alignée sur un début de mois |
0.064s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionProvisioningTest |
reorganizeSql découpe p_future en gardant une partition MAXVALUE en dernier |
0.047s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest |
mois courant + 1 mois précédent (rétention non-prod) garde les 2 dernières partitions nommées |
0.049s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest |
mois courant + 2 mois précédents (rétention PROD) garde les 3 dernières partitions nommées |
0.049s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest |
p_future (MAXVALUE, boundary null) n'est jamais éligible, même avec la rétention minimale |
0.047s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest |
aucune partition éligible quand la rétention couvre déjà tout l'historique nommé |
0.049s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest |
un cutoff trop récent (bug de calcul) déclenche le garde-fou |
0.046s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest |
monthsToKeepForEnvironment : 3 en production, 2 ailleurs |
0.047s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest |
rangesByName : la première partition (p_old) part de 0, chaque suivante part de la borne précédente |
0.047s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest |
rangesByName : après purge, la première partition restante est bornée à son mois nominal, pas à 0 |
0.049s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest |
nominalLowerBound : début du mois pour p_YYYY_MM, null pour p_old, exception si incohérent |
0.050s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest |
timescaleHasEnoughData : bloque si timescale a nettement moins de lignes que mysql sur la période |
0.051s |
|
| ✅ |
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.043s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest |
recordedAtWindow : pas de borne haute pour une partition MAXVALUE |
0.042s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest |
reporting() stays on mysql when TSDB_READ_ENABLED is off |
0.048s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest |
reporting() switches to timescale when TSDB_READ_ENABLED is on |
0.043s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest |
reporting() still benefits from the recorded_at mirroring when on timescale |
0.047s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest |
the default (bare) query builder is unaffected by the flag |
0.046s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest |
eager-loaded relations stay on mysql even when the parent is queried on timescale |
0.046s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest |
the self-referential logAlertSend relation is unaffected (already pinned to mysql on its own) |
0.047s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest |
relations are left alone when the parent stays on mysql |
0.050s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest |
whereBetween on timestamp mirrors recorded_at with a 1 day safety margin on timescale |
0.051s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest |
whereBetween on timestamp is left untouched on mysql |
0.047s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest |
a lower-bound where on timestamp mirrors recorded_at on timescale |
0.050s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest |
an upper-bound where on timestamp mirrors recorded_at on timescale |
0.049s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest |
an equality where on timestamp is not mirrored (too risky to assume exact recorded_at match) |
0.049s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest |
a where on a column other than timestamp is left untouched on timescale |
0.049s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest |
does nothing when sync is disabled |
0.052s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest |
does nothing when the benchmark override targets timescale as the primary connection |
0.048s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest |
does nothing when the log has no id yet |
0.049s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest |
does nothing when the log has no recorded_at |
0.050s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest |
upserts the log into timescale with matching bindings when enabled |
0.049s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest |
catches a failed upsert and logs it instead of breaking the caller |
0.052s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerPdfChartBuilderTest |
pdf day windows cover each restaurant-local day of the period |
0.048s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerPdfChartBuilderTest |
pdf day window for martinique includes paris 06:00 of that date |
0.046s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerRefactorBenchmarkTest |
Stable ok reports refactored overhead vs legacy |
25.644s |
|
| ✅ |
Tests.Unit.Loggers.FridgeLoggerRefactorBenchmarkTest |
Query profiler classifies sql |
8.050s |
|
| ✅ |
Tests.Unit.Loggers.HistoryDataControllerSopalogTest |
grouped by day: totals, anomalies and comments match the seeded rows |
8.626s |
|
| ✅ |
Tests.Unit.Loggers.HistoryDataControllerSopalogTest |
grouped by day and logger: per-logger temperature stats and area fallback |
8.477s |
|
| ✅ |
Tests.Unit.Loggers.HistoryDataControllerSopalogTest |
conformity filter keeps only days with an anomaly |
8.184s |
|
| ✅ |
Tests.Unit.Loggers.HistoryDataControllerSopalogTest |
conformity filter set to confirmed keeps only days without anomaly |
8.566s |
|
| ✅ |
Tests.Unit.Loggers.HistoryDataControllerSopalogTest |
comments filter keeps only days with a comment |
8.687s |
|
| ✅ |
Tests.Unit.Loggers.HistoryDataControllerSopalogTest |
ungrouped mode aggregates the whole period into a single bucket |
9.903s |
|
| ✅ |
Tests.Unit.Loggers.LogAnnotatorTest |
ignored out-of-range logs keep a physical snapshot without joining the alert streak |
0.048s |
|
| ✅ |
Tests.Unit.Loggers.LogAnnotatorTest |
ignored in-range logs stay at zero counters |
0.045s |
|
| ✅ |
Tests.Unit.Loggers.LogAnnotatorTest |
ignored out-of-range logs do not continue the live alerting streak |
0.044s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
presenter reports logger-level exclusion when contacts would be eligible |
0.046s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
presenter reports all-contacts exclusion when every channel is excluded |
0.044s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
presenter reports no active subscribers when contacts are inactive |
0.044s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
presenter filters out contacts without nc alerts subscription |
0.044s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
presenter shows contact name only without email or phone |
0.043s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
presenter labels contact exclusion as exclusion alertes capteurs |
0.043s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
generatesMailOrSms excludes dizzy_started |
0.044s |
|
| ✅ |
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.042s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
generatesMailOrSms includes temperature issue |
0.043s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
presenter labels temperature issue after dizzy ended |
0.045s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
appearsInAlertHistory includes dizzy_started without notification |
0.044s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
appearsInAlertHistory includes dizzy ended without variant |
0.045s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
presenter reports awaiting second reading reason |
0.043s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
countNotifications tallies sent and not sent mail or sms events |
0.044s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
sentAlertsIndexByLogId groups sent contacts by channel |
0.042s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
formatSentAlertLinesForLog shows sms and email lines with contacts |
0.053s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
formatSentAlertLinesForLog shows only sms when email was not sent |
0.043s |
|
| ✅ |
Tests.Unit.Loggers.LoggerAlertEventPresenterTest |
formatSentAlertLinesForLog returns empty when no sent events exist for log |
0.043s |
|
| ✅ |
Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest |
chart alert markers use linked log coordinates |
0.050s |
|
| ✅ |
Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest |
chart alert markers use timestamp when recorded_at is shifted |
0.045s |
|
| ✅ |
Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest |
chart alert markers style back to normal with green checkmark |
0.046s |
|
| ✅ |
Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest |
chart alert markers style dizzy ended temp resolved like back to normal |
0.044s |
|
| ✅ |
Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest |
chart alert markers style dizzy ended recap as black icon on white |
0.043s |
|
| ✅ |
Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest |
chart alert markers skip dizzy ended temp appeared |
0.043s |
|
| ✅ |
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.044s |
|
| ✅ |
Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest |
dizzy ended temp appeared is excluded from chart |
0.044s |
|
| ✅ |
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.046s |
|
| ✅ |
Tests.Unit.Loggers.LoggerDisplayTimezoneTest |
date bounds for a martinique day start at local midnight |
0.047s |
|
| ✅ |
Tests.Unit.Loggers.LoggerDisplayTimezoneTest |
day bounds from paris morning timestamp stay on the martinique calendar day |
0.043s |
|
| ✅ |
Tests.Unit.Loggers.LoggerDisplayTimezoneTest |
mysql utc offset for martinique is minus four hours |
0.044s |
|
| ✅ |
Tests.Unit.Loggers.LoggerDisplayTimezoneTest |
invalid timezone falls back to app timezone |
0.043s |
|
| ✅ |
Tests.Unit.Loggers.LoggerDisplayTimezoneTest |
formatHi converts a utc carbon to the restaurant clock |
0.043s |
|
| ✅ |
Tests.Unit.Loggers.LoggerDisplayTimezoneTest |
chart axis labels add the date at the start when the window spans two days |
0.046s |
|
| ✅ |
Tests.Unit.Loggers.LoggerDisplayTimezoneTest |
apply to logs sets display timezone used by measurement at |
0.045s |
|
| ✅ |
Tests.Unit.Loggers.LoggerDisplayTimezoneTest |
calendar period bounds keep paris dates identical for europe/paris |
0.045s |
|
| ✅ |
Tests.Unit.Loggers.LoggerDisplayTimezoneTest |
calendar period bounds reinterpret a paris day as martinique midnight |
0.045s |
|
| ✅ |
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.051s |
|
| ✅ |
Tests.Unit.Loggers.LoggerTemperatureChartPngRendererTest |
png chart is empty with fewer than two points |
0.049s |
|
| ✅ |
Tests.Unit.Loggers.LoggerTemperatureChartPngRendererTest |
png chart renders a valid PNG at the requested size for multiple points |
0.051s |
|
| ✅ |
Tests.Unit.Loggers.LoggerTemperatureChartPngRendererTest |
png chart stroke is dark rather than white |
0.057s |
|
| ✅ |
Tests.Unit.Loggers.LoggerTemperatureChartPngRendererTest |
png chart keeps the last temperature label inside the canvas |
0.062s |
|
| ✅ |
Tests.Unit.Loggers.LoggerTemperatureChartPurgerTest |
purge removes only day directories older than the retention window |
0.048s |
|
| ✅ |
Tests.Unit.Loggers.LoggerTemperatureChartPurgerTest |
purge is a no-op when the directory does not exist |
0.044s |
|
| ✅ |
Tests.Unit.Loggers.LoggerTemperatureChartSvgRendererTest |
svg chart plots timestamp even when recorded_at is two hours earlier |
0.045s |
|
| ✅ |
Tests.Unit.Loggers.LoggerTemperatureChartSvgRendererTest |
fridge logger log chart axis uses timestamp not recorded_at |
0.044s |
|
| ✅ |
Tests.Unit.Loggers.LoggerTemperatureChartSvgRendererTest |
svg chart axis labels use restaurant timezone not utc |
0.043s |
|
| ✅ |
Tests.Unit.Loggers.LoggerTemperatureChartSvgRendererTest |
chart axis uses restaurant timezone when provided |
0.042s |
|
| ✅ |
Tests.Unit.Loggers.LoggerWindowStateBackfillerTest |
skips a logger whose last_log_id is already at or after until |
9.232s |
|
| ✅ |
Tests.Unit.Loggers.LoggerWindowStateBackfillerTest |
processes a logger whose last_log_id is stale relative to until |
8.439s |
|
| ✅ |
Tests.Unit.Loggers.LoggerWindowStateBackfillerTest |
skips a logger already caught up to until when no newer data arrived (re-run with same --until) |
8.474s |
|
| ✅ |
Tests.Unit.Loggers.LoggerWindowStateBackfillerTest |
processes a logger with no prior last_log_id |
8.189s |
|
| ✅ |
Tests.Unit.Loggers.LoggerWindowStateBackfillerTest |
processes a logger with a legacy last_log_id but no last_event yet |
8.209s |
|
| ✅ |
Tests.Unit.Loggers.LoggerWindowStateBackfillerTest |
cutoff relies on the reading timestamp, not created_at |
8.208s |
|
| ✅ |
Tests.Unit.Loggers.NoDataAlertCoordinatorTest |
applyReconnectContext flags pending no data alert |
9.072s |
|
| ✅ |
Tests.Unit.Loggers.NoDataAlertCoordinatorTest |
resolveViaTemperatureReconnect clears flags and records merged resolution event |
8.958s |
|
| ✅ |
Tests.Unit.Loggers.ReceptionQualityAnalyzerTest |
classify returns category D for a clean, regular cadence multiple of 10 min |
8.504s |
|
| ✅ |
Tests.Unit.Loggers.ReceptionQualityAnalyzerTest |
classify returns category E when alerts fire on windows with low data completeness |
8.293s |
|
| ✅ |
Tests.Unit.Loggers.ReceptionQualityAnalyzerTest |
classify returns null for a normal, well-received sensor |
8.730s |
|
| ✅ |
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.053s |
|
| ✅ |
Tests.Unit.Loggers.SmsPhoneDeduplicationTest |
normalizePhone maps french national formats to e164 |
0.044s |
|
| ✅ |
Tests.Unit.Loggers.SmsPhoneDeduplicationTest |
prepareMessage leaves short messages untouched even with degree symbol |
0.050s |
|
| ✅ |
Tests.Unit.Loggers.SmsPhoneDeduplicationTest |
prepareMessage keeps gsm7 french accents like E acute |
0.054s |
|
| ✅ |
Tests.Unit.Loggers.SmsPhoneDeduplicationTest |
prepareMessage only rewrites chars outside gsm7 when longer than 70 |
0.053s |
|
| ✅ |
Tests.Unit.Loggers.SmsPhoneDeduplicationTest |
prepareMessage leaves real french donnees with e acute unchanged |
0.045s |
|
| ✅ |
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.045s |
|
| ✅ |
Tests.Unit.Loggers.StableTemperatureMailTest |
stable alert chart axis extends to now without including later compliant points |
0.042s |
|
| ✅ |
Tests.Unit.Loggers.StableTemperatureMailTest |
stable mail chart stays in viewbox when recorded_at is shifted from timestamp |
0.044s |
|
| ✅ |
Tests.Unit.Loggers.StableTemperatureMailTest |
stable mail context builder exposes compliant since on resolution |
0.045s |
|
| ✅ |
Tests.Unit.Loggers.TemperatureIssueContextTest |
back_to_normal during exclusion resolves a deferred temperature issue |
8.395s |
|
| ✅ |
Tests.Unit.Loggers.TemperatureIssueContextTest |
deferred issue without resolution stays pending |
8.685s |
|
| ✅ |
Tests.Unit.Loggers.TemperatureIssueContextTest |
isTempOngoingAlreadyNotified is true right after a temp_ongoing dizzy_ended was sent |
9.014s |
|
| ✅ |
Tests.Unit.Loggers.TemperatureIssueContextTest |
isTempOngoingAlreadyNotified is false once a resolution happened after the last dizzy_ended |
9.113s |
|
| ✅ |
Tests.Unit.Loggers.TemperatureIssueContextTest |
isTempOngoingAlreadyNotified is false when no dizzy_ended has fired yet |
8.891s |
|
| ✅ |
Tests.Unit.Loggers.TemperatureReminderEvaluatorTest |
reminder is not sent in the same batch as a fresh temperature issue |
8.742s |
|
| ✅ |
Tests.Unit.Loggers.TemperatureReminderEvaluatorTest |
reminder uses the latest issue after context refresh |
8.328s |
|
| ✅ |
Tests.Unit.Loggers.TemperatureReminderEvaluatorTest |
reminder is sent two hours after the active issue |
7.980s |
|
| ✅ |
Tests.Unit.Loggers.TemperatureReminderEvaluatorTest |
pending temperature issue suppressed by dizzy ended is never sent later |
8.063s |
|
| ✅ |
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.120s |
|
| ✅ |
Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest |
optimize recommends only category B when both thresholds must move to resolve most alerts |
9.617s |
|
| ✅ |
Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest |
optimize recommends only category C when the alerts are short excursions unaffected by threshold changes |
9.567s |
|
| ✅ |
Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest |
optimize surfaces both a threshold option and a duration option when both are independently viable |
9.211s |
|
| ✅ |
Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest |
optimize returns an empty list when there is nothing worth changing |
8.196s |
|
| ✅ |
Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest |
optimize surfaces +1°C and +2°C when the larger step reduces alerts much more |
7.944s |
|
| ✅ |
Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest |
optimize keeps only +1°C when +2°C barely improves further |
8.189s |
|
| ✅ |
Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest |
optimize keeps only +2°C when +1°C does not reduce alerts enough |
9.079s |
|
| ✅ |
Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest |
optimize surfaces +10 min and +20 min when the larger step reduces alerts much more |
9.165s |
|
| ✅ |
Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest |
optimize keeps only +10 min when +20 min barely improves further |
9.127s |
|
| ✅ |
Tests.Unit.Loggers.TimeClusteringAnalyzerTest |
findBestWindow finds a <=4h window covering more than 80% of the alerts |
8.222s |
|
| ✅ |
Tests.Unit.Loggers.TimeClusteringAnalyzerTest |
findBestWindow handles a window wrapping past midnight |
8.538s |
|
| ✅ |
Tests.Unit.Loggers.TimeClusteringAnalyzerTest |
findBestWindow returns a low-coverage window when alerts are spread evenly across the day |
8.184s |
|
| ✅ |
Tests.Unit.Loggers.TimeClusteringAnalyzerTest |
findBestWindow returns null when there are too few alerts to be meaningful |
8.581s |
|
| ✅ |
Tests.Unit.Loggers.WindowStateReplaySimulatorTest |
analyzeWindow matches TemperatureWindowAnalyzer::analyze() for the same logs and config |
9.106s |
|
| ✅ |
Tests.Unit.Loggers.WindowStateReplaySimulatorTest |
countIssueEpisodes counts one episode per sustained out-of-limits block |
8.966s |
|
| ✅ |
Tests.Unit.Loggers.WindowStateReplaySimulatorTest |
countIssueEpisodes counts a fresh episode after a full recovery in between |
8.723s |
|
| ✅ |
Tests.Unit.Loggers.WindowStateReplaySimulatorTest |
countIssueEpisodes returns 0 when nothing ever leaves the stable_ok state |
8.549s |
|
| ✅ |
Tests.Unit.Mail.MailPitTagsTest |
adds X-Tags header when mailpit_tags is configured |
0.060s |
|
| ✅ |
Tests.Unit.Mail.MailPitTagsTest |
does nothing when mailpit_tags is empty |
0.051s |
|
| ✅ |
Tests.Unit.Mail.MailPitTagsTest |
does not overwrite an existing X-Tags header |
0.047s |
|
| ✅ |
Tests.Unit.Mail.MailSimulatedTimestampTest |
sets mail date header from carbon test now |
0.047s |
|
| ✅ |
Tests.Unit.Mail.MailSimulatedTimestampTest |
does nothing when carbon test now is not set |
0.041s |
|
| ✅ |
Tests.Unit.Mail.MailSimulatedTimestampTest |
can prefix subject when LOGGER_MAIL_SUBJECT_SIMULATED_TIME is enabled |
0.042s |
|
| ✅ |
Tests.Unit.NotationServiceRegressionTest |
Check percent ne declenche pas d alerte quand total est zero |
0.002s |
|
| ✅ |
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.002s |
|
| ✅ |
Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest |
Normal range hour outside restaurant is open |
0.000s |
|
| ✅ |
Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest |
Midnight crossing range hour before midnight should be closed |
0.000s |
|
| ✅ |
Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest |
Midnight crossing range hour after midnight should be closed |
0.000s |
|
| ✅ |
Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest |
Midnight crossing range start boundary should be closed |
0.000s |
|
| ✅ |
Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest |
Midnight crossing range end boundary should be closed |
0.000s |
|
| ✅ |
Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest |
Midnight crossing range hour clearly outside stays open |
0.000s |
|
| ✅ |
Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest |
Midnight crossing range just before start stays open |
0.000s |
|
| ✅ |
Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest |
Midnight crossing range just after end stays open |
0.000s |
|
| ✅ |
Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest |
Closed all day when start equals end stays closed at any hour |
0.000s |
|
| ✅ |
Tests.Unit.Routing.ModuleCsrfCoverageTest |
Every module write route served by session is covered by csrf |
0.047s |
|
| ✅ |
Tests.Unit.Routing.ModuleCsrfCoverageTest |
The module csrf verifier has no exemption |
0.044s |
|
| ✅ |
Tests.Unit.Support.DeviceTokenTest |
Token has the legacy format 128 lowercase hex chars |
0.002s |
|
| ✅ |
Tests.Unit.Support.DeviceTokenTest |
Token format matches the legacy sha512 generator |
0.000s |
|
| ✅ |
Tests.Unit.Support.DeviceTokenTest |
Tokens are unique over many draws |
0.001s |
|
| ✅ |
Tests.Unit.Support.DeviceTokenTest |
Token carries full entropy no constant or time based prefix |
0.002s |
|
| ✅ |
Tests.Unit.Support.MailAddressListTest |
Flatten keeps plain email strings |
0.002s |
|
| ✅ |
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.046s |
|
| ✅ |
Tests.Unit.Support.SafeSerializeTest |
Une valeur abimee rend null sans lever d erreur |
0.045s |
|
| ✅ |
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.042s |
|
| ✅ |
Tests.Unit.Support.SafeSerializeTest |
Serialize garde les caracteres sur trois octets |
0.042s |
|
| ✅ |
Tests.Unit.Support.SafeSerializeTest |
Serialize laisse les non chaines intactes |
0.041s |
|
| ✅ |
Tests.Unit.Support.SafeSerializeTest |
Serialize rend null plutot que lever sur une valeur non serialisable |
0.041s |
|
| ✅ |
Tests.Unit.Support.SafeSerializeTest |
Strip non bmp filtre aussi une chaine utf8 invalide |
0.043s |
|
| ✅ |
Tests.Unit.Support.SafeSerializeTest |
Une valeur abimee est ecrite dans le log sans lever |
0.045s |
|
| ✅ |
Tests.Unit.Support.SafeSerializeTest |
Une valeur non serialisable est ecrite dans le log sans lever |
0.045s |
|
| ✅ |
Tests.Unit.Support.SafeSerializeTest |
Une valeur saine n ecrit rien dans le log |
0.042s |
|
| ✅ |
Tests.Unit.Support.SafeSerializeTest |
Un objet serialise n est pas instancie |
0.041s |
|
| ✅ |
Tests.Unit.Support.SafeSerializeTest |
Un objet seul n est pas instancie |
0.041s |
|
| ✅ |
Tests.Unit.Support.SafeSerializeTest |
Tableaux et scalaires se lisent comme avant |
0.040s |
|
| ✅ |
Tests.Unit.Support.SafeSerializeTest |
Vide ou non chaine rend null |
0.041s |
|
| ✅ |
Tests.Unit.Support.SerializedColumnsModelsTest |
ExtraActions abime rend null sans lever |
0.049s |
|
| ✅ |
Tests.Unit.Support.SerializedColumnsModelsTest |
Icon titles abime rend un tableau vide sans lever |
0.045s |
|
| ✅ |
Tests.Unit.Support.SerializedColumnsModelsTest |
Icon titles sain est rendu tel quel |
0.044s |
|
| ✅ |
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.041s |
|
| ✅ |
Tests.Unit.Support.SerializedColumnsModelsTest |
Icon titles vide rend toujours un tableau vide |
0.043s |
|
| ✅ |
Tests.Unit.TaskGeneration.AuditTaskGenerationTest |
Day creates audit record and action tasks |
0.252s |
|
| ✅ |
Tests.Unit.TaskGeneration.AuditTaskGenerationTest |
Week period |
0.230s |
|
| ✅ |
Tests.Unit.TaskGeneration.AuditTaskGenerationTest |
Month period |
0.235s |
|
| ✅ |
Tests.Unit.TaskGeneration.AuditTaskGenerationTest |
Year period |
0.232s |
|
| ✅ |
Tests.Unit.TaskGeneration.AuditTaskGenerationTest |
Trimester period |
0.230s |
|
| ✅ |
Tests.Unit.TaskGeneration.AuditTaskGenerationTest |
Semester period |
0.228s |
|
| ✅ |
Tests.Unit.TaskGeneration.AuditTaskGenerationTest |
Finished creates record without valid until and far future tasks |
0.234s |
|
| ✅ |
Tests.Unit.TaskGeneration.AuditTaskGenerationTest |
Idempotent second run |
0.233s |
|
| ✅ |
Tests.Unit.TaskGeneration.AuditTaskGenerationTest |
Client audits disabled skips action tasks |
0.235s |
|
| ✅ |
Tests.Unit.TaskGeneration.AuditTaskGenerationTest |
Local override action active zero skips that action |
0.230s |
|
| ✅ |
Tests.Unit.TaskGeneration.AuditTaskGenerationTest |
Inactive audit skips |
0.226s |
|
| ✅ |
Tests.Unit.TaskGeneration.AuditTaskGenerationTest |
Restaurant closed skips |
0.225s |
|
| ✅ |
Tests.Unit.TaskGeneration.AuditTaskGenerationTest |
Multiple actions create multiple tasks |
0.240s |
|
| ✅ |
Tests.Unit.TaskGeneration.AuditTaskGenerationTest |
National audit for family restaurant |
0.228s |
|
| ✅ |
Tests.Unit.TaskGeneration.AuditTaskGenerationTest |
Artisan family option |
0.230s |
|
| ✅ |
Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest |
Day period generates |
0.232s |
|
| ✅ |
Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest |
Week period generates |
0.226s |
|
| ✅ |
Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest |
Month period generates |
0.225s |
|
| ✅ |
Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest |
Year period generates |
0.225s |
|
| ✅ |
Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest |
Custom period with start and end date |
0.223s |
|
| ✅ |
Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest |
Custom period outside window skips |
0.222s |
|
| ✅ |
Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest |
Idempotent second run |
0.232s |
|
| ✅ |
Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest |
Local override active zero skips |
0.227s |
|
| ✅ |
Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest |
Inactive checklist skips |
0.223s |
|
| ✅ |
Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest |
Inactive action skips |
0.224s |
|
| ✅ |
Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest |
Restaurant closed skips |
0.225s |
|
| ✅ |
Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest |
National checklist for family restaurant |
0.227s |
|
| ✅ |
Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest |
Action filter via artisan |
0.226s |
|
| ✅ |
Tests.Unit.TaskGeneration.ChecklistTaskGenerationTest |
Week period idempotent within week |
0.229s |
|
| ✅ |
Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest |
Day period generates |
0.227s |
|
| ✅ |
Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest |
Week period generates |
0.222s |
|
| ✅ |
Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest |
Month period generates |
0.227s |
|
| ✅ |
Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest |
Year period generates |
0.225s |
|
| ✅ |
Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest |
Idempotent second run |
0.227s |
|
| ✅ |
Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest |
Family parameters skip national when values without national |
0.226s |
|
| ✅ |
Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest |
Family parameters skip local when values without local |
0.228s |
|
| ✅ |
Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest |
Inactive action skips |
0.224s |
|
| ✅ |
Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest |
Restaurant closed skips |
0.225s |
|
| ✅ |
Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest |
Week period idempotent within week |
0.231s |
|
| ✅ |
Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest |
Artisan family option |
0.228s |
|
| ✅ |
Tests.Unit.TaskGeneration.CleaningPlanAuditTaskGenerationTest |
Both national and local when family allows both |
0.226s |
|
| ❌ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Day action generates |
0.236s |
Day action generatesFailed asserting that 0 is identical to 1.
at tests/Unit/TaskGeneration/CleaningPlanTaskGenerationTest.php:37 |
| ❌ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Idempotent second run |
0.230s |
Idempotent second runFailed asserting that 0 is identical to 1.
at tests/Unit/TaskGeneration/CleaningPlanTaskGenerationTest.php:58 |
| ⚠️ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Week period generates |
0.219s |
Week period generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.completed
Context: {"event":" |
| ⚠️ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Month period generates |
0.218s |
Month period generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.completed
Context: {"event": |
| ⚠️ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Year period generates |
0.218s |
Year period generatesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.completed
Context: {"event":" |
| ⚠️ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Always creates open task and is idempotent while undone and valid |
0.222s |
Always creates open task and is idempotent while undone and validUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to l |
| ⚠️ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Always with expirations days |
0.220s |
Always with expirations daysUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.completed
Context: {"e |
| ⚠️ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Always catch up outside action days when expirations set |
0.219s |
Always catch up outside action days when expirations setUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: gener |
| ⚠️ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Frequency greater than one creates n indexed tasks |
0.220s |
Frequency greater than one creates n indexed tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation. |
| ⚠️ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Frequency migration from one to n reuses existing as main |
0.219s |
Frequency migration from one to n reuses existing as mainUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: gene |
| ⚠️ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Closed restaurant via date skips |
0.218s |
Closed restaurant via date skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.completed
Context: |
| ⚠️ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Full day week closure skips day slot |
0.216s |
Full day week closure skips day slotUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.completed
Cont |
| ⚠️ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Partial week closure covering start end skips |
0.220s |
Partial week closure covering start end skipsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.compl |
| ⚠️ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Nat plan disabled via client cleaning plan areas disabled |
0.222s |
Nat plan disabled via client cleaning plan areas disabledUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: gene |
| ⚠️ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Nat action disabled via client cleaning plan actions disabled |
0.225s |
Nat action disabled via client cleaning plan actions disabledUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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 |
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-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.co |
| ❌ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Only action id filter |
0.231s |
Only action id filterFailed asserting that 0 is identical to 1.
at tests/Unit/TaskGeneration/CleaningPlanTaskGenerationTest.php:413 |
| ⚠️ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Days filter skips when not matching |
0.218s |
Days filter skips when not matchingUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.completed
Conte |
| ⚠️ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Months filter skips when not matching |
0.218s |
Months filter skips when not matchingUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.completed
Con |
| ⚠️ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Days filter does not skip always with expirations |
0.219s |
Days filter does not skip always with expirationsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.c |
| ❌ |
Tests.Unit.TaskGeneration.CleaningPlanTaskGenerationTest |
Service and artisan paths agree for day action |
0.224s |
Service and artisan paths agree for day actionFailed asserting that 0 is identical to 1.
at tests/Unit/TaskGeneration/CleaningPlanTaskGenerationTest.php:493 |
| ⚠️ |
Tests.Unit.TaskGeneration.CloseStaleAuditsCommandTest |
Command closes stale audit on inactive restaurant only |
0.389s |
Command closes stale audit on inactive restaurant onlyUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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.223s |
|
| ⚠️ |
Tests.Unit.TaskGeneration.DormantRestaurantsReportCommandTest |
Dormant report lists active restaurant with no open day |
0.391s |
Dormant report lists active restaurant with no open dayUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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.226s |
Dormant report ignores inactive restaurantsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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.223s |
Dormant report ignores restaurant with insufficient historyUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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.230s |
Fridge 01 kernel generates within local day onlyUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: batch.complet |
| ⚠️ |
Tests.Unit.TaskGeneration.FridgeKernelDecisionTest |
Fridge 03 kernel skips when closure covers full task slot |
0.218s |
Fridge 03 kernel skips when closure covers full task slotUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: batc |
| ⚠️ |
Tests.Unit.TaskGeneration.FridgeKernelDecisionTest |
Fridge 03 kernel generates when closure only partially overlaps slot |
0.232s |
Fridge 03 kernel generates when closure only partially overlaps slotUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting t |
| ⚠️ |
Tests.Unit.TaskGeneration.FridgeKernelDecisionTest |
Fridge 04 task generator skips when family forbids national tasks |
0.227s |
Fridge 04 task generator skips when family forbids national tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to l |
| ✅ |
Tests.Unit.TaskGeneration.FridgeKernelDecisionTest |
Independent restaurant generates fridge task |
0.224s |
|
| ✅ |
Tests.Unit.TaskGeneration.FridgeTaskGenerationTest |
Generates one record per fridge task day |
0.230s |
|
| ✅ |
Tests.Unit.TaskGeneration.FridgeTaskGenerationTest |
Idempotent second run creates no duplicate |
0.232s |
|
| ✅ |
Tests.Unit.TaskGeneration.FridgeTaskGenerationTest |
Inactive restaurant is skipped |
0.224s |
|
| ✅ |
Tests.Unit.TaskGeneration.FridgeTaskGenerationTest |
Restaurant closed via date is skipped |
0.224s |
|
| ✅ |
Tests.Unit.TaskGeneration.FridgeTaskGenerationTest |
Closed weekday on task skips that day |
0.221s |
|
| ✅ |
Tests.Unit.TaskGeneration.FridgeTaskGenerationTest |
Inactive fridge is skipped |
0.224s |
|
| ✅ |
Tests.Unit.TaskGeneration.FridgeTaskGenerationTest |
Inactive task is skipped |
0.222s |
|
| ✅ |
Tests.Unit.TaskGeneration.FridgeTaskGenerationTest |
Multiple fridges times multiple tasks |
0.236s |
|
| ✅ |
Tests.Unit.TaskGeneration.FridgeTaskGenerationTest |
National task with local fridge |
0.231s |
|
| ✅ |
Tests.Unit.TaskGeneration.FridgeTaskGenerationTest |
National fridge with local task |
0.230s |
|
| ✅ |
Tests.Unit.TaskGeneration.FridgeTaskGenerationTest |
Generate via family option |
0.227s |
|
| ✅ |
Tests.Unit.TaskGeneration.FridgeTaskGenerationTest |
Generate all via family helper runs fridge |
0.248s |
|
| ✅ |
Tests.Unit.TaskGeneration.FridgeTaskGenerationTest |
Overnight start after end still generates |
0.227s |
|
| ✅ |
Tests.Unit.TaskGeneration.FridgeTaskGenerationTest |
Timezone europe paris |
0.225s |
|
| ⚠️ |
Tests.Unit.TaskGeneration.KernelCallbackCoverageTest |
Kernel service temperature generates and is idempotent |
0.229s |
Kernel service temperature generates and is idempotentUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: batch.c |
| ⚠️ |
Tests.Unit.TaskGeneration.KernelCallbackCoverageTest |
Kernel pnd delegates to task generator service |
0.222s |
Kernel pnd delegates to task generator serviceUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: batch.completed |
| ⚠️ |
Tests.Unit.TaskGeneration.KernelCallbackCoverageTest |
Kernel audit creates record and is idempotent |
0.217s |
Kernel audit creates record and is idempotentUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: batch.completed
|
| ⚠️ |
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-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: batch.completed
Cont |
| ✅ |
Tests.Unit.TaskGeneration.KernelCallbackCoverageTest |
Kernel open close history purges unfinished fridge for closed yesterday |
0.228s |
|
| ⚠️ |
Tests.Unit.TaskGeneration.KernelCommandDivergenceTest |
Fridge 03 kernel and command both skip on full slot closure |
0.222s |
Fridge 03 kernel and command both skip on full slot closureUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: ba |
| ⚠️ |
Tests.Unit.TaskGeneration.KernelCommandDivergenceTest |
Cl 02 day checklist both paths skip on full day week closure |
0.219s |
Cl 02 day checklist both paths skip on full day week closureUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: b |
| ⚠️ |
Tests.Unit.TaskGeneration.KernelCommandDivergenceTest |
Checklist partial slot closure both paths generate |
0.217s |
Checklist partial slot closure both paths generateUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: batch.compl |
| ⚠️ |
Tests.Unit.TaskGeneration.LegacyRetirementCheckCommandTest |
Reports not ready when active restaurant is not canary |
0.224s |
Reports not ready when active restaurant is not canaryUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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.220s |
Reports not ready when a reconcile probe is saturatedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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.219s |
Reports ready when all conditions are metUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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.212s |
|
| ✅ |
Tests.Unit.TaskGeneration.LockRenewalTest |
Renew is noop when owner does not match |
0.210s |
|
| ⚠️ |
Tests.Unit.TaskGeneration.LockRenewalTest |
Fridge generator renews lock while processing several tasks |
0.227s |
Fridge generator renews lock while processing several tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: ge |
| ⚠️ |
Tests.Unit.TaskGeneration.LockRenewalTest |
Pnd generator never renews lock mid transaction |
0.223s |
Pnd generator never renews lock mid transactionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.com |
| ⚠️ |
Tests.Unit.TaskGeneration.LockRenewalTest |
Pnd lock ttl scales with restaurant task volume |
0.221s |
Pnd lock ttl scales with restaurant task volumeUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.com |
| ✅ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Soft deleted fridge is skipped by command |
0.228s |
|
| ✅ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Soft deleted fridge task is skipped by command |
0.221s |
|
| ✅ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Minimum records is copied onto task day |
0.227s |
|
| ✅ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
National st task shared by two restaurants creates task days per area |
0.393s |
|
| ✅ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Adding area mid period creates additional task day |
0.231s |
|
| ⚠️ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
St family params skip national via task generator |
0.218s |
St family params skip national via task generatorUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.c |
| ⚠️ |
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-10.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-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: gen |
| ⚠️ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Pnd period change on existing task is updated |
0.218s |
Pnd period change on existing task is updatedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.compl |
| ⚠️ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Pnd valid until pulled back to last open day |
0.221s |
Pnd valid until pulled back to last open dayUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.comple |
| ⚠️ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Pnd inactive parent plan excludes child plan actions |
0.216s |
Pnd inactive parent plan excludes child plan actionsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generatio |
| ✅ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Pnd dry run creates no persisted tasks |
0.225s |
|
| ⚠️ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Checklist kernel skips day when full day week closure |
0.217s |
Checklist kernel skips day when full day week closureUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: batch.co |
| ⚠️ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Checklist day creates new task on next day via kernel |
0.218s |
Checklist day creates new task on next day via kernelUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: batch.co |
| ✅ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Soft deleted checklist is skipped |
0.220s |
|
| ⚠️ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Checklist family params skip national via task generator |
0.216s |
Checklist family params skip national via task generatorUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: gener |
| ✅ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Audit custom outside window skips |
0.220s |
|
| ✅ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Audit custom inside window generates |
0.228s |
|
| ✅ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Audit expired current record is closed before new period |
0.231s |
|
| ✅ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Audit adds missing action tasks on existing record |
0.241s |
|
| ⚠️ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Audit family params skip national via task generator |
0.223s |
Audit family params skip national via task generatorUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generatio |
| ⚠️ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Cpa fully closed period skipped via task generator |
0.215s |
Cpa fully closed period skipped via task generatorUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation. |
| ✅ |
Tests.Unit.TaskGeneration.ModuleGapsTaskGenerationTest |
Cpa next week creates new task via command |
0.228s |
|
| ❌ |
Tests.Unit.TaskGeneration.NewRestaurantCanaryEnrollmentTest |
New restaurant created via eloquent is enrolled in canary mode |
0.271s |
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.225s |
Fridge day creates new record on next calendar day via kernelUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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 |
Pnd week creates new task on following week |
0.222s |
Pnd week creates new task on following weekUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.complet |
| ⚠️ |
Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest |
Pnd always creates new open task after expiration |
0.220s |
Pnd always creates new open task after expirationUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.c |
| ⚠️ |
Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest |
Kernel respects restaurant timezone for local day |
0.222s |
Kernel respects restaurant timezone for local dayUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: batch.comple |
| ⚠️ |
Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest |
Two restaurants different timezones in same kernel chunk |
0.389s |
Two restaurants different timezones in same kernel chunkUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: batch |
| ⚠️ |
Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest |
Task generator skips when lock already held |
0.214s |
Task generator skips when lock already heldUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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.233s |
|
| ✅ |
Tests.Unit.TaskGeneration.PeriodTimezoneAndLockTest |
Open close fix skips modules not selected |
0.232s |
|
| ⚠️ |
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-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: request.enqueued
Co |
| ⚠️ |
Tests.Unit.TaskGeneration.PhaseETriggerSystemTest |
Action scoped request does not merge with full module |
0.213s |
Action scoped request does not merge with full moduleUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: request. |
| ⚠️ |
Tests.Unit.TaskGeneration.PhaseETriggerSystemTest |
Lost wake up keeps request pending |
0.216s |
Lost wake up keeps request pendingUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: request.enqueued
Context: { |
| ⚠️ |
Tests.Unit.TaskGeneration.PhaseETriggerSystemTest |
Db lock contention defers second owner |
0.215s |
Db lock contention defers second ownerUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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.215s |
Run now returns null modules when lock busyUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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.222s |
|
| ⚠️ |
Tests.Unit.TaskGeneration.PhaseETriggerSystemTest |
Request family filters to canary when canary exists |
0.282s |
Request family filters to canary when canary existsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: request.en |
| ⚠️ |
Tests.Unit.TaskGeneration.PhaseETriggerSystemTest |
Canary dual coverage idempotent single fridge record |
0.235s |
Canary dual coverage idempotent single fridge recordUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generatio |
| ⚠️ |
Tests.Unit.TaskGeneration.PhaseETriggerSystemTest |
Pnd sync lock busy schedules reactive retry job |
0.218s |
Pnd sync lock busy schedules reactive retry jobUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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.222s |
Run now lock per module allows partial successUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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.222s |
Reconcile ignores pnd always backlog when valid open successor existsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting |
| ⚠️ |
Tests.Unit.TaskGeneration.ReconcileCommandTest |
Reconcile enqueues pnd always when no open successor exists |
0.230s |
Reconcile enqueues pnd always when no open successor existsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: re |
| ⚠️ |
Tests.Unit.TaskGeneration.ReconcileCommandTest |
Reconcile still enqueues audit current expired for active restaurant |
0.224s |
Reconcile still enqueues audit current expired for active restaurantUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting t |
| ⚠️ |
Tests.Unit.TaskGeneration.ReconcileCommandTest |
Reconcile closes audit current expired as not done for inactive restaurant |
0.230s |
Reconcile closes audit current expired as not done for inactive restaurantUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attemp |
| ⚠️ |
Tests.Unit.TaskGeneration.ReconcileCommandTest |
Reconcile dry run does not close stale audit on inactive restaurant |
0.223s |
Reconcile dry run does not close stale audit on inactive restaurantUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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 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-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting |
| ⚠️ |
Tests.Unit.TaskGeneration.ReconcileCommandTest |
Reconcile dry run does not close active restaurant audit |
0.224s |
Reconcile dry run does not close active restaurant auditUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: recon |
| ⚠️ |
Tests.Unit.TaskGeneration.ReconcileCommandTest |
Reconcile skips pnd enqueue for closed restaurant |
0.228s |
Reconcile skips pnd enqueue for closed restaurantUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: reconcile.su |
| ⚠️ |
Tests.Unit.TaskGeneration.ReconcileCommandTest |
Reconcile tracks and resets probe saturation streak |
0.230s |
Reconcile tracks and resets probe saturation streakUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: reconcile. |
| ✅ |
Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest |
Deletes unfinished fridge records for period |
0.221s |
|
| ⚠️ |
Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest |
Keeps done cleaning plan tasks |
0.223s |
Keeps done cleaning plan tasksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation.completed
Context: { |
| ✅ |
Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest |
Process for record is idempotent via tasks processed |
0.229s |
|
| ✅ |
Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest |
Process for record open day marks processed without deleting |
0.219s |
|
| ✅ |
Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest |
Closing one restaurant does not purge national service temperature task days |
0.380s |
|
| ✅ |
Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest |
Closing restaurant purges local service temperature task days |
0.219s |
|
| ✅ |
Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest |
Monday week purge when restaurant closed all week |
0.229s |
|
| ✅ |
Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest |
First of month month purge when closed all month |
0.234s |
|
| ✅ |
Tests.Unit.TaskGeneration.RestaurantOpenCloseTasksTest |
Close then reopen marks processed without deleting finished fridge |
0.224s |
|
| ❌ |
Tests.Unit.TaskGeneration.RestaurantReopenTriggerTest |
Is closed flag cleared triggers full regeneration request |
0.229s |
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.218s |
|
| ❌ |
Tests.Unit.TaskGeneration.RestaurantReopenTriggerTest |
Closed date created triggers regeneration request |
0.214s |
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.217s |
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.226s |
|
| ✅ |
Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest |
With areas creates one task day per area |
0.224s |
|
| ✅ |
Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest |
Cleanup deletes task days without area when areas exist |
0.222s |
|
| ✅ |
Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest |
Cleanup deletes task days with area when no areas |
0.223s |
|
| ✅ |
Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest |
Week period uses week window idempotence |
0.227s |
|
| ✅ |
Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest |
Closed weekday on task skips |
0.218s |
|
| ✅ |
Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest |
Inactive task skips |
0.219s |
|
| ✅ |
Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest |
Restaurant closed skips |
0.219s |
|
| ✅ |
Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest |
National st task for family restaurant |
0.224s |
|
| ✅ |
Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest |
Lock fields copied when area is locked |
0.223s |
|
| ✅ |
Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest |
Artisan family option |
0.222s |
|
| ✅ |
Tests.Unit.TaskGeneration.ServiceTemperatureTaskGenerationTest |
Idempotent day period second run |
0.228s |
|
| ⚠️ |
Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest |
Pnd always sync regeneration creates next open task |
0.278s |
Pnd always sync regeneration creates next open taskUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: generation |
| ⚠️ |
Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest |
Pnd always sync does not duplicate when open task already exists |
0.275s |
Pnd always sync does not duplicate when open task already existsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to lo |
| ⚠️ |
Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest |
Pnd always service second run idempotent while open task valid |
0.229s |
Pnd always service second run idempotent while open task validUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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 |
Audit finished sync regenerates new current cycle |
0.549s |
Audit finished sync regenerates new current cycleExpected response status code [200] but received 500.
Failed asserting that 500 is identical to 200.
The following exception occurred during the last request:
UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_gen |
| ❌ |
Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest |
Audit finished regenerate skipped when audit disabled |
0.439s |
Audit finished regenerate skipped when audit disabledExpected response status code [200] but received 500.
Failed asserting that 500 is identical to 200.
The following exception occurred during the last request:
UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task |
| ⚠️ |
Tests.Unit.TaskGeneration.SyncReactiveTaskGenerationTest |
Lock area creates task day when missing |
0.274s |
Lock area creates task day when missingUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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.057s |
Health json report includes probe streaksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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.053s |
Health console output warns when streak reaches thresholdUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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.056s |
Health console output does not warn below thresholdUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/task_generation-2026-10-10.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.097s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Can update dynamic areas and section fields |
0.077s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Rich text validates plain text length not html length |
0.068s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Content title validates max string length |
0.058s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Home sections title validates max string length |
0.057s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Related article title validates max string length on content store |
0.066s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Content title validates max string length on content store |
0.057s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Front renders rich text html unescaped |
0.133s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Can search existing tags for backoffice autocomplete |
0.057s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Video content draft then publish then toggle from list then delete |
0.079s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Document flow with thematics and front visibility |
0.088s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Front home section and content pages are reachable |
0.144s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Front content detail displays related articles before similar contents |
0.126s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Front content detail shows similar contents ordered by shared tags without thematics |
0.122s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Front content detail fills similar contents with section peers without shared tags |
0.124s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Front content detail prioritizes same thematic before other similar contents |
0.126s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Front shows only active and published contents and blocks others |
0.131s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Front returns 404 for unknown section or unknown content |
0.114s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Front section without thematics is still reachable without thematic filter bar |
0.120s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Front section search and thematic filters apply across pagination |
0.155s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Front section search matches content tags |
0.124s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Front uses default thumbnail logo when content thumbnail is missing |
0.115s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Front home does not render sections without slug |
0.113s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Youtube url formats are supported on front |
0.132s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Front access is forbidden when restaurant has no academy access |
0.109s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Courses can be created and are visible on front section when upcoming and published |
0.120s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Backoffice courses list orders drafts first then published by ascending date |
0.074s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyModuleFeatureTest |
Courses draft cannot be activated publish and activate endpoint publishes |
0.061s |
|
| ✅ |
App.Modules.Academy.Tests.AcademyRichTextTest |
Plain text length ignores html tags |
0.009s |
|
| ✅ |
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 |
7.955s |
|
| ✅ |
App.Modules.Alert.Tests.EloquentAlertRepositoryTest |
Find or create global contact reuses the existing restaurant id zero contact |
8.218s |
|
| ✅ |
App.Modules.Alert.Tests.EloquentAlertRepositoryTest |
Find or create global contact does not duplicate on repeated calls |
7.730s |
|
| ✅ |
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.044s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest |
Find latest returns null when no token |
0.159s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest |
Creates restaurant token with legacy and polymorphic columns |
0.148s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest |
Creates client token with legacy and polymorphic columns |
0.101s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest |
Find or create is idempotent and creates no duplicate |
0.142s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest |
Action is idempotent and returns a 64 char token |
0.105s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest |
Existing legacy row without userable is reused |
0.145s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest |
Soft deleted row is ignored and a new one is created |
0.143s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest |
Most recent non deleted row wins when several exist |
0.148s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest |
Tokens are isolated between entities and from other providers |
0.239s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest |
Restaurant and client with the same id do not collide on polymorphic columns |
0.106s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest |
Creating the token does not interfere with import apis sync |
0.152s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.EloquentOctopusTokenRepositoryTest |
Repeated calls within an outer transaction still create a single row |
0.147s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.GenerateOctopusTokenActionTest |
Generates a 64 char token for a restaurant |
0.052s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.GenerateOctopusTokenActionTest |
Returns the existing token when already created |
0.044s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.GenerateOctopusTokenActionTest |
Refuses sub clients |
0.043s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Superadmin generates a client token |
0.161s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Client token generation is idempotent |
0.166s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Sub client is rejected with 422 |
0.214s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Team member is forbidden on client endpoint |
0.160s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Guest is rejected on client endpoint |
0.103s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Unknown client returns 404 |
0.111s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Get is not allowed on the endpoint |
0.172s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Superadmin generates an indep restaurant token |
0.212s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Indep restaurant generation is idempotent |
0.203s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Soft deleted token is ignored and replaced |
0.202s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Team member is forbidden on indep endpoint |
0.195s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Guest is rejected on indep endpoint |
0.143s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Superadmin generates a local restaurant token |
0.257s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Team member is forbidden on local endpoint |
0.257s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Guest is rejected on local endpoint |
0.207s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Missing csrf token is rejected when csrf is enforced |
0.163s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Indep edit form shows the block |
24.944s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Indep edit form prefills the existing token |
24.920s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Indep create form has no block |
25.403s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Indep onboarding edit form has no block |
24.940s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Local edit form shows the block and create form does not |
0.327s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Client edit form shows the block for main client only |
25.006s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Team member does not see the block |
0.158s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Generated client token can be used on api login |
0.164s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Generated restaurant token can be used on api login |
0.211s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenEndpointsTest |
Unknown token is rejected on api login |
0.049s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest |
Block and generate url are rendered |
0.055s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest |
Without token the generate button is visible and the field hidden |
0.047s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest |
With token the field is visible prefilled and generate hidden |
0.045s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest |
Token input is readonly password and has no name attribute |
0.047s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest |
No element of the block carries a name attribute |
0.045s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest |
Ajax call sends csrf header and uses post |
0.045s |
|
| ✅ |
App.Modules.Api.OctopusToken.Tests.OctopusTokenPartialViewTest |
Token is html escaped |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.AuthControllerLogoutTest |
Central logout route points to destroy under the central prefix |
0.046s |
|
| ✅ |
App.Modules.Auth.Tests.AuthControllerLogoutTest |
Central logout logs out the central and its establishment |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.AuthControllerLogoutTest |
Central logout under superpoulpe impersonation also logs out the establishment |
0.043s |
|
| ✅ |
App.Modules.Auth.Tests.AuthControllerLogoutTest |
Client logout revokes the establishments opened from its session |
0.047s |
|
| ✅ |
App.Modules.Auth.Tests.AuthControllerLogoutTest |
Establishment logout revokes nothing |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
From entity returns admin for admin model |
0.046s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
From entity returns client for client model |
0.043s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
From entity returns web for restaurant model |
0.045s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
From entity returns central for restaurant central model |
0.043s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
From userable type maps all known types |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
From userable type throws for unknown type |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
From domain returns admin for superpoulpe domain |
0.045s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
From domain returns client for clients domain |
0.045s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
From domain returns web for app domain |
0.043s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
From domain returns null for unknown domain |
0.042s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
From request returns central for app domain with central prefix |
0.042s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
From request returns web for app domain without central prefix |
0.043s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
From request returns null for unknown domain |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
Get redirect route name returns expected routes |
0.045s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
Model returns correct model class for each guard |
0.046s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
Get impersonation entry route name returns null for admin |
0.045s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
Get impersonation entry route name returns route for impersonable guards |
0.045s |
|
| ✅ |
App.Modules.Auth.Tests.AuthGuardTest |
Is manager space only for client and central |
0.045s |
|
| ✅ |
App.Modules.Auth.Tests.AuthServiceTest |
Authenticate returns null when no users match login |
0.120s |
|
| ✅ |
App.Modules.Auth.Tests.AuthServiceTest |
Authenticate throws inactive when user is inactive |
0.098s |
|
| ✅ |
App.Modules.Auth.Tests.AuthServiceTest |
Authenticate throws inactive when entity is inactive |
0.102s |
|
| ✅ |
App.Modules.Auth.Tests.AuthServiceTest |
Authenticate throws use credentials disabled when sso only |
0.108s |
|
| ✅ |
App.Modules.Auth.Tests.AuthServiceTest |
Authenticate throws password expired when highly secured and expired |
0.102s |
|
| ✅ |
App.Modules.Auth.Tests.AuthServiceTest |
Authenticate does not throw when highly secured password is valid |
0.099s |
|
| ✅ |
App.Modules.Auth.Tests.AuthServiceTest |
Authenticate does not check expiry when not highly secured |
0.099s |
|
| ✅ |
App.Modules.Auth.Tests.AuthServiceTest |
Authenticate skips expiry check when no client |
0.098s |
|
| ✅ |
App.Modules.Auth.Tests.AuthServiceTest |
Authenticate throws password expired for client entity |
0.050s |
|
| ✅ |
App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest |
Returns false when no temp password set |
0.051s |
|
| ✅ |
App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest |
Returns false when password does not match |
0.047s |
|
| ✅ |
App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest |
Returns false when expired |
0.047s |
|
| ✅ |
App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest |
Returns false when no expiry set |
0.047s |
|
| ✅ |
App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest |
Consumes and returns true when valid |
0.049s |
|
| ✅ |
App.Modules.Auth.Tests.CustomSessionLifetimeTest |
Revoked establishment session is ended |
0.051s |
|
| ✅ |
App.Modules.Auth.Tests.CustomSessionLifetimeTest |
Establishment session whose manager is still logged in goes through |
0.042s |
|
| ✅ |
App.Modules.Auth.Tests.CustomSessionLifetimeTest |
Revoked layer does not end a central sharing the session |
0.041s |
|
| ✅ |
App.Modules.Auth.Tests.CustomSessionLifetimeTest |
Expired manager logout reaches the controller |
0.042s |
|
| ✅ |
App.Modules.Auth.Tests.CustomSessionLifetimeTest |
Expired manager on another page is still logged out |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest |
Policy applies to the main client that enables it |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest |
Child client uses its parent policy |
0.041s |
|
| ✅ |
App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest |
Policy applies to a restaurant attached to a secured client |
0.041s |
|
| ✅ |
App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest |
Policy does not apply to a restaurant whose client disabled it |
0.041s |
|
| ✅ |
App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest |
Policy does not apply to an independent restaurant |
0.041s |
|
| ✅ |
App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest |
Rules include required confirmation and fifteen character minimum |
0.042s |
|
| ✅ |
App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest |
Password shorter than fifteen characters is rejected with the correct minimum |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest |
Compliant fifteen character password is accepted |
0.045s |
|
| ✅ |
App.Modules.Auth.Tests.HighlySecuredPasswordPolicyTest |
Other security requirements are unchanged |
0.046s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Consume token returns false when token does not match |
0.050s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Consume token returns false when token is expired |
0.045s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Consume token returns true and clears token when valid |
0.045s |
|
| ❌ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Consume token accepts token exactly at ttl boundary |
0.045s |
Consume token accepts token exactly at ttl boundaryFailed asserting that false is true.
at app/Modules/Auth/Tests/ImpersonationServiceTest.php:71 |
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Is impersonating returns false when no session |
0.046s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Start impersonation pushes layer to stack |
0.045s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Start impersonation supports multi level stack |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Start impersonation with parent stack uses parent as base |
0.057s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Current layer returns null when not impersonating |
0.043s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Leave pops top layer and returns return url |
0.045s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Leave clears legacy session keys |
0.043s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Leave in multi level stack keeps remaining layers |
0.041s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Leave without stack falls back to app login route |
0.042s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Generate impersonation url tags it with a stable impersonator session key |
0.045s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Is revoked once the impersonator session logs out |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Is not revoked while the impersonator session is still open |
0.045s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Is not revoked by the logout of another impersonator session |
0.048s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Impersonation started after the logout from the same session is not revoked |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Revocation cache failure does not block the logout |
0.047s |
|
| ✅ |
App.Modules.Auth.Tests.ImpersonationServiceTest |
Layer without impersonator session key is never revoked |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest |
Client constraints use client type and own id |
0.048s |
|
| ✅ |
App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest |
Client manager constraints use parent id not subclient id |
0.043s |
|
| ✅ |
App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest |
Client and restaurant with same numeric id have distinct types |
0.042s |
|
| ✅ |
App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest |
Restaurant constraints exclude admin role |
0.042s |
|
| ✅ |
App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest |
Central constraints match username as email |
0.043s |
|
| ✅ |
App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest |
Constraints for unknown entity throws |
0.046s |
|
| ✅ |
App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest |
Execute falls back to app login when no user found |
0.046s |
|
| ✅ |
App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest |
Execute logs in resolved user and returns auth redirect |
0.045s |
|
| ✅ |
App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest |
Execute never calls login with a raw entity |
0.042s |
|
| ✅ |
App.Modules.Auth.Tests.MobileAuthServiceTest |
Authenticate throws invalid when login token not found |
0.048s |
|
| ✅ |
App.Modules.Auth.Tests.MobileAuthServiceTest |
Authenticate via password returns restaurant when credentials match |
0.046s |
|
| ✅ |
App.Modules.Auth.Tests.MobileAuthServiceTest |
Authenticate throws invalid when all credential paths fail |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.MobileAuthServiceTest |
Authenticate via temp password succeeds when not expired |
0.048s |
|
| ✅ |
App.Modules.Auth.Tests.MobileAuthServiceTest |
Authenticate via temp password throws invalid when expired |
0.048s |
|
| ✅ |
App.Modules.Auth.Tests.MobileAuthServiceTest |
Authenticate throws inactive when restaurant is inactive |
0.047s |
|
| ✅ |
App.Modules.Auth.Tests.MobileAuthServiceTest |
Authenticate throws password expired when highly secured and expired |
0.049s |
|
| ✅ |
App.Modules.Auth.Tests.MobileAuthServiceTest |
Authenticate succeeds without client |
0.046s |
|
| ✅ |
App.Modules.Auth.Tests.MobileAuthServiceTest |
Authenticate succeeds with non highly secured client |
0.045s |
|
| ✅ |
App.Modules.Auth.Tests.PasswordExpirationServiceTest |
Client not highly secured returns not highly secured |
0.049s |
|
| ✅ |
App.Modules.Auth.Tests.PasswordExpirationServiceTest |
Client never changed password returns expired |
0.045s |
|
| ✅ |
App.Modules.Auth.Tests.PasswordExpirationServiceTest |
Client changed recently returns valid |
0.043s |
|
| ✅ |
App.Modules.Auth.Tests.PasswordExpirationServiceTest |
Client within 7 days of expiry returns expiring soon |
0.046s |
|
| ✅ |
App.Modules.Auth.Tests.PasswordExpirationServiceTest |
Client past 180 days returns expired |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.PasswordExpirationServiceTest |
Restaurant with no client returns not highly secured |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.PasswordExpirationServiceTest |
Restaurant client not highly secured returns not highly secured |
0.046s |
|
| ✅ |
App.Modules.Auth.Tests.PasswordExpirationServiceTest |
Restaurant never changed password returns expired |
0.043s |
|
| ✅ |
App.Modules.Auth.Tests.PasswordExpirationServiceTest |
Restaurant changed recently returns valid |
0.048s |
|
| ✅ |
App.Modules.Auth.Tests.PasswordExpirationServiceTest |
Restaurant within 7 days of expiry returns expiring soon |
0.046s |
|
| ✅ |
App.Modules.Auth.Tests.PasswordExpirationServiceTest |
Restaurant past 180 days returns expired |
0.054s |
|
| ✅ |
App.Modules.Auth.Tests.PasswordExpirationServiceTest |
Restaurant tablet out of sync returns password change required |
0.054s |
|
| ✅ |
App.Modules.Auth.Tests.PasswordExpirationServiceTest |
Restaurant tablet with null last sync skips password change check |
0.047s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Generate reset token stores token on user |
0.048s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Generate reset token returns 64 char hex string |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Validate token returns true when token matches and not expired |
0.048s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Validate token returns false when token does not match |
0.042s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Validate token returns false when token is expired |
0.041s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Consume token hashes password and clears token |
0.202s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Consume token skips restaurant sync when userable missing |
0.152s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Issue reset token always stores on restaurant for authenticate middleware |
0.048s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Issue reset token mirrors on admin user when present |
0.046s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Validate reset token uses restaurant admin email code |
0.042s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Validate reset token rejects expired code |
0.042s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Consume reset token updates restaurant when no admin user |
0.150s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Consume reset token syncs admin user and restaurant |
0.203s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Matches admin email is case insensitive |
0.044s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Matches admin email falls back to admin user when admin email empty |
0.042s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Verify password accepts restaurant admin password without admin user |
0.197s |
|
| ✅ |
App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest |
Verify password ignores admin user with empty password hash |
0.203s |
|
| ✅ |
App.Modules.Auth.Tests.SendPasswordExpiredResetLinkActionTest |
Sends via users broker for restaurant |
0.054s |
|
| ✅ |
App.Modules.Auth.Tests.SendPasswordExpiredResetLinkActionTest |
Sends via clients broker for client |
0.044s |
|
| ✅ |
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.045s |
|
| ✅ |
App.Modules.ComInApp.Tests.ComInAppConversationServiceTest |
Update conversation throws when wrong restaurant |
0.044s |
|
| ✅ |
App.Modules.ComInApp.Tests.ComInAppConversationServiceTest |
Add message creates message and marks as read |
0.053s |
|
| ✅ |
App.Modules.ComInApp.Tests.ComInAppConversationServiceTest |
Mark conversation as read calls repository |
0.046s |
|
| ✅ |
App.Modules.ComInApp.Tests.ComInAppConversationServiceTest |
Delete conversation calls repository |
0.045s |
|
| ✅ |
App.Modules.ComInApp.Tests.ComInAppConversationServiceTest |
Get unread overview returns total and counts by accessible restaurant |
0.045s |
|
| ✅ |
App.Modules.ComInApp.Tests.ComInAppConversationServiceTest |
Unread count increases for other participant when one sends messages |
8.669s |
|
| ✅ |
App.Modules.ComInApp.Tests.ComInAppConversationServiceTest |
Create conversation with message creates message |
0.046s |
|
| ✅ |
App.Modules.ComInApp.Tests.ComInAppConversationServiceTest |
Bridge client user resolves via manager service |
0.045s |
|
| ✅ |
App.Modules.ComInApp.Tests.ComInAppConversationServiceTest |
Bridge client user sets null when no matching user |
0.044s |
|
| ✅ |
App.Modules.ComInApp.Tests.ComInAppServiceTest |
Add unread message count to employees adds count to employees |
0.066s |
|
| ✅ |
App.Modules.Users.Admin.Tests.AdminServiceTest |
Search delegates to repository |
0.002s |
|
| ✅ |
App.Modules.Users.Admin.Tests.AdminServiceTest |
Search passes null term |
0.000s |
|
| ✅ |
App.Modules.Users.Admin.Tests.AdminServiceTest |
Create hashes password and persists all fields |
0.000s |
|
| ✅ |
App.Modules.Users.Admin.Tests.AdminServiceTest |
Create stores null password when none provided |
0.000s |
|
| ✅ |
App.Modules.Users.Admin.Tests.AdminServiceTest |
Find or fail delegates to repository |
0.000s |
|
| ✅ |
App.Modules.Users.Admin.Tests.AdminServiceTest |
Update passes dto array to repository |
0.002s |
|
| ✅ |
App.Modules.Users.Admin.Tests.AdminServiceTest |
Update hashes password when present in dto array |
0.000s |
|
| ✅ |
App.Modules.Users.Admin.Tests.AdminServiceTest |
Update does not add password when absent from dto array |
0.000s |
|
| ✅ |
App.Modules.Users.Admin.Tests.AdminServiceTest |
Update propagates repository false |
0.000s |
|
| ✅ |
App.Modules.Users.Admin.Tests.AdminServiceTest |
Delete finds admin then delegates deletion |
0.000s |
|
| ✅ |
App.Modules.Users.Admin.Tests.AdminServiceTest |
Delete propagates repository false |
0.000s |
|
| ✅ |
App.Modules.Users.Central.Tests.CentralManagerServiceTest |
All for central delegates to repository |
0.004s |
|
| ✅ |
App.Modules.Users.Central.Tests.CentralManagerServiceTest |
Sync creates user when no id provided |
0.001s |
|
| ✅ |
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.001s |
|
| ✅ |
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.004s |
|
| ✅ |
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.048s |
|
| ✅ |
App.Modules.Users.Client.Tests.BuildManagerExportRowTest |
Blank names stay empty |
0.058s |
|
| ✅ |
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.000s |
|
| ✅ |
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.003s |
|
| ✅ |
App.Modules.Users.Client.Tests.ClientPolicyTest |
Manage audit alerts allows self |
0.001s |
|
| ✅ |
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.005s |
|
| ✅ |
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.061s |
Exports managers and notifies with a downloadable fileOpenSpout\Common\Exception\IOException: Unable to open file /var/www/octopus-haccp/storage/app/exports/2570eef2-75c1-47ba-b445-f2599a21da9d.xlsx: fopen(/var/www/octopus-haccp/storage/app/exports/2570eef2-75c1-47ba-b445-f2599a21da9d.xlsx): Failed |
| ✅ |
App.Modules.Users.Client.Tests.ImportManagersJobTest |
Imports valid rows and reports errors for invalid ones |
0.057s |
|
| ✅ |
App.Modules.Users.Client.Tests.ImportManagersJobTest |
Reports a friendly error when the spreadsheet file cannot be read |
0.044s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
View any allows superadmin |
0.002s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
View any denies manager role |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
View any denies when no authenticated user |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Create allows superadmin |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Create denies manager role |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Edit allows self even when not superadmin |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Edit denies when manager belongs to another client |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Edit denies manager role editing someone else |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Edit allows superadmin editing another manager in same client |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Manage denies self |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Manage allows self when impersonating from superpoulpe and another superadmin exists |
0.001s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Manage still denies self when impersonating from client |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Manage denies self via superpoulpe impersonation when only one active superadmin left |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Manage denies when manager belongs to another client |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Manage denies manager role as actor |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Manage allows non superadmin target regardless of superadmin count |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Manage denies superadmin target when no active superadmin left |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Manage denies superadmin target when it is the only active superadmin |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Manage allows superadmin target when more than one active superadmin |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Restaurants access denies superadmin target |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerPolicyTest |
Restaurants access allows non superadmin target |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerReusingMainEmailTest |
Sub client reusing main email does not overwrite the superadmin |
0.159s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerReusingMainEmailTest |
Sub client with its own email still gets its own manager user |
0.156s |
|
| ✅ |
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.000s |
|
| ✅ |
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.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerServiceTest |
Get index view data defaults when no sub client |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.ManagerServiceTest |
Get index view data shows total restaurants for superadmin |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.MapImportRowToStoreDTOTest |
Maps basic fields |
0.006s |
|
| ✅ |
App.Modules.Users.Client.Tests.MapImportRowToStoreDTOTest |
Resolves family names to ids |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.MapImportRowToStoreDTOTest |
Maps oui non to booleans |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.PromoteManagerToSuperadminTest |
Returns data unchanged when role is absent |
0.001s |
|
| ✅ |
App.Modules.Users.Client.Tests.PromoteManagerToSuperadminTest |
Sets is superadmin false when staying manager |
0.000s |
|
| ✅ |
App.Modules.Users.Client.Tests.PromoteManagerToSuperadminTest |
Clears access and enables options when promoted to superadmin |
0.000s |
|
| ✅ |
App.Modules.Users.Employee.Tests.EmployeeObserverTest |
Clearing employee password also clears user password |
0.014s |
|
| ✅ |
App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest |
All delegates to repository with restaurant id |
0.004s |
|
| ✅ |
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.002s |
|
| ✅ |
App.Modules.Users.Employee.Tests.MultiEmployeeServiceTest |
All delegates to repository with family id |
0.021s |
|
| ✅ |
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.003s |
|
| ✅ |
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.260s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.CreateAccountRestaurantActionTest |
It maps the other expected fields |
0.149s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.CreateTrialRestaurantActionTest |
It passes a hashed password and admin password to the repository |
0.262s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.CreateTrialRestaurantActionTest |
It derives the username from the email local part |
0.152s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.CreateTrialRestaurantActionTest |
It suffixes the username with the domain on collision |
0.150s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest |
Unchecking a provider soft deletes its polymorphic connexion |
8.401s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest |
Unchecking a provider soft deletes its legacy connexion |
8.355s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest |
Rechecking a provider restores its soft deleted connexion |
7.983s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest |
Disabled connexion is excluded from the default sync query |
8.061s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest |
Untouched providers are not affected |
8.063s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest |
Local restaurant service resets import apis when all boxes are unchecked |
8.369s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest |
Ajax is active toggle does not reset import apis on local service |
8.299s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest |
Ajax is active toggle does not reset import apis on indep service |
8.840s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest |
Inactive restaurant connexion is excluded from the sync query |
8.273s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest |
Export route is available for independent restaurants |
0.051s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest |
Independent restaurants page uses the queued export ui |
0.051s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest |
Independent restaurant query binds the search value and is lazy |
0.050s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest |
Independent restaurant service dispatches the export job |
0.050s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest |
Builds the restaurant export row |
0.045s |
|
| ✅ |
App.Modules.Users.Restaurant.Tests.IndependentRestaurantExportTest |
Export job writes the file and notifies the requesting user |
0.064s |
|