Refactor vendor mappings to canonical PN catalog

This commit is contained in:
Mikhail Chusavitin
2026-03-07 23:11:42 +03:00
parent 96572be712
commit 3f26a2935a
25 changed files with 1334 additions and 754 deletions

View File

@@ -276,7 +276,7 @@ func TestWeightedMedianFallbackToMedianWhenNoWeights(t *testing.T) {
func TestBuildWarehousePricelistItems_UsesPrefixResolverAndWeightedAverage(t *testing.T) {
db := openTestDB(t)
if err := db.AutoMigrate(&models.StockLog{}, &models.Lot{}, &models.LotPartnumber{}); err != nil {
if err := db.AutoMigrate(&models.StockLog{}, &models.Lot{}, &models.PartnumberBookItem{}); err != nil {
t.Fatalf("automigrate: %v", err)
}
@@ -311,20 +311,24 @@ func TestBuildWarehousePricelistItems_UsesPrefixResolverAndWeightedAverage(t *te
}
}
func TestPartnumberMappings_WildcardMatch(t *testing.T) {
func TestPartnumberMappings_CatalogAndLotFallback(t *testing.T) {
db := openTestDB(t)
if err := db.AutoMigrate(&models.LotPartnumber{}, &models.Lot{}); err != nil {
if err := db.AutoMigrate(&models.PartnumberBookItem{}, &models.Lot{}); err != nil {
t.Fatalf("automigrate: %v", err)
}
mappings := []models.LotPartnumber{
{Partnumber: "R750*", LotName: "SERVER_R750"},
{Partnumber: "HDD-01", LotName: "HDD_01"},
mappings := []models.PartnumberBookItem{
{Partnumber: "R750XD", LotsJSON: `[{"lot_name":"SERVER_R750","qty":1}]`},
{Partnumber: "HDD-01", LotsJSON: `[{"lot_name":"HDD_01","qty":1}]`},
}
if err := db.Create(&mappings).Error; err != nil {
t.Fatalf("seed mappings: %v", err)
}
if err := db.Create(&models.Lot{LotName: "MEM_DDR5_16G_4800"}).Error; err != nil {
if err := db.Create(&[]models.Lot{
{LotName: "MEM_DDR5_16G_4800"},
{LotName: "SERVER_R750"},
{LotName: "HDD_01"},
}).Error; err != nil {
t.Fatalf("seed lot: %v", err)
}
@@ -334,7 +338,7 @@ func TestPartnumberMappings_WildcardMatch(t *testing.T) {
}
if got := resolver.MatchLots("R750XD"); len(got) != 1 || got[0] != "SERVER_R750" {
t.Fatalf("expected wildcard match SERVER_R750, got %#v", got)
t.Fatalf("expected catalog match SERVER_R750, got %#v", got)
}
if got := resolver.MatchLots("HDD-01"); len(got) != 1 || got[0] != "HDD_01" {
t.Fatalf("expected exact match HDD_01, got %#v", got)