Some checks failed
QA Gate (P0/P1) / Test affected app (pull_request) Has been cancelled
Faz 1 / adım 3-4 (analiz: /home/s/ss/plv2.md §3.3/§3.5, bulgular types_wmi-01/02/03/04/05,
p5core-02/03/04/05, psa-04/05/06, consumers_jobs-01/02).
CANLI GERÇEK (2026-09-16 keşfi): PL24 manufacturers API'si peugeot/citroen/
citroenDs/psa_opel/psa_vauxhall'ı `/p5psa`, volvo/polestar'ı `/p5volvo`,
subaru'yu `/p5subaru` olarak veriyor. Eski Volvo P4 ucu **503** döndürüyor
(ölü); eski PSA P4 ucu 200 döndürüyor ama verisi **2024-02-13'te donmuş**
(P5 upds 2026-09-07). Kodumuz her ikisini de P4'e yönlendiriyordu.
SERVİS TABLOSU:
- peugeot/citroen/citroenDs + YENİ psa_opel_parts, psa_vauxhall_parts → /p5psa
- volvo/polestar → /p5volvo · YENİ subaru_parts → /p5subaru
- YENİ abarth/alfa/jeep/lancia → /p5fiat
- WMI düzeltmeleri: ZAR→alfa, ZLA→lancia (fiatp'den), VXK→psa_opel (PSA-platform
Corsa F/Mokka B), YENİ JF1/JF2→subaru, 1C4/1J4→jeep. SERVICE_TO_BRAND genişledi.
- P4 kodu ve eski yollar DOKUNULMADI: mevcut 322 PSA + 36 Volvo aracı eski
ağaçlarıyla çalışmaya devam eder (veri göçü ayrı iş).
PARSER (canlı yanıt şekillerine göre):
- `normalizeLabel()`: JS toLowerCase Türkçe "İ"yi "i̇" (i + birleşen nokta)
yapıyordu → PSA'nın "AKTARMA SİSTEMLERİ"/"GÖVDE TİPİ" etiketleri HİÇBİR ZAMAN
eşleşmiyordu, şanzıman/gövde sessizce null kalıyordu. Artık tr-locale +
diakritik temizliği + ı→i.
- `parsePsaModelYear()`: "AM 2005" → 2005; "MAJÖR ENDEKS" bir yıl DEĞİL (bu
yüzden Citroën'ler 2001 görünüyordu). `damToModelYear()`: PSA DAM alanı
(1976-01-01'den gün) → üretim yılı, model yılı Temmuz'da döner.
PSA VIN'lerinde 10. karakter model yılı olmadığı için VIN fallback'i en sona.
- Alan listeleri: motor/engine (PSA "MOTOR", Volvo "Motor"), aktarma_sistemleri,
mission, govde_tipi, kaporta_stili, türü→series.
- Alt grup kodu: PSA'da `record.id` = illusPath ve birden çok illüstrasyon
paylaşıyor (canlı: 36 kayıt / 11 id) → benzersiz kod `values.illustration`.
- Parça filtresi: Volvo BOM'unun başlık satırı (id "null_null", link yok,
unavailable) hayalet parça olarak geçiyordu → elendi.
- Adet: qty (VAG/Subaru) · coef (PSA) · unit (Volvo). Uygulanabilirlik:
modelDescription · restriction.
AĞAÇ SINIFLANDIRMASI (yeni `pl24-tree.ts`, tek kaynak):
Dört ayrı sezgisel vardı ve birbiriyle çelişiyordu:
- `linkWid.includes("group")` → p5psa `illusTable`, p5volvo/p5subaru
`illustrationsTable` yakalanmıyordu → o seviye yaprak sanılıp parça olarak
çekiliyor, partno'suz kayıtlar 0 parçaya dönüşüyor, panel sessizce boş
kalıyordu (2026-06 isPsaParent olayının aynısı).
- case-sensitive `includes("/bomdetails")` → p5psa/p5volvo'nun camelCase
`/details/vin/bomDetails` yaprakları grup sanılıyor, parçaları hiç prefetch
edilmiyordu (bugün Mitsubishi %99,9 / Fiat %80 / Renault %70 bomDetails
yaprağı 0 parça — aynı kök neden).
Artık `isPl24LeafNode`/`isPl24GroupNode` tek kaynak; categories.service (2 yer),
catalog.service (2 yer) ve prefetch-worker aynı fonksiyonu kullanıyor.
Test: yeni `pl24-tree.spec.ts` (7 test, canlı VW/PSA/Volvo/Subaru wid+path
çiftleriyle regresyon kilidi). Etkilenen paketler: 208 test geçti. tsc + biome temiz.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
113 lines
3.5 KiB
TypeScript
113 lines
3.5 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
||
import { isPl24GroupNode, isPl24LeafNode } from "./pl24-tree";
|
||
|
||
// Canlı P5 yanıtlarından (2026-09-16 keşfi, plv2-artefakt/) alınan gerçek
|
||
// wid + path çiftleri. Bu dosya "0 parça" sınıfı hatanın regresyon kilidi.
|
||
|
||
describe("isPl24LeafNode — canlı P5 şekilleri", () => {
|
||
it("VW (p5vwag): maingroups/subgroups grup, bom/vin yaprak", () => {
|
||
expect(
|
||
isPl24GroupNode({
|
||
linkWid: "mainGroupsTable",
|
||
linkPath: "/p5vwag/extern/groups/vin_maingroups?vin=X",
|
||
}),
|
||
).toBe(true);
|
||
expect(
|
||
isPl24GroupNode({
|
||
linkWid: "subGroupsIllusTable",
|
||
linkPath: "/p5vwag/extern/groups/vin_subgroups_illus?maingroup=4",
|
||
}),
|
||
).toBe(true);
|
||
expect(
|
||
isPl24LeafNode({
|
||
linkWid: "bomlist",
|
||
linkPath: "/p5vwag/extern/bom/vin?illustration=407-000",
|
||
}),
|
||
).toBe(true);
|
||
});
|
||
|
||
it("PSA (p5psa): scope + mainGroups + illusTable grup, bomDetails yaprak", () => {
|
||
expect(
|
||
isPl24GroupNode({
|
||
linkWid: "scopeTable",
|
||
linkPath: "/p5psa/extern/group/vin/scope?modelCode=1PD2",
|
||
}),
|
||
).toBe(true);
|
||
expect(
|
||
isPl24GroupNode({
|
||
linkWid: "mainGroupTable",
|
||
linkPath: "/p5psa/extern/group/vin/mainGroups?scope=_FCT0001",
|
||
}),
|
||
).toBe(true);
|
||
// Eski `includes("group")` kuralının kaçırdığı seviye — sessiz boş panelin kaynağı.
|
||
expect(
|
||
isPl24GroupNode({
|
||
linkWid: "illusTable",
|
||
linkPath: "/p5psa/extern/group/vin/illus?mainGroup=_FCT0001_FCT0512",
|
||
}),
|
||
).toBe(true);
|
||
// camelCase bomDetails — eski `includes("/bomdetails")` kaçırıyordu.
|
||
expect(
|
||
isPl24LeafNode({
|
||
linkWid: "bomlist",
|
||
linkPath: "/p5psa/extern/details/vin/bomDetails?illustration=D2F001A48A",
|
||
}),
|
||
).toBe(true);
|
||
});
|
||
|
||
it("Volvo (p5volvo): illustrationsTable grup, bom yaprak", () => {
|
||
expect(
|
||
isPl24GroupNode({
|
||
linkWid: "illustrationsTable",
|
||
linkPath: "/p5volvo/extern/groups/vin/illustration?group=0b00c8af80205942",
|
||
}),
|
||
).toBe(true);
|
||
expect(isPl24LeafNode({ linkWid: "bomlist", linkPath: "/p5volvo/extern/bom/vin?..." })).toBe(
|
||
true,
|
||
);
|
||
expect(
|
||
isPl24LeafNode({
|
||
linkWid: "partinfo",
|
||
linkPath: "/p5volvo/extern/partinfo/vin?partno=36050493",
|
||
}),
|
||
).toBe(true);
|
||
});
|
||
|
||
it("Subaru (p5subaru): subgroups/illustrations grup, bom/vin?figNum yaprak", () => {
|
||
expect(
|
||
isPl24GroupNode({
|
||
linkWid: "illustrationsTable",
|
||
linkPath: "/p5subaru/extern/groups/vin/illustrations?subGroup=001",
|
||
}),
|
||
).toBe(true);
|
||
expect(
|
||
isPl24LeafNode({ linkWid: "bomlist", linkPath: "/p5subaru/extern/bom/vin?figNum=01" }),
|
||
).toBe(true);
|
||
});
|
||
|
||
it("wid yoksa yol kalıbına düşer (eski DB satırları)", () => {
|
||
expect(isPl24LeafNode({ linkPath: "/p5vwag/extern/bom/vin?illustration=1" })).toBe(true);
|
||
expect(
|
||
isPl24LeafNode({ linkPath: "/psa/peugeot_parts/vin-image-board.action?illCode=1" }),
|
||
).toBe(true);
|
||
expect(
|
||
isPl24GroupNode({
|
||
linkPath: "/psa/peugeot_parts/json-vin-main-groups.action?scope=_FCT0001",
|
||
}),
|
||
).toBe(true);
|
||
});
|
||
|
||
it("hasSubgroups=true yol tahminini ezer", () => {
|
||
expect(isPl24LeafNode({ linkPath: "/p5x/extern/unknown", hasSubgroups: true })).toBe(false);
|
||
});
|
||
|
||
it("servicepart öğe listesi yapraktır", () => {
|
||
expect(
|
||
isPl24LeafNode({
|
||
linkWid: "servicePartsItemsTable",
|
||
linkPath: "/p5vwag/extern/servicepart/vin_items?x=1",
|
||
}),
|
||
).toBe(true);
|
||
});
|
||
});
|