90 lines
2.6 KiB
Go
90 lines
2.6 KiB
Go
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())
|
||
|
|
}
|
||
|
|
}
|