|
@@ -1,8 +1,35 @@
|
|
|
#![cfg(test)]
|
|
|
|
|
|
use super::mock::*;
|
|
|
+use crate::data_object_type_registry::StorageBureaucracy;
|
|
|
+use system::{self, EventRecord, Phase, RawOrigin};
|
|
|
|
|
|
-use system::{self, EventRecord, Phase};
|
|
|
+const DEFAULT_LEADER_ACCOUNT_ID: u64 = 1;
|
|
|
+const DEFAULT_LEADER_MEMBER_ID: u64 = 1;
|
|
|
+
|
|
|
+struct SetLeadFixture;
|
|
|
+impl SetLeadFixture {
|
|
|
+ fn set_default_lead() {
|
|
|
+ let set_lead_result = <StorageBureaucracy<Test>>::set_lead(
|
|
|
+ RawOrigin::Root.into(),
|
|
|
+ DEFAULT_LEADER_MEMBER_ID,
|
|
|
+ DEFAULT_LEADER_ACCOUNT_ID,
|
|
|
+ );
|
|
|
+ assert!(set_lead_result.is_ok());
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+fn get_last_data_object_type_id() -> u64 {
|
|
|
+ let dot_id = match System::events().last().unwrap().event {
|
|
|
+ MetaEvent::data_object_type_registry(
|
|
|
+ data_object_type_registry::RawEvent::DataObjectTypeRegistered(dot_id),
|
|
|
+ ) => dot_id,
|
|
|
+ _ => 0xdeadbeefu64, // unlikely value
|
|
|
+ };
|
|
|
+ assert_ne!(dot_id, 0xdeadbeefu64);
|
|
|
+
|
|
|
+ dot_id
|
|
|
+}
|
|
|
|
|
|
#[test]
|
|
|
fn initial_state() {
|
|
@@ -17,12 +44,14 @@ fn initial_state() {
|
|
|
#[test]
|
|
|
fn succeed_register() {
|
|
|
with_default_mock_builder(|| {
|
|
|
+ SetLeadFixture::set_default_lead();
|
|
|
+
|
|
|
let data: TestDataObjectType = TestDataObjectType {
|
|
|
description: "foo".as_bytes().to_vec(),
|
|
|
active: false,
|
|
|
};
|
|
|
let res = TestDataObjectTypeRegistry::register_data_object_type(
|
|
|
- system::RawOrigin::Root.into(),
|
|
|
+ RawOrigin::Signed(DEFAULT_LEADER_ACCOUNT_ID).into(),
|
|
|
data,
|
|
|
);
|
|
|
assert!(res.is_ok());
|
|
@@ -30,26 +59,108 @@ fn succeed_register() {
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
-fn update_existing() {
|
|
|
+fn activate_data_object_type_fails_with_invalid_lead() {
|
|
|
with_default_mock_builder(|| {
|
|
|
+ SetLeadFixture::set_default_lead();
|
|
|
+
|
|
|
// First register a type
|
|
|
let data: TestDataObjectType = TestDataObjectType {
|
|
|
description: "foo".as_bytes().to_vec(),
|
|
|
active: false,
|
|
|
};
|
|
|
let id_res = TestDataObjectTypeRegistry::register_data_object_type(
|
|
|
- system::RawOrigin::Root.into(),
|
|
|
+ RawOrigin::Signed(DEFAULT_LEADER_ACCOUNT_ID).into(),
|
|
|
data,
|
|
|
);
|
|
|
assert!(id_res.is_ok());
|
|
|
|
|
|
- let dot_id = match System::events().last().unwrap().event {
|
|
|
- MetaEvent::data_object_type_registry(
|
|
|
- data_object_type_registry::RawEvent::DataObjectTypeRegistered(dot_id),
|
|
|
- ) => dot_id,
|
|
|
- _ => 0xdeadbeefu64, // unlikely value
|
|
|
+ let dot_id = get_last_data_object_type_id();
|
|
|
+
|
|
|
+ let invalid_leader_account_id = 2;
|
|
|
+ let res = TestDataObjectTypeRegistry::activate_data_object_type(
|
|
|
+ RawOrigin::Signed(invalid_leader_account_id).into(),
|
|
|
+ dot_id,
|
|
|
+ );
|
|
|
+ assert_eq!(res, Err(bureaucracy::Error::IsNotLeadAccount.into()));
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+#[test]
|
|
|
+fn deactivate_data_object_type_fails_with_invalid_lead() {
|
|
|
+ with_default_mock_builder(|| {
|
|
|
+ SetLeadFixture::set_default_lead();
|
|
|
+
|
|
|
+ // First register a type
|
|
|
+ let data: TestDataObjectType = TestDataObjectType {
|
|
|
+ description: "foo".as_bytes().to_vec(),
|
|
|
+ active: true,
|
|
|
};
|
|
|
- assert_ne!(dot_id, 0xdeadbeefu64);
|
|
|
+ let id_res = TestDataObjectTypeRegistry::register_data_object_type(
|
|
|
+ RawOrigin::Signed(DEFAULT_LEADER_ACCOUNT_ID).into(),
|
|
|
+ data,
|
|
|
+ );
|
|
|
+ assert!(id_res.is_ok());
|
|
|
+
|
|
|
+ let dot_id = get_last_data_object_type_id();
|
|
|
+
|
|
|
+ let invalid_leader_account_id = 2;
|
|
|
+ let res = TestDataObjectTypeRegistry::deactivate_data_object_type(
|
|
|
+ RawOrigin::Signed(invalid_leader_account_id).into(),
|
|
|
+ dot_id,
|
|
|
+ );
|
|
|
+ assert_eq!(res, Err(bureaucracy::Error::IsNotLeadAccount.into()));
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+#[test]
|
|
|
+fn update_data_object_type_fails_with_invalid_lead() {
|
|
|
+ with_default_mock_builder(|| {
|
|
|
+ SetLeadFixture::set_default_lead();
|
|
|
+
|
|
|
+ // First register a type
|
|
|
+ let data: TestDataObjectType = TestDataObjectType {
|
|
|
+ description: "foo".as_bytes().to_vec(),
|
|
|
+ active: false,
|
|
|
+ };
|
|
|
+ let id_res = TestDataObjectTypeRegistry::register_data_object_type(
|
|
|
+ RawOrigin::Signed(DEFAULT_LEADER_ACCOUNT_ID).into(),
|
|
|
+ data,
|
|
|
+ );
|
|
|
+ assert!(id_res.is_ok());
|
|
|
+
|
|
|
+ let dot_id = get_last_data_object_type_id();
|
|
|
+ let updated1: TestDataObjectType = TestDataObjectType {
|
|
|
+ description: "bar".as_bytes().to_vec(),
|
|
|
+ active: false,
|
|
|
+ };
|
|
|
+
|
|
|
+ let invalid_leader_account_id = 2;
|
|
|
+ let res = TestDataObjectTypeRegistry::update_data_object_type(
|
|
|
+ RawOrigin::Signed(invalid_leader_account_id).into(),
|
|
|
+ dot_id,
|
|
|
+ updated1,
|
|
|
+ );
|
|
|
+ assert_eq!(res, Err(bureaucracy::Error::IsNotLeadAccount.into()));
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+#[test]
|
|
|
+fn update_existing() {
|
|
|
+ with_default_mock_builder(|| {
|
|
|
+ SetLeadFixture::set_default_lead();
|
|
|
+
|
|
|
+ // First register a type
|
|
|
+ let data: TestDataObjectType = TestDataObjectType {
|
|
|
+ description: "foo".as_bytes().to_vec(),
|
|
|
+ active: false,
|
|
|
+ };
|
|
|
+ let id_res = TestDataObjectTypeRegistry::register_data_object_type(
|
|
|
+ RawOrigin::Signed(DEFAULT_LEADER_ACCOUNT_ID).into(),
|
|
|
+ data,
|
|
|
+ );
|
|
|
+ assert!(id_res.is_ok());
|
|
|
+
|
|
|
+ let dot_id = get_last_data_object_type_id();
|
|
|
|
|
|
// Now update it with new data - we need the ID to be the same as in
|
|
|
// returned by the previous call. First, though, try and fail with a bad ID
|
|
@@ -58,7 +169,7 @@ fn update_existing() {
|
|
|
active: false,
|
|
|
};
|
|
|
let res = TestDataObjectTypeRegistry::update_data_object_type(
|
|
|
- system::RawOrigin::Root.into(),
|
|
|
+ RawOrigin::Signed(DEFAULT_LEADER_ACCOUNT_ID).into(),
|
|
|
dot_id + 1,
|
|
|
updated1,
|
|
|
);
|
|
@@ -70,7 +181,7 @@ fn update_existing() {
|
|
|
active: false,
|
|
|
};
|
|
|
let res = TestDataObjectTypeRegistry::update_data_object_type(
|
|
|
- system::RawOrigin::Root.into(),
|
|
|
+ RawOrigin::Signed(DEFAULT_LEADER_ACCOUNT_ID).into(),
|
|
|
dot_id,
|
|
|
updated3,
|
|
|
);
|
|
@@ -88,16 +199,34 @@ fn update_existing() {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+#[test]
|
|
|
+fn register_data_object_type_failed_with_no_lead() {
|
|
|
+ with_default_mock_builder(|| {
|
|
|
+ // First register a type
|
|
|
+ let data: TestDataObjectType = TestDataObjectType {
|
|
|
+ description: "foo".as_bytes().to_vec(),
|
|
|
+ active: false,
|
|
|
+ };
|
|
|
+ let id_res = TestDataObjectTypeRegistry::register_data_object_type(
|
|
|
+ RawOrigin::Signed(DEFAULT_LEADER_ACCOUNT_ID).into(),
|
|
|
+ data,
|
|
|
+ );
|
|
|
+ assert!(!id_res.is_ok());
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
#[test]
|
|
|
fn activate_existing() {
|
|
|
with_default_mock_builder(|| {
|
|
|
+ SetLeadFixture::set_default_lead();
|
|
|
+
|
|
|
// First register a type
|
|
|
let data: TestDataObjectType = TestDataObjectType {
|
|
|
description: "foo".as_bytes().to_vec(),
|
|
|
active: false,
|
|
|
};
|
|
|
let id_res = TestDataObjectTypeRegistry::register_data_object_type(
|
|
|
- system::RawOrigin::Root.into(),
|
|
|
+ RawOrigin::Signed(DEFAULT_LEADER_ACCOUNT_ID).into(),
|
|
|
data,
|
|
|
);
|
|
|
assert!(id_res.is_ok());
|
|
@@ -121,7 +250,7 @@ fn activate_existing() {
|
|
|
|
|
|
// Now activate the data object type
|
|
|
let res = TestDataObjectTypeRegistry::activate_data_object_type(
|
|
|
- system::RawOrigin::Root.into(),
|
|
|
+ RawOrigin::Signed(DEFAULT_LEADER_ACCOUNT_ID).into(),
|
|
|
TEST_FIRST_DATA_OBJECT_TYPE_ID,
|
|
|
);
|
|
|
assert!(res.is_ok());
|
|
@@ -145,7 +274,7 @@ fn activate_existing() {
|
|
|
|
|
|
// Deactivate again.
|
|
|
let res = TestDataObjectTypeRegistry::deactivate_data_object_type(
|
|
|
- system::RawOrigin::Root.into(),
|
|
|
+ RawOrigin::Signed(DEFAULT_LEADER_ACCOUNT_ID).into(),
|
|
|
TEST_FIRST_DATA_OBJECT_TYPE_ID,
|
|
|
);
|
|
|
assert!(res.is_ok());
|