🧪 Rapport Tests Pest Laravel — PREPROD

27/09/2026 07:16:53 · ❌ 247 test(s) en échec

1361
Total
1107
Passés
247
Échoués
7
Ignorés
16.6s
Durée
StatutClasseTestDuréeMessage
✅ Tests.Api.Inpulse.InpulseTest Sync products 0.052s
⚠️ Tests.Features.ActivityLog.ActivityLogTest Dirty only update keeps ownership separate from changes and author 0.000s Dirty only update keeps ownership separate from changes and authorUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'imp
⚠️ Tests.Features.ActivityLog.ActivityLogTest Nested impersonation keeps original author and target owner 0.000s Nested impersonation keeps original author and target ownerUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importatio
⚠️ Tests.Features.ActivityLog.ActivityLogTest Direct impersonation displays the target instead of repeating the author 0.000s Direct impersonation displays the target instead of repeating the authorUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de
⚠️ Tests.Features.ActivityLog.ActivityLogTest Family impersonation is displayed as its parent client 0.000s Family impersonation is displayed as its parent clientUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du
⚠️ Tests.Features.ActivityLog.ActivityLogTest Legacy impersonation does not guess the target from ownership 0.000s Legacy impersonation does not guess the target from ownershipUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importat
⚠️ Tests.Features.ActivityLog.ActivityLogTest Unowned template does not inherit the impersonated restaurant 0.000s Unowned template does not inherit the impersonated restaurantUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importat
⚠️ Tests.Features.ActivityLog.ActivityLogTest Client settings and family templates resolve the client 0.000s Client settings and family templates resolve the clientUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du
⚠️ Tests.Features.ActivityLog.ActivityLogTest Direct owner edits and deletes keep the snapshot 0.000s Direct owner edits and deletes keep the snapshotUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma
⚠️ Tests.Features.ActivityLog.ActivityLogTest Filters match owner names ids and combine without matching the author 0.000s Filters match owner names ids and combine without matching the authorUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'
⚠️ Tests.Features.ActivityLog.ActivityLogTest Activity page displays most specific owner and applies unified search 0.000s Activity page displays most specific owner and applies unified searchUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'
⚠️ Tests.Features.ActivityLog.ActivityLogTest Activity page uses the current locale 0.000s Activity page uses the current localeUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base
⚠️ Tests.Features.ActivityLog.ActivityLogTest Legacy author does not override recorded ownership 0.000s Legacy author does not override recorded ownershipUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du sché
⚠️ Tests.Features.ActivityLog.ActivityLogTest Models without ownership do not inherit the acting account 0.000s Models without ownership do not inherit the acting accountUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation
⚠️ Tests.Features.ActivityLog.ActivityLogTest Owner snapshot does not follow later restaurant transfers 0.000s Owner snapshot does not follow later restaurant transfersUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation
⚠️ Tests.Features.ActivityLog.ActivityLogTest Legacy recorded ownership is still displayed and filterable 0.000s Legacy recorded ownership is still displayed and filterableUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importatio
⚠️ Tests.Features.Api.ApiSessionIsolationTest Api token does not open a web session 0.000s Api token does not open a web sessionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base
⚠️ Tests.Features.Api.ApiSessionIsolationTest Login rejects bad password even when a web session exists 0.000s Login rejects bad password even when a web session existsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation
⚠️ Tests.Features.Api.ApiSessionIsolationTest Login with valid password still issues a token 0.000s Login with valid password still issues a tokenUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma d
⚠️ Tests.Features.Api.ApiSessionIsolationTest Api logout does not destroy the web session 0.000s Api logout does not destroy the web sessionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de l
⚠️ Tests.Features.Api.ApiSessionIsolationTest Client api token does not open a client web session 0.000s Client api token does not open a client web sessionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du sch
⚠️ Tests.Features.Api.ApiSessionIsolationTest Client api logout does not destroy the client web session 0.000s Client api logout does not destroy the client web sessionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation
⚠️ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline saint denis june 1 reproduces counter bug 0.000s baseline saint denis june 1 reproduces counter bugUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du sché
⚠️ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline pfc fruit legume june 1 reproduces counter bug 0.000s baseline pfc fruit legume june 1 reproduces counter bugUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du
⚠️ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline saint denis excursion time is counter times 600 0.000s baseline saint denis excursion time is counter times 600UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation d
⚠️ Tests.Features.Loggers.FridgeLoggerBatchReplayTest nominal single measure every 10 min still works 0.000s nominal single measure every 10 min still worksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma
⚠️ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline logger issue day csv reproduces error-day behavior 0.000s baseline logger issue day csv reproduces error-day behaviorUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importatio
⚠️ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline logger issue day csv with connectivity checks 0.000s baseline logger issue day csv with connectivity checksUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du
⚠️ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline logger issue day mod nico 1 csv reproduces error-day behavior 0.000s baseline logger issue day mod nico 1 csv reproduces error-day behaviorUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l
⚠️ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline logger issue day mod nico 2 csv reproduces error-day behavior 0.000s baseline logger issue day mod nico 2 csv reproduces error-day behaviorUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l
⚠️ Tests.Features.Loggers.FridgeLoggerBatchReplayTest baseline quick june 2026 csv 0.000s baseline quick june 2026 csvUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de donné
⚠️ Tests.Features.Loggers.FridgeLoggerBatchReplayTest replay OK_CASE quick nevers marzy csv 0.000s replay OK_CASE quick nevers marzy csvUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base
⚠️ Tests.Features.Loggers.FridgeLoggerBatchReplayTest replay TEMP_KO_CONN_OK_CASE_WITH_EXCLUSION quick villeneuve csv 0.000s replay TEMP_KO_CONN_OK_CASE_WITH_EXCLUSION quick villeneuve csvUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'import
⚠️ Tests.Features.Loggers.FridgeLoggersTest Temperatures 0.000s TemperaturesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de données. at vendor/mo
⚠️ Tests.Features.Loggers.FridgeLoggersTest Several measures 0.000s Several measuresUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de données. at vendo
⚠️ Tests.Features.Loggers.FridgeLoggersTest Connection 0.000s ConnectionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de données. at vendor/mono
⚠️ Tests.Features.Loggers.FridgeLoggersTest Epv cauderan 0.000s Epv cauderanUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de données. at vendor/mo
⚠️ Tests.Features.Loggers.FridgeLoggersTest Terrasse saint pol 0.000s Terrasse saint polUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de données. at ven
⚠️ Tests.Features.Loggers.FridgeLoggersTest Global connection 0.000s Global connectionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de données. at vend
⚠️ Tests.Features.Loggers.FridgeLoggersTest ClosedDates logger 0.000s ClosedDates loggerUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de données. at ven
⚠️ Tests.Features.Loggers.FridgeLoggersTest ClosedDates logger 0.000s ClosedDates loggerUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de données. at ven
⚠️ Tests.Features.Loggers.FridgeLoggersTest ClosedDates contacts 0.000s ClosedDates contactsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de données. at v
⚠️ Tests.Features.Loggers.FridgeLoggersTest ClosedDates connexion contacts 0.000s ClosedDates connexion contactsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de don
⚠️ Tests.Features.Loggers.FridgeLoggersTest ClosedDates connexion contacts 0.000s ClosedDates connexion contactsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de don
⚠️ Tests.Features.Loggers.FridgeLoggersTest Case cirl 0.000s Case cirlUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de données. at vendor/monol
⚠️ Tests.Features.Loggers.FridgeLoggersTest No data alerts 0.000s No data alertsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de données. at vendor/
⚠️ Tests.Features.Loggers.FridgeLoggersTest NoDataAlerts AllLoggers 0.000s NoDataAlerts AllLoggersUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de données. a
⚠️ Tests.Features.Loggers.FridgeLoggersTest NoDataAlerts ResumeBeforeSecondAlert 0.000s NoDataAlerts ResumeBeforeSecondAlertUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base
⚠️ Tests.Features.Loggers.FridgeLoggersTest NoDataAlerts MultipleLoggers 0.000s NoDataAlerts MultipleLoggersUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de donné
⚠️ Tests.Features.Loggers.FridgeLoggersTest NoDataAlert IgnoresInactiveLoggers 0.000s NoDataAlert IgnoresInactiveLoggersUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de
⚠️ Tests.Features.Loggers.LoggerClosedDatesScenariosTest back_to_normal after exclusion sends no email when issue was never alerted 0.000s back_to_normal after exclusion sends no email when issue was never alertedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début
⚠️ Tests.Features.Loggers.LoggerClosedDatesScenariosTest deferred issue resolved during exclusion is not promoted when exclusion ends 0.000s deferred issue resolved during exclusion is not promoted when exclusion endsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Débu
⚠️ Tests.Features.Loggers.LoggerConnectionScenariosTest scenario stable produces one batch per measurement 0.000s scenario stable produces one batch per measurementUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du sché
⚠️ Tests.Features.Loggers.LoggerConnectionScenariosTest scenario stable and unstable accept inLimits OK KO 0.000s scenario stable and unstable accept inLimits OK KOUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du sché
⚠️ Tests.Features.Loggers.LoggerConnectionScenariosTest scenario unstable produces one burst with backlog since last reception 0.000s scenario unstable produces one burst with backlog since last receptionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l
⚠️ Tests.Features.Loggers.LoggerConnectionScenariosTest scenario stable then unstable then noData then unstable then stable ends in stable_ok 0.000s scenario stable then unstable then noData then unstable then stable ends in stable_okUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to
⚠️ Tests.Features.Loggers.LoggerConnectionScenariosTest stable_ok to stable_ko triggers temperature_issue 0.000s stable_ok to stable_ko triggers temperature_issueUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schém
⚠️ Tests.Features.Loggers.LoggerConnectionScenariosTest scenario stable then noData then unstable then stable 0.000s scenario stable then noData then unstable then stableUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du s
⚠️ Tests.Features.Loggers.LoggerConnectionScenariosTest connection scenario shapes with data set "dataset "stable → unstable → noData → unstable → stable"" 0.000s connection scenario shapes with data set "dataset "stable → unstable → noData → unstable → stable""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while
⚠️ Tests.Features.Loggers.LoggerConnectionScenariosTest connection scenario shapes with data set "dataset "stable → noData → unstable → stable"" 0.000s connection scenario shapes with data set "dataset "stable → noData → unstable → stable""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting
⚠️ Tests.Features.Loggers.LoggerPeriodicTemperatureTickTest periodic tick triggers dizzy temperature issue after ko readings then silence 0.000s periodic tick triggers dizzy temperature issue after ko readings then silenceUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Déb
⚠️ Tests.Features.Loggers.LoggerPeriodicTemperatureTickTest periodic tick does not run when last reading temperature is in limits 0.000s periodic tick does not run when last reading temperature is in limitsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'
⚠️ Tests.Features.Loggers.LoggerPeriodicTemperatureTickTest periodic tick sends temperature reminder when excursion remains open without new data 0.000s periodic tick sends temperature reminder when excursion remains open without new dataUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to
⚠️ Tests.Features.Loggers.LoggerPeriodicTemperatureTickTest periodic tick does nothing when window has no readings 0.000s periodic tick does nothing when window has no readingsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du
⚠️ Tests.Features.Loggers.LoggerSimulationTickTest does nothing when simulation is disabled 0.000s does nothing when simulation is disabledUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la b
⚠️ Tests.Features.Loggers.LoggerSimulationTickTest injects a reading for each eligible logger when enabled 0.000s injects a reading for each eligible logger when enabledUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du
⚠️ Tests.Features.Loggers.LoggerSimulationTickTest respects the restaurant allowlist 0.000s respects the restaurant allowlistUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de
⚠️ Tests.Features.Loggers.LoggerSimulationTickTest dry-run does not persist any reading 0.000s dry-run does not persist any readingUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base
⚠️ Tests.Features.Loggers.LoggerSimulationTickTest an excursion produces an out-of-limits reading 0.000s an excursion produces an out-of-limits readingUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma d
⚠️ Tests.Features.Loggers.LoggerSimulationTickTest an inactive logger is not simulated 0.000s an inactive logger is not simulatedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base d
⚠️ Tests.Features.Loggers.LoggerTemperatureReminderTest reminder event type mirrors initial temperature issue 0.000s reminder event type mirrors initial temperature issueUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du s
⚠️ Tests.Features.Loggers.LoggerTemperatureReminderTest sendsTemperatureReminder identifies reminder events 0.000s sendsTemperatureReminder identifies reminder eventsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du sch
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest dizzy temperature issue variant distinguishes co-occurring dizzy_started 0.000s dizzy temperature issue variant distinguishes co-occurring dizzy_startedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest dizzy ended alert variant covers temperature outcomes 0.000s dizzy ended alert variant covers temperature outcomesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du s
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest temperature and resolution alerts are suppressed when dizzy ended covers them 0.000s temperature and resolution alerts are suppressed when dizzy ended covers themUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Déb
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "stable_ok → stable_ko"" 0.000s transition planner returns expected events with data set "dataset "stable_ok → stable_ko""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attemptin
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "stable_ok → unstable_ok"" 0.000s transition planner returns expected events with data set "dataset "stable_ok → unstable_ok""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempt
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "stable_ok → unstable_ko"" 0.000s transition planner returns expected events with data set "dataset "stable_ok → unstable_ko""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempt
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "stable_ko → stable_ok"" 0.000s transition planner returns expected events with data set "dataset "stable_ko → stable_ok""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attemptin
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "stable_ko → unstable_ok"" 0.000s transition planner returns expected events with data set "dataset "stable_ko → unstable_ok""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempt
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "stable_ko → unstable_ko"" 0.000s transition planner returns expected events with data set "dataset "stable_ko → unstable_ko""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempt
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ok → stable_ok"" 0.000s transition planner returns expected events with data set "dataset "unstable_ok → stable_ok""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempt
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ok → stable_ko"" 0.000s transition planner returns expected events with data set "dataset "unstable_ok → stable_ko""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempt
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ok → unstable_ko"" 0.000s transition planner returns expected events with data set "dataset "unstable_ok → unstable_ko""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attem
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ko → stable_ok"" 0.000s transition planner returns expected events with data set "dataset "unstable_ko → stable_ok""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempt
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ko → stable_ko"" 0.000s transition planner returns expected events with data set "dataset "unstable_ko → stable_ko""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempt
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "unstable_ko → unstable_ok"" 0.000s transition planner returns expected events with data set "dataset "unstable_ko → unstable_ok""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attem
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest transition planner returns expected events with data set "dataset "first batch (no previous state)"" 0.000s transition planner returns expected events with data set "dataset "first batch (no previous state)""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest window state is derived from analysis flags with data set "dataset "stable ok"" 0.000s window state is derived from analysis flags with data set "dataset "stable ok""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: D
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest window state is derived from analysis flags with data set "dataset "stable ko"" 0.000s window state is derived from analysis flags with data set "dataset "stable ko""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: D
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest window state is derived from analysis flags with data set "dataset "unstable ok"" 0.000s window state is derived from analysis flags with data set "dataset "unstable ok""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log:
⚠️ Tests.Features.Loggers.LoggerWindowTransitionsTest window state is derived from analysis flags with data set "dataset "unstable ko"" 0.000s window state is derived from analysis flags with data set "dataset "unstable ko""UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log:
⏭️ 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.004s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest IsAuditLinked is false for a standalone plan 0.002s
✅ 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.001s
✅ Tests.Unit.ActionPlan.ActionPlanAlertRecipientsTest ToRecipients uses the name attribute of a local contact 0.001s
✅ 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.001s
✅ 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.040s
✅ 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.002s
✅ 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.019s
✅ Tests.Unit.ActionPlan.ActionPlanApiServiceTest Get attached file returns null when repository refuses 0.003s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryControllerTest Restaurant matches its own action plan 0.018s
✅ 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.005s
✅ 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.127s
✅ 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.007s
✅ 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.009s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest RecordableTypeForModule returns null for unknown module 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetBoardData calculates percent correctly 0.006s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetBoardData returns dash percent when no plans 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetBoardData returns 100 percent when all done 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetDaysData formats kpi string with percent 0.004s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetDaysData returns dash when total is zero 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetDaysData uses zero finished when day absent from finished 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetTableViewData delegates to repo 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetPopupItems delegates to repo 0.004s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest FindById delegates to repo 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetAuditLinkedActionPlans chains repo calls 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetByAuditRecordId delegates to repo 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest CountByAuditRecordId delegates to repo 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetDetailsData separates documents from images 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetDetailsData returns status changelogs collection 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetDetailsData excludes assignment events from the journal 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetDetailsData returns empty data when no files or changelogs 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveOrphanTag returns supprimee when category is deleted 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveOrphanTag returns national when nat category and loc only settings 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveOrphanTag returns local when loc category and nat only settings 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveOrphanTag returns null when category matches active scope 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest GetDetailsData builds photo gallery urls in order 0.002s
✅ 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.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ApplyDynamicFilterValues unsets all sections when everything empty 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ApplyDynamicFilterValues populates categories when present 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ApplyDynamicFilterValues populates responsable names when present 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ApplyDynamicFilterValues unsets statuses when setting is null even with statuses 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ApplyDynamicFilterValues populates statuses when setting and statuses present 0.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ApplyDynamicFilterValues unsets statuses when setting present but no statuses 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryLocalServiceTest ResolveFilterCategories returns loc categories when loc only 0.004s
✅ 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.001s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest GetHomeCardData returns required keys 0.013s
✅ 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.002s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest GetPopupItems returns empty paginator 0.002s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest FindById returns null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest GetAuditLinkedActionPlans returns empty collection 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest GetByAuditRecordId returns empty collection 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest CountByAuditRecordId returns zero 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest BuildFilters returns empty array 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest FindAttachedFile returns null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanHistoryMultiServiceTest PopupTypeIcon returns expected icon per type 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanParametersServiceTest UpdateSetting rejects invalid field 0.007s
✅ 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.002s
✅ 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.012s
✅ 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.020s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveSyncAuthorEmployeeId accepts a numeric string 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveSyncAuthorEmployeeId rejects an employee of another restaurant 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveSyncAuthorEmployeeId rejects empty zero and garbage 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetCategoriesToSync delegates and returns array 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetSettingsToSync delegates and returns array 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetActionPlansToSync delegates and returns array 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetAttachedFilesToSync delegates and returns array 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetCommentsToSync delegates and returns array 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetStatusesToSync returns empty array when no settings id 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetStatusesToSync delegates when settings id provided 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetStatusesToSyncForRestaurantTablet returns empty when settings missing 0.004s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetStatusesToSyncForRestaurantTablet delegates with tablet sync date 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest GetStatusesToSyncForRestaurantTablet ignores last sync when forced 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogStatusChange does not log when statuses id is null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogStatusChange does not log when status unchanged 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogStatusChange logs when status changes 0.002s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogStatusChange logs when old status was null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogStatusChange records tablet author and assigned snapshot 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogStatusChange ignores a tablet author foreign to the restaurant 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogAssignment does not log when plan has no employee 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogAssignment does not log when assignee is unchanged 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogAssignment logs the initial assignment when previous is null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogAssignment logs a reassignment 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest SyncAttachedFile returns invalid file error when file is null 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest SyncAttachedFile returns invalid file error when file not valid 0.010s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest SyncAttachedFile returns error when action plan not found 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest SyncAttachedFile returns error when storage fails 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest SyncAttachedFile returns success with record id on new file 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns false when no setting 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns false when no active statuses 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns true via loc categories 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns true via nat categories 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns true when loc missing but nat has categories 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns false when no categories anywhere 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns false when loc no categories and nat disabled 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns false when nat no categories and loc disabled 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest IsConfiguredForRestaurant returns false when neither loc nor nat 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveStatusId takes the server name when id already valid 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveStatusId matches by name when id is stale sqlite id 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveStatusId returns null id when no match by name 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveStatusId handles null name without error 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveStatusId recovers the id from the name when the payload has no id 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveCategoryId keeps id when already valid 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveCategoryId matches by label when id is stale 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest ResolveCategoryId returns null when no match 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents new plan not draft not finished fires created only 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents new plan created directly finished fires both in order 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents new plan as draft fires nothing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents new plan draft and finished fires nothing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents existing plan leaving draft fires created 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents existing plan leaving draft and finished fires both 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents existing plan transitioning to finished fires finished only 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents existing plan already finished fires nothing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents existing plan still draft fires nothing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest DecideNotifyEvents existing plan no change fires nothing 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogAssignment now records the author and the previous assignee 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogAssignment records no author when the tablet sends none 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogReminderChange does not log when the date is unchanged 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogReminderChange logs when the date moves 0.000s
✅ Tests.Unit.ActionPlan.ActionPlanSyncServiceTest LogReminderChange logs a date being cleared 0.000s
✅ Tests.Unit.ActionPlan.StatusChangelogTimelineTest Apply on an empty journal returns an empty collection 0.017s
✅ 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.Alert.AuditContactPivotsTest The opt in is read in a single query for the whole population 0.007s
✅ 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.AdoriaSyncFixtureBenchmarkTest Sync replay fixture is idempotent and reports timings 0.000s Sync replay fixture is idempotent and reports timingsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Get data throws when menu request fails 0.041s
⚠️ Tests.Unit.Api.AdoriaSyncResilienceTest Get data treats menu plan 404 as empty 0.037s Get data treats menu plan 404 as emptyUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Adoria has no menu cycle for site 000256 i
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Get data still throws when menu returns server error 0.036s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Menu plan 404 is treated as empty http error 0.034s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Get data throws on html error body that is not json 0.036s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Kitchen catalog is cached across calls 0.042s
⚠️ Tests.Unit.Api.AdoriaSyncResilienceTest Kitchen failure does not abort menu import 0.038s Kitchen failure does not abort menu importUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Adoria kitchen recipes skipped for sit
⚠️ Tests.Unit.Api.AdoriaSyncResilienceTest Test connection returns false instead of throwing 0.036s Test connection returns false instead of throwingUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Adoria testConnection failed: A
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Test connection returns true when multi step setup is incomplete 0.037s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Test connection returns false when organization token is rejected 0.036s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Sync adoria connexion job uses retries and api sync queue 0.040s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Sync adoria api defaults to single job mode 0.038s
✅ Tests.Unit.Api.AdoriaSyncResilienceTest Sync adoria api per connexion mode shortens parent timeout 0.036s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Src api token is trimmed on assignment 0.071s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Src api token trim ignores non string values 0.043s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Equilibre get data throws when auth token request fails 0.043s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Equilibre get data throws when site id is rejected by api 0.037s
⚠️ Tests.Unit.Api.ApiConnectionResilienceTest Equilibre test connection returns false instead of throwing on invalid site 0.049s Equilibre test connection returns false instead of throwing on invalid siteUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Equil
✅ Tests.Unit.Api.ApiConnectionResilienceTest Equilibre test connection returns true when api legitimately has no data 0.045s
⚠️ Tests.Unit.Api.ApiConnectionResilienceTest Compass test connection returns false instead of throwing 0.045s Compass test connection returns false instead of throwingUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Compass testConnection
✅ Tests.Unit.Api.ApiConnectionResilienceTest Easilys test connection returns true when id site not yet selected 0.042s
✅ Tests.Unit.Api.ApiConnectionResilienceTest Easilys get data throws when id site is missing 0.041s
⚠️ Tests.Unit.Api.ApiConnectionResilienceTest Easilys test connection returns false when every request fails 0.041s Easilys test connection returns false when every request failsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Easilys testConnec
⚠️ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Equilibre daily resync does not duplicate control reception import 0.000s Equilibre daily resync does not duplicate control reception importUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'imp
⚠️ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Equilibre daily resync does not duplicate product imports 0.000s Equilibre daily resync does not duplicate product importsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation
⚠️ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Equilibre without prepare sync reproduces duplicate imports 0.000s Equilibre without prepare sync reproduces duplicate importsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importatio
⚠️ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Equilibre orphan product import is relinked not duplicated 0.000s Equilibre orphan product import is relinked not duplicatedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation
⚠️ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Easilys resync does not duplicate control reception and product imports 0.000s Easilys resync does not duplicate control reception and product importsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de
⚠️ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Compass resync does not duplicate control reception and product imports 0.000s Compass resync does not duplicate control reception and product importsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de
⚠️ Tests.Unit.Api.ApiImportedDataDuplicatePreventionTest Get existing data depends on restaurant context 0.000s Get existing data depends on restaurant contextUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma
⚠️ Tests.Unit.Api.EquilibreSyncFixtureBenchmarkTest Sync replay fixture is idempotent and reports timings 0.000s Sync replay fixture is idempotent and reports timingsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du s
✅ Tests.Unit.Api.ImportApisSyncGuardsTest Ajax is active toggle does not reset import apis on local service 0.227s
✅ Tests.Unit.Api.ImportApisSyncGuardsTest Ajax is active toggle does not reset import apis on indep service 0.043s
✅ Tests.Unit.Api.ImportApisSyncGuardsTest Full form submit without import apis resets them 0.048s
✅ Tests.Unit.Api.ImportApisSyncGuardsTest Sync query excludes inactive restaurants but keeps client family connexions 0.049s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Une photo de tache est acceptee 0.029s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Un php renomme en jpg est refuse sur son contenu 0.052s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Un php garde son extension est refuse avant meme le contenu 0.000s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Un fichier sans extension est refuse 0.000s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Un document bureautique reste accepte 0.001s
✅ Tests.Unit.AttachedFiles.AllowedUploadTest Un pdf est refuse sur la photo et accepte sur le document 0.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.000s
✅ Tests.Unit.AttachedFiles.AttachedFileSyncServiceTest SyncAttachedFile dispatches to action plan sync service by default 0.010s
✅ 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.AuditEmployeeReferentialTest National copy never touches the forbidden employees pivot 0.068s
✅ Tests.Unit.Audits.AuditEmployeeReferentialTest Local copy still copies the forbidden employees pivot 0.044s
✅ Tests.Unit.Audits.AuditEmployeeReferentialTest National update never touches the forbidden employees pivot 0.050s
✅ Tests.Unit.Audits.AuditEmployeeReferentialTest Local update still forbids everyone when no employee is checked 0.051s
✅ Tests.Unit.Audits.AuditEmployeeReferentialTest Local update forbids only the unchecked employees 0.050s
✅ Tests.Unit.Audits.AuditEmployeeReferentialTest National edit page never loads the employee referential 0.056s
✅ Tests.Unit.Audits.AuditEmployeeReferentialTest Local edit page still loads the employee referential 0.045s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditsToSync enriches each audit with forbidden employees ids 0.028s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditDirectoriesToSync enriches audits ids and removes audits relation 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionsToSync prefixes consigne when present 0.002s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionsToSync leaves empty consigne untouched 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionsToSync forwards lastSync and withTrashed to repository 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditExtraActionsToSync delegates and returns array 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync forwards fix 5677 filters to repository 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync enables incremental filter when no reset nor resend 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync skips tasks without allAuditAction or audit 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync sorts national before local and recomputes positions 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync aggregates images and uses last as task image 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync leaves image null when no images 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync copies fields from allAuditAction and unserializes extraActions 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest GetAuditActionTasksToSync sets extraActions null when empty 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest 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.002s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask falls back to general day range for non 2023 11 17 dates 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask returns status false when day range fallback is ambiguous 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask does not update when task is already done 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask returns validation errors when task invalid without resolving ids 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask fills task and sets technical fields 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask resolves related ids after validation 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask returns success with id when save succeeds 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask returns failure without id when save fails 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask does not regenerate cycle when audit missing 0.000s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask does not regenerate cycle when period not finished 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask does not regenerate cycle when audit disabled for restaurant 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask treats unset client audits disabled as empty 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask does not regenerate cycle when achievement not done 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask regenerates into existing current record 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask regenerates into brand new record when none current 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.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAuditActionTask confronte la tache au restaurant appelant 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest AddAuditActionTaskImage confronte la tache au restaurant appelant 0.001s
✅ Tests.Unit.Audits.AuditSyncServiceTest SyncAttachedFile confronte la tache au restaurant appelant 0.001s
✅ Tests.Unit.Audits.AuditTaskServiceTest GetEditData returns comments and documents for existing task 0.018s
✅ 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.005s
✅ 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.001s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarCellPeriod spans from the start day to the end of its week 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarCellPeriod spans to the end of the month 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarCellPeriod spans to the end of the year 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarCellPeriod covers the single day for an unknown periodicity 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarCellPeriod mutates the start date it receives 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarDetailPeriod extends only the end to its period 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarDetailPeriod leaves the bounds alone for all 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarDetailPeriod extends the end to the end of its month 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarDetailPeriod only reaches the end of day for an unknown periodicity 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest GetCalendarAggregates asks for the extended flag and keys by restaurant 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest GetCalendarAggregates defaults the family filter to an empty array 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest BuildCalendarCells gives every active restaurant a cell even without audits 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest BuildCalendarCells skips inactive restaurants entirely 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest BuildCalendarCells fills the aggregates and formats the ratio 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest BuildCalendarCells ignores aggregates for unknown restaurants 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest BuildCalendarCells marks a restaurant closed over a whole week 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest BuildCalendarCells does not mark closed when the restaurant opens once 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest BuildCalendarCells never computes closed beyond a week 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest GetSelectedFamilyNames joins the names of the selected families 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest GetSelectedFamilyNames returns an empty string without a family filter 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest GetSelectedFamilyNames ignores ids the client does not own 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarRowClass flags a non conforme record first 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarRowClass warns on a record that was not done 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarRowClass marks a record in progress as pending 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest CalendarRowClass returns no class for anything else 0.000s
✅ Tests.Unit.Audits.AuditsBoardServiceTest BuildRecordPdfData returns null when the record does not exist 0.000s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest GetIndexPageData returns the action and its ordered extra actions 0.011s
✅ Tests.Unit.Audits.AuditsExtraActionsServiceTest GetIndexPageData returns null when the action does not exist 0.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.009s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest GetRecordsForHistory delegates to repository and returns its result 0.000s
✅ 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 uses user modules name 0.000s
✅ Tests.Unit.Audits.AuditsHistoryServiceTest GetXlsTasksHistoryFilename returns fixed label 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.007s
✅ Tests.Unit.Audits.AuditsParametersServiceTest StoreAudit sets defaults and syncs contacts when save succeeds 0.001s
✅ Tests.Unit.Audits.AuditsParametersServiceTest StoreAudit does not sync contacts when save fails 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetEditPageData returns null when audit not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetEditPageData returns null when audit belongs to another restaurant 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetEditPageData returns full data when audit belongs to restaurant 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetTasksActionsPageData returns null when audit not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetTasksActionsPageData returns null for a foreign audit 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetTasksActionsPageData returns data for an owned audit 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest UpdateAudit returns not found when audit missing 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest UpdateAudit returns not found when foreign audit and not same family 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest UpdateAudit falls through to not found when family matches but active key absent 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetShowPageData returns null when audit not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetShowPageData returns null when audit belongs to another restaurant 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetShowPageData returns audit and periods when owned 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DestroyAudit returns deleted false when audit not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DestroyAudit returns deleted false when foreign audit 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DestroyAudit returns deleted true when owned and delete succeeds 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DestroyAudit returns deleted false when delete fails 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest ImportXlsxRows returns status false when file invalid 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest ExportAuditActions returns null when audit not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest ReorderAudits upserts position for each valid id and skips empty 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest ReorderAudits skips id not found by repository 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest ReorderActions upserts position without active field 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest CreateAction returns null when audit not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest CreateAction defaults coefficent to one when empty 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest CreateAction keeps provided coefficent 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest CreateAction creates extra actions when provided by import 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest CreateAction does not create extra actions when absent 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetCreateDirectoryPageData returns expected structure 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetEditDirectoryPageData returns null when directory not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetEditDirectoryPageData combines audits without directory and directory audits 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest SaveDirectory creates new directory with defaults when directoryId null 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest SaveDirectory uses provided name and color 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest SaveDirectory assigns new audits to directory when save succeeds 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest SaveDirectory does not assign audits when save fails 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest SaveDirectory update mode unassigns removed audits and keeps still selected ones 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DeleteDirectory returns deleted false when directory not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DeleteDirectory returns deleted false when foreign directory 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DeleteDirectory moves audits out when moveAudits true 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DeleteDirectory deletes audits when moveAudits false 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest DeleteDirectory returns deleted false when repository delete fails 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest The tenant is forwarded to the repository when deleting a directory 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetShowDirectoryPageData returns null when directory not found 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest GetShowDirectoryPageData groups audits by period without ownership check 0.000s
✅ Tests.Unit.Audits.AuditsParametersServiceTest ToggleDirectoryActive returns status false when directory not found 0.000s
✅ Tests.Unit.Audits.CentralAuditsBoardServiceTest CreatedAt counts in the records period centrally but not for a client 0.016s
✅ 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 filename is a constant and ignores the restaurant 0.000s
✅ Tests.Unit.Audits.CentralAuditsBoardServiceTest The client tasks xls filename is a constant 0.000s
✅ Tests.Unit.Audits.CentralAuditsBoardServiceTest The client pdf filename is prefixed by a literal and carries the creation date 0.000s
✅ Tests.Unit.Audits.LocalAuditServiceTest GetTaskDetailData returns null when task not found 0.004s
✅ Tests.Unit.Audits.LocalAuditServiceTest GetTaskDetailData returns task and extraActions when found 0.000s
✅ Tests.Unit.Audits.LocalAuditServiceTest GetTaskDetailData passes null auditActionId when no auditAction 0.003s
✅ Tests.Unit.Audits.LocalAuditServiceTest UpdateTask returns null when task not found 0.001s
✅ 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.005s
✅ 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.001s
✅ Tests.Unit.Audits.LocalAuditServiceTest UpdateTasksBatch calls tasksUpdated once when auditRecord present 0.006s
✅ 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.008s
✅ Tests.Unit.Audits.MultiAuditServiceTest GetTasksPageData returns null 0.000s
✅ Tests.Unit.Audits.MultiAuditServiceTest GetTaskDetailData returns null when entity is null 0.000s
✅ Tests.Unit.Audits.MultiAuditServiceTest GetTaskDetailData scopes lookup to client restaurant ids 0.001s
✅ Tests.Unit.Audits.MultiAuditServiceTest GetTaskDetailData returns task and extraActions when found 0.000s
✅ Tests.Unit.Audits.MultiAuditServiceTest GetTaskDetailData passes null auditActionId when no auditAction 0.000s
✅ Tests.Unit.Audits.MultiAuditServiceTest UpdateTask returns null 0.000s
✅ Tests.Unit.Audits.MultiAuditServiceTest UpdateTasksBatch is a noop 0.000s
✅ Tests.Unit.Audits.MultiAuditServiceTest AddTaskImage returns null 0.002s
✅ 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.005s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest OwnerColumn is the family column nationally and the restaurant column locally 0.001s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest ManagesForbiddenEmployees is off nationally and on locally 0.001s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest TaskScopeArgument scopes the regeneration to the family nationally 0.000s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest TaskScopeArgument stays empty locally so the command does nothing 0.000s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest TaskScopeArgument returns on both contexts instead of recursing 0.000s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest InheritsFromFamily is false nationally because a family is the top 0.000s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest DirectoryIsAccessible requires strict family ownership nationally 0.000s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest DirectoryIsAccessible is unconditionally true locally 0.000s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest DeleteDirectory guards on the family column nationally 0.000s
✅ Tests.Unit.Audits.MultiAuditsParametersServiceTest StoreAudit asks for the contacts of its own owner in both contexts 0.001s
✅ Tests.Unit.Audits.SimpleAuditsParametersServiceTest GetShowPageData returns audits and folders from repository 0.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.003s
✅ 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.046s Nat plan disabled at loc does not generate tasksIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select * from `restaurants`
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Nat action disabled at loc does not generate tasks 0.044s Nat action disabled at loc does not generate tasksIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select * from `restaurant
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Closed restaurant stops generation 0.043s Closed restaurant stops generationIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select * from `restaurants` where `is_act
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Always is idempotent then regenerates when expired path hits 0.044s Always is idempotent then regenerates when expired path hitsIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select * from `
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Frequency increase from one reuses existing task as main 0.044s Frequency increase from one reuses existing task as mainIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select * from `rest
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Frequency generates indexed children linked to first task 0.044s Frequency generates indexed children linked to first taskIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select * from `res
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Only action id generates only target action tasks 0.044s Only action id generates only target action tasksIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select * from `restaurants
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Always updates valid until without modifying existing valid from 0.042s Always updates valid until without modifying existing valid fromIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select * fr
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Always friday only with expiration catch up after expiry on saturday 0.043s Always friday only with expiration catch up after expiry on saturdayIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Loc action on nat plan still generates when nat action disabled at loc 0.043s Loc action on nat plan still generates when nat action disabled at locIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: selec
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Day task not skipped when week closure does not cover full action slot 0.043s Day task not skipped when week closure does not cover full action slotIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: selec
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Day task skipped when week closure covers full action slot 0.043s Day task skipped when week closure covers full action slotIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select * from `re
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Day task skipped when week closure is full day with same start end hour 0.043s Day task skipped when week closure is full day with same start end hourIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: sele
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Frequency generation is idempotent on same period window 0.043s Frequency generation is idempotent on same period windowIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select * from `rest
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Week task skipped when restaurant closed all week period 0.042s Week task skipped when restaurant closed all week periodIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select * from `rest
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Nat parent disabled blocks child nat action generation regression 0.044s Nat parent disabled blocks child nat action generation regressionIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select * f
⚠️ Tests.Unit.CleaningPlan.CleaningPlanTaskGeneratorServiceIntegrationTest Nat loc disabled and several generations 0.044s Nat loc disabled and several generationsIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.restaurants' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select * from `restaurants` where `
✅ Tests.Unit.CleaningPlan.RestaurantCleaningPlanActionActiveTest Active zero disables family action 0.038s
✅ Tests.Unit.CleaningPlan.RestaurantCleaningPlanActionActiveTest Active one keeps family action when not disabled list 0.001s
✅ Tests.Unit.CleaningPlan.RestaurantNatLocCleaningPlanActionTest Loc action active when restaurant id matches and active one 0.004s
✅ 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.ExportDispatchResponseTest History page is safe 0.003s
✅ 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.023s
✅ Tests.Unit.Common.ExportToSpreadsheetActionTest Writes a file when there are no rows 0.005s
✅ Tests.Unit.Common.ReadSpreadsheetActionTest Reads rows keyed by header 0.006s
✅ 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.Http.Middleware.CorsMiddlewareTest Reflects localhost 5200 on sync tablet for hot reload 0.012s
✅ 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.Loggers.AlertOptimizationReportServiceTest countAlertsGroupedByLogger groups sent SMS-triggering alerts by logger, across restaurants 0.000s countAlertsGroupedByLogger groups sent SMS-triggering alerts by logger, across restaurantsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attemptin
⚠️ Tests.Unit.Loggers.AlertOptimizationReportServiceTest generate identifies only the logger above the threshold and reaches a conclusion for it 0.000s generate identifies only the logger above the threshold and reaches a conclusion for itUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting t
⚠️ Tests.Unit.Loggers.AlertOptimizationReportServiceTest generate excludes CIRL restaurants by default and includes them with withCirl 0.000s generate excludes CIRL restaurants by default and includes them with withCirlUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Déb
⚠️ Tests.Unit.Loggers.AlertOptimizationReportServiceTest generate with onlyCirl keeps CIRL restaurants and drops the others 0.000s generate with onlyCirl keeps CIRL restaurants and drops the othersUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'imp
⚠️ Tests.Unit.Loggers.AlertOptimizationReportServiceTest generate includes a logger below the alert threshold when SMS volume exceeds it 0.000s generate includes a logger below the alert threshold when SMS volume exceeds itUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: D
⚠️ Tests.Unit.Loggers.AlertOptimizationReportServiceTest diagnoseLogger sets peakAlertDay to the day with the most alerts 0.000s diagnoseLogger sets peakAlertDay to the day with the most alertsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'impor
⚠️ Tests.Unit.Loggers.AlertOptimizationReportServiceTest diagnoseLogger sets peakAlertDay to the earliest day when two days tie 0.000s diagnoseLogger sets peakAlertDay to the earliest day when two days tieUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l
⚠️ Tests.Unit.Loggers.AlertOptimizationReportServiceTest diagnoseLogger ignores alert_sent=false events when computing peakAlertDay 0.000s diagnoseLogger ignores alert_sent=false events when computing peakAlertDayUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début
⚠️ Tests.Unit.Loggers.AlertOptimizationReportServiceTest generate excludes a logger below the alert threshold when events have no SMS recipient 0.000s generate excludes a logger below the alert threshold when events have no SMS recipientUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to
⚠️ Tests.Unit.Loggers.ContactsSnapshotBuilderTest snapshot marks all channels active with empty skipped_reason 0.000s snapshot marks all channels active with empty skipped_reasonUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importati
⚠️ Tests.Unit.Loggers.ContactsSnapshotBuilderTest snapshot marks contact in closed dates with skipped_reason closed_dates 0.000s snapshot marks contact in closed dates with skipped_reason closed_datesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de
⚠️ Tests.Unit.Loggers.ContactsSnapshotBuilderTest snapshot marks inactive channels and nc alerts with distinct skipped_reason 0.000s snapshot marks inactive channels and nc alerts with distinct skipped_reasonUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début
✅ Tests.Unit.Loggers.DiagnosisSummaryFormatterTest isAdjustable is true only for A/B/C/F 0.020s
✅ Tests.Unit.Loggers.DiagnosisSummaryFormatterTest formatAction for C omits the justification stat and only states the reduction 0.007s
✅ 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.002s
✅ 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" 0.000s dizzy_back_to_normal (standalone) chart still includes a resolving log timestamped after "now"UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attem
✅ 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 0.000s temp_ongoing dizzy_ended is suppressed when already notified since the active issue startedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempti
⚠️ Tests.Unit.Loggers.DizzyEndedTempOngoingSuppressionTest temp_ongoing dizzy_ended is sent when no notification has fired since the active issue started 0.000s temp_ongoing dizzy_ended is sent when no notification has fired since the active issue startedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attem
⚠️ Tests.Unit.Loggers.DizzyEndedTempOngoingSuppressionTest temp_ongoing dizzy_ended stays suppressed across repeated flaps even when no temperature_issue event was ever recorded 0.000s temp_ongoing dizzy_ended stays suppressed across repeated flaps even when no temperature_issue event was ever recordedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The except
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailCopyTest period expected points cover dizzy started to now not a near-zero duration 0.044s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailCopyTest dizzy issue mail context uses reception-period counts since dizzy started 0.059s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailCopyTest dizzy temperature issue mail keeps period ratio on first sentence and window on temperatures 0.049s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest chart svg renders a polyline for multiple temperature points 0.049s
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest chart svg is empty with fewer than two points 0.043s
⚠️ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest mail context builder exposes dizzy period stats 0.041s mail context builder exposes dizzy period statsIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.fridge_logger_events' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select * from `frid
⚠️ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest mail context builder exposes compliant since for back to normal 0.040s mail context builder exposes compliant since for back to normalIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.fridge_logger_events' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: sel
⚠️ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest mail context builder uses window scope for dizzy back to normal with started 0.042s mail context builder uses window scope for dizzy back to normal with startedIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.fridge_logger_events' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_te
⚠️ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy mail stats include ignored logs in window scope 0.042s dizzy mail stats include ignored logs in window scopeIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.fridge_logger_events' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select * from
⚠️ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy temperature issue chart uses logs since dizzy started while stats stay on window 0.042s dizzy temperature issue chart uses logs since dizzy started while stats stay on windowIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.fridge_logger_events' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octop
⚠️ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest mail context builder exposes dizzy ended period recap 0.042s mail context builder exposes dizzy ended period recapIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.fridge_logger_log' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select `timestam
⚠️ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended stats include ignored logs like the chart 0.041s dizzy ended stats include ignored logs like the chartIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.fridge_logger_log' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select `timestam
⚠️ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended temp resolved exposes compliant since from reference log 0.040s dizzy ended temp resolved exposes compliant since from reference logIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.fridge_logger_log' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: s
⚠️ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended temp appeared does not expose compliant since 0.039s dizzy ended temp appeared does not expose compliant sinceIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.fridge_logger_log' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: select `time
⚠️ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended period start uses dizzy started when older than sliding window 0.039s dizzy ended period start uses dizzy started when older than sliding windowIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.fridge_logger_log' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests,
⚠️ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended temp appeared exposes anomaly started at from reference log 0.040s dizzy ended temp appeared exposes anomaly started at from reference logIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.fridge_logger_log' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL
⚠️ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended period start uses sliding window when dizzy started is more recent 0.041s dizzy ended period start uses sliding window when dizzy started is more recentIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.fridge_logger_log' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tes
✅ Tests.Unit.Loggers.DizzyTemperatureIssueMailTest dizzy ended mail context uses recap ended_at instead of now for stats and chart 0.039s
⚠️ Tests.Unit.Loggers.DizzyTemperatureIssueRepeatSuppressionTest dizzy_temperature_issue is not re-sent on a repeat flap while an alert is already active 0.000s dizzy_temperature_issue is not re-sent on a repeat flap while an alert is already activeUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting
⚠️ Tests.Unit.Loggers.DizzyTemperatureIssueRepeatSuppressionTest dizzy_temperature_issue is sent when no alert is currently active and a 2nd reading already confirms it 0.000s dizzy_temperature_issue is sent when no alert is currently active and a 2nd reading already confirms itUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred wh
⚠️ Tests.Unit.Loggers.DizzyTemperatureIssueRepeatSuppressionTest dizzy_temperature_issue is deferred when only one reading has been received 0.000s dizzy_temperature_issue is deferred when only one reading has been receivedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début
⚠️ Tests.Unit.Loggers.DizzyTemperatureIssueRepeatSuppressionTest a deferred dizzy_temperature_issue is sent once a second reading confirms it 0.000s a deferred dizzy_temperature_issue is sent once a second reading confirms itUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Débu
⚠️ Tests.Unit.Loggers.ExclusionWindowOptimizerTest optimize recommends an exclusion window when a recurring daily block would be suppressed by it 0.000s optimize recommends an exclusion window when a recurring daily block would be suppressed by itUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attem
⚠️ Tests.Unit.Loggers.ExclusionWindowOptimizerTest optimize returns null when there are too few alerts to find a candidate window 0.000s optimize returns null when there are too few alerts to find a candidate windowUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Dé
⚠️ Tests.Unit.Loggers.ExclusionWindowOptimizerTest optimize returns null when the baseline has no episodes to begin with 0.000s optimize returns null when the baseline has no episodes to begin withUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'
✅ Tests.Unit.Loggers.FridgeLoggerLogObserverTest created delegates to the timescale sync service 0.045s
✅ Tests.Unit.Loggers.FridgeLoggerLogObserverTest updated delegates to the timescale sync service 0.045s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest mois courant + 1 mois précédent (rétention non-prod) garde les 2 dernières partitions nommées 0.050s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest mois courant + 2 mois précédents (rétention PROD) garde les 3 dernières partitions nommées 0.039s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest p_future (MAXVALUE, boundary null) n'est jamais éligible, même avec la rétention minimale 0.039s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest aucune partition éligible quand la rétention couvre déjà tout l'historique nommé 0.039s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest un cutoff trop récent (bug de calcul) déclenche le garde-fou 0.039s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest monthsToKeepForEnvironment : 3 en production, 2 ailleurs 0.039s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest rangesByName : la première partition (p_old) part de 0, chaque suivante part de la borne précédente 0.038s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest timescaleHasEnoughData : bloque si timescale a nettement moins de lignes que mysql sur la période 0.038s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest timescaleHasEnoughData : autorise un écart mineur (dédup connue) et l'égalité stricte 0.039s
✅ Tests.Unit.Loggers.FridgeLoggerLogPartitionRetentionTest timescaleHasEnoughData : une partition mysql vide ne bloque jamais (rien à protéger) 0.039s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest reporting() stays on mysql when TSDB_READ_ENABLED is off 0.061s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest reporting() switches to timescale when TSDB_READ_ENABLED is on 0.050s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest reporting() still benefits from the recorded_at mirroring when on timescale 0.042s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest the default (bare) query builder is unaffected by the flag 0.038s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest eager-loaded relations stay on mysql even when the parent is queried on timescale 0.038s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest the self-referential logAlertSend relation is unaffected (already pinned to mysql on its own) 0.037s
✅ Tests.Unit.Loggers.FridgeLoggerLogReportingScopeTest relations are left alone when the parent stays on mysql 0.038s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest whereBetween on timestamp mirrors recorded_at with a 1 day safety margin on timescale 0.054s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest whereBetween on timestamp is left untouched on mysql 0.040s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest a lower-bound where on timestamp mirrors recorded_at on timescale 0.040s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleQueryBuilderTest an upper-bound where on timestamp mirrors recorded_at on timescale 0.046s
✅ 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.039s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest does nothing when sync is disabled 0.057s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest does nothing when the benchmark override targets timescale as the primary connection 0.039s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest does nothing when the log has no id yet 0.040s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest does nothing when the log has no recorded_at 0.039s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest upserts the log into timescale with matching bindings when enabled 0.041s
✅ Tests.Unit.Loggers.FridgeLoggerLogTimescaleSyncTest catches a failed upsert and logs it instead of breaking the caller 0.040s
✅ Tests.Unit.Loggers.FridgeLoggerPdfChartBuilderTest pdf day windows cover each restaurant-local day of the period 0.055s
✅ 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 0.000s Stable ok reports refactored overhead vs legacyUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma
⚠️ Tests.Unit.Loggers.FridgeLoggerRefactorBenchmarkTest Query profiler classifies sql 0.000s Query profiler classifies sqlUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base de donn
⚠️ Tests.Unit.Loggers.HistoryDataControllerSopalogTest grouped by day: totals, anomalies and comments match the seeded rows 0.000s grouped by day: totals, anomalies and comments match the seeded rowsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'i
⚠️ Tests.Unit.Loggers.HistoryDataControllerSopalogTest grouped by day and logger: per-logger temperature stats and area fallback 0.000s grouped by day and logger: per-logger temperature stats and area fallbackUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début d
⚠️ Tests.Unit.Loggers.HistoryDataControllerSopalogTest conformity filter keeps only days with an anomaly 0.000s conformity filter keeps only days with an anomalyUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schém
⚠️ Tests.Unit.Loggers.HistoryDataControllerSopalogTest conformity filter set to confirmed keeps only days without anomaly 0.000s conformity filter set to confirmed keeps only days without anomalyUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'imp
⚠️ Tests.Unit.Loggers.HistoryDataControllerSopalogTest comments filter keeps only days with a comment 0.000s comments filter keeps only days with a commentUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma d
⚠️ Tests.Unit.Loggers.HistoryDataControllerSopalogTest ungrouped mode aggregates the whole period into a single bucket 0.000s ungrouped mode aggregates the whole period into a single bucketUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'import
✅ Tests.Unit.Loggers.LogAnnotatorTest ignored out-of-range logs keep a physical snapshot without joining the alert streak 0.042s
✅ Tests.Unit.Loggers.LogAnnotatorTest ignored in-range logs stay at zero counters 0.039s
✅ Tests.Unit.Loggers.LogAnnotatorTest ignored out-of-range logs do not continue the live alerting streak 0.039s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter reports logger-level exclusion when contacts would be eligible 0.048s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter reports all-contacts exclusion when every channel is excluded 0.042s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter reports no active subscribers when contacts are inactive 0.040s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter filters out contacts without nc alerts subscription 0.039s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter shows contact name only without email or phone 0.038s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter labels contact exclusion as exclusion alertes capteurs 0.037s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest generatesMailOrSms excludes dizzy_started 0.040s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest generatesMailOrSms excludes dizzy_ended without mail variant 0.040s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest generatesMailOrSms includes dizzy_ended with mail variant or alert_sent 0.043s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest generatesMailOrSms includes temperature issue 0.041s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter labels temperature issue after dizzy ended 0.040s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest appearsInAlertHistory includes dizzy_started without notification 0.040s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest appearsInAlertHistory includes dizzy ended without variant 0.040s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest presenter reports awaiting second reading reason 0.041s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest countNotifications tallies sent and not sent mail or sms events 0.041s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest sentAlertsIndexByLogId groups sent contacts by channel 0.041s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest formatSentAlertLinesForLog shows sms and email lines with contacts 0.041s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest formatSentAlertLinesForLog shows only sms when email was not sent 0.040s
✅ Tests.Unit.Loggers.LoggerAlertEventPresenterTest formatSentAlertLinesForLog returns empty when no sent events exist for log 0.040s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers use linked log coordinates 0.084s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers use timestamp when recorded_at is shifted 0.039s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers style back to normal with green checkmark 0.039s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers style dizzy ended temp resolved like back to normal 0.039s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers style dizzy ended recap as black icon on white 0.040s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers skip dizzy ended temp appeared 0.042s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest chart alert markers skip events without mail or sms 0.042s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest alert marker style uses grey for unsent alerts 0.039s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest dizzy ended temp appeared is excluded from chart 0.038s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest dizzy ended with prior alerts uses white recap style 0.041s
✅ Tests.Unit.Loggers.LoggerChartAlertMarkerBuilderTest icon char from class returns utf8 glyph 0.041s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest date bounds for a martinique day start at local midnight 0.081s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest day bounds from paris morning timestamp stay on the martinique calendar day 0.042s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest mysql utc offset for martinique is minus four hours 0.041s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest invalid timezone falls back to app timezone 0.044s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest formatHi converts a utc carbon to the restaurant clock 0.040s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest chart axis labels add the date at the start when the window spans two days 0.040s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest apply to logs sets display timezone used by measurement at 0.041s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest calendar period bounds keep paris dates identical for europe/paris 0.039s
✅ Tests.Unit.Loggers.LoggerDisplayTimezoneTest calendar period bounds reinterpret a paris day as martinique midnight 0.040s
✅ Tests.Unit.Loggers.LoggerExclusionChartPeriodBuilderTest exclusion chart periods ignore contact-level exclusions 0.023s
✅ 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.048s
✅ Tests.Unit.Loggers.LoggerTemperatureChartPngRendererTest png chart is empty with fewer than two points 0.044s
✅ Tests.Unit.Loggers.LoggerTemperatureChartPngRendererTest png chart renders a valid PNG at the requested size for multiple points 0.049s
✅ 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.060s
✅ Tests.Unit.Loggers.LoggerTemperatureChartPurgerTest purge removes only day directories older than the retention window 0.051s
✅ Tests.Unit.Loggers.LoggerTemperatureChartPurgerTest purge is a no-op when the directory does not exist 0.040s
✅ Tests.Unit.Loggers.LoggerTemperatureChartSvgRendererTest svg chart plots timestamp even when recorded_at is two hours earlier 0.046s
✅ Tests.Unit.Loggers.LoggerTemperatureChartSvgRendererTest fridge logger log chart axis uses timestamp not recorded_at 0.040s
✅ Tests.Unit.Loggers.LoggerTemperatureChartSvgRendererTest svg chart axis labels use restaurant timezone not utc 0.040s
✅ Tests.Unit.Loggers.LoggerTemperatureChartSvgRendererTest chart axis uses restaurant timezone when provided 0.039s
⚠️ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest skips a logger whose last_log_id is already at or after until 0.000s skips a logger whose last_log_id is already at or after untilUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importat
⚠️ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest processes a logger whose last_log_id is stale relative to until 0.000s processes a logger whose last_log_id is stale relative to untilUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'import
⚠️ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest skips a logger already caught up to until when no newer data arrived (re-run with same --until) 0.000s skips a logger already caught up to until when no newer data arrived (re-run with same --until)UnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while atte
⚠️ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest processes a logger with no prior last_log_id 0.000s processes a logger with no prior last_log_idUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de
⚠️ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest processes a logger with a legacy last_log_id but no last_event yet 0.000s processes a logger with a legacy last_log_id but no last_event yetUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'imp
⚠️ Tests.Unit.Loggers.LoggerWindowStateBackfillerTest cutoff relies on the reading timestamp, not created_at 0.000s cutoff relies on the reading timestamp, not created_atUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du
⚠️ Tests.Unit.Loggers.NoDataAlertCoordinatorTest applyReconnectContext flags pending no data alert 0.000s applyReconnectContext flags pending no data alertUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schém
⚠️ Tests.Unit.Loggers.NoDataAlertCoordinatorTest resolveViaTemperatureReconnect clears flags and records merged resolution event 0.000s resolveViaTemperatureReconnect clears flags and records merged resolution eventUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: D
⚠️ Tests.Unit.Loggers.ReceptionQualityAnalyzerTest classify returns category D for a clean, regular cadence multiple of 10 min 0.000s classify returns category D for a clean, regular cadence multiple of 10 minUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début
⚠️ Tests.Unit.Loggers.ReceptionQualityAnalyzerTest classify returns category E when alerts fire on windows with low data completeness 0.000s classify returns category E when alerts fire on windows with low data completenessUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log
⚠️ Tests.Unit.Loggers.ReceptionQualityAnalyzerTest classify returns null for a normal, well-received sensor 0.000s classify returns null for a normal, well-received sensorUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation d
✅ Tests.Unit.Loggers.RestaurantIdFilterTest restaurant id filter parses single id 0.001s
✅ 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.043s
✅ Tests.Unit.Loggers.SmsPhoneDeduplicationTest normalizePhone maps french national formats to e164 0.041s
✅ Tests.Unit.Loggers.SmsPhoneDeduplicationTest prepareMessage leaves short messages untouched even with degree symbol 0.041s
✅ Tests.Unit.Loggers.SmsPhoneDeduplicationTest prepareMessage keeps gsm7 french accents like E acute 0.040s
✅ Tests.Unit.Loggers.SmsPhoneDeduplicationTest prepareMessage only rewrites chars outside gsm7 when longer than 70 0.042s
✅ Tests.Unit.Loggers.SmsPhoneDeduplicationTest prepareMessage leaves real french donnees with e acute unchanged 0.039s
✅ Tests.Unit.Loggers.SopalogBrokerIsDateInClosedDatesTest Normal range hour inside returns true 0.014s
✅ 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.048s
✅ Tests.Unit.Loggers.StableTemperatureMailTest stable alert chart axis extends to now without including later compliant points 0.043s
✅ Tests.Unit.Loggers.StableTemperatureMailTest stable mail chart stays in viewbox when recorded_at is shifted from timestamp 0.042s
✅ Tests.Unit.Loggers.StableTemperatureMailTest stable mail context builder exposes compliant since on resolution 0.039s
⚠️ Tests.Unit.Loggers.TemperatureIssueContextTest back_to_normal during exclusion resolves a deferred temperature issue 0.000s back_to_normal during exclusion resolves a deferred temperature issueUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'
⚠️ Tests.Unit.Loggers.TemperatureIssueContextTest deferred issue without resolution stays pending 0.000s deferred issue without resolution stays pendingUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma
⚠️ Tests.Unit.Loggers.TemperatureIssueContextTest isTempOngoingAlreadyNotified is true right after a temp_ongoing dizzy_ended was sent 0.000s isTempOngoingAlreadyNotified is true right after a temp_ongoing dizzy_ended was sentUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to l
⚠️ Tests.Unit.Loggers.TemperatureIssueContextTest isTempOngoingAlreadyNotified is false once a resolution happened after the last dizzy_ended 0.000s isTempOngoingAlreadyNotified is false once a resolution happened after the last dizzy_endedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempti
⚠️ Tests.Unit.Loggers.TemperatureIssueContextTest isTempOngoingAlreadyNotified is false when no dizzy_ended has fired yet 0.000s isTempOngoingAlreadyNotified is false when no dizzy_ended has fired yetUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de
⚠️ Tests.Unit.Loggers.TemperatureReminderEvaluatorTest reminder is not sent in the same batch as a fresh temperature issue 0.000s reminder is not sent in the same batch as a fresh temperature issueUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'im
⚠️ Tests.Unit.Loggers.TemperatureReminderEvaluatorTest reminder uses the latest issue after context refresh 0.000s reminder uses the latest issue after context refreshUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du sc
⚠️ Tests.Unit.Loggers.TemperatureReminderEvaluatorTest reminder is sent two hours after the active issue 0.000s reminder is sent two hours after the active issueUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schém
⚠️ Tests.Unit.Loggers.TemperatureReminderEvaluatorTest pending temperature issue suppressed by dizzy ended is never sent later 0.000s pending temperature issue suppressed by dizzy ended is never sent laterUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de
✅ 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 0.000s optimize recommends only category A when raising the max threshold alone resolves most alertsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attemp
⚠️ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize recommends only category B when both thresholds must move to resolve most alerts 0.000s optimize recommends only category B when both thresholds must move to resolve most alertsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting
⚠️ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize recommends only category C when the alerts are short excursions unaffected by threshold changes 0.000s optimize recommends only category C when the alerts are short excursions unaffected by threshold changesUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred w
⚠️ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize surfaces both a threshold option and a duration option when both are independently viable 0.000s optimize surfaces both a threshold option and a duration option when both are independently viableUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while a
⚠️ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize returns an empty list when there is nothing worth changing 0.000s optimize returns an empty list when there is nothing worth changingUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'im
⚠️ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize surfaces +1°C and +2°C when the larger step reduces alerts much more 0.000s optimize surfaces +1°C and +2°C when the larger step reduces alerts much moreUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Déb
⚠️ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize keeps only +1°C when +2°C barely improves further 0.000s optimize keeps only +1°C when +2°C barely improves furtherUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation
⚠️ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize keeps only +2°C when +1°C does not reduce alerts enough 0.000s optimize keeps only +2°C when +1°C does not reduce alerts enoughUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'impor
⚠️ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize surfaces +10 min and +20 min when the larger step reduces alerts much more 0.000s optimize surfaces +10 min and +20 min when the larger step reduces alerts much moreUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to lo
⚠️ Tests.Unit.Loggers.ThresholdAndDurationOptimizerTest optimize keeps only +10 min when +20 min barely improves further 0.000s optimize keeps only +10 min when +20 min barely improves furtherUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'impor
⚠️ Tests.Unit.Loggers.TimeClusteringAnalyzerTest findBestWindow finds a <=4h window covering more than 80% of the alerts 0.000s findBestWindow finds a <=4h window covering more than 80% of the alertsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de
⚠️ Tests.Unit.Loggers.TimeClusteringAnalyzerTest findBestWindow handles a window wrapping past midnight 0.000s findBestWindow handles a window wrapping past midnightUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du
⚠️ Tests.Unit.Loggers.TimeClusteringAnalyzerTest findBestWindow returns a low-coverage window when alerts are spread evenly across the day 0.000s findBestWindow returns a low-coverage window when alerts are spread evenly across the dayUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting
⚠️ Tests.Unit.Loggers.TimeClusteringAnalyzerTest findBestWindow returns null when there are too few alerts to be meaningful 0.000s findBestWindow returns null when there are too few alerts to be meaningfulUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début
⚠️ Tests.Unit.Loggers.WindowStateReplaySimulatorTest analyzeWindow matches TemperatureWindowAnalyzer::analyze() for the same logs and config 0.000s analyzeWindow matches TemperatureWindowAnalyzer::analyze() for the same logs and configUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting t
⚠️ Tests.Unit.Loggers.WindowStateReplaySimulatorTest countIssueEpisodes counts one episode per sustained out-of-limits block 0.000s countIssueEpisodes counts one episode per sustained out-of-limits blockUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de
⚠️ Tests.Unit.Loggers.WindowStateReplaySimulatorTest countIssueEpisodes counts a fresh episode after a full recovery in between 0.000s countIssueEpisodes counts a fresh episode after a full recovery in betweenUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début
⚠️ Tests.Unit.Loggers.WindowStateReplaySimulatorTest countIssueEpisodes returns 0 when nothing ever leaves the stable_ok state 0.000s countIssueEpisodes returns 0 when nothing ever leaves the stable_ok stateUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début d
✅ Tests.Unit.Mail.MailPitTagsTest adds X-Tags header when mailpit_tags is configured 0.055s
✅ Tests.Unit.Mail.MailPitTagsTest does nothing when mailpit_tags is empty 0.040s
✅ Tests.Unit.Mail.MailPitTagsTest does not overwrite an existing X-Tags header 0.039s
✅ Tests.Unit.Mail.MailSimulatedTimestampTest sets mail date header from carbon test now 0.051s
✅ 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.039s
✅ Tests.Unit.NotationServiceRegressionTest Check percent ne declenche pas d alerte quand total est zero 0.008s
✅ Tests.Unit.NotationServiceRegressionTest Check module data type number ne declenche pas d alerte quand periode fermee 0.002s
✅ 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.004s
✅ Tests.Unit.NotationServiceTest Check percent returns no alert when precomputed percent is dash 0.001s
✅ Tests.Unit.OnboardingNotificationServiceTest First day uses one hour delay 0.001s
✅ Tests.Unit.OnboardingNotificationServiceTest Between day one and day three uses two hour delay 0.000s
✅ Tests.Unit.OnboardingNotificationServiceTest After day three uses six hour delay 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsClosedAllPeriodTest Period closure covers full week range returns true 0.001s
✅ Tests.Unit.Restaurant.RestaurantIsClosedAllPeriodTest Week all day closure every weekday in range returns true 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsClosedAllPeriodTest Week closure only weekends range has open weekday returns false 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsClosedAllPeriodTest Single date closure on same day returns true 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsClosedAllPeriodTest No closures returns false 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Normal range hour inside restaurant is closed 0.001s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Normal range hour outside restaurant is open 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Midnight crossing range hour before midnight should be closed 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Midnight crossing range hour after midnight should be closed 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Midnight crossing range start boundary should be closed 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Midnight crossing range end boundary should be closed 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Midnight crossing range hour clearly outside stays open 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Midnight crossing range just before start stays open 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Midnight crossing range just after end stays open 0.000s
✅ Tests.Unit.Restaurant.RestaurantIsOpenAtMidnightClosureTest Closed all day when start equals end stays closed at any hour 0.000s
✅ Tests.Unit.Routing.ModuleCsrfCoverageTest Every module write route served by session is covered by csrf 0.057s
✅ Tests.Unit.Routing.ModuleCsrfCoverageTest The module csrf verifier has no exemption 0.044s
✅ Tests.Unit.Support.MailAddressListTest Flatten keeps plain email strings 0.007s
✅ 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.001s
✅ 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
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Backoffice pages are reachable 0.000s Backoffice pages are reachableIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `admins` (`firstname`, `lastname`, `em
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Can update dynamic areas and section fields 0.000s Can update dynamic areas and section fieldsIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `admins` (`firstname`, `l
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Rich text validates plain text length not html length 0.000s Rich text validates plain text length not html lengthIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `admins` (`firs
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Content title validates max string length 0.000s Content title validates max string lengthIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `admins` (`firstname`, `las
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Home sections title validates max string length 0.000s Home sections title validates max string lengthIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `admins` (`firstname`
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Related article title validates max string length on content store 0.000s Related article title validates max string length on content storeIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `a
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Content title validates max string length on content store 0.000s Content title validates max string length on content storeIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `admins` (
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front renders rich text html unescaped 0.000s Front renders rich text html unescapedIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `admins` (`firstname`, `lastna
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Can search existing tags for backoffice autocomplete 0.000s Can search existing tags for backoffice autocompleteIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `admins` (`first
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Video content draft then publish then toggle from list then delete 0.000s Video content draft then publish then toggle from list then deleteIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `a
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Document flow with thematics and front visibility 0.000s Document flow with thematics and front visibilityIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `admins` (`firstnam
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front home section and content pages are reachable 0.000s Front home section and content pages are reachableIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `admins` (`firstna
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front content detail displays related articles before similar contents 0.000s Front content detail displays related articles before similar contentsIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert int
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front content detail shows similar contents ordered by shared tags without thematics 0.000s Front content detail shows similar contents ordered by shared tags without thematicsIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, S
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front content detail fills similar contents with section peers without shared tags 0.000s Front content detail fills similar contents with section peers without shared tagsIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front content detail prioritizes same thematic before other similar contents 0.000s Front content detail prioritizes same thematic before other similar contentsIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: inse
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front shows only active and published contents and blocks others 0.000s Front shows only active and published contents and blocks othersIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `adm
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front returns 404 for unknown section or unknown content 0.000s Front returns 404 for unknown section or unknown contentIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `admins` (`f
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front section without thematics is still reachable without thematic filter bar 0.000s Front section without thematics is still reachable without thematic filter barIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: in
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front section search and thematic filters apply across pagination 0.000s Front section search and thematic filters apply across paginationIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `ad
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front section search matches content tags 0.000s Front section search matches content tagsIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `admins` (`firstname`, `las
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front uses default thumbnail logo when content thumbnail is missing 0.000s Front uses default thumbnail logo when content thumbnail is missingIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front home does not render sections without slug 0.000s Front home does not render sections without slugIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `admins` (`firstname
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Youtube url formats are supported on front 0.000s Youtube url formats are supported on frontIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `admins` (`firstname`, `la
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Front access is forbidden when restaurant has no academy access 0.000s Front access is forbidden when restaurant has no academy accessIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `admi
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Courses can be created and are visible on front section when upcoming and published 0.000s Courses can be created and are visible on front section when upcoming and publishedIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQ
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Backoffice courses list orders drafts first then published by ascending date 0.000s Backoffice courses list orders drafts first then published by ascending dateIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: inse
⚠️ App.Modules.Academy.Tests.AcademyModuleFeatureTest Courses draft cannot be activated publish and activate endpoint publishes 0.000s Courses draft cannot be activated publish and activate endpoint publishesIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.admins' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert
✅ App.Modules.Academy.Tests.AcademyRichTextTest Plain text length ignores html tags 0.006s
✅ 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.006s
✅ App.Modules.Alert.Tests.AlertServiceTest Update audit alerts can disable 0.000s
⚠️ App.Modules.Alert.Tests.EloquentAlertRepositoryTest It never deletes the multisite report contact even when it is not in the kept restaurant ids 0.000s It never deletes the multisite report contact even when it is not in the kept restaurant idsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempt
⚠️ App.Modules.Alert.Tests.EloquentAlertRepositoryTest Find or create global contact reuses the existing restaurant id zero contact 0.000s Find or create global contact reuses the existing restaurant id zero contactUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Débu
⚠️ App.Modules.Alert.Tests.EloquentAlertRepositoryTest Find or create global contact does not duplicate on repeated calls 0.000s Find or create global contact does not duplicate on repeated callsUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'imp
✅ App.Modules.Alert.Tests.GetAccessRestaurantsPreloadingTest Preloaded main client restaurants are reused without re querying 0.011s
✅ 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.027s
✅ App.Modules.Auth.Tests.AuthGuardTest From entity returns admin for admin model 0.056s
✅ App.Modules.Auth.Tests.AuthGuardTest From entity returns client for client model 0.047s
✅ App.Modules.Auth.Tests.AuthGuardTest From entity returns web for restaurant model 0.046s
✅ App.Modules.Auth.Tests.AuthGuardTest From entity returns central for restaurant central model 0.047s
✅ App.Modules.Auth.Tests.AuthGuardTest From userable type maps all known types 0.046s
✅ App.Modules.Auth.Tests.AuthGuardTest From userable type throws for unknown type 0.047s
✅ App.Modules.Auth.Tests.AuthGuardTest From domain returns admin for superpoulpe domain 0.046s
✅ App.Modules.Auth.Tests.AuthGuardTest From domain returns client for clients domain 0.050s
✅ App.Modules.Auth.Tests.AuthGuardTest From domain returns web for app domain 0.045s
✅ App.Modules.Auth.Tests.AuthGuardTest From domain returns null for unknown domain 0.044s
✅ App.Modules.Auth.Tests.AuthGuardTest From request returns central for app domain with central prefix 0.046s
✅ App.Modules.Auth.Tests.AuthGuardTest From request returns web for app domain without central prefix 0.045s
✅ App.Modules.Auth.Tests.AuthGuardTest From request returns null for unknown domain 0.044s
✅ App.Modules.Auth.Tests.AuthGuardTest Get redirect route name returns expected routes 0.043s
✅ App.Modules.Auth.Tests.AuthGuardTest Model returns correct model class for each guard 0.042s
✅ App.Modules.Auth.Tests.AuthGuardTest Get impersonation entry route name returns null for admin 0.042s
✅ App.Modules.Auth.Tests.AuthGuardTest Get impersonation entry route name returns route for impersonable guards 0.042s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate returns null when no users match login 0.158s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate throws inactive when user is inactive 0.101s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate throws inactive when entity is inactive 0.107s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate throws use credentials disabled when sso only 0.116s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate throws password expired when highly secured and expired 0.105s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate does not throw when highly secured password is valid 0.101s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate does not check expiry when not highly secured 0.105s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate skips expiry check when no client 0.097s
✅ App.Modules.Auth.Tests.AuthServiceTest Authenticate throws password expired for client entity 0.045s
✅ App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest Returns false when no temp password set 0.065s
✅ App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest Returns false when password does not match 0.040s
✅ App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest Returns false when expired 0.041s
✅ App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest Returns false when no expiry set 0.039s
✅ App.Modules.Auth.Tests.ConsumeRestaurantTempPasswordActionTest Consumes and returns true when valid 0.041s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Consume token returns false when token does not match 0.056s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Consume token returns false when token is expired 0.041s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Consume token returns true and clears token when valid 0.041s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Consume token accepts token exactly at ttl boundary 0.044s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Is impersonating returns false when no session 0.040s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Start impersonation pushes layer to stack 0.039s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Start impersonation supports multi level stack 0.038s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Start impersonation with parent stack uses parent as base 0.039s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Current layer returns null when not impersonating 0.048s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Leave pops top layer and returns return url 0.042s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Leave clears legacy session keys 0.041s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Leave in multi level stack keeps remaining layers 0.039s
✅ App.Modules.Auth.Tests.ImpersonationServiceTest Leave without stack falls back to app login route 0.041s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Client constraints use client type and own id 0.071s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Client manager constraints use parent id not subclient id 0.042s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Client and restaurant with same numeric id have distinct types 0.040s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Restaurant constraints exclude admin role 0.041s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Central constraints match username as email 0.042s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Constraints for unknown entity throws 0.042s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Execute falls back to app login when no user found 0.041s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Execute logs in resolved user and returns auth redirect 0.043s
✅ App.Modules.Auth.Tests.LoginAfterPasswordResetActionTest Execute never calls login with a raw entity 0.040s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate throws invalid when login token not found 0.064s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate via password returns restaurant when credentials match 0.043s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate throws invalid when all credential paths fail 0.040s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate via temp password succeeds when not expired 0.044s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate via temp password throws invalid when expired 0.045s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate throws inactive when restaurant is inactive 0.042s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate throws password expired when highly secured and expired 0.044s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate succeeds without client 0.042s
✅ App.Modules.Auth.Tests.MobileAuthServiceTest Authenticate succeeds with non highly secured client 0.042s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Client not highly secured returns not highly secured 0.061s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Client never changed password returns expired 0.040s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Client changed recently returns valid 0.042s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Client within 7 days of expiry returns expiring soon 0.043s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Client past 180 days returns expired 0.045s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant with no client returns not highly secured 0.042s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant client not highly secured returns not highly secured 0.043s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant never changed password returns expired 0.043s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant changed recently returns valid 0.042s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant within 7 days of expiry returns expiring soon 0.043s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant past 180 days returns expired 0.042s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant tablet out of sync returns password change required 0.047s
✅ App.Modules.Auth.Tests.PasswordExpirationServiceTest Restaurant tablet with null last sync skips password change check 0.040s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Generate reset token stores token on user 0.069s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Generate reset token returns 64 char hex string 0.042s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Validate token returns true when token matches and not expired 0.041s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Validate token returns false when token does not match 0.043s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Validate token returns false when token is expired 0.043s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Consume token hashes password and clears token 0.199s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Consume token skips restaurant sync when userable missing 0.149s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Issue reset token always stores on restaurant for authenticate middleware 0.045s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Issue reset token mirrors on admin user when present 0.045s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Validate reset token uses restaurant admin email code 0.041s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Validate reset token rejects expired code 0.041s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Consume reset token updates restaurant when no admin user 0.147s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Consume reset token syncs admin user and restaurant 0.200s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Matches admin email is case insensitive 0.042s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Matches admin email falls back to admin user when admin email empty 0.040s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Verify password accepts restaurant admin password without admin user 0.196s
✅ App.Modules.Auth.Tests.RestaurantAdminAuthServiceTest Verify password ignores admin user with empty password hash 0.199s
✅ App.Modules.Auth.Tests.SendPasswordExpiredResetLinkActionTest Sends via users broker for restaurant 0.091s
✅ App.Modules.Auth.Tests.SendPasswordExpiredResetLinkActionTest Sends via clients broker for client 0.043s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Create conversation throws when no participant is selected 0.051s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Update conversation throws when not found 0.042s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Update conversation throws when wrong restaurant 0.042s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Add message creates message and marks as read 0.050s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Mark conversation as read calls repository 0.042s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Delete conversation calls repository 0.038s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Get unread overview returns total and counts by accessible restaurant 0.039s
⏭️ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Unread count increases for other participant when one sends messages 0.000s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Create conversation with message creates message 0.041s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Bridge client user resolves via manager service 0.039s
✅ App.Modules.ComInApp.Tests.ComInAppConversationServiceTest Bridge client user sets null when no matching user 0.041s
✅ App.Modules.ComInApp.Tests.ComInAppServiceTest Add unread message count to employees adds count to employees 0.068s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Search delegates to repository 0.004s
✅ 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.002s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Create stores null password when none provided 0.000s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Find or fail delegates to repository 0.000s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Update passes dto array to repository 0.002s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Update hashes password when present in dto array 0.000s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Update does not add password when absent from dto array 0.000s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Update propagates repository false 0.000s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Delete finds admin then delegates deletion 0.000s
✅ App.Modules.Users.Admin.Tests.AdminServiceTest Delete propagates repository false 0.000s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest All for central delegates to repository 0.003s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest Sync creates user when no id provided 0.000s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest Sync skips creation when email is empty 0.000s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest Sync with empty array does nothing 0.000s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest Sync updates email when id matches 0.001s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest Sync updates password when provided 0.000s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest Sync skips when user not found for id 0.000s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest Sync deletes user when delete flag set 0.000s
✅ App.Modules.Users.Central.Tests.CentralManagerServiceTest Sync handles mixed operations 0.001s
✅ App.Modules.Users.Central.Tests.CentralServiceTest All delegates to repository 0.003s
✅ App.Modules.Users.Central.Tests.CentralServiceTest Find or fail delegates to repository 0.000s
✅ App.Modules.Users.Central.Tests.CentralServiceTest Create persists central and creates user 0.000s
✅ App.Modules.Users.Central.Tests.CentralServiceTest Create passes null restaurants as empty array 0.000s
✅ App.Modules.Users.Central.Tests.CentralServiceTest Update persists data and syncs user email 0.002s
✅ 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.038s
✅ App.Modules.Users.Client.Tests.BuildManagerExportRowTest Blank names stay empty 0.041s
✅ App.Modules.Users.Client.Tests.ClientFamilyServiceTest Find or fail delegates to repository 0.006s
✅ 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.005s
✅ 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.007s
✅ 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.005s
✅ App.Modules.Users.Client.Tests.ClientPolicyTest Manage audit alerts allows self 0.000s
✅ App.Modules.Users.Client.Tests.ClientPolicyTest Manage audit alerts denies another hierarchy 0.000s
✅ App.Modules.Users.Client.Tests.ClientPolicyTest Manage audit alerts denies managers from another client 0.000s
✅ App.Modules.Users.Client.Tests.ClientPolicyTest Manage audit alerts denies when current entity is not a client 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest All delegates to repository 0.004s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Find or fail delegates to repository 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Create hashes password and sets is superadmin 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Create maps all dto fields 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Update passes dto array to repository 0.002s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Update cascades highly secured password to children 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Update does not cascade when highly secured password absent 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Update cascades use credentials to children 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Update propagates repository false 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Delete finds client and delegates 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Toggle updates only is active 0.000s
✅ App.Modules.Users.Client.Tests.ClientServiceTest Count restaurants counts all for client 0.000s
✅ App.Modules.Users.Client.Tests.ExportManagersJobTest Exports managers and notifies with a downloadable file 0.073s
✅ App.Modules.Users.Client.Tests.ImportManagersJobTest Imports valid rows and reports errors for invalid ones 0.173s
⚠️ App.Modules.Users.Client.Tests.ImportManagersJobTest Reports a friendly error when the spreadsheet file cannot be read 0.044s Reports a friendly error when the spreadsheet file cannot be readUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: ImportManagersJ
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest View any allows superadmin 0.009s
✅ 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.001s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Manage denies superadmin target when it is the only active superadmin 0.001s
✅ App.Modules.Users.Client.Tests.ManagerPolicyTest Manage allows superadmin target when more than one active superadmin 0.001s
✅ 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.105s Sub client reusing main email does not overwrite the superadminIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.clients' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `cli
⚠️ App.Modules.Users.Client.Tests.ManagerReusingMainEmailTest Sub client with its own email still gets its own manager user 0.094s Sub client with its own email still gets its own manager userIlluminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'octopus_auto_tests.clients' doesn't exist (Connection: mysql, Host: localhost, Port: 3306, Database: octopus_auto_tests, SQL: insert into `clien
✅ App.Modules.Users.Client.Tests.ManagerServiceTest All for client delegates to repository 0.008s
✅ 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.001s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Get index view data defaults when no sub client 0.000s
✅ App.Modules.Users.Client.Tests.ManagerServiceTest Get index view data shows total restaurants for superadmin 0.000s
✅ App.Modules.Users.Client.Tests.MapImportRowToStoreDTOTest Maps basic fields 0.008s
✅ 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.003s
✅ 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.012s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest All delegates to repository with restaurant id 0.006s
✅ 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.003s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Create passes restaurant id and basic fields 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Create defaults color when null 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Create resolves dlc both 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Create resolves dlc only edit dlc 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Create defaults action plan edit level to full when null 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Create keeps provided action plan edit level 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Create calls sync relations with dto arrays 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Update active only sets flag and saves without full update 0.010s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Update keeps empty password so it can be removed 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Update keeps non empty password 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Update does not call sync when save fails 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Delete delegates to repository 0.001s
✅ App.Modules.Users.Employee.Tests.LocalEmployeeServiceTest Bulk delete delegates with restaurant id 0.001s
✅ App.Modules.Users.Employee.Tests.MultiEmployeeServiceTest All delegates to repository with family id 0.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.017s
✅ 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.253s
✅ 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.258s
✅ App.Modules.Users.Restaurant.Tests.CreateTrialRestaurantActionTest It derives the username from the email local part 0.166s
✅ App.Modules.Users.Restaurant.Tests.CreateTrialRestaurantActionTest It suffixes the username with the domain on collision 0.155s
⚠️ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Unchecking a provider soft deletes its polymorphic connexion 0.000s Unchecking a provider soft deletes its polymorphic connexionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importati
⚠️ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Unchecking a provider soft deletes its legacy connexion 0.000s Unchecking a provider soft deletes its legacy connexionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du
⚠️ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Rechecking a provider restores its soft deleted connexion 0.000s Rechecking a provider restores its soft deleted connexionUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation
⚠️ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Disabled connexion is excluded from the default sync query 0.000s Disabled connexion is excluded from the default sync queryUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation
⚠️ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Untouched providers are not affected 0.000s Untouched providers are not affectedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importation du schéma de la base
⚠️ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Local restaurant service resets import apis when all boxes are unchecked 0.000s Local restaurant service resets import apis when all boxes are uncheckedUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de
⚠️ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Ajax is active toggle does not reset import apis on local service 0.000s Ajax is active toggle does not reset import apis on local serviceUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'impo
⚠️ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Ajax is active toggle does not reset import apis on indep service 0.000s Ajax is active toggle does not reset import apis on indep serviceUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'impo
⚠️ App.Modules.Users.Restaurant.Tests.ImportApisApiConnexionSyncTest Inactive restaurant connexion is excluded from the sync query 0.000s Inactive restaurant connexion is excluded from the sync queryUnexpectedValueException: The stream or file "/var/www/octopus-haccp/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: Début de l'importat