Files

90 lines
2.6 KiB
Go
Raw Permalink Normal View History

package shopify
import (
"errors"
"strings"
"testing"
"github.com/google/uuid"
)
func TestApplyProductSyncScope(t *testing.T) {
opt := SyncOptions{SyncLimit: defaultSyncLimit}
id := uuid.New().String()
err := applyProductSyncScope(&opt, ProductSyncScope{
Limit: 50,
Status: "Completed",
Category: " Lamps ",
ProductIDs: []string{id, id, " "},
})
if err != nil {
t.Fatal(err)
}
if opt.SyncLimit != 50 {
t.Fatalf("limit=%d", opt.SyncLimit)
}
if opt.SyncFilterStatus != "completed" {
t.Fatalf("status=%q", opt.SyncFilterStatus)
}
if opt.SyncFilterCategory != "Lamps" {
t.Fatalf("category=%q", opt.SyncFilterCategory)
}
if len(opt.SyncOnlyIDs) != 1 || opt.SyncOnlyIDs[0] != id {
t.Fatalf("ids=%v", opt.SyncOnlyIDs)
}
err = applyProductSyncScope(&opt, ProductSyncScope{Status: "nope"})
if !errors.Is(err, ErrInvalidSyncScope) {
t.Fatalf("want ErrInvalidSyncScope, got %v", err)
}
err = applyProductSyncScope(&opt, ProductSyncScope{Limit: maxSyncLimit + 1})
if !errors.Is(err, ErrInvalidSyncScope) {
t.Fatalf("want ErrInvalidSyncScope for limit, got %v", err)
}
err = applyProductSyncScope(&opt, ProductSyncScope{ProductIDs: []string{"not-a-uuid"}})
if !errors.Is(err, ErrInvalidSyncScope) {
t.Fatalf("want ErrInvalidSyncScope for ids, got %v", err)
}
err = applyProductSyncScope(&opt, ProductSyncScope{Category: strings.Repeat("c", maxCategoryFilterLen+1)})
if !errors.Is(err, ErrInvalidSyncScope) {
t.Fatalf("want ErrInvalidSyncScope for category length, got %v", err)
}
tooMany := make([]string, maxSyncOnlyIDs+1)
for i := range tooMany {
tooMany[i] = uuid.New().String()
}
err = applyProductSyncScope(&opt, ProductSyncScope{ProductIDs: tooMany})
if !errors.Is(err, ErrInvalidSyncScope) {
t.Fatalf("want ErrInvalidSyncScope for product_ids max, got %v", err)
}
err = applyProductSyncScope(&opt, ProductSyncScope{})
if err != nil {
t.Fatal(err)
}
if opt.SyncFilterStatus != "" || opt.SyncFilterCategory != "" || len(opt.SyncOnlyIDs) != 0 {
t.Fatalf("empty scope should clear one-shot filters: %#v", opt)
}
if opt.SyncLimit != 50 {
t.Fatalf("empty scope should keep prior sync_limit preference; got %d", opt.SyncLimit)
}
}
func TestNormalizeSyncFilterStatus(t *testing.T) {
got, err := normalizeSyncFilterStatus(" needs_review ")
if err != nil || got != "needs_review" {
t.Fatalf("got=%q err=%v", got, err)
}
_, err = normalizeSyncFilterStatus("draft")
if !errors.Is(err, ErrInvalidSyncScope) {
t.Fatalf("err=%v", err)
}
if !strings.Contains(err.Error(), "invalid status") {
t.Fatalf("msg=%q", err.Error())
}
}