discount/pkg/array/contains_test.go
2024-12-11 15:14:39 +03:00

154 lines
4.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package array_test
import (
"strings"
"testing"
"github.com/stretchr/testify/assert"
"gitea.pena/PenaSide/discount/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))
})
}
}