221 lines
6.4 KiB
Go
221 lines
6.4 KiB
Go
package processing
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
)
|
|
|
|
func TestMapAttrsOntoAllowedKeys_monitorAliases(t *testing.T) {
|
|
allowed := map[string]struct{}{
|
|
"barva": {},
|
|
"diagonala_zaslona": {},
|
|
"diagonala-zaslona": {},
|
|
"locljivost": {},
|
|
"nastavljivo_po_visini": {},
|
|
"nastavljivo-po-visini": {},
|
|
"odzivni_cas": {},
|
|
"odzivni-cas": {},
|
|
"zaslon_obcutljiv_na_dotik": {},
|
|
"zaslon-obcutljiv-na-dotik": {},
|
|
"vrsta_panela": {},
|
|
"vrsta-panela": {},
|
|
"vgrajeni_zvocniki": {},
|
|
"vgrajeni-zvocniki": {},
|
|
}
|
|
in := map[string]any{
|
|
"brand": "Xiaomi",
|
|
"barva": "Črna",
|
|
"locljivost": "1920 x 1080",
|
|
"odzivni-cas": "6 ms",
|
|
"velikost-zaslona": `68,58 cm (27,0")`,
|
|
"nastavljiv-po-visini": "Ne",
|
|
"zaslon-na-dotik": "Ne",
|
|
"tip-matrike": "IPS",
|
|
"zvocniki": "Ne",
|
|
"kontrast": "1000:1", // not on allowlist
|
|
}
|
|
got := MapAttrsOntoAllowedKeys(in, allowed)
|
|
if got["diagonala_zaslona"] != `68,58 cm (27,0")` {
|
|
t.Fatalf("diagonala_zaslona=%v keys=%v", got["diagonala_zaslona"], got)
|
|
}
|
|
if got["nastavljivo_po_visini"] != "Ne" {
|
|
t.Fatalf("nastavljivo_po_visini=%v", got["nastavljivo_po_visini"])
|
|
}
|
|
if got["zaslon_obcutljiv_na_dotik"] != "Ne" {
|
|
t.Fatalf("zaslon_obcutljiv_na_dotik=%v", got["zaslon_obcutljiv_na_dotik"])
|
|
}
|
|
if got["vrsta_panela"] != "IPS" {
|
|
t.Fatalf("vrsta_panela=%v", got["vrsta_panela"])
|
|
}
|
|
if got["vgrajeni_zvocniki"] != "Ne" {
|
|
t.Fatalf("vgrajeni_zvocniki=%v", got["vgrajeni_zvocniki"])
|
|
}
|
|
// Exact keys untouched.
|
|
if got["locljivost"] != "1920 x 1080" || got["barva"] != "Črna" {
|
|
t.Fatalf("exact keys: %v", got)
|
|
}
|
|
}
|
|
|
|
func TestMapAttrsOntoAllowedKeys_headphonesAliases(t *testing.T) {
|
|
allowed := map[string]struct{}{
|
|
"brezzicna_povezava": {},
|
|
"brezzicna-povezava": {},
|
|
"brezzicna_tehnologija": {},
|
|
"brezzicna-tehnologija": {},
|
|
"odpravljanje_hrupa": {},
|
|
"odpravljanje-hrupa": {},
|
|
"vgrajen_mikrofon": {},
|
|
"vgrajen-mikrofon": {},
|
|
}
|
|
in := map[string]any{
|
|
"slusalke-z-mikrofonom": "Da",
|
|
"brezzicne": "Da",
|
|
"bluetooth": "5.3",
|
|
"vrsta-slusalk": "Naglavne",
|
|
}
|
|
got := MapAttrsOntoAllowedKeys(in, allowed)
|
|
if got["vgrajen_mikrofon"] != "Da" {
|
|
t.Fatalf("vgrajen_mikrofon=%v got=%v", got["vgrajen_mikrofon"], got)
|
|
}
|
|
if got["brezzicna_povezava"] != "Da" {
|
|
t.Fatalf("brezzicna_povezava=%v", got["brezzicna_povezava"])
|
|
}
|
|
if got["brezzicna_tehnologija"] != "5.3" {
|
|
t.Fatalf("brezzicna_tehnologija=%v", got["brezzicna_tehnologija"])
|
|
}
|
|
}
|
|
|
|
func TestAttrsForPersist_keepsMappedFormulaKeys(t *testing.T) {
|
|
attrs := map[string]any{
|
|
"brand": "Xiaomi",
|
|
"velikost-zaslona": "27\"",
|
|
"locljivost": "1920 x 1080",
|
|
"tip-matrike": "IPS",
|
|
"kontrast": "1000:1",
|
|
}
|
|
allowed := map[string]struct{}{
|
|
"diagonala_zaslona": {},
|
|
"diagonala-zaslona": {},
|
|
"locljivost": {},
|
|
"vrsta_panela": {},
|
|
"vrsta-panela": {},
|
|
"barva": {},
|
|
}
|
|
got := AttrsForPersist(attrs, allowed)
|
|
if got["brand"] != "Xiaomi" {
|
|
t.Fatalf("brand=%v", got)
|
|
}
|
|
if got["diagonala_zaslona"] != "27\"" {
|
|
t.Fatalf("formula diagonala_zaslona missing: %v", got)
|
|
}
|
|
if got["locljivost"] != "1920 x 1080" {
|
|
t.Fatalf("locljivost missing: %v", got)
|
|
}
|
|
if got["vrsta_panela"] != "IPS" {
|
|
t.Fatalf("vrsta_panela missing: %v", got)
|
|
}
|
|
if _, ok := got["kontrast"]; ok {
|
|
t.Fatalf("non-formula junk must drop: %v", got)
|
|
}
|
|
if _, ok := got["velikost_zaslona"]; ok {
|
|
t.Fatalf("unmapped alias key should not persist after filter: %v", got)
|
|
}
|
|
}
|
|
|
|
func TestRunSteps_parseFillMapsMonitorFormulaAttrs(t *testing.T) {
|
|
e := &Engine{}
|
|
in := ProductInput{
|
|
GTIN: "6941948701199",
|
|
Name: "Monitor Xiaomi A27i",
|
|
Mapped: map[string]any{
|
|
"name": "Monitor Xiaomi A27i",
|
|
"category": "25",
|
|
"brand": "Xiaomi",
|
|
"specifications": map[string]any{
|
|
"barva": "Črna",
|
|
"locljivost": "1920 x 1080",
|
|
"odzivni-cas": "6 ms",
|
|
"velikost-zaslona": "27\"",
|
|
"nastavljiv-po-visini": "Ne",
|
|
"zaslon-na-dotik": "Ne",
|
|
"kontrast": "1000:1",
|
|
},
|
|
},
|
|
CategoryAttrKeys: map[string]map[string]struct{}{
|
|
"25": {
|
|
"barva": {},
|
|
"diagonala_zaslona": {},
|
|
"diagonala-zaslona": {},
|
|
"locljivost": {},
|
|
"nastavljivo_po_visini": {},
|
|
"nastavljivo-po-visini": {},
|
|
"odzivni_cas": {},
|
|
"odzivni-cas": {},
|
|
"zaslon_obcutljiv_na_dotik": {},
|
|
"zaslon-obcutljiv-na-dotik": {},
|
|
},
|
|
},
|
|
}
|
|
out, err := e.RunSteps(context.Background(), "co", in, "attributes", nil, StepPolicy{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
pa := out.ProcessedAttributes
|
|
if pa["barva"] != "Črna" || pa["locljivost"] != "1920 x 1080" {
|
|
t.Fatalf("exact formula keys: %v", pa)
|
|
}
|
|
if pa["diagonala_zaslona"] != "27\"" {
|
|
t.Fatalf("diagonala_zaslona=%v pa=%v", pa["diagonala_zaslona"], pa)
|
|
}
|
|
if pa["nastavljivo_po_visini"] != "Ne" {
|
|
t.Fatalf("nastavljivo_po_visini=%v", pa["nastavljivo_po_visini"])
|
|
}
|
|
if pa["zaslon_obcutljiv_na_dotik"] != "Ne" {
|
|
t.Fatalf("zaslon_obcutljiv_na_dotik=%v", pa["zaslon_obcutljiv_na_dotik"])
|
|
}
|
|
if _, ok := pa["kontrast"]; ok {
|
|
t.Fatalf("kontrast must not persist: %v", pa)
|
|
}
|
|
}
|
|
|
|
func TestRunSteps_parseFillMapsHeadphonesFormulaAttrs(t *testing.T) {
|
|
e := &Engine{}
|
|
in := ProductInput{
|
|
GTIN: "650311612227",
|
|
Name: "UVI Gear WRATH V2",
|
|
Mapped: map[string]any{
|
|
"name": "UVI Gear WRATH V2",
|
|
"category": "48",
|
|
"brand": "UVI Gear",
|
|
"specifications": map[string]any{
|
|
"barva": "Črna",
|
|
"slusalke-z-mikrofonom": "Da",
|
|
"brezzicne": "Ne",
|
|
"vrsta-slusalk": "Naglavne",
|
|
},
|
|
},
|
|
CategoryAttrKeys: map[string]map[string]struct{}{
|
|
"48": {
|
|
"brezzicna_povezava": {},
|
|
"brezzicna-povezava": {},
|
|
"vgrajen_mikrofon": {},
|
|
"vgrajen-mikrofon": {},
|
|
},
|
|
},
|
|
}
|
|
out, err := e.RunSteps(context.Background(), "co", in, "attributes", nil, StepPolicy{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
pa := out.ProcessedAttributes
|
|
if pa["vgrajen_mikrofon"] != "Da" {
|
|
t.Fatalf("vgrajen_mikrofon=%v pa=%v", pa["vgrajen_mikrofon"], pa)
|
|
}
|
|
if pa["brezzicna_povezava"] != "Ne" {
|
|
t.Fatalf("brezzicna_povezava=%v", pa["brezzicna_povezava"])
|
|
}
|
|
if _, ok := pa["vrsta_slusalk"]; ok {
|
|
t.Fatalf("unlinked feed key must drop: %v", pa)
|
|
}
|
|
}
|