CluPilotCloud/resources/views/livewire
nexxo c81a89ce5a A failed zone list is not an empty Hetzner account
The owner asked whether an empty token was being sent. It was not — an empty one
returns `missing` — but the question was worth following, and it found a fault
in the message I had just added.

The check classified 401 and 403 as `rejected` and then read the body. Every
OTHER unsuccessful response — 404, 429, 500, a cache's status page — has no
`zones` key, `?? []` turned that into no zones, and the console then stated "this
account holds no zones at all. The token probably belongs to a different Hetzner
project." A claim about somebody's account, derived from an error nobody looked
at, delivered with more confidence than the working case gets.

`successful()` is asked first now, and an unexpected status is reported as what
it is, with the number beside it: it says nothing about the zones, and it says
so. That is the distinction this check already draws between `unreachable` and
`read_only` — both are failures, only one of them tells you anything about the
token.

A genuinely empty list still means what it meant: 200 with zero zones is a token
for a project without zones.

The test uses a dataset rather than a loop. Http::fake() ADDS stubs instead of
replacing them, so a loop would have had the first status answer all four
iterations and the test would have proved one case three times over.

2050 tests pass, assets build.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 15:36:47 +02:00
..
admin A failed zone list is not an empty Hetzner account 2026-07-31 15:36:47 +02:00
auth Accept terms instead of a start date, and fix the sender no server accepts 2026-07-30 15:22:35 +02:00
backups.blade.php Match the panel to the approved template, measured rather than assumed 2026-07-27 17:08:05 +02:00
billing.blade.php Merge main into the operating-mode branch 2026-07-30 17:53:20 +02:00
checkout.blade.php Give the order a checkout page, and stop hiding what a year costs 2026-07-30 16:00:08 +02:00
cloud.blade.php Restart a machine, enforce the quota that was sold, end a route that ended 2026-07-29 18:28:28 +02:00
confirm-book-storage.blade.php Deliver the storage a customer actually buys 2026-07-29 19:13:10 +02:00
confirm-cancel-addon.blade.php Ask whether they are a consumer, and let one change their mind 2026-07-29 21:06:06 +02:00
confirm-cancel-package.blade.php Take the address by field, fix the customer type, ask why they leave 2026-07-30 16:41:32 +02:00
confirm-close-account.blade.php R24: a modal is never taller than the screen 2026-07-29 23:33:57 +02:00
confirm-delete-own-account.blade.php Discard an unconfirmed registration, and sweep the abandoned ones 2026-07-30 14:08:02 +02:00
confirm-disable-two-factor.blade.php Replace native confirm() dialogs with the app's own modal pattern 2026-07-28 19:34:27 +02:00
confirm-end-other-sessions.blade.php Show where an account is signed in, and let it sign the other places out 2026-07-28 23:38:17 +02:00
confirm-remove-order.blade.php feat(billing): a cart you can actually read and change 2026-07-26 05:26:49 +02:00
confirm-restart-cloud.blade.php Restart a machine, enforce the quota that was sold, end a route that ended 2026-07-29 18:28:28 +02:00
confirm-revoke-seat.blade.php Replace native confirm() dialogs with the app's own modal pattern 2026-07-28 19:34:27 +02:00
confirm-withdraw.blade.php Charge the price the website shows, and hand a withdrawal back in full 2026-07-29 22:42:02 +02:00
custom-domain.blade.php Serve the custom domain, not just announce it 2026-07-29 16:44:52 +02:00
customer-provisioning.blade.php Take the order, park it, and say when it will be delivered 2026-07-29 18:50:46 +02:00
dashboard.blade.php Let the customer buy it themselves, and tab the integrations page 2026-07-29 19:42:28 +02:00
edit-mailbox.blade.php R24: a modal is never taller than the screen 2026-07-29 23:33:57 +02:00
edit-seat.blade.php R24: a modal is never taller than the screen 2026-07-29 23:33:57 +02:00
invoices.blade.php Say the same thing to the customer, the register and the bank 2026-07-30 01:30:24 +02:00
new-support-request.blade.php R24: a modal is never taller than the screen 2026-07-29 23:33:57 +02:00
order.blade.php Fix the checkout link, and stop the switch moving under the cursor 2026-07-30 16:05:56 +02:00
sessions.blade.php Show where an account is signed in, and let it sign the other places out 2026-07-28 23:38:17 +02:00
settings.blade.php Give settings the shape a settings page actually has 2026-07-30 17:59:16 +02:00
support.blade.php Editing in modals, an update button that is not gated on a stale reading, and a support page that is real 2026-07-27 17:55:49 +02:00
users.blade.php Replace native confirm() dialogs with the app's own modal pattern 2026-07-28 19:34:27 +02:00