@@ -831,6 +831,217 @@ export default class BaseModelTest {
831831 assert . calledTimes ( Database . driver . update , 2 )
832832 }
833833
834+ @Test ( )
835+ public async shouldBeAbleToRestoreAModelAndSaveOtherChangesSimultaneously ( { assert } : Context ) {
836+ Mock . when ( Database . driver , 'find' ) . resolve ( undefined )
837+ Mock . when ( Database . driver , 'update' ) . resolve ( { id : '1' , name : 'txsoura' , deletedAt : null } )
838+ Mock . when ( Database . driver , 'where' ) . return ( undefined )
839+
840+ const user = new User ( )
841+
842+ user . id = '1'
843+ user . name = 'lenon'
844+ user . email = 'lenon@athenna.io'
845+ user . metadata1 = 'random-1'
846+ user . metadata2 = 'random-2'
847+ user . createdAt = new Date ( )
848+ user . updatedAt = new Date ( )
849+ user . deletedAt = new Date ( )
850+
851+ user . setOriginal ( )
852+
853+ user . name = 'txsoura'
854+
855+ await user . restore ( )
856+
857+ assert . isNull ( user . deletedAt )
858+ assert . deepEqual ( user . name , 'txsoura' )
859+ assert . calledWith ( Database . driver . update , Mock . match ( { name : 'txsoura' , deleted_at : null } ) )
860+ }
861+
862+ @Test ( )
863+ public async shouldBeAbleToRestoreAModelWithMultipleChanges ( { assert } : Context ) {
864+ Mock . when ( Database . driver , 'find' ) . resolve ( undefined )
865+ Mock . when ( Database . driver , 'update' ) . resolve ( {
866+ id : '1' ,
867+ name : 'txsoura' ,
868+ email : 'txsoura@athenna.io' ,
869+ deletedAt : null
870+ } )
871+ Mock . when ( Database . driver , 'where' ) . return ( undefined )
872+
873+ const user = new User ( )
874+
875+ user . id = '1'
876+ user . name = 'lenon'
877+ user . email = 'lenon@athenna.io'
878+ user . metadata1 = 'random-1'
879+ user . metadata2 = 'random-2'
880+ user . createdAt = new Date ( )
881+ user . updatedAt = new Date ( )
882+ user . deletedAt = new Date ( )
883+
884+ user . setOriginal ( )
885+
886+ user . name = 'txsoura'
887+ user . email = 'txsoura@athenna.io'
888+
889+ await user . restore ( )
890+
891+ assert . isNull ( user . deletedAt )
892+ assert . deepEqual ( user . name , 'txsoura' )
893+ assert . deepEqual ( user . email , 'txsoura@athenna.io' )
894+ assert . calledWith (
895+ Database . driver . update ,
896+ Mock . match ( {
897+ name : 'txsoura' ,
898+ email : 'txsoura@athenna.io' ,
899+ deleted_at : null
900+ } )
901+ )
902+ }
903+
904+ @Test ( )
905+ public async shouldApplyAttributesWhenRestoringModel ( { assert } : Context ) {
906+ Mock . when ( Database . driver , 'find' ) . resolve ( undefined )
907+ Mock . when ( Database . driver , 'update' ) . resolve ( { id : '1' , name : 'lenon' , deletedAt : null } )
908+ Mock . when ( Database . driver , 'where' ) . return ( undefined )
909+
910+ const user = new User ( )
911+
912+ user . id = '1'
913+ user . name = 'lenon'
914+ user . createdAt = new Date ( )
915+ user . updatedAt = new Date ( )
916+ user . deletedAt = new Date ( )
917+
918+ user . setOriginal ( )
919+
920+ await user . restore ( )
921+
922+ assert . calledWith (
923+ Database . driver . update ,
924+ Mock . match ( {
925+ deleted_at : null ,
926+ metadata1 : 'random-1' ,
927+ metadata2 : 'random-2'
928+ } )
929+ )
930+ }
931+
932+ @Test ( )
933+ public async shouldUpdateTimestampsWhenRestoringModel ( { assert } : Context ) {
934+ Mock . when ( Database . driver , 'find' ) . resolve ( undefined )
935+ Mock . when ( Database . driver , 'update' ) . resolve ( { id : '1' , deletedAt : null } )
936+ Mock . when ( Database . driver , 'where' ) . return ( undefined )
937+
938+ const user = new User ( )
939+
940+ user . id = '1'
941+ user . name = 'lenon'
942+ user . createdAt = new Date ( )
943+ user . updatedAt = new Date ( )
944+ user . deletedAt = new Date ( )
945+
946+ user . setOriginal ( )
947+
948+ await user . restore ( )
949+
950+ assert . calledWith ( Database . driver . update , Mock . match ( { deleted_at : null } ) )
951+ assert . calledOnce ( Database . driver . update )
952+ }
953+
954+ @Test ( )
955+ public async shouldBeAbleToRestoreModelWithoutPriorChanges ( { assert } : Context ) {
956+ Mock . when ( Database . driver , 'find' ) . resolve ( undefined )
957+ Mock . when ( Database . driver , 'update' ) . resolve ( { id : '1' , deletedAt : null } )
958+ Mock . when ( Database . driver , 'where' ) . return ( undefined )
959+
960+ const user = new User ( )
961+
962+ user . id = '1'
963+ user . name = 'lenon'
964+ user . email = 'lenon@athenna.io'
965+ user . metadata1 = 'random-1'
966+ user . metadata2 = 'random-2'
967+ user . createdAt = new Date ( )
968+ user . updatedAt = new Date ( )
969+ user . deletedAt = new Date ( )
970+
971+ user . setOriginal ( )
972+
973+ await user . restore ( )
974+
975+ assert . isNull ( user . deletedAt )
976+ assert . calledWith ( Database . driver . update , Mock . match ( { deleted_at : null } ) )
977+ }
978+
979+ @Test ( )
980+ public async shouldBeAbleToRestoreModelUsingStaticMethod ( { assert } : Context ) {
981+ Mock . when ( Database . driver , 'find' ) . resolve ( undefined )
982+ Mock . when ( Database . driver , 'update' ) . resolve ( { id : '1' , name : 'txsoura' , deletedAt : null } )
983+ Mock . when ( Database . driver , 'where' ) . return ( undefined )
984+
985+ await User . restore ( { id : '1' } , { name : 'txsoura' } )
986+
987+ assert . calledWith (
988+ Database . driver . update ,
989+ Mock . match ( {
990+ name : 'txsoura' ,
991+ deleted_at : null
992+ } )
993+ )
994+ }
995+
996+ @Test ( )
997+ public async shouldBeAbleToRestoreMultipleModelsUsingStaticMethod ( { assert } : Context ) {
998+ Mock . when ( Database . driver , 'find' ) . resolve ( undefined )
999+ Mock . when ( Database . driver , 'update' ) . resolve ( [
1000+ { id : '1' , name : 'txsoura' , deletedAt : null } ,
1001+ { id : '2' , name : 'txsoura' , deletedAt : null }
1002+ ] )
1003+ Mock . when ( Database . driver , 'where' ) . return ( undefined )
1004+
1005+ const users = await User . restore ( { name : 'lenon' } , { name : 'txsoura' } )
1006+
1007+ assert . isArray ( users )
1008+ assert . lengthOf ( users as User [ ] , 2 )
1009+ assert . calledWith (
1010+ Database . driver . update ,
1011+ Mock . match ( {
1012+ name : 'txsoura' ,
1013+ deleted_at : null
1014+ } )
1015+ )
1016+ }
1017+
1018+ @Test ( )
1019+ public async shouldSetOriginalAfterRestoringModel ( { assert } : Context ) {
1020+ Mock . when ( Database . driver , 'find' ) . resolve ( undefined )
1021+ Mock . when ( Database . driver , 'update' ) . resolve ( { id : '1' , name : 'txsoura' , deletedAt : null } )
1022+ Mock . when ( Database . driver , 'where' ) . return ( undefined )
1023+
1024+ const user = new User ( )
1025+
1026+ user . id = '1'
1027+ user . name = 'lenon'
1028+ user . metadata1 = 'random-1'
1029+ user . metadata2 = 'random-2'
1030+ user . createdAt = new Date ( )
1031+ user . updatedAt = new Date ( )
1032+ user . deletedAt = new Date ( )
1033+
1034+ user . setOriginal ( )
1035+
1036+ user . name = 'txsoura'
1037+
1038+ await user . restore ( )
1039+
1040+ assert . isFalse ( user . isDirty ( ) )
1041+ assert . deepEqual ( user . name , 'txsoura' )
1042+ assert . isNull ( user . deletedAt )
1043+ }
1044+
8341045 @Test ( )
8351046 public async shouldBeAbleToUseFakerProperty ( { assert } : Context ) {
8361047 assert . isTrue ( BaseModel . faker . internet . email ( ) . includes ( '@' ) )
0 commit comments