github.com/weaviate/weaviate@v1.24.6/test/acceptance/multi_tenancy/batch_delete_tenant_objects_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/stretchr/testify/assert" 18 "github.com/stretchr/testify/require" 19 "github.com/weaviate/weaviate/client/objects" 20 "github.com/weaviate/weaviate/entities/filters" 21 "github.com/weaviate/weaviate/entities/models" 22 "github.com/weaviate/weaviate/entities/schema" 23 "github.com/weaviate/weaviate/test/helper" 24 ) 25 26 func TestBatchDeleteTenantObjects(t *testing.T) { 27 className := "MultiTenantClass" 28 testClass := models.Class{ 29 Class: className, 30 MultiTenancyConfig: &models.MultiTenancyConfig{ 31 Enabled: true, 32 }, 33 Properties: []*models.Property{ 34 { 35 Name: "name", 36 DataType: schema.DataTypeText.PropString(), 37 }, 38 }, 39 } 40 tenantName := "Tenant1" 41 tenantObjects := []*models.Object{ 42 { 43 ID: "0927a1e0-398e-4e76-91fb-04a7a8f0405c", 44 Class: testClass.Class, 45 Properties: map[string]interface{}{ 46 "name": tenantName, 47 }, 48 Tenant: tenantName, 49 }, 50 { 51 ID: "831ae1d0-f441-44b1-bb2a-46548048e26f", 52 Class: testClass.Class, 53 Properties: map[string]interface{}{ 54 "name": tenantName, 55 }, 56 Tenant: tenantName, 57 }, 58 { 59 ID: "6f3363e0-c0a0-4618-bf1f-b6cad9cdff59", 60 Class: testClass.Class, 61 Properties: map[string]interface{}{ 62 "name": tenantName, 63 }, 64 Tenant: tenantName, 65 }, 66 } 67 68 defer func() { 69 helper.DeleteClass(t, className) 70 }() 71 72 helper.CreateClass(t, &testClass) 73 helper.CreateTenants(t, className, []*models.Tenant{{Name: tenantName}}) 74 75 t.Run("add tenant objects", func(t *testing.T) { 76 helper.CreateObjectsBatch(t, tenantObjects) 77 78 t.Run("verify tenant objects", func(t *testing.T) { 79 for _, obj := range tenantObjects { 80 resp, err := helper.TenantObject(t, obj.Class, obj.ID, tenantName) 81 require.Nil(t, err) 82 require.Equal(t, obj.ID, resp.ID) 83 require.Equal(t, obj.Class, resp.Class) 84 require.Equal(t, obj.Properties, resp.Properties) 85 } 86 }) 87 }) 88 89 t.Run("batch delete tenant objects", func(t *testing.T) { 90 glob := "*" 91 where := models.WhereFilter{ 92 Operator: filters.OperatorLike.Name(), 93 Path: []string{"id"}, 94 ValueString: &glob, 95 } 96 match := models.BatchDeleteMatch{ 97 Class: className, 98 Where: &where, 99 } 100 batch := models.BatchDelete{Match: &match} 101 resp, err := helper.DeleteTenantObjectsBatch(t, &batch, tenantName) 102 require.Nil(t, err) 103 require.NotNil(t, resp) 104 require.NotNil(t, resp.Results) 105 assert.Nil(t, resp.Results.Objects) 106 assert.Equal(t, int64(3), resp.Results.Successful) 107 assert.Equal(t, int64(0), resp.Results.Failed) 108 109 t.Run("verify tenant object deletion", func(t *testing.T) { 110 for _, obj := range tenantObjects { 111 resp, err := helper.TenantObject(t, obj.Class, obj.ID, tenantName) 112 assert.Nil(t, resp) 113 assert.NotNil(t, err) 114 assert.EqualError(t, objects.NewObjectsClassGetNotFound(), err.Error()) 115 } 116 }) 117 }) 118 }