github.com/weaviate/weaviate@v1.24.6/test/acceptance/graphql_resolvers/local_aggregate_matrix_no_groupby_test.go (about) 1 // _ _ 2 // __ _____ __ ___ ___ __ _| |_ ___ 3 // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ 4 // \ V V / __/ (_| |\ V /| | (_| | || __/ 5 // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| 6 // 7 // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. 8 // 9 // CONTACT: hello@weaviate.io 10 // 11 12 package test 13 14 import ( 15 "testing" 16 17 "github.com/weaviate/weaviate/test/helper" 18 graphqlhelper "github.com/weaviate/weaviate/test/helper/graphql" 19 ) 20 21 func aggregateArrayClassWithoutGroupByTest(t *testing.T) { 22 t.Run("aggregate ArrayClass without group by", func(t *testing.T) { 23 asserts := newAggregateResponseAssert(t) 24 testCasesGen := &aggregateArrayClassTestCases{} 25 26 expectedAllResultsAssertions := []assertFunc{ 27 asserts.meta(7), 28 asserts.booleanArray("booleans", 10, 4, 6, 0.4, 0.6), 29 asserts.textArray("texts", 10, []string{"Alpha", "Bravo", "Charlie", "Delta"}, []int64{4, 3, 2, 1}), 30 asserts.numberArray("numbers", 10, 4, 1, 1, 20, 2, 2), 31 asserts.intArray("ints", 10, 104, 101, 101, 1020, 102, 102), 32 asserts.dateArray("dates", 10), 33 } 34 expectedResultsWithDataAssertions := []assertFunc{ 35 asserts.meta(2), 36 asserts.booleanArray("booleans", 7, 2, 5, 0.2857142857142857, 0.7142857142857143), 37 asserts.textArray("texts", 7, []string{"Alpha", "Bravo", "Charlie", "Delta"}, []int64{2, 2, 2, 1}), 38 asserts.numberArray("numbers", 7, 4, 1, 1, 16, 2, 2.2857142857142856), 39 asserts.intArray("ints", 7, 104, 101, 101, 716, 102, 102.28571428571429), 40 asserts.dateArray("dates", 7), 41 } 42 expectedResultsWithoutDataAssertions := []assertFunc{ 43 asserts.meta(3), 44 asserts.booleanArray0("booleans"), 45 asserts.textArray0("texts"), 46 asserts.numberArray0("numbers"), 47 asserts.intArray0("ints"), 48 asserts.dateArray0("dates"), 49 } 50 expectedNoResultsAssertions := []assertFunc{ 51 asserts.meta(0), 52 asserts.booleanArray0("booleans"), 53 asserts.textArray0("texts"), 54 asserts.numberArray0("numbers"), 55 asserts.intArray0("ints"), 56 asserts.dateArray0("dates"), 57 } 58 59 testCases := []aggregateTestCase{ 60 testCasesGen.WithoutFilters(wrapWithMap(expectedAllResultsAssertions)), 61 62 testCasesGen.WithWhereFilter_AllResults(wrapWithMap(expectedAllResultsAssertions)), 63 testCasesGen.WithWhereFilter_ResultsWithData(wrapWithMap(expectedResultsWithDataAssertions)), 64 testCasesGen.WithWhereFilter_ResultsWithoutData(wrapWithMap(expectedResultsWithoutDataAssertions)), 65 testCasesGen.WithWhereFilter_NoResults(wrapWithMap(expectedNoResultsAssertions)), 66 67 testCasesGen.WithNearObjectFilter_AllResults(wrapWithMap(expectedAllResultsAssertions)), 68 testCasesGen.WithNearObjectFilter_ResultsWithData(wrapWithMap(expectedResultsWithDataAssertions)), 69 testCasesGen.WithNearObjectFilter_ResultsWithoutData(wrapWithMap(expectedResultsWithoutDataAssertions)), 70 71 testCasesGen.WithWhereAndNearObjectFilters_AllResults(wrapWithMap(expectedAllResultsAssertions)), 72 testCasesGen.WithWhereAndNearObjectFilters_ResultsWithData(wrapWithMap(expectedResultsWithDataAssertions)), 73 testCasesGen.WithWhereAndNearObjectFilters_ResultsWithoutData(wrapWithMap(expectedResultsWithoutDataAssertions)), 74 testCasesGen.WithWhereAndNearObjectFilters_NoResults(wrapWithMap(expectedNoResultsAssertions)), 75 } 76 77 for _, tc := range testCases { 78 query := aggregateArrayClassQuery(tc.filters, "") 79 80 t.Run(tc.name, func(t *testing.T) { 81 result := graphqlhelper.AssertGraphQL(t, helper.RootAuth, query) 82 extracted := extractArrayClassNoGroupByResult(result) 83 84 for _, groupAssertions := range tc.groupedAssertions { 85 for _, assertion := range groupAssertions { 86 assertion(extracted) 87 } 88 } 89 }) 90 } 91 }) 92 } 93 94 func aggregateDuplicatesClassWithoutGroupByTest(t *testing.T) { 95 t.Run("aggregate DuplicatesClass without group by", func(t *testing.T) { 96 asserts := newAggregateResponseAssert(t) 97 testCasesGen := &aggregateDuplicatesClassTestCases{} 98 99 expectedAllResultsAssertions := []assertFunc{ 100 asserts.meta(3), 101 asserts.booleanArray("booleans", 9, 3, 6, 0.3333333333333333, 0.6666666666666666), 102 asserts.textArray("texts", 9, []string{"Alpha", "Bravo"}, []int64{6, 3}), 103 asserts.numberArray("numbers", 9, 2, 1, 1, 12, 1, 1.3333333333333333), 104 asserts.intArray("ints", 9, 102, 101, 101, 912, 101, 101.33333333333333), 105 asserts.dateArray("dates", 9), 106 } 107 expectedSomeResultsAssertions := []assertFunc{ 108 asserts.meta(1), 109 asserts.booleanArray("booleans", 4, 1, 3, 0.25, 0.75), 110 asserts.textArray("texts", 4, []string{"Alpha", "Bravo"}, []int64{3, 1}), 111 asserts.numberArray("numbers", 4, 2, 1, 1, 5, 1, 1.25), 112 asserts.intArray("ints", 4, 102, 101, 101, 405, 101, 101.25), 113 asserts.dateArray("dates", 4), 114 } 115 expectedNoResultsAssertions := []assertFunc{ 116 asserts.meta(0), 117 asserts.booleanArray0("booleans"), 118 asserts.textArray0("texts"), 119 asserts.numberArray0("numbers"), 120 asserts.intArray0("ints"), 121 asserts.dateArray0("dates"), 122 } 123 124 testCases := []aggregateTestCase{ 125 testCasesGen.WithoutFilters(wrapWithMap(expectedAllResultsAssertions)), 126 127 testCasesGen.WithWhereFilter_AllResults(wrapWithMap(expectedAllResultsAssertions)), 128 testCasesGen.WithWhereFilter_SomeResults(wrapWithMap(expectedSomeResultsAssertions)), 129 testCasesGen.WithWhereFilter_NoResults(wrapWithMap(expectedNoResultsAssertions)), 130 } 131 132 for _, tc := range testCases { 133 query := aggregateDuplicatesClassQuery(tc.filters, "") 134 135 t.Run(tc.name, func(t *testing.T) { 136 result := graphqlhelper.AssertGraphQL(t, helper.RootAuth, query) 137 extracted := extractDuplicatesClassNoGroupByResult(result) 138 139 for _, groupAssertions := range tc.groupedAssertions { 140 for _, assertion := range groupAssertions { 141 assertion(extracted) 142 } 143 } 144 }) 145 } 146 }) 147 } 148 149 func aggregateNoPropsClassWithoutGroupByTest(t *testing.T) { 150 t.Run("aggregate NoPropsClass without group by", func(t *testing.T) { 151 asserts := newAggregateResponseAssert(t) 152 testCasesGen := &aggregateNoPropsClassTestCases{} 153 154 expectedAllResultsAssertions := []assertFunc{ 155 asserts.meta(2), 156 } 157 expectedSomeResultsAssertions := []assertFunc{ 158 asserts.meta(1), 159 } 160 expectedNoResultsAssertions := []assertFunc{ 161 asserts.meta(0), 162 } 163 164 testCases := []aggregateTestCase{ 165 testCasesGen.WithoutFilters(wrapWithMap(expectedAllResultsAssertions)), 166 167 testCasesGen.WithWhereFilter_AllResults(wrapWithMap(expectedAllResultsAssertions)), 168 testCasesGen.WithWhereFilter_SomeResults(wrapWithMap(expectedSomeResultsAssertions)), 169 testCasesGen.WithWhereFilter_NoResults(wrapWithMap(expectedNoResultsAssertions)), 170 171 testCasesGen.WithNearObjectFilter_AllResults(wrapWithMap(expectedAllResultsAssertions)), 172 173 testCasesGen.WithWhereAndNearObjectFilters_AllResults(wrapWithMap(expectedAllResultsAssertions)), 174 testCasesGen.WithWhereAndNearObjectFilters_SomeResults(wrapWithMap(expectedSomeResultsAssertions)), 175 testCasesGen.WithWhereAndNearObjectFilters_NoResults(wrapWithMap(expectedNoResultsAssertions)), 176 } 177 178 for _, tc := range testCases { 179 query := aggregateNoPropsQuery(tc.filters) 180 181 t.Run(tc.name, func(t *testing.T) { 182 result := graphqlhelper.AssertGraphQL(t, helper.RootAuth, query) 183 extracted := extractNoPropsClassNoGroupByResult(result) 184 185 for _, groupAssertions := range tc.groupedAssertions { 186 for _, assertion := range groupAssertions { 187 assertion(extracted) 188 } 189 } 190 }) 191 } 192 }) 193 } 194 195 func aggregateCityClassWithoutGroupByTest(t *testing.T) { 196 t.Run("aggregate City without group by", func(t *testing.T) { 197 asserts := newAggregateResponseAssert(t) 198 testCasesGen := &aggregateCityTestCases{} 199 200 expectedAllResultsAssertions := []assertFunc{ 201 asserts.meta(6), 202 asserts.number("cityArea", 4, 891.96, 217.22, 217.22, 2320.48, 605.6500000000001, 580.12), 203 asserts.date("cityRights", 4), 204 asserts.text("history", 4, []string{historyAmsterdam, historyRotterdam, historyBerlin, historyDusseldorf}, []int64{1, 1, 1, 1}), 205 asserts.boolean("isCapital", 5, 3, 2, 0.6, 0.4), 206 asserts.textArray("museums", 9, []string{"German Historical Museum", "Museum Boijmans Van Beuningen", "Onomato", "Rijksmuseum", "Schiffahrt Museum"}, []int64{1, 1, 1, 1, 1}), 207 asserts.text("name", 5, []string{"Amsterdam", "Berlin", "Dusseldorf", "Missing Island", "Rotterdam"}, []int64{1, 1, 1, 1, 1}), 208 asserts.int("population", 5, 3470000, 0, 600000, 6470000, 600000, 1294000), 209 asserts.textArray("timezones", 8, []string{"CEST", "CET"}, []int64{4, 4}), 210 asserts.pointingTo("inCountry", "Country"), 211 } 212 expectedResultsWithDataAssertions := []assertFunc{ 213 asserts.meta(2), 214 asserts.number("cityArea", 2, 891.96, 891.95, 891.95, 1783.91, 891.955, 891.955), 215 asserts.date("cityRights", 2), 216 asserts.text("history", 2, []string{historyAmsterdam, historyBerlin}, []int64{1, 1}), 217 asserts.boolean("isCapital", 2, 0, 2, 0, 1), 218 asserts.textArray("museums", 3, []string{"German Historical Museum", "Rijksmuseum", "Stedelijk Museum"}, []int64{1, 1, 1}), 219 asserts.text("name", 2, []string{"Amsterdam", "Berlin"}, []int64{1, 1}), 220 asserts.int("population", 2, 3470000, 1800000, 1800000, 5270000, 2635000, 2635000), 221 asserts.textArray("timezones", 4, []string{"CEST", "CET"}, []int64{2, 2}), 222 asserts.pointingTo("inCountry", "Country"), 223 } 224 expectedResultsWithoutDataAssertions := []assertFunc{ 225 asserts.meta(1), 226 asserts.number0("cityArea"), 227 asserts.date0("cityRights"), 228 asserts.text0("history"), 229 asserts.boolean0("isCapital"), 230 asserts.textArray0("museums"), 231 asserts.text0("name"), 232 asserts.int0("population"), 233 asserts.textArray0("timezones"), 234 asserts.pointingTo("inCountry", "Country"), 235 } 236 expectedNoResultsAssertions := []assertFunc{ 237 asserts.meta(0), 238 asserts.number0("cityArea"), 239 asserts.date0("cityRights"), 240 asserts.text0("history"), 241 asserts.boolean0("isCapital"), 242 asserts.textArray0("museums"), 243 asserts.text0("name"), 244 asserts.int0("population"), 245 asserts.textArray0("timezones"), 246 asserts.pointingTo("inCountry", "Country"), 247 } 248 249 testCases := []aggregateTestCase{ 250 testCasesGen.WithoutFilters(wrapWithMap(expectedAllResultsAssertions)), 251 252 testCasesGen.WithWhereFilter_AllResults(wrapWithMap(expectedAllResultsAssertions)), 253 testCasesGen.WithWhereFilter_ResultsWithData(wrapWithMap(expectedResultsWithDataAssertions)), 254 testCasesGen.WithWhereFilter_ResultsWithoutData(wrapWithMap(expectedResultsWithoutDataAssertions)), 255 testCasesGen.WithWhereFilter_NoResults(wrapWithMap(expectedNoResultsAssertions)), 256 257 testCasesGen.WithNearObjectFilter_AllResults(wrapWithMap(expectedAllResultsAssertions)), 258 testCasesGen.WithNearObjectFilter_ResultsWithData(wrapWithMap(expectedResultsWithDataAssertions)), 259 testCasesGen.WithNearObjectFilter_ResultsWithoutData(wrapWithMap(expectedResultsWithoutDataAssertions)), 260 261 testCasesGen.WithWhereAndNearObjectFilters_AllResults(wrapWithMap(expectedAllResultsAssertions)), 262 testCasesGen.WithWhereAndNearObjectFilters_ResultsWithData(wrapWithMap(expectedResultsWithDataAssertions)), 263 testCasesGen.WithWhereAndNearObjectFilters_ResultsWithoutData(wrapWithMap(expectedResultsWithoutDataAssertions)), 264 testCasesGen.WithWhereAndNearObjectFilters_NoResults(wrapWithMap(expectedNoResultsAssertions)), 265 } 266 267 for _, tc := range testCases { 268 query := aggregateCityQuery(tc.filters, "") 269 270 t.Run(tc.name, func(t *testing.T) { 271 result := graphqlhelper.AssertGraphQL(t, helper.RootAuth, query) 272 extracted := extractCityNoGroupByResult(result) 273 274 for _, groupAssertions := range tc.groupedAssertions { 275 for _, assertion := range groupAssertions { 276 assertion(extracted) 277 } 278 } 279 }) 280 } 281 }) 282 } 283 284 func extractArrayClassNoGroupByResult(result *graphqlhelper.GraphQLResult) map[string]interface{} { 285 return extractAggregateResult(result, arrayClassName)[0].(map[string]interface{}) 286 } 287 288 func extractDuplicatesClassNoGroupByResult(result *graphqlhelper.GraphQLResult) map[string]interface{} { 289 return extractAggregateResult(result, duplicatesClassName)[0].(map[string]interface{}) 290 } 291 292 func extractNoPropsClassNoGroupByResult(result *graphqlhelper.GraphQLResult) map[string]interface{} { 293 return extractAggregateResult(result, noPropsClassName)[0].(map[string]interface{}) 294 } 295 296 func extractCityNoGroupByResult(result *graphqlhelper.GraphQLResult) map[string]interface{} { 297 return extractAggregateResult(result, cityClassName)[0].(map[string]interface{}) 298 } 299 300 func wrapWithMap(assertFuncs []assertFunc) map[string][]assertFunc { 301 return map[string][]assertFunc{"": assertFuncs} 302 }