File size: 3,230 Bytes
b110593
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
//                           _       _
// __      _____  __ ___   ___  __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
//  \ V  V /  __/ (_| |\ V /| | (_| | ||  __/
//   \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
//  Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
//  CONTACT: [email protected]
//

package test

// Acceptance tests for objects.

import (
	"testing"

	"github.com/go-openapi/strfmt"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"

	"github.com/weaviate/weaviate/client/batch"
	"github.com/weaviate/weaviate/client/objects"
	"github.com/weaviate/weaviate/entities/models"
	"github.com/weaviate/weaviate/test/helper"
)

// run from setup_test.go
func deleteAllObjectsFromAllClasses(t *testing.T) {
	// We can have a situation that objects in different classes
	// have the same ID. This test is to ensure that the delete request
	// deletes all of the objects with a given ID in all classes
	// This test is connected with this issue:
	// https://github.com/weaviate/weaviate/issues/1836
	const fakeObjectId strfmt.UUID = "11111111-1111-1111-1111-111111111111"

	t.Run("create objects with a specified id", func(t *testing.T) {
		object1 := &models.Object{
			Class: "TestDeleteClassOne",
			ID:    fakeObjectId,
			Properties: map[string]interface{}{
				"text": "Test string 1",
			},
		}
		object2 := &models.Object{
			Class: "TestDeleteClassTwo",
			ID:    fakeObjectId,
			Properties: map[string]interface{}{
				"text": "Test string 2",
			},
		}

		testFields := "ALL"
		// generate request body
		params := batch.NewBatchObjectsCreateParams().WithBody(batch.BatchObjectsCreateBody{
			Objects: []*models.Object{object1, object2},
			Fields:  []*string{&testFields},
		})

		// perform the request
		resp, err := helper.BatchClient(t).BatchObjectsCreate(params, nil)
		// ensure that the response is OK
		helper.AssertRequestOk(t, resp, err, func() {
			objectsCreateResponse := resp.Payload

			// check if the batch response contains two batched responses
			assert.Equal(t, 2, len(objectsCreateResponse))

			for _, elem := range resp.Payload {
				assert.Nil(t, elem.Result.Errors)
			}
		})
	})

	t.Run("check that object exists", func(t *testing.T) {
		// there are actually 2 objects in 2 classes with this ID
		params := objects.NewObjectsGetParams().WithID(fakeObjectId)
		resp, err := helper.Client(t).Objects.ObjectsGet(params, nil)
		require.Nil(t, err, "get should succeed")
		assert.NotNil(t, resp.Payload)
	})

	t.Run("delete objects with a given ID from all classes", func(t *testing.T) {
		params := objects.NewObjectsDeleteParams().WithID(fakeObjectId)
		resp, err := helper.Client(t).Objects.ObjectsDelete(params, nil)
		require.Nil(t, err, "delete should succeed")
		assert.Equal(t, &objects.ObjectsDeleteNoContent{}, resp)
	})

	t.Run("check that object with given ID is removed from all classes", func(t *testing.T) {
		params := objects.NewObjectsGetParams().WithID(fakeObjectId)
		resp, err := helper.Client(t).Objects.ObjectsGet(params, nil)
		require.Equal(t, &objects.ObjectsGetNotFound{}, err)
		assert.Nil(t, resp)
	})
}