@@ -12,6 +12,7 @@ import (
12
12
"github.com/stretchr/testify/require"
13
13
"github.com/weaviate/weaviate-go-client/v5/test/testsuit"
14
14
"github.com/weaviate/weaviate-go-client/v5/weaviate"
15
+ "github.com/weaviate/weaviate-go-client/v5/weaviate/alias"
15
16
"github.com/weaviate/weaviate-go-client/v5/weaviate/backup"
16
17
"github.com/weaviate/weaviate-go-client/v5/weaviate/graphql"
17
18
"github.com/weaviate/weaviate-go-client/v5/weaviate/testenv"
@@ -961,6 +962,94 @@ func TestBackups_integration(t *testing.T) {
961
962
}
962
963
require .Len (t , relevant , 3 , "wrong number of backups" )
963
964
})
965
+
966
+ t .Run ("create and restore with overwriteAlias points to original collection" , func (t * testing.T ) {
967
+ ctx := context .Background ()
968
+ client := testsuit .CreateTestClient (false )
969
+
970
+ schemaClass := & models.Class {
971
+ Class : "Spy" ,
972
+ Description : "Spy that spies on other spies" ,
973
+ }
974
+
975
+ schemaDifferentClass := & models.Class {
976
+ Class : "FakeSpy" ,
977
+ Description : "Spy that only plays a spy on movies" ,
978
+ }
979
+
980
+ alias := & alias.Alias {
981
+ Alias : "SpyAlias" ,
982
+ Class : schemaClass .Class ,
983
+ }
984
+
985
+ err := client .Schema ().ClassDeleter ().WithClassName (schemaClass .Class ).Do (ctx )
986
+ require .NoError (t , err )
987
+
988
+ err = client .Schema ().ClassDeleter ().WithClassName (schemaDifferentClass .Class ).Do (ctx )
989
+ require .NoError (t , err )
990
+
991
+ err = client .Schema ().ClassCreator ().WithClass (schemaClass ).Do (ctx )
992
+ require .NoError (t , err )
993
+
994
+ defer func () {
995
+ errRm := client .Schema ().AllDeleter ().Do (context .Background ())
996
+ assert .Nil (t , errRm )
997
+ }()
998
+
999
+ err = client .Alias ().AliasCreator ().WithAlias (alias ).Do (ctx )
1000
+ require .NoError (t , err )
1001
+ defer func () {
1002
+ require .NoError (t , client .Alias ().AliasDeleter ().WithAliasName (alias .Alias ).Do (ctx ))
1003
+ }()
1004
+
1005
+ backend := backup .BACKEND_FILESYSTEM
1006
+ backupID := fmt .Sprintf ("overwrite-alias-%d" , random .Int63 ())
1007
+
1008
+ // Create backup
1009
+ _ , err = client .Backup ().Creator ().
1010
+ WithBackupID (backupID ).
1011
+ WithBackend (backend ).
1012
+ WithIncludeClassNames (schemaClass .Class ).
1013
+ WithWaitForCompletion (true ).
1014
+ Do (context .Background ())
1015
+ require .Nil (t , err )
1016
+
1017
+ // Delete original class
1018
+ err = client .Schema ().ClassDeleter ().
1019
+ WithClassName (schemaClass .Class ).
1020
+ Do (context .Background ())
1021
+ require .Nil (t , err )
1022
+
1023
+ // Create different class
1024
+ err = client .Schema ().ClassCreator ().WithClass (schemaDifferentClass ).Do (ctx )
1025
+ require .NoError (t , err )
1026
+
1027
+ // Update alias to point to different class
1028
+ alias .Class = schemaDifferentClass .Class
1029
+
1030
+ err = client .Alias ().AliasUpdater ().
1031
+ WithAlias (alias ).
1032
+ Do (context .Background ())
1033
+ require .Nil (t , err )
1034
+
1035
+ // Act: restore with overwriteAlias
1036
+ _ , err = client .Backup ().Restorer ().
1037
+ WithBackupID (backupID ).
1038
+ WithBackend (backend ).
1039
+ WithIncludeClassNames (schemaClass .Class ).
1040
+ WithOverwriteAlias (true ).
1041
+ WithWaitForCompletion (true ).
1042
+ Do (context .Background ())
1043
+ require .Nil (t , err )
1044
+
1045
+ // Assert: alias points to original class
1046
+ aliasObj , err := client .Alias ().AliasGetter ().
1047
+ WithAliasName ("SpyAlias" ).
1048
+ Do (context .Background ())
1049
+ require .Nil (t , err )
1050
+ require .NotNil (t , aliasObj )
1051
+ assert .Equal (t , schemaClass .Class , aliasObj .Class )
1052
+ })
964
1053
}
965
1054
966
1055
func assertAllPizzasExist (t * testing.T , client * weaviate.Client ) {
0 commit comments