package fieldextraction import ( "testing" "queryorchestration/internal/database/repository" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestValidateArrayConsistency(t *testing.T) { t.Run("empty array is valid", func(t *testing.T) { count, err := ValidateArrayConsistency([]*repository.AddFieldExtractionArrayFieldParams{}) require.NoError(t, err) assert.Equal(t, 0, count) }) t.Run("nil slice is valid", func(t *testing.T) { count, err := ValidateArrayConsistency(nil) require.NoError(t, err) assert.Equal(t, 0, count) }) t.Run("single element array is valid", func(t *testing.T) { fields := []*repository.AddFieldExtractionArrayFieldParams{ {}, } count, err := ValidateArrayConsistency(fields) require.NoError(t, err) assert.Equal(t, 1, count) }) t.Run("multiple elements array is valid", func(t *testing.T) { exhibitTitle1 := "Exhibit A" exhibitTitle2 := "Exhibit B" exhibitTitle3 := "Exhibit C" fields := []*repository.AddFieldExtractionArrayFieldParams{ {Exhibittitle: &exhibitTitle1}, {Exhibittitle: &exhibitTitle2}, {Exhibittitle: &exhibitTitle3}, } count, err := ValidateArrayConsistency(fields) require.NoError(t, err) assert.Equal(t, 3, count) }) t.Run("nil entry in array returns error", func(t *testing.T) { exhibitTitle := "Exhibit A" fields := []*repository.AddFieldExtractionArrayFieldParams{ {Exhibittitle: &exhibitTitle}, nil, // nil entry {Exhibittitle: &exhibitTitle}, } count, err := ValidateArrayConsistency(fields) require.Error(t, err) assert.Equal(t, 0, count) assert.Contains(t, err.Error(), "array field at index 1 is nil") }) t.Run("nil entry at first position returns error", func(t *testing.T) { exhibitTitle := "Exhibit A" fields := []*repository.AddFieldExtractionArrayFieldParams{ nil, // nil entry at first position {Exhibittitle: &exhibitTitle}, } count, err := ValidateArrayConsistency(fields) require.Error(t, err) assert.Equal(t, 0, count) assert.Contains(t, err.Error(), "array field at index 0 is nil") }) t.Run("nil entry at last position returns error", func(t *testing.T) { exhibitTitle := "Exhibit A" fields := []*repository.AddFieldExtractionArrayFieldParams{ {Exhibittitle: &exhibitTitle}, {Exhibittitle: &exhibitTitle}, nil, // nil entry at last position } count, err := ValidateArrayConsistency(fields) require.Error(t, err) assert.Equal(t, 0, count) assert.Contains(t, err.Error(), "array field at index 2 is nil") }) t.Run("array at max count is valid", func(t *testing.T) { fields := make([]*repository.AddFieldExtractionArrayFieldParams, MaxArrayFieldCount) for i := range fields { fields[i] = &repository.AddFieldExtractionArrayFieldParams{} } count, err := ValidateArrayConsistency(fields) require.NoError(t, err) assert.Equal(t, MaxArrayFieldCount, count) }) t.Run("array exceeding max count returns error", func(t *testing.T) { fields := make([]*repository.AddFieldExtractionArrayFieldParams, MaxArrayFieldCount+1) for i := range fields { fields[i] = &repository.AddFieldExtractionArrayFieldParams{} } count, err := ValidateArrayConsistency(fields) require.Error(t, err) assert.Equal(t, 0, count) assert.Contains(t, err.Error(), "exceeds maximum allowed") }) } func TestMaxArrayFieldCount(t *testing.T) { // Verify the constant is set to a reasonable value assert.Equal(t, 10000, MaxArrayFieldCount, "MaxArrayFieldCount should be 10000") }