@@ -495,6 +495,7 @@ fn asset_vc_status_change_should_succeed() {
495495 ) ) ;
496496 } ) ;
497497}
498+
498499#[ test]
499500fn changing_status_of_asset_instance_with_same_status_should_fail ( ) {
500501 // Set up test parameters
@@ -874,3 +875,185 @@ fn changing_status_of_vc_asset_with_same_status_should_fail() {
874875 ) ;
875876 } ) ;
876877}
878+
879+ #[ test]
880+ fn asset_over_issuance_should_not_succeed ( ) {
881+ let creator = DID_00 ;
882+ let author = ACCOUNT_00 ;
883+ let capacity = 5u64 ;
884+
885+ let raw_space = [ 2u8 ; 256 ] . to_vec ( ) ;
886+ let space_digest = <Test as frame_system:: Config >:: Hashing :: hash ( & raw_space. encode ( ) [ ..] ) ;
887+ let space_id_digest = <Test as frame_system:: Config >:: Hashing :: hash (
888+ & [ & space_digest. encode ( ) [ ..] , & creator. encode ( ) [ ..] ] . concat ( ) [ ..] ,
889+ ) ;
890+ let space_id: SpaceIdOf = generate_space_id :: < Test > ( & space_id_digest) ;
891+
892+ let auth_digest = <Test as frame_system:: Config >:: Hashing :: hash (
893+ & [ & space_id. encode ( ) [ ..] , & creator. encode ( ) [ ..] ] . concat ( ) [ ..] ,
894+ ) ;
895+
896+ let authorization_id: Ss58Identifier = generate_authorization_id :: < Test > ( & auth_digest) ;
897+
898+ let asset_desc = BoundedVec :: try_from ( [ 72u8 ; 10 ] . to_vec ( ) ) . unwrap ( ) ;
899+ let asset_tag = BoundedVec :: try_from ( [ 72u8 ; 10 ] . to_vec ( ) ) . unwrap ( ) ;
900+ let asset_meta = BoundedVec :: try_from ( [ 72u8 ; 10 ] . to_vec ( ) ) . unwrap ( ) ;
901+ let asset_qty = 10 ;
902+ let asset_value = 10 ;
903+ let asset_type = AssetTypeOf :: MF ;
904+
905+ let entry = AssetInputEntryOf :: < Test > {
906+ asset_desc,
907+ asset_qty,
908+ asset_type,
909+ asset_value,
910+ asset_tag,
911+ asset_meta,
912+ } ;
913+
914+ let digest = <Test as frame_system:: Config >:: Hashing :: hash ( & [ & entry. encode ( ) [ ..] ] . concat ( ) [ ..] ) ;
915+
916+ let issue_id_digest = <Test as frame_system:: Config >:: Hashing :: hash (
917+ & [ & digest. encode ( ) [ ..] , & space_id. encode ( ) [ ..] , & creator. encode ( ) [ ..] ] . concat ( ) [ ..] ,
918+ ) ;
919+
920+ let asset_id: Ss58Identifier = generate_asset_id :: < Test > ( & issue_id_digest) ;
921+
922+ let issue_entry = AssetIssuanceEntryOf :: < Test > {
923+ asset_id,
924+ asset_owner : creator. clone ( ) ,
925+ asset_issuance_qty : Some ( 20 ) ,
926+ } ;
927+
928+ let issue_entry_digest =
929+ <Test as frame_system:: Config >:: Hashing :: hash ( & [ & issue_entry. encode ( ) [ ..] ] . concat ( ) [ ..] ) ;
930+
931+ new_test_ext ( ) . execute_with ( || {
932+ assert_ok ! ( Space :: create(
933+ DoubleOrigin ( author. clone( ) , creator. clone( ) ) . into( ) ,
934+ space_digest,
935+ ) ) ;
936+
937+ assert_ok ! ( Space :: approve( RawOrigin :: Root . into( ) , space_id, capacity) ) ;
938+
939+ assert_ok ! ( Asset :: create(
940+ DoubleOrigin ( author. clone( ) , creator. clone( ) ) . into( ) ,
941+ entry,
942+ digest,
943+ authorization_id. clone( )
944+ ) ) ;
945+
946+ assert_err ! (
947+ Asset :: issue(
948+ DoubleOrigin ( author. clone( ) , creator. clone( ) ) . into( ) ,
949+ issue_entry. clone( ) ,
950+ issue_entry_digest,
951+ authorization_id
952+ ) ,
953+ Error :: <Test >:: OverIssuanceLimit
954+ ) ;
955+ } ) ;
956+ }
957+
958+ #[ test]
959+ fn asset_over_issuance_vc_status_change_should_not_succeed ( ) {
960+ let creator = DID_00 ;
961+ let author = ACCOUNT_00 ;
962+
963+ let capacity = 5u64 ;
964+
965+ let raw_space = [ 2u8 ; 256 ] . to_vec ( ) ;
966+ let space_digest = <Test as frame_system:: Config >:: Hashing :: hash ( & raw_space. encode ( ) [ ..] ) ;
967+ let space_id_digest = <Test as frame_system:: Config >:: Hashing :: hash (
968+ & [ & space_digest. encode ( ) [ ..] , & creator. encode ( ) [ ..] ] . concat ( ) [ ..] ,
969+ ) ;
970+ let space_id: SpaceIdOf = generate_space_id :: < Test > ( & space_id_digest) ;
971+
972+ let auth_digest = <Test as frame_system:: Config >:: Hashing :: hash (
973+ & [ & space_id. encode ( ) [ ..] , & creator. encode ( ) [ ..] ] . concat ( ) [ ..] ,
974+ ) ;
975+
976+ let authorization_id: Ss58Identifier = generate_authorization_id :: < Test > ( & auth_digest) ;
977+
978+ let asset_desc = BoundedVec :: try_from ( [ 72u8 ; 10 ] . to_vec ( ) ) . unwrap ( ) ;
979+ let asset_tag = BoundedVec :: try_from ( [ 72u8 ; 10 ] . to_vec ( ) ) . unwrap ( ) ;
980+ let asset_meta = BoundedVec :: try_from ( [ 72u8 ; 10 ] . to_vec ( ) ) . unwrap ( ) ;
981+ let asset_qty = 10 ;
982+ let asset_value = 10 ;
983+ let asset_type = AssetTypeOf :: MF ;
984+
985+ let entry = AssetInputEntryOf :: < Test > {
986+ asset_desc,
987+ asset_qty,
988+ asset_type,
989+ asset_value,
990+ asset_tag,
991+ asset_meta,
992+ } ;
993+
994+ let digest = <Test as frame_system:: Config >:: Hashing :: hash ( & [ & entry. encode ( ) [ ..] ] . concat ( ) [ ..] ) ;
995+
996+ let issue_id_digest = <Test as frame_system:: Config >:: Hashing :: hash (
997+ & [ & digest. encode ( ) [ ..] , & space_id. encode ( ) [ ..] , & creator. encode ( ) [ ..] ] . concat ( ) [ ..] ,
998+ ) ;
999+
1000+ let asset_id: Ss58Identifier = generate_asset_id :: < Test > ( & issue_id_digest) ;
1001+
1002+ let issue_entry = AssetIssuanceEntryOf :: < Test > {
1003+ asset_id : asset_id. clone ( ) ,
1004+ asset_owner : creator. clone ( ) ,
1005+ asset_issuance_qty : Some ( 30 ) ,
1006+ } ;
1007+
1008+ let issue_entry_digest =
1009+ <Test as frame_system:: Config >:: Hashing :: hash ( & [ & issue_entry. encode ( ) [ ..] ] . concat ( ) [ ..] ) ;
1010+
1011+ let instance_id_digest = <Test as frame_system:: Config >:: Hashing :: hash (
1012+ & [
1013+ & asset_id. encode ( ) [ ..] ,
1014+ & creator. encode ( ) [ ..] ,
1015+ & space_id. encode ( ) [ ..] ,
1016+ & creator. encode ( ) [ ..] ,
1017+ & issue_entry_digest. encode ( ) [ ..] ,
1018+ ]
1019+ . concat ( ) [ ..] ,
1020+ ) ;
1021+
1022+ let instance_id = generate_asset_instance_id :: < Test > ( & instance_id_digest) ;
1023+
1024+ new_test_ext ( ) . execute_with ( || {
1025+ assert_ok ! ( Space :: create(
1026+ DoubleOrigin ( author. clone( ) , creator. clone( ) ) . into( ) ,
1027+ space_digest,
1028+ ) ) ;
1029+
1030+ assert_ok ! ( Space :: approve( RawOrigin :: Root . into( ) , space_id, capacity) ) ;
1031+
1032+ assert_ok ! ( Asset :: vc_create(
1033+ DoubleOrigin ( author. clone( ) , creator. clone( ) ) . into( ) ,
1034+ asset_qty,
1035+ digest,
1036+ authorization_id. clone( )
1037+ ) ) ;
1038+
1039+ assert_err ! (
1040+ Asset :: vc_issue(
1041+ DoubleOrigin ( author. clone( ) , creator. clone( ) ) . into( ) ,
1042+ issue_entry. clone( ) ,
1043+ issue_entry_digest,
1044+ authorization_id
1045+ ) ,
1046+ Error :: <Test >:: OverIssuanceLimit
1047+ ) ;
1048+
1049+ assert_err ! (
1050+ Asset :: vc_status_change(
1051+ DoubleOrigin ( author. clone( ) , creator. clone( ) ) . into( ) ,
1052+ asset_id. clone( ) ,
1053+ Some ( instance_id. clone( ) ) ,
1054+ AssetStatusOf :: INACTIVE
1055+ ) ,
1056+ Error :: <Test >:: AssetInstanceNotFound
1057+ ) ;
1058+ } ) ;
1059+ }
0 commit comments