test(extractEntityCityId): prioritize address over top-level city in entity extraction
This commit is contained in:
@@ -46,10 +46,15 @@ export function resolveCityDisplayName(cityInfo) {
|
|||||||
export function extractEntityCityId(entity) {
|
export function extractEntityCityId(entity) {
|
||||||
if (!entity) return null;
|
if (!entity) return null;
|
||||||
|
|
||||||
|
// ترتیب مهم است: آدرس قبل از فیلد city سطحبالا.
|
||||||
|
// پاسخ جزئیات پزشک هر دو را دارد و میتوانند اختلاف داشته باشند — city سطحبالا از
|
||||||
|
// یک رابطهٔ ManyToMany قدیمی میآید، ولی هم فیلتر city_id بکاند و هم فیلد city در
|
||||||
|
// پاسخ لیست بر پایهٔ آدرساند. اگر اینجا فیلد قدیمی برنده شود، canonical پزشک به
|
||||||
|
// شهری میرود که sitemap او را آنجا نگذاشته است.
|
||||||
const candidates = [
|
const candidates = [
|
||||||
entity.city_id,
|
entity.city_id,
|
||||||
...(Array.isArray(entity.city) ? entity.city.map((c) => c?.id) : [entity.city?.id]),
|
|
||||||
...(Array.isArray(entity.address) ? entity.address.map((a) => a?.city?.id) : []),
|
...(Array.isArray(entity.address) ? entity.address.map((a) => a?.city?.id) : []),
|
||||||
|
...(Array.isArray(entity.city) ? entity.city.map((c) => c?.id) : [entity.city?.id]),
|
||||||
].filter((id) => id != null);
|
].filter((id) => id != null);
|
||||||
|
|
||||||
const withDomain = candidates.find((id) => findDomainByCityId(id));
|
const withDomain = candidates.find((id) => findDomainByCityId(id));
|
||||||
|
|||||||
@@ -54,6 +54,22 @@ describe("extractEntityCityId", () => {
|
|||||||
expect(findDomainByCityId(extractEntityCityId(doctor))).toBe("yasuj-nobat.ir");
|
expect(findDomainByCityId(extractEntityCityId(doctor))).toBe("yasuj-nobat.ir");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("آدرس بر city سطحبالا مقدم است (اختلاف بین دو منبع)", () => {
|
||||||
|
// پاسخ واقعی جزئیات پزشک: city سطحبالا از رابطهٔ قدیمی، آدرس از مطب واقعی.
|
||||||
|
// فیلتر city_id و فیلد city در پاسخ لیست هر دو آدرسمحورند، پس آدرس باید ببرد؛
|
||||||
|
// وگرنه canonical پزشک با sitemapی که او را در آن گذاشتهایم واگرا میشود.
|
||||||
|
const doctor = {
|
||||||
|
city: [{ id: "123" }],
|
||||||
|
address: [{ city: { id: "101" } }],
|
||||||
|
};
|
||||||
|
expect(extractEntityCityId(doctor)).toBe("101");
|
||||||
|
expect(findDomainByCityId(extractEntityCityId(doctor))).toBe("tabriz-nobat.ir");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("کلینیک آدرس ندارد → همان city سطحبالا", () => {
|
||||||
|
expect(extractEntityCityId({ city: [{ id: "123" }] })).toBe("123");
|
||||||
|
});
|
||||||
|
|
||||||
it("بدون شهر → null", () => {
|
it("بدون شهر → null", () => {
|
||||||
expect(extractEntityCityId({ city: [], address: [] })).toBeNull();
|
expect(extractEntityCityId({ city: [], address: [] })).toBeNull();
|
||||||
expect(extractEntityCityId(null)).toBeNull();
|
expect(extractEntityCityId(null)).toBeNull();
|
||||||
|
|||||||
Reference in New Issue
Block a user