68 lines
3.0 KiB
TypeScript
68 lines
3.0 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
||
import { extractAddressFilters } from "../src/services/addressFilterExtractor";
|
||
|
||
describe("inventory warehouse anchor extraction", () => {
|
||
it("does not treat 'по состоянию ...' as warehouse name in stock snapshot questions", () => {
|
||
const filters = extractAddressFilters(
|
||
"Какие товары находятся на складе по состоянию на 15 марта 2020 года?",
|
||
"inventory_on_hand_as_of_date"
|
||
).extracted_filters;
|
||
|
||
expect(filters.as_of_date).toBe("2020-03-15");
|
||
expect(filters.warehouse).toBeUndefined();
|
||
});
|
||
|
||
it("does not treat month phrases as warehouse name in stock snapshot questions", () => {
|
||
const filters = extractAddressFilters(
|
||
"Какие товары лежат на складе на март 2019",
|
||
"inventory_on_hand_as_of_date"
|
||
).extracted_filters;
|
||
|
||
expect(filters.period_from).toBe("2019-03-01");
|
||
expect(filters.period_to).toBe("2019-03-31");
|
||
expect(filters.as_of_date).toBe("2019-03-31");
|
||
expect(filters.warehouse).toBeUndefined();
|
||
});
|
||
|
||
it("does not materialize 'за май' as warehouse in inventory balance phrasing from the run", () => {
|
||
const filters = extractAddressFilters(
|
||
"проверить остатки по складу за май 2020 года",
|
||
"inventory_on_hand_as_of_date"
|
||
).extracted_filters;
|
||
|
||
expect(filters.period_from).toBe("2020-05-01");
|
||
expect(filters.period_to).toBe("2020-05-31");
|
||
expect(filters.as_of_date).toBe("2020-05-31");
|
||
expect(filters.warehouse).toBeUndefined();
|
||
});
|
||
|
||
it("treats 'у нас' as implicit self-scope instead of literal warehouse anchor", () => {
|
||
const result = extractAddressFilters("что на складе у нас", "inventory_on_hand_as_of_date");
|
||
|
||
expect(result.extracted_filters.warehouse).toBeUndefined();
|
||
expect(result.warnings).toContain("warehouse_self_scope_detected");
|
||
expect(result.semantic_frame?.scope_kind).toBe("implicit_self_scope");
|
||
expect(result.semantic_frame?.anchor_kind).toBe("self_scope");
|
||
expect(result.semantic_frame?.anchor_value).toBeNull();
|
||
expect(result.semantic_frame?.date_scope_kind).toBe("implicit_current");
|
||
expect(result.semantic_frame?.date_basis_hint).toBe("implicit_current_snapshot");
|
||
});
|
||
it("does not materialize profanity tail as warehouse anchor in slang stock query", () => {
|
||
const filters = extractAddressFilters(
|
||
"ассистент, рассказывай что нам на складе ебаном лежит",
|
||
"inventory_on_hand_as_of_date"
|
||
).extracted_filters;
|
||
|
||
expect(filters.warehouse).toBeUndefined();
|
||
});
|
||
|
||
it("does not materialize repair phrasing as warehouse anchor in stock follow-up", () => {
|
||
const filters = extractAddressFilters(
|
||
"остатки на складе какие имелось в виду",
|
||
"inventory_on_hand_as_of_date"
|
||
).extracted_filters;
|
||
|
||
expect(filters.warehouse).toBeUndefined();
|
||
});
|
||
});
|