package domain_test

import (
	"reflect"
	"testing"

	"github.com/tidbcloud/dataflow-service-ng/app/models/domain"
	"go.buf.build/protocolbuffers/go/linuxgit/tidbcloud/base"
)

func TestNewPager(t *testing.T) {
	type args struct {
		ops []domain.PagerOptionOp
	}
	tests := []struct {
		name string
		args args
		want *domain.Pager
	}{
		{
			name: "test pager",
			args: args{
				ops: []domain.PagerOptionOp{
					domain.PagerOp(&base.Pager{Page: 5, PageSize: 7}),
				},
			},
			want: &domain.Pager{
				Page:     5,
				PageSize: 7,
			},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if got := domain.NewPager(tt.args.ops...); !reflect.DeepEqual(got, tt.want) {
				t.Errorf("NewPager() = %v, want %v", got, tt.want)
			}
		})
	}
}

func TestPager_CalculateOffsetAndLimit(t *testing.T) {
	type fields struct {
		Page     int64
		PageSize int64
	}
	tests := []struct {
		name       string
		fields     fields
		wantOffset int64
		wantLimit  int64
	}{
		{
			name: "test CalculateOffsetAndLimit",
			fields: fields{
				Page:     5,
				PageSize: 7,
			},
			wantOffset: 28,
			wantLimit:  7,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			p := &domain.Pager{
				Page:     tt.fields.Page,
				PageSize: tt.fields.PageSize,
			}
			gotOffset, gotLimit := p.CalculateOffsetAndLimit()
			if gotOffset != tt.wantOffset {
				t.Errorf("CalculateOffsetAndLimit() gotOffset = %v, want %v", gotOffset, tt.wantOffset)
			}
			if gotLimit != tt.wantLimit {
				t.Errorf("CalculateOffsetAndLimit() gotLimit = %v, want %v", gotLimit, tt.wantLimit)
			}
		})
	}
}
