package collections import ( "embed" "strconv" "strings" "testing" "github.com/stretchr/testify/require" ) //go:embed collection_test.csv var testData embed.FS type person struct { ID int LastName string FirstName string Email string } func TestCollection(t *testing.T) { rawData, _ := testData.ReadFile("collection_test.csv") data := strings.Split(string(rawData), "\n") lines := OfSlice(data).Skip(1).Filter(func(s string) bool { return strings.Contains(s, ",") }) firstGloryWithComMail := MapCollection( lines, func(line string) person { elements := strings.Split(line, ",") id, _ := strconv.Atoi(elements[0]) return person{ ID: id, LastName: elements[1], FirstName: elements[2], Email: elements[3], } }, ).Filter(func(p person) bool { return strings.HasSuffix(p.Email, ".com") }).Filter(func(p person) bool { return p.FirstName == "Glory" }).Sorted(func(p1, p2 person) bool { return p1.ID < p2.ID }).FindFirst().Get() require.EqualValues(t, person{ ID: 62, LastName: "Joss", FirstName: "Glory", Email: "gjoss1p@taobao.com", }, firstGloryWithComMail) }