| FAILED |
currency-consistency.spec.ts |
currency symbol propagates across invoices and payments screens |
11.7 s |
3 |
createInvoice failed: 400 {"message":"Select a billing month (YYYY-MM) for rent"} [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m Expected: [32mtrue[39m Received: [31mfalse[39m |
| FAILED |
dashboard-stats.spec.ts |
dashboard reflects properties / tenants / collection / tickets |
11.2 s |
3 |
createInvoice failed: 400 {"message":"Select a billing month (YYYY-MM) for rent"} [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m Expected: [32mtrue[39m Received: [31mfalse[39m |
| FAILED |
invoice-pdf-attachment.spec.ts |
sending an invoice enqueues an outbound notification |
10.1 s |
3 |
createInvoice failed: 400 {"message":"Select a billing month (YYYY-MM) for rent"} [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m Expected: [32mtrue[39m Received: [31mfalse[39m |
| FAILED |
invoice-pdf-currency.spec.ts |
invoice detail and PDF use the org currency symbol |
12.1 s |
3 |
createInvoice failed: 400 {"message":"Select a billing month (YYYY-MM) for rent"} [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m Expected: [32mtrue[39m Received: [31mfalse[39m |
| FAILED |
invoice-pdf-generation.spec.ts |
owner downloads an invoice PDF |
9.6 s |
3 |
createInvoice failed: 400 {"message":"Select a billing month (YYYY-MM) for rent"} [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m Expected: [32mtrue[39m Received: [31mfalse[39m |
| FAILED |
invoice-pdf-multipage.spec.ts |
invoice PDF renders with many line items |
9.8 s |
3 |
createInvoice failed: 400 {"message":"Select a billing month (YYYY-MM) for rent"} [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m Expected: [32mtrue[39m Received: [31mfalse[39m |
| FAILED |
messaging-owner-to-tenant.spec.ts |
owner reminder dispatch respects Kenya sending hours |
9.0 s |
3 |
createInvoice failed: 400 {"message":"Select a billing month (YYYY-MM) for rent"} [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m Expected: [32mtrue[39m Received: [31mfalse[39m |
| FAILED |
payment-fifo-multi-invoice.spec.ts |
FIFO payment of $250 allocates $100→inv1 and $150→inv2, leaves inv3 untouched |
9.7 s |
3 |
createInvoice failed: 400 {"message":"Select a billing month (YYYY-MM) for rent"} [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m Expected: [32mtrue[39m Received: [31mfalse[39m |
| FAILED |
payment-property-picker.spec.ts |
payment picker filters by property and remembers it after rapid entry |
18.0 s |
3 |
createInvoice failed: 400 {"message":"Select a billing month (YYYY-MM) for rent"} [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m Expected: [32mtrue[39m Received: [31mfalse[39m |
| FAILED |
payment-record-full.spec.ts |
owner records a full payment and the invoice is marked paid |
10.9 s |
3 |
createInvoice failed: 400 {"message":"Select a billing month (YYYY-MM) for rent"} [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m Expected: [32mtrue[39m Received: [31mfalse[39m |
| FAILED |
penalty-rent-invoice.spec.ts |
monthly invoice keeps automatic penalty, payment and corrections on one invoice |
9.6 s |
3 |
createInvoice failed: 400 {"message":"Use Rent for primary monthly rent, or Additional Rent Charge for an intentional extra charge"} [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m Expected: [32mtrue[39m Received: [ |
| FAILED |
statement-download.spec.ts |
owner downloads a tenant statement PDF |
9.2 s |
3 |
createInvoice failed: 400 {"message":"Select a billing month (YYYY-MM) for rent"} [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m Expected: [32mtrue[39m Received: [31mfalse[39m |
| FAILED |
tenant-payment-ledger.spec.ts |
tenant payment is reflected in the ledger and balance |
9.6 s |
3 |
createInvoice failed: 400 {"message":"Select a billing month (YYYY-MM) for rent"} [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m Expected: [32mtrue[39m Received: [31mfalse[39m |
| FLAKY |
penalty-rent-invoice.spec.ts |
existing standalone penalty keeps its identity and does not fold into rent |
1m 48s |
2 |
[31mTest timeout of 90000ms exceeded.[39m |
| SKIPPED |
recurring-bill-create.spec.ts |
owner creates a recurring bill |
246 ms |
1 |
skipped |
| PASSED |
agent-reports-presentation.spec.ts |
Landlord statements explain unavailable fee history without treating it as zero |
1.3 s |
1 |
|
| PASSED |
agent-reports-presentation.spec.ts |
Agent report opening, landlord payment corrections, PDF and mobile layout |
6.2 s |
1 |
|
| PASSED |
agent-reports-presentation.spec.ts |
Agent overview renders an unknown historical fee as unavailable |
1.3 s |
1 |
|
| PASSED |
auth-login.spec.ts |
logs in, lands authenticated, then logs out |
2.6 s |
1 |
|
| PASSED |
auth-login.spec.ts |
rejects bad credentials |
2.4 s |
1 |
|
| PASSED |
auth-registration-audience.spec.ts |
login prominently directs tenants to their landlord; tenant registration creates no account |
885 ms |
1 |
|
| PASSED |
auth-registration-audience.spec.ts |
direct registration links require a choice and landlords/agents keep the existing registration flow |
1.3 s |
1 |
|
| PASSED |
auth-tenant-login.spec.ts |
tenant logs in and reaches the tenant portal |
1.4 s |
1 |
|
| PASSED |
auth.setup.ts |
authenticate as owner |
2.3 s |
1 |
|
| PASSED |
auth.setup.ts |
authenticate as tenant |
1.6 s |
1 |
|
| PASSED |
comms-mailbox-presentation.spec.ts |
filters the flat mailbox and optionally groups by property and tenant |
2.5 s |
1 |
|
| PASSED |
comms-mailbox-presentation.spec.ts |
keeps related email documents separate and renders the readable conversation |
2.9 s |
1 |
|
| PASSED |
comms-mailbox-presentation.spec.ts |
shows a non-empty disabled/error state when readiness is unavailable |
933 ms |
1 |
|
| PASSED |
comms-mailbox-presentation.spec.ts |
shows a non-empty settings state when no company context is available |
918 ms |
1 |
|
| PASSED |
dashboard-stats.spec.ts |
dashboard Register Payment opens the tenant picker on /payments |
1.8 s |
1 |
|
| PASSED |
dashboard-stats.spec.ts |
dashboard Record Utility opens the utility recorder |
1.5 s |
1 |
|
| PASSED |
dashboard-stats.spec.ts |
Record Utility shows configured properties and reveals unoccupied units |
6.5 s |
1 |
|
| PASSED |
dispatch-queue-pagination.spec.ts |
dispatch queue pages on the server and resets the page when filtered |
1.3 s |
1 |
|
| PASSED |
dispatch-queue-pagination.spec.ts |
dispatch queue shows a retryable error instead of an empty state |
819 ms |
1 |
|
| PASSED |
invoice-generate-manual.spec.ts |
owner generates a manual invoice for a tenant |
3.1 s |
1 |
|
| PASSED |
lease-doc-upload.spec.ts |
owner uploads a lease document and it appears for the tenant |
4.4 s |
1 |
|
| PASSED |
listing-photos.spec.ts |
owner uploads photos to a listing and they appear via the API |
3.2 s |
1 |
|
| PASSED |
maintenance-staff-lifecycle.spec.ts |
owner moves a maintenance ticket through its lifecycle |
4.0 s |
1 |
|
| PASSED |
maintenance-tenant-creates.spec.ts |
maintenance ticket can be created and appears in the list |
2.8 s |
1 |
|
| PASSED |
monthly-rent-generation.spec.ts |
monthly rent generation creates invoices for occupied units |
4.3 s |
1 |
|
| PASSED |
penalty-rent-invoice.spec.ts |
rent invoice keeps automatic penalty, payment and corrections on one invoice |
20.2 s |
1 |
|
| PASSED |
property-agent-fees.spec.ts |
Property fee baseline and append-only history remain separate from metadata |
3.2 s |
1 |
|
| PASSED |
property-create.spec.ts |
owner creates a property via the UI |
2.8 s |
1 |
|
| PASSED |
property-edit-delete.spec.ts |
owner edits then deletes a property |
3.1 s |
1 |
|
| PASSED |
recurring-bill-runs.spec.ts |
owner creates a recurring bill and it surfaces for the tenant |
3.6 s |
1 |
|
| PASSED |
reports-generation.spec.ts |
GET /api/reports/financial returns 200 + JSON body |
1.2 s |
1 |
|
| PASSED |
reports-generation.spec.ts |
GET /api/reports/occupancy returns 200 + JSON body |
1.2 s |
1 |
|
| PASSED |
reports-generation.spec.ts |
GET /api/reports/maintenance returns 200 + JSON body |
1.2 s |
1 |
|
| PASSED |
reports-generation.spec.ts |
reports page loads in the UI |
2.0 s |
1 |
|
| PASSED |
tenant-create-and-assign.spec.ts |
owner creates a tenant and assigns to a unit |
4.5 s |
1 |
|
| PASSED |
tenant-vacate-and-reassign.spec.ts |
owner vacates and reassigns a tenant to a different unit |
5.1 s |
1 |
|
| PASSED |
tenants-list-page.spec.ts |
new tenant shows in /tenants list |
2.4 s |
1 |
|
| PASSED |
unit-create.spec.ts |
owner creates a unit under a property |
1.8 s |
1 |
|
| PASSED |
units-list-page.spec.ts |
new unit shows in /units list |
2.4 s |
1 |
|
| PASSED |
units-list-page.spec.ts |
property filter narrows /units list to selected property |
3.7 s |
1 |
|