discount/pkg/array/contains_test.go

154 lines
4.3 KiB
Go
Raw Normal View History

2023-07-04 04:04:31 +00:00
package array_test
import (
"strings"
"testing"
"github.com/stretchr/testify/assert"
"penahub.gitlab.yandexcloud.net/pena-services/accruals-service/pkg/array"
)
func TestContains(t *testing.T) {
testCasesWithPrimitives := []struct {
name string
inputArray []any
inputCallback func(any, int, []any) bool
expect bool
}{
{
name: "Проверка наличие строк по значению",
inputArray: []any{"test1245", "test2"},
inputCallback: func(element any, index int, array []any) bool {
assert.Equal(t, array, []any{"test1245", "test2"})
return element == "test1245"
},
expect: true,
},
{
name: "Проверка наличие строк по значению (неудачная)",
inputArray: []any{"test1", "test2"},
inputCallback: func(element any, index int, array []any) bool {
assert.Equal(t, array, []any{"test1", "test2"})
return element == "fdadadfadfadf"
},
expect: false,
},
{
name: "Проверка наличие строк по индексу",
inputArray: []any{"test1", "test2"},
inputCallback: func(element any, index int, array []any) bool {
assert.Equal(t, array, []any{"test1", "test2"})
return index == 1
},
expect: true,
},
{
name: "Проверка наличие чисел по значению",
inputArray: []any{1, 4},
inputCallback: func(element any, index int, array []any) bool {
assert.Equal(t, array, []any{1, 4})
return element == 1
},
expect: true,
},
{
name: "Проверка наличие строк по значению с несколькими схожими значениями",
inputArray: []any{"test1", "test2"},
inputCallback: func(element any, index int, array []any) bool {
assert.Equal(t, array, []any{"test1", "test2"})
return strings.Contains(element.(string), "test")
},
expect: true,
},
}
testCasesWithObjects := []struct {
name string
inputArray []struct{ Name string }
inputCallback func(struct{ Name string }, int, []struct{ Name string }) bool
expect bool
}{
{
name: "Проверка наличие объектов по индексу",
inputArray: []struct{ Name string }{
{Name: "test1"},
{Name: "test2"},
},
inputCallback: func(element struct{ Name string }, index int, array []struct{ Name string }) bool {
assert.Equal(t, array, []struct{ Name string }{
{Name: "test1"},
{Name: "test2"},
})
return index == 1
},
expect: true,
},
{
name: "Проверка наличие объектов по имени (неудачная)",
inputArray: []struct{ Name string }{
{Name: "test1"},
{Name: "test2"},
},
inputCallback: func(element struct{ Name string }, index int, array []struct{ Name string }) bool {
assert.Equal(t, array, []struct{ Name string }{
{Name: "test1"},
{Name: "test2"},
})
return element.Name == "tttt"
},
expect: false,
},
{
name: "Проверка наличие объектов по значению поля",
inputArray: []struct{ Name string }{
{Name: "test19999"},
{Name: "test2"},
},
inputCallback: func(element struct{ Name string }, index int, array []struct{ Name string }) bool {
assert.Equal(t, array, []struct{ Name string }{
{Name: "test19999"},
{Name: "test2"},
})
return element.Name == "test19999"
},
expect: true,
},
{
name: "Проверка наличие объектов по совпадению значения поля",
inputArray: []struct{ Name string }{
{Name: "test1"},
{Name: "test2"},
},
inputCallback: func(element struct{ Name string }, index int, array []struct{ Name string }) bool {
assert.Equal(t, array, []struct{ Name string }{
{Name: "test1"},
{Name: "test2"},
})
return strings.Contains(element.Name, "test")
},
expect: true,
},
}
for _, test := range testCasesWithPrimitives {
t.Run(test.name, func(t *testing.T) {
assert.Equal(t, test.expect, array.Contains(test.inputArray, test.inputCallback))
})
}
for _, test := range testCasesWithObjects {
t.Run(test.name, func(t *testing.T) {
assert.Equal(t, test.expect, array.Contains(test.inputArray, test.inputCallback))
})
}
}