package dbsync

import "testing"

func TestNormalizePushPayloadInsert(t *testing.T) {
	op, payload, pk, err := normalizePushPayload(PushItem{
		Op:    "insert",
		RowPK: "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
		Row: map[string]any{
			"id":   "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
			"name": "x",
		},
	}, "id")
	if err != nil {
		t.Fatal(err)
	}
	if op != "upsert" || pk == "" || payload == "" {
		t.Fatalf("got op=%s pk=%s payload=%s", op, pk, payload)
	}
}

func TestNormalizePushPayloadDelete(t *testing.T) {
	op, payload, pk, err := normalizePushPayload(PushItem{
		Op:    "delete",
		RowPK: "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
	}, "id")
	if err != nil {
		t.Fatal(err)
	}
	if op != "delete" || pk == "" || payload == "" {
		t.Fatalf("got op=%s pk=%s payload=%s", op, pk, payload)
	}
}

func TestTableInChannel(t *testing.T) {
	ch := &Channel{
		Local:  Endpoint{Tables: []string{"orders"}},
		Remote: Endpoint{Tables: []string{"orders"}},
	}
	// Z4：通道表白名单不再拒收
	if !tableInChannel(ch, "orders") || !tableInChannel(ch, "other") {
		t.Fatal("expected any non-empty table accepted")
	}
	if tableInChannel(ch, "") {
		t.Fatal("empty table rejected")
	}
}
