74 lines
4.2 KiB
TypeScript
74 lines
4.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
||
|
||
import { resolveInventoryAddressIntent } from "../src/services/addressInventoryIntentSignals";
|
||
import { resolveAddressIntent } from "../src/services/addressIntentResolver";
|
||
|
||
describe("addressInventoryIntentSignals", () => {
|
||
it("classifies plain Russian stock wording from the agent replay as inventory on hand", () => {
|
||
const result = resolveAddressIntent("какие остатки на складе на март 2021");
|
||
|
||
expect(result.intent).toBe("inventory_on_hand_as_of_date");
|
||
expect(result.reasons).toContain("inventory_on_hand_signal_detected");
|
||
});
|
||
|
||
it("classifies warehouse snapshot wording through the extracted inventory owner", () => {
|
||
const result = resolveInventoryAddressIntent("show inventory on hand as of 2020-03-15");
|
||
|
||
expect(result?.intent).toBe("inventory_on_hand_as_of_date");
|
||
expect(result?.reasons).toContain("inventory_on_hand_signal_detected");
|
||
});
|
||
|
||
it("keeps bare highest-margin nomenclature wording out of the stock snapshot route", () => {
|
||
const result = resolveInventoryAddressIntent(
|
||
"\u041a\u0430\u043a\u0430\u044f \u043d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u0430 \u0431\u044b\u043b\u0430 \u0441\u0430\u043c\u043e\u0439 \u043c\u0430\u0440\u0436\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0437\u0430 2020 \u0433\u043e\u0434?"
|
||
);
|
||
|
||
expect(result?.intent).toBe("inventory_margin_ranking_for_nomenclature");
|
||
expect(result?.reasons).toContain("inventory_margin_ranking_signal_detected");
|
||
});
|
||
|
||
it("classifies calculate-margin nomenclature wording with false-source guards as margin ranking", () => {
|
||
const result = resolveInventoryAddressIntent(
|
||
"\u041f\u043e\u0441\u0447\u0438\u0442\u0430\u0439 \u043c\u0430\u0440\u0436\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0432\u0430\u0440\u043d\u043e\u0439 \u043d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u044b \u0437\u0430 2020 \u0433\u043e\u0434, \u043d\u0435 \u041e\u0421 \u0438 \u043d\u0435 \u0430\u043c\u043e\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u044e."
|
||
);
|
||
|
||
expect(result?.intent).toBe("inventory_margin_ranking_for_nomenclature");
|
||
expect(result?.reasons).toContain("inventory_margin_ranking_signal_detected");
|
||
});
|
||
|
||
it("keeps payment-bank false-source wording in margin contour", () => {
|
||
const result = resolveAddressIntent(
|
||
"\u041c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043c\u0430\u0440\u0436\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0432\u0430\u0440\u043e\u0432 \u0437\u0430 2020 \u0433\u043e\u0434 \u043f\u043e \u043e\u043f\u043b\u0430\u0442\u0430\u043c \u0438 \u0431\u0430\u043d\u043a\u0443?"
|
||
);
|
||
|
||
expect(result.intent).toBe("inventory_margin_ranking_for_nomenclature");
|
||
});
|
||
|
||
it("classifies selected-object purchase provenance wording through the extracted inventory owner", () => {
|
||
const result = resolveInventoryAddressIntent("selected object supplier provenance");
|
||
|
||
expect(result?.intent).toBe("inventory_purchase_provenance_for_item");
|
||
expect(result?.reasons).toContain("inventory_selected_object_provenance_signal_detected");
|
||
});
|
||
|
||
it("keeps the main resolver behavior stable through inventory-owner delegation", () => {
|
||
const result = resolveAddressIntent("а по этой позиции когда была закупка?");
|
||
|
||
expect(result.intent).toBe("inventory_purchase_provenance_for_item");
|
||
expect(result.reasons).toContain("inventory_purchase_date_signal_detected");
|
||
});
|
||
|
||
it("classifies direct Russian purchase-date wording with an explicit item", () => {
|
||
const result = resolveAddressIntent("Когда был куплен товар Столешница 600*3050*26 дуб ниагара");
|
||
|
||
expect(result.intent).toBe("inventory_purchase_provenance_for_item");
|
||
expect(result.reasons).toContain("inventory_purchase_date_signal_detected");
|
||
});
|
||
|
||
it("does not steal non-inventory open-items wording into the inventory owner", () => {
|
||
const result = resolveInventoryAddressIntent("хвосты покажи по счету 60 на август 2022");
|
||
|
||
expect(result).toBeNull();
|
||
});
|
||
});
|