update_class_permissions.rs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. use super::*;
  2. #[test]
  3. fn update_class_permissions_success() {
  4. with_test_externalities(|| {
  5. // Create simple class with default permissions
  6. assert_ok!(create_simple_class(LEAD_ORIGIN, ClassType::Valid));
  7. // Add first curator group
  8. assert_ok!(add_curator_group(LEAD_ORIGIN));
  9. // Add second curator group
  10. assert_ok!(add_curator_group(LEAD_ORIGIN));
  11. // Runtime tested state before call
  12. let mut class_permissions = ClassPermissions::default();
  13. // Ensure class permissions of newly created Class are equal to default ones
  14. assert_eq!(
  15. class_by_id(FIRST_CLASS_ID).get_permissions(),
  16. class_permissions
  17. );
  18. // Events number before tested call
  19. let number_of_events_before_call = System::events().len();
  20. let maintainers =
  21. BTreeSet::from_iter(vec![FIRST_CURATOR_GROUP_ID, SECOND_CURATOR_GROUP_ID]);
  22. // Update class permissions
  23. assert_ok!(update_class_permissions(
  24. LEAD_ORIGIN,
  25. FIRST_CLASS_ID,
  26. None,
  27. Some(true),
  28. None,
  29. Some(maintainers.clone())
  30. ));
  31. // Runtime tested state after call
  32. // Ensure class permissions updated succesfully
  33. *class_permissions.get_maintainers_mut() = maintainers;
  34. class_permissions.set_entity_creation_blocked(true);
  35. assert_eq!(
  36. class_by_id(FIRST_CLASS_ID).get_permissions(),
  37. class_permissions
  38. );
  39. let class_permissions_updated_event =
  40. get_test_event(RawEvent::ClassPermissionsUpdated(FIRST_CLASS_ID));
  41. // Event checked
  42. assert_event_success(
  43. class_permissions_updated_event,
  44. number_of_events_before_call + 1,
  45. );
  46. })
  47. }
  48. #[test]
  49. fn update_class_permissions_lead_auth_failed() {
  50. with_test_externalities(|| {
  51. // Create simple class with default permissions
  52. assert_ok!(create_simple_class(LEAD_ORIGIN, ClassType::Valid));
  53. // Events number before tested call
  54. let number_of_events_before_call = System::events().len();
  55. // Make an attempt to update class permissions under non lead origin
  56. let update_class_permissions_result = update_class_permissions(
  57. FIRST_MEMBER_ORIGIN,
  58. FIRST_CLASS_ID,
  59. None,
  60. Some(true),
  61. None,
  62. None,
  63. );
  64. // Failure checked
  65. assert_failure(
  66. update_class_permissions_result,
  67. Error::<Runtime>::LeadAuthFailed,
  68. number_of_events_before_call,
  69. );
  70. })
  71. }
  72. #[test]
  73. fn update_class_permissions_of_non_existent_class() {
  74. with_test_externalities(|| {
  75. // Events number before tested call
  76. let number_of_events_before_call = System::events().len();
  77. // Make an attempt to update class permissions of non existent class
  78. let update_class_permissions_result =
  79. update_class_permissions(LEAD_ORIGIN, FIRST_CLASS_ID, None, Some(true), None, None);
  80. // Failure checked
  81. assert_failure(
  82. update_class_permissions_result,
  83. Error::<Runtime>::ClassNotFound,
  84. number_of_events_before_call,
  85. );
  86. })
  87. }
  88. #[test]
  89. fn update_class_permissions_curator_group_does_not_exist() {
  90. with_test_externalities(|| {
  91. // Create simple class with default permissions
  92. assert_ok!(create_simple_class(LEAD_ORIGIN, ClassType::Valid));
  93. // Events number before tested call
  94. let number_of_events_before_call = System::events().len();
  95. let maintainers = BTreeSet::from_iter(vec![UNKNOWN_CURATOR_GROUP_ID]);
  96. // Make an attempt to update class permissions, providing curator group maintainers which aren`t exist in runtime yet
  97. let update_class_permissions_result = update_class_permissions(
  98. LEAD_ORIGIN,
  99. FIRST_CLASS_ID,
  100. None,
  101. Some(true),
  102. None,
  103. Some(maintainers),
  104. );
  105. // Failure checked
  106. assert_failure(
  107. update_class_permissions_result,
  108. Error::<Runtime>::CuratorGroupDoesNotExist,
  109. number_of_events_before_call,
  110. );
  111. })
  112. }
  113. #[test]
  114. fn update_class_permissions_maintainers_limit_reached() {
  115. with_test_externalities(|| {
  116. // Create simple class with default permissions
  117. assert_ok!(create_simple_class(LEAD_ORIGIN, ClassType::Valid));
  118. // Add curator groups, which total number exceeds MaxNumberOfMaintainersPerClass runtime limit
  119. // and initialize class maintainers set with their respective ids
  120. let mut maintainers = BTreeSet::new();
  121. (1..=(MaxNumberOfMaintainersPerClass::get() + 1))
  122. .into_iter()
  123. .for_each(|curator_group_id| {
  124. assert_ok!(add_curator_group(LEAD_ORIGIN));
  125. maintainers.insert(curator_group_id as CuratorGroupId);
  126. });
  127. // Events number before tested call
  128. let number_of_events_before_call = System::events().len();
  129. // Make an attempt to update class permissions, providing curator group maintainers,
  130. // which total number exceeds MaxNumberOfMaintainersPerClass runtime limit
  131. let update_class_permissions_result = update_class_permissions(
  132. LEAD_ORIGIN,
  133. FIRST_CLASS_ID,
  134. None,
  135. Some(true),
  136. None,
  137. Some(maintainers),
  138. );
  139. // Failure checked
  140. assert_failure(
  141. update_class_permissions_result,
  142. Error::<Runtime>::ClassMaintainersLimitReached,
  143. number_of_events_before_call,
  144. );
  145. })
  146. }