package model

import "testing"

func TestSfReqBodyValidateLastMonthBatchScope(t *testing.T) {
	tests := []struct {
		name    string
		req     SfReqBody
		wantErr bool
	}{
		{name: "full order batch remains compatible", req: SfReqBody{Type: Order}},
		{name: "limit order batch", req: SfReqBody{Type: Order, Limit: 3}},
		{name: "explicit order ids", req: SfReqBody{Type: Order, OrderIDs: []uint64{11, 12}}},
		{name: "defer activation for order batch", req: SfReqBody{Type: Order, DeferActivation: true}},
		{name: "negative limit", req: SfReqBody{Type: Order, Limit: -1}, wantErr: true},
		{name: "ambiguous scope", req: SfReqBody{Type: Order, Limit: 1, OrderIDs: []uint64{11}}, wantErr: true},
		{name: "scope on revrec", req: SfReqBody{Type: Revrec, Limit: 1}, wantErr: true},
		{name: "defer activation on revrec", req: SfReqBody{Type: Revrec, DeferActivation: true}, wantErr: true},
		{name: "zero order id", req: SfReqBody{Type: Order, OrderIDs: []uint64{0}}, wantErr: true},
		{name: "duplicate order id", req: SfReqBody{Type: Order, OrderIDs: []uint64{11, 11}}, wantErr: true},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			err := tt.req.ValidateLastMonthBatchScope()
			if (err != nil) != tt.wantErr {
				t.Fatalf("ValidateLastMonthBatchScope() error = %v, wantErr %t", err, tt.wantErr)
			}
		})
	}
}
