fix(invoicing-flag-list): explain empty XL Vask hover preview when flag context has no metadata (AUT-4/TRU-8) (#311)
When a flagged wash has no metadata in the api flag-context payload, the user previously saw 'No XL Vask details available.' with no indication of why. This adds a clearer fallback message and adds unit coverage for that scenario. Resolves TRU-8 (AUT-4). Co-authored-by: Jeppe <jeppe@copenhagentruckwash.io> Co-authored-by: openhands <openhands@all-hands.dev>
This commit is contained in:
co-authored by
Jeppe
openhands
parent
0b1df55728
commit
df7563c15d
@@ -3421,6 +3421,7 @@
|
||||
"expected_price": "@:{'templates.generated.compat.invoice_period.flags.preview.expected_price'}",
|
||||
"no_order_items": "@:common.templates.no_entity_available",
|
||||
"no_xlvask_usage_log": "@:common.templates.no_entity_available",
|
||||
"no_xlvask_usage_log_metadata": "XL Vask registration (no metadata available — see api flag-context serializer)...",
|
||||
"order_items": "@:{'templates.generated.compat.global_search.entity_types.order_items'}",
|
||||
"price": "@:common.price",
|
||||
"product": "@:common.product",
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
"expected_price": "@:{'phrases.compat.invoice_period.flags.preview.expected_price'}",
|
||||
"no_order_items": "@:common.templates.no_entity_available",
|
||||
"no_xlvask_usage_log": "@:common.templates.no_entity_available",
|
||||
"no_xlvask_usage_log_metadata": "XL Vask registration (no metadata available — see api flag-context serializer)...",
|
||||
"order_items": "@:{'phrases.compat.global_search.entity_types.order_items'}",
|
||||
"price": "@:common.price",
|
||||
"product": "@:common.product",
|
||||
|
||||
+4
-3
@@ -240,9 +240,10 @@ const xlvaskUsageLogHtml = (flag: any) => {
|
||||
].filter(([, value]) => String(value ?? "").trim() !== "");
|
||||
|
||||
if (rows.length === 0) {
|
||||
return escapeHtml(translate("invoice_period.flags.preview.no_xlvask_usage_log", "No XL Vask details available.", {
|
||||
entity: translate("invoice_period.flags.preview.entities.xlvask_usage_log", "XL Vask details"),
|
||||
}));
|
||||
return escapeHtml(translate(
|
||||
"invoice_period.flags.preview.no_xlvask_usage_log_metadata",
|
||||
"XL Vask registration (no metadata available — see api flag-context serializer)..."
|
||||
));
|
||||
}
|
||||
|
||||
return `<table class="table is-narrow is-fullwidth">
|
||||
|
||||
@@ -55,6 +55,8 @@ const i18n = createTestI18n({
|
||||
preview: {
|
||||
no_order_items: "No order items available.",
|
||||
no_xlvask_usage_log: "No XL Vask details available.",
|
||||
no_xlvask_usage_log_metadata:
|
||||
"XL Vask registration (no metadata available — see api flag-context serializer)...",
|
||||
product: "Product",
|
||||
quantity: "Qty",
|
||||
price: "Price",
|
||||
@@ -444,6 +446,36 @@ describe("InvoicingPeriodFlagList", () => {
|
||||
);
|
||||
});
|
||||
|
||||
// When the API flag-context serializer does not provide any of the
|
||||
// identity fields (wash_id / registration_number / start_time / customer_name),
|
||||
// the hover preview should not pretend the data is missing — it should
|
||||
// tell the operator that the metadata simply isn't being supplied.
|
||||
it("explains the empty XL Vask hover preview when flag context has no metadata fields", async () => {
|
||||
const wrapper = mountList([
|
||||
{
|
||||
id: "auto-xlvask-empty",
|
||||
source: "automatic",
|
||||
fingerprint: "xlvask-empty-fingerprint",
|
||||
definition_key: "xlvask_missing_order_link",
|
||||
message_key: "invoice_period.flags.automatic.xlvask_missing_order_link",
|
||||
target_type: "xlvask_usage_log",
|
||||
target_id: 99,
|
||||
xlvask_usage_log_id: 99,
|
||||
context: {},
|
||||
},
|
||||
]);
|
||||
|
||||
const token = wrapper.get(".invoice-period-flag-token");
|
||||
expect(token.text()).toBe("XL Vask wash");
|
||||
|
||||
await token.trigger("mouseover");
|
||||
expect(popperBoxMock).toHaveBeenLastCalledWith(
|
||||
"XL Vask registration",
|
||||
"XL Vask registration (no metadata available — see api flag-context serializer)..."
|
||||
);
|
||||
expect(showPopperMock).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it("renders invoice period warnings in proper Danish", () => {
|
||||
const wrapper = mountList(
|
||||
[
|
||||
|
||||
Reference in New Issue
Block a user