129 lines
3.3 KiB
Go
129 lines
3.3 KiB
Go
package localdb
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestGetLatestLocalPricelistBySource_SkipsPricelistWithoutItems(t *testing.T) {
|
|
local, err := New(filepath.Join(t.TempDir(), "latest_without_items.db"))
|
|
if err != nil {
|
|
t.Fatalf("open localdb: %v", err)
|
|
}
|
|
t.Cleanup(func() { _ = local.Close() })
|
|
|
|
base := time.Now().Add(-time.Minute)
|
|
withItems := &LocalPricelist{
|
|
ServerID: 1001,
|
|
Source: "estimate",
|
|
Version: "E-1",
|
|
Name: "with-items",
|
|
CreatedAt: base,
|
|
SyncedAt: base,
|
|
}
|
|
if err := local.SaveLocalPricelist(withItems); err != nil {
|
|
t.Fatalf("save pricelist with items: %v", err)
|
|
}
|
|
storedWithItems, err := local.GetLocalPricelistByServerID(withItems.ServerID)
|
|
if err != nil {
|
|
t.Fatalf("load pricelist with items: %v", err)
|
|
}
|
|
if err := local.SaveLocalPricelistItems([]LocalPricelistItem{
|
|
{
|
|
PricelistID: storedWithItems.ID,
|
|
LotName: "CPU_A",
|
|
Price: 100,
|
|
},
|
|
}); err != nil {
|
|
t.Fatalf("save pricelist items: %v", err)
|
|
}
|
|
|
|
withoutItems := &LocalPricelist{
|
|
ServerID: 1002,
|
|
Source: "estimate",
|
|
Version: "E-2",
|
|
Name: "without-items",
|
|
CreatedAt: base.Add(2 * time.Second),
|
|
SyncedAt: base.Add(2 * time.Second),
|
|
}
|
|
if err := local.SaveLocalPricelist(withoutItems); err != nil {
|
|
t.Fatalf("save pricelist without items: %v", err)
|
|
}
|
|
|
|
got, err := local.GetLatestLocalPricelistBySource("estimate")
|
|
if err != nil {
|
|
t.Fatalf("GetLatestLocalPricelistBySource: %v", err)
|
|
}
|
|
if got.ServerID != withItems.ServerID {
|
|
t.Fatalf("expected server_id=%d, got %d", withItems.ServerID, got.ServerID)
|
|
}
|
|
}
|
|
|
|
func TestGetLatestLocalPricelistBySource_TieBreaksByID(t *testing.T) {
|
|
local, err := New(filepath.Join(t.TempDir(), "latest_tie_break.db"))
|
|
if err != nil {
|
|
t.Fatalf("open localdb: %v", err)
|
|
}
|
|
t.Cleanup(func() { _ = local.Close() })
|
|
|
|
base := time.Now().Add(-time.Minute)
|
|
first := &LocalPricelist{
|
|
ServerID: 2001,
|
|
Source: "warehouse",
|
|
Version: "S-1",
|
|
Name: "first",
|
|
CreatedAt: base,
|
|
SyncedAt: base,
|
|
}
|
|
if err := local.SaveLocalPricelist(first); err != nil {
|
|
t.Fatalf("save first pricelist: %v", err)
|
|
}
|
|
storedFirst, err := local.GetLocalPricelistByServerID(first.ServerID)
|
|
if err != nil {
|
|
t.Fatalf("load first pricelist: %v", err)
|
|
}
|
|
if err := local.SaveLocalPricelistItems([]LocalPricelistItem{
|
|
{
|
|
PricelistID: storedFirst.ID,
|
|
LotName: "CPU_A",
|
|
Price: 101,
|
|
},
|
|
}); err != nil {
|
|
t.Fatalf("save first items: %v", err)
|
|
}
|
|
|
|
second := &LocalPricelist{
|
|
ServerID: 2002,
|
|
Source: "warehouse",
|
|
Version: "S-2",
|
|
Name: "second",
|
|
CreatedAt: base,
|
|
SyncedAt: base,
|
|
}
|
|
if err := local.SaveLocalPricelist(second); err != nil {
|
|
t.Fatalf("save second pricelist: %v", err)
|
|
}
|
|
storedSecond, err := local.GetLocalPricelistByServerID(second.ServerID)
|
|
if err != nil {
|
|
t.Fatalf("load second pricelist: %v", err)
|
|
}
|
|
if err := local.SaveLocalPricelistItems([]LocalPricelistItem{
|
|
{
|
|
PricelistID: storedSecond.ID,
|
|
LotName: "CPU_A",
|
|
Price: 102,
|
|
},
|
|
}); err != nil {
|
|
t.Fatalf("save second items: %v", err)
|
|
}
|
|
|
|
got, err := local.GetLatestLocalPricelistBySource("warehouse")
|
|
if err != nil {
|
|
t.Fatalf("GetLatestLocalPricelistBySource: %v", err)
|
|
}
|
|
if got.ServerID != second.ServerID {
|
|
t.Fatalf("expected server_id=%d, got %d", second.ServerID, got.ServerID)
|
|
}
|
|
}
|