github.com/weaviate/weaviate@v1.24.6/test/modules/qna-transformers/qna_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  	"encoding/json"
    16  	"fmt"
    17  	"os"
    18  	"testing"
    19  
    20  	"github.com/stretchr/testify/assert"
    21  	"github.com/weaviate/weaviate/entities/models"
    22  	"github.com/weaviate/weaviate/test/helper"
    23  	graphqlhelper "github.com/weaviate/weaviate/test/helper/graphql"
    24  	"github.com/weaviate/weaviate/test/helper/sample-schema/books"
    25  )
    26  
    27  func Test_QnATransformers(t *testing.T) {
    28  	helper.SetupClient(os.Getenv(weaviateEndpoint))
    29  	// Contextionary with QnA module config present
    30  	booksClass := books.ClassContextionaryVectorizerWithQnATransformers()
    31  	helper.CreateClass(t, booksClass)
    32  	defer helper.DeleteClass(t, booksClass.Class)
    33  	// Contextionary without QnA module config present
    34  	booksWithoutQnAConfig := "BooksWithoutConfig"
    35  	booksWithoutQnAConfigClass := books.ClassContextionaryVectorizerWithName(booksWithoutQnAConfig)
    36  	helper.CreateClass(t, booksWithoutQnAConfigClass)
    37  	defer helper.DeleteClass(t, booksWithoutQnAConfigClass.Class)
    38  	// Text2VecTransformers with QnA module config present
    39  	booksTransformers := "BooksTransformers"
    40  	booksTransformersClass := books.ClassTransformersVectorizerWithQnATransformersWithName(booksTransformers)
    41  	helper.CreateClass(t, booksTransformersClass)
    42  	defer helper.DeleteClass(t, booksTransformersClass.Class)
    43  	// Text2VecTransformers without QnA module config present
    44  	booksTransformersWithoutQnAConfig := "BooksTransformersWithoutConfig"
    45  	booksTransformersWithoutQnAConfigClass := books.ClassTransformersVectorizerWithName(booksTransformersWithoutQnAConfig)
    46  	helper.CreateClass(t, booksTransformersWithoutQnAConfigClass)
    47  	defer helper.DeleteClass(t, booksTransformersWithoutQnAConfigClass.Class)
    48  
    49  	t.Run("add data to Books schema", func(t *testing.T) {
    50  		bookObjects := []*models.Object{}
    51  		bookObjects = append(bookObjects, books.Objects()...)
    52  		bookObjects = append(bookObjects, books.ObjectsWithName(booksWithoutQnAConfig)...)
    53  		bookObjects = append(bookObjects, books.ObjectsWithName(booksTransformers)...)
    54  		bookObjects = append(bookObjects, books.ObjectsWithName(booksTransformersWithoutQnAConfig)...)
    55  		for _, book := range bookObjects {
    56  			helper.CreateObject(t, book)
    57  			helper.AssertGetObjectEventually(t, book.Class, book.ID)
    58  		}
    59  	})
    60  
    61  	t.Run("ask", func(t *testing.T) {
    62  		for _, class := range []*models.Class{booksClass, booksWithoutQnAConfigClass, booksTransformersClass, booksTransformersWithoutQnAConfigClass} {
    63  			t.Run(class.Class, func(t *testing.T) {
    64  				query := `
    65  					{
    66  						Get {
    67  							%s(
    68  								ask: {
    69  									question: "Who is Dune's author?"
    70  								}
    71  								limit: 1
    72  							){
    73  								title
    74  								_additional {
    75  									answer {
    76  										hasAnswer
    77  										property
    78  										result
    79  										startPosition
    80  										endPosition
    81  									}
    82  								}
    83  							}
    84  						}
    85  					}
    86  				`
    87  				result := graphqlhelper.AssertGraphQL(t, helper.RootAuth, fmt.Sprintf(query, class.Class))
    88  				books := result.Get("Get", class.Class).AsSlice()
    89  				expected := []interface{}{
    90  					map[string]interface{}{
    91  						"title": "Dune",
    92  						"_additional": map[string]interface{}{
    93  							"answer": map[string]interface{}{
    94  								"endPosition":   json.Number("74"),
    95  								"hasAnswer":     true,
    96  								"property":      "description",
    97  								"result":        "frank herbert",
    98  								"startPosition": json.Number("61"),
    99  							},
   100  						},
   101  					},
   102  				}
   103  				assert.ElementsMatch(t, expected, books)
   104  			})
   105  		}
   106  	})
   107  }