update_entity_creation_voucher.rs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. use super::*;
  2. #[test]
  3. fn create_entity_creation_voucher_success() {
  4. with_test_externalities(|| {
  5. // Create simple class with default permissions
  6. assert_ok!(create_simple_class(LEAD_ORIGIN, ClassType::Valid));
  7. // Runtime state before tested call
  8. let entity_controller = EntityController::Member(FIRST_MEMBER_ID);
  9. assert!(!entity_creation_voucher_exists(
  10. FIRST_CLASS_ID,
  11. &entity_controller
  12. ));
  13. // Events number before tested call
  14. let number_of_events_before_call = System::events().len();
  15. // Create entities creation voucher for chosen controller
  16. assert_ok!(update_entity_creation_voucher(
  17. LEAD_ORIGIN,
  18. FIRST_CLASS_ID,
  19. entity_controller.clone(),
  20. IndividualEntitiesCreationLimit::get()
  21. ));
  22. // Runtime tested state after call
  23. // Ensure entity creation voucher for chosen controller created succesfully
  24. let entity_voucher = EntityCreationVoucher::new(IndividualEntitiesCreationLimit::get());
  25. assert_eq!(
  26. entity_creation_vouchers(FIRST_CLASS_ID, &entity_controller),
  27. entity_voucher,
  28. );
  29. let entity_creation_voucher_created_event = get_test_event(
  30. RawEvent::EntityCreationVoucherCreated(entity_controller, entity_voucher),
  31. );
  32. // Last event checked
  33. assert_event_success(
  34. entity_creation_voucher_created_event,
  35. number_of_events_before_call + 1,
  36. );
  37. })
  38. }
  39. #[test]
  40. fn update_entity_creation_voucher_success() {
  41. with_test_externalities(|| {
  42. // Create simple class with default permissions
  43. assert_ok!(create_simple_class(LEAD_ORIGIN, ClassType::Valid));
  44. let actor = Actor::Member(FIRST_MEMBER_ID);
  45. // Update class permissions to force any member be available to create entities
  46. assert_ok!(update_class_permissions(
  47. LEAD_ORIGIN,
  48. FIRST_CLASS_ID,
  49. Some(true),
  50. None,
  51. None,
  52. None
  53. ));
  54. let entity_controller = EntityController::from_actor(&actor);
  55. // Create entity
  56. assert_ok!(create_entity(FIRST_MEMBER_ORIGIN, FIRST_CLASS_ID, actor));
  57. // Runtime state before tested call
  58. let mut entity_creation_voucher =
  59. entity_creation_vouchers(FIRST_CLASS_ID, &entity_controller);
  60. // Events number before tested call
  61. let number_of_events_before_call = System::events().len();
  62. // Update entities creation voucher for chosen controller
  63. let new_maximum_entities_count = entity_creation_voucher.maximum_entities_count - 1;
  64. assert_ok!(update_entity_creation_voucher(
  65. LEAD_ORIGIN,
  66. FIRST_CLASS_ID,
  67. entity_controller.clone(),
  68. new_maximum_entities_count
  69. ));
  70. // Runtime tested state after call
  71. // Ensure entity creation voucher for chosen controller updated succesfully
  72. entity_creation_voucher.set_maximum_entities_count(new_maximum_entities_count);
  73. assert_eq!(
  74. entity_creation_vouchers(FIRST_CLASS_ID, &entity_controller),
  75. entity_creation_voucher
  76. );
  77. let entity_creation_voucher_created_event = get_test_event(
  78. RawEvent::EntityCreationVoucherUpdated(entity_controller, entity_creation_voucher),
  79. );
  80. // Last event checked
  81. assert_event_success(
  82. entity_creation_voucher_created_event,
  83. number_of_events_before_call + 1,
  84. );
  85. })
  86. }
  87. #[test]
  88. fn update_entity_creation_voucher_lead_auth_failed() {
  89. with_test_externalities(|| {
  90. // Create simple class with default permissions
  91. assert_ok!(create_simple_class(LEAD_ORIGIN, ClassType::Valid));
  92. // Runtime state before tested call
  93. let entity_controller = EntityController::Member(FIRST_MEMBER_ID);
  94. // Events number before tested call
  95. let number_of_events_before_call = System::events().len();
  96. // Make an attempt to create entities creation voucher for chosen controller under non lead origin
  97. let update_entity_creation_voucher_result = update_entity_creation_voucher(
  98. FIRST_MEMBER_ORIGIN,
  99. FIRST_CLASS_ID,
  100. entity_controller,
  101. IndividualEntitiesCreationLimit::get(),
  102. );
  103. // Failure checked
  104. assert_failure(
  105. update_entity_creation_voucher_result,
  106. Error::<Runtime>::LeadAuthFailed,
  107. number_of_events_before_call,
  108. );
  109. })
  110. }
  111. #[test]
  112. fn update_entity_creation_voucher_class_does_not_exist() {
  113. with_test_externalities(|| {
  114. // Runtime state before tested call
  115. let entity_controller = EntityController::Member(FIRST_MEMBER_ID);
  116. // Events number before tested call
  117. let number_of_events_before_call = System::events().len();
  118. // Make an attempt to create entities creation voucher for chosen controller and non existent class
  119. let update_entity_creation_voucher_result = update_entity_creation_voucher(
  120. LEAD_ORIGIN,
  121. UNKNOWN_CLASS_ID,
  122. entity_controller,
  123. IndividualEntitiesCreationLimit::get(),
  124. );
  125. // Failure checked
  126. assert_failure(
  127. update_entity_creation_voucher_result,
  128. Error::<Runtime>::ClassNotFound,
  129. number_of_events_before_call,
  130. );
  131. })
  132. }
  133. #[test]
  134. fn update_entity_creation_voucher_individual_creation_limit_exceed() {
  135. with_test_externalities(|| {
  136. // Create simple class with default permissions
  137. assert_ok!(create_simple_class(LEAD_ORIGIN, ClassType::Valid));
  138. // Runtime state before tested call
  139. let entity_controller = EntityController::Member(FIRST_MEMBER_ID);
  140. // Events number before tested call
  141. let number_of_events_before_call = System::events().len();
  142. // Make an attempt to create entities creation voucher for chosen controller with maximum_entities_count
  143. // value that exceeds IndividualEntitiesCreationLimit
  144. let update_entity_creation_voucher_result = update_entity_creation_voucher(
  145. LEAD_ORIGIN,
  146. FIRST_CLASS_ID,
  147. entity_controller,
  148. IndividualEntitiesCreationLimit::get() + 1,
  149. );
  150. // Failure checked
  151. assert_failure(
  152. update_entity_creation_voucher_result,
  153. Error::<Runtime>::NumberOfClassEntitiesPerActorConstraintViolated,
  154. number_of_events_before_call,
  155. );
  156. })
  157. }