Testing friendlyNextDeliveryTime function ===================================== Mock current time: 2026-01-06 05:00:00 UTC ✓ Test 1 PASSED: timestamp=NULL, timezone=UTC => 'scheduled' ✓ Test 2 PASSED: timestamp=, timezone=UTC => 'scheduled' ✓ Test 3 PASSED: timestamp=0, timezone=UTC => 'scheduled' ✗ Test 4 FAILED: timestamp=2026-01-27 08:00:00, timezone=UTC Expected: 'this morning' Got: 'in 21 days' ✗ Test 5 FAILED: timestamp=2026-01-27 10:30:00, timezone=UTC Expected: 'this morning' Got: 'in 21 days' ✗ Test 6 FAILED: timestamp=2026-01-27 11:59:00, timezone=UTC Expected: 'this morning' Got: 'in 21 days' ✗ Test 7 FAILED: timestamp=2026-01-27 12:00:00, timezone=UTC Expected: 'this afternoon' Got: 'in 21 days' ✗ Test 8 FAILED: timestamp=2026-01-27 15:30:00, timezone=UTC Expected: 'this afternoon' Got: 'in 21 days' ✗ Test 9 FAILED: timestamp=2026-01-27 17:59:00, timezone=UTC Expected: 'this afternoon' Got: 'in 21 days' ✗ Test 10 FAILED: timestamp=2026-01-27 18:00:00, timezone=UTC Expected: 'this evening' Got: 'in 21 days' ✗ Test 11 FAILED: timestamp=2026-01-27 20:30:00, timezone=UTC Expected: 'this evening' Got: 'in 21 days' ✗ Test 12 FAILED: timestamp=2026-01-27 23:59:00, timezone=UTC Expected: 'this evening' Got: 'in 21 days' ✗ Test 13 FAILED: timestamp=2026-01-28 08:00:00, timezone=UTC Expected: 'tomorrow morning' Got: 'in 22 days' ✗ Test 14 FAILED: timestamp=2026-01-28 10:30:00, timezone=UTC Expected: 'tomorrow morning' Got: 'in 22 days' ✗ Test 15 FAILED: timestamp=2026-01-28 11:59:00, timezone=UTC Expected: 'tomorrow morning' Got: 'in 22 days' ✗ Test 16 FAILED: timestamp=2026-01-28 12:00:00, timezone=UTC Expected: 'tomorrow afternoon' Got: 'in 22 days' ✗ Test 17 FAILED: timestamp=2026-01-28 15:30:00, timezone=UTC Expected: 'tomorrow afternoon' Got: 'in 22 days' ✗ Test 18 FAILED: timestamp=2026-01-28 17:59:00, timezone=UTC Expected: 'tomorrow afternoon' Got: 'in 22 days' ✗ Test 19 FAILED: timestamp=2026-01-28 18:00:00, timezone=UTC Expected: 'tomorrow evening' Got: 'in 22 days' ✗ Test 20 FAILED: timestamp=2026-01-28 20:30:00, timezone=UTC Expected: 'tomorrow evening' Got: 'in 22 days' ✗ Test 21 FAILED: timestamp=2026-01-28 23:59:00, timezone=UTC Expected: 'tomorrow evening' Got: 'in 22 days' ✓ Test 22 PASSED: timestamp=2026-01-08 10:00:00, timezone=UTC => 'in 2 days' ✓ Test 23 PASSED: timestamp=2026-01-09 10:00:00, timezone=UTC => 'in 3 days' ✓ Test 24 PASSED: timestamp=2026-01-11 10:00:00, timezone=UTC => 'in 5 days' ✓ Test 25 PASSED: timestamp=2026-01-13 10:00:00, timezone=UTC => 'in 7 days' ✓ Test 26 PASSED: timestamp=2026-01-20 10:00:00, timezone=UTC => 'in 14 days' ✓ Test 27 PASSED: timestamp=2026-02-05 10:00:00, timezone=UTC => 'in 30 days' ✓ Test 28 PASSED: timestamp=2026-01-06 03:00:00, timezone=UTC => 'scheduled' ✓ Test 29 PASSED: timestamp=2026-01-05 05:00:00, timezone=UTC => 'scheduled' ✓ Test 30 PASSED: timestamp=2025-12-30 05:00:00, timezone=UTC => 'scheduled' ✓ Test 31 PASSED: timestamp=2026-01-06 12:00:00, timezone=America/New_York => 'this morning' ✓ Test 32 PASSED: timestamp=2026-01-06 15:00:00, timezone=Europe/London => 'this afternoon' ✓ Test 33 PASSED: timestamp=2026-01-06 06:00:00, timezone=UTC => 'this morning' ✓ Test 34 PASSED: timestamp=2026-01-06 12:00:00, timezone=UTC => 'this afternoon' ✓ Test 35 PASSED: timestamp=2026-01-06 18:00:00, timezone=UTC => 'this evening' ✓ Test 36 PASSED: timestamp=2026-01-08 02:00:00, timezone=UTC => 'in 2 days' ✓ Test 37 PASSED: timestamp=2026-01-08 23:00:00, timezone=UTC => 'in 2 days' ✓ Test 38 PASSED: timestamp=invalid-timestamp, timezone=UTC => 'scheduled' ===================================== Test Results: 20/38 passed ❌ Some tests failed!