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  }