mirror of
https://github.com/bitechdev/ResolveSpec.git
synced 2025-11-13 09:53:53 +00:00
204 lines
6.1 KiB
Go
204 lines
6.1 KiB
Go
package restheadspec
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
// TestModel represents a typical model with RowNumber field (like DBAdhocBuffer)
|
|
type TestModel struct {
|
|
ID int64 `json:"id" bun:"id,pk"`
|
|
Name string `json:"name" bun:"name"`
|
|
RowNumber int64 `json:"_rownumber,omitempty" gorm:"-" bun:"-"`
|
|
}
|
|
|
|
func TestSetRowNumbersOnRecords(t *testing.T) {
|
|
handler := &Handler{}
|
|
|
|
tests := []struct {
|
|
name string
|
|
records any
|
|
offset int
|
|
expected []int64
|
|
}{
|
|
{
|
|
name: "Set row numbers on slice of pointers",
|
|
records: []*TestModel{
|
|
{ID: 1, Name: "First"},
|
|
{ID: 2, Name: "Second"},
|
|
{ID: 3, Name: "Third"},
|
|
},
|
|
offset: 0,
|
|
expected: []int64{1, 2, 3},
|
|
},
|
|
{
|
|
name: "Set row numbers with offset",
|
|
records: []*TestModel{
|
|
{ID: 11, Name: "Eleventh"},
|
|
{ID: 12, Name: "Twelfth"},
|
|
},
|
|
offset: 10,
|
|
expected: []int64{11, 12},
|
|
},
|
|
{
|
|
name: "Set row numbers on slice of values",
|
|
records: []TestModel{
|
|
{ID: 1, Name: "First"},
|
|
{ID: 2, Name: "Second"},
|
|
},
|
|
offset: 5,
|
|
expected: []int64{6, 7},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
handler.setRowNumbersOnRecords(tt.records, tt.offset)
|
|
|
|
// Verify row numbers were set correctly
|
|
switch records := tt.records.(type) {
|
|
case []*TestModel:
|
|
assert.Equal(t, len(tt.expected), len(records))
|
|
for i, record := range records {
|
|
assert.Equal(t, tt.expected[i], record.RowNumber,
|
|
"Record %d should have RowNumber=%d", i, tt.expected[i])
|
|
}
|
|
case []TestModel:
|
|
assert.Equal(t, len(tt.expected), len(records))
|
|
for i, record := range records {
|
|
assert.Equal(t, tt.expected[i], record.RowNumber,
|
|
"Record %d should have RowNumber=%d", i, tt.expected[i])
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestSetRowNumbersOnRecords_NoRowNumberField(t *testing.T) {
|
|
handler := &Handler{}
|
|
|
|
// Model without RowNumber field
|
|
type SimpleModel struct {
|
|
ID int64 `json:"id"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
records := []*SimpleModel{
|
|
{ID: 1, Name: "First"},
|
|
{ID: 2, Name: "Second"},
|
|
}
|
|
|
|
// Should not panic when model doesn't have RowNumber field
|
|
assert.NotPanics(t, func() {
|
|
handler.setRowNumbersOnRecords(records, 0)
|
|
})
|
|
}
|
|
|
|
func TestSetRowNumbersOnRecords_NilRecords(t *testing.T) {
|
|
handler := &Handler{}
|
|
|
|
records := []*TestModel{
|
|
{ID: 1, Name: "First"},
|
|
nil, // Nil record
|
|
{ID: 3, Name: "Third"},
|
|
}
|
|
|
|
// Should not panic with nil records
|
|
assert.NotPanics(t, func() {
|
|
handler.setRowNumbersOnRecords(records, 0)
|
|
})
|
|
|
|
// Verify non-nil records were set
|
|
assert.Equal(t, int64(1), records[0].RowNumber)
|
|
assert.Equal(t, int64(3), records[2].RowNumber)
|
|
}
|
|
|
|
// DBAdhocBuffer simulates the actual DBAdhocBuffer from db package
|
|
type DBAdhocBuffer struct {
|
|
CQL1 string `json:"cql1,omitempty" gorm:"->" bun:"-"`
|
|
RowNumber int64 `json:"_rownumber,omitempty" gorm:"-" bun:"-"`
|
|
}
|
|
|
|
// ModelWithEmbeddedBuffer simulates a real model like ModelPublicConsultant
|
|
type ModelWithEmbeddedBuffer struct {
|
|
ID int64 `json:"id" bun:"id,pk"`
|
|
Name string `json:"name" bun:"name"`
|
|
|
|
DBAdhocBuffer `json:",omitempty"` // Embedded struct containing RowNumber
|
|
}
|
|
|
|
func TestSetRowNumbersOnRecords_EmbeddedBuffer(t *testing.T) {
|
|
handler := &Handler{}
|
|
|
|
// Test with embedded DBAdhocBuffer (like real models)
|
|
records := []*ModelWithEmbeddedBuffer{
|
|
{ID: 1, Name: "First"},
|
|
{ID: 2, Name: "Second"},
|
|
{ID: 3, Name: "Third"},
|
|
}
|
|
|
|
handler.setRowNumbersOnRecords(records, 10)
|
|
|
|
// Verify row numbers were set on embedded field
|
|
assert.Equal(t, int64(11), records[0].RowNumber, "First record should have RowNumber=11")
|
|
assert.Equal(t, int64(12), records[1].RowNumber, "Second record should have RowNumber=12")
|
|
assert.Equal(t, int64(13), records[2].RowNumber, "Third record should have RowNumber=13")
|
|
}
|
|
|
|
func TestSetRowNumbersOnRecords_EmbeddedBuffer_SliceOfValues(t *testing.T) {
|
|
handler := &Handler{}
|
|
|
|
// Test with slice of values (not pointers)
|
|
records := []ModelWithEmbeddedBuffer{
|
|
{ID: 1, Name: "First"},
|
|
{ID: 2, Name: "Second"},
|
|
}
|
|
|
|
handler.setRowNumbersOnRecords(records, 0)
|
|
|
|
// Verify row numbers were set on embedded field
|
|
assert.Equal(t, int64(1), records[0].RowNumber, "First record should have RowNumber=1")
|
|
assert.Equal(t, int64(2), records[1].RowNumber, "Second record should have RowNumber=2")
|
|
}
|
|
|
|
// Simulate the exact structure from user's code
|
|
type MockDBAdhocBuffer struct {
|
|
CQL1 string `json:"cql1,omitempty" gorm:"->" bun:"-"`
|
|
CQL2 string `json:"cql2,omitempty" gorm:"->" bun:"-"`
|
|
RowNumber int64 `json:"_rownumber,omitempty" gorm:"-" bun:"-"`
|
|
Request string `json:"_request,omitempty" gorm:"-" bun:"-"`
|
|
}
|
|
|
|
// Exact structure like ModelPublicConsultant
|
|
type ModelPublicConsultant struct {
|
|
Consultant string `json:"consultant" bun:"consultant,type:citext,pk"`
|
|
Ridconsultant int32 `json:"rid_consultant" bun:"rid_consultant,type:integer,pk"`
|
|
Updatecnt int64 `json:"updatecnt" bun:"updatecnt,type:integer,default:0"`
|
|
|
|
MockDBAdhocBuffer `json:",omitempty"` // Embedded - RowNumber is here!
|
|
}
|
|
|
|
func TestSetRowNumbersOnRecords_RealModelStructure(t *testing.T) {
|
|
handler := &Handler{}
|
|
|
|
// Test with exact structure from user's ModelPublicConsultant
|
|
records := []*ModelPublicConsultant{
|
|
{Consultant: "John Doe", Ridconsultant: 1, Updatecnt: 0},
|
|
{Consultant: "Jane Smith", Ridconsultant: 2, Updatecnt: 0},
|
|
{Consultant: "Bob Johnson", Ridconsultant: 3, Updatecnt: 0},
|
|
}
|
|
|
|
handler.setRowNumbersOnRecords(records, 100)
|
|
|
|
// Verify row numbers were set correctly in the embedded DBAdhocBuffer
|
|
assert.Equal(t, int64(101), records[0].RowNumber, "First consultant should have RowNumber=101")
|
|
assert.Equal(t, int64(102), records[1].RowNumber, "Second consultant should have RowNumber=102")
|
|
assert.Equal(t, int64(103), records[2].RowNumber, "Third consultant should have RowNumber=103")
|
|
|
|
t.Logf("✓ RowNumber correctly set in embedded MockDBAdhocBuffer")
|
|
t.Logf(" Record 0: Consultant=%s, RowNumber=%d", records[0].Consultant, records[0].RowNumber)
|
|
t.Logf(" Record 1: Consultant=%s, RowNumber=%d", records[1].Consultant, records[1].RowNumber)
|
|
t.Logf(" Record 2: Consultant=%s, RowNumber=%d", records[2].Consultant, records[2].RowNumber)
|
|
}
|