123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653 |
- #![cfg(test)]
- use super::curators;
- use super::mock::*;
- use crate::sp_api_hidden_includes_decl_storage::hidden_include::traits::Currency;
- use crate::*;
- use frame_support::{assert_err, assert_ok};
- #[test]
- fn successful_channel_deletion() {
- with_default_mock_builder(|| {
- // Run to block one to see emitted events
- run_to_block(1);
- // create an account with enought balance
- let _ = balances::Module::<Test>::deposit_creating(
- &FIRST_MEMBER_ORIGIN,
- <Test as balances::Trait>::Balance::from(100u32),
- );
- // 3 assets
- let assets = NewAssets::<Test>::Upload(CreationUploadParameters {
- object_creation_list: vec![
- DataObjectCreationParameters {
- size: 3,
- ipfs_content_id: b"first".to_vec(),
- },
- DataObjectCreationParameters {
- size: 3,
- ipfs_content_id: b"second".to_vec(),
- },
- DataObjectCreationParameters {
- size: 3,
- ipfs_content_id: b"third".to_vec(),
- },
- ],
- expected_data_size_fee: storage::DataObjectPerMegabyteFee::<Test>::get(),
- });
- let channel_id = NextChannelId::<Test>::get();
- // create channel
- create_channel_mock(
- FIRST_MEMBER_ORIGIN,
- ContentActor::Member(FIRST_MEMBER_ID),
- ChannelCreationParametersRecord {
- assets: assets,
- meta: vec![],
- reward_account: None,
- },
- Ok(()),
- );
- // attempt to delete channel with non zero assets
- delete_channel_mock(
- FIRST_MEMBER_ORIGIN,
- ContentActor::Member(FIRST_MEMBER_ID),
- channel_id,
- Err(Error::<Test>::ChannelContainsAssets.into()),
- );
- // delete assets
- let assets_to_delete = [0u64, 1u64, 2u64]
- .iter()
- .map(|&x| x)
- .collect::<BTreeSet<_>>();
- // delete channel assets
- delete_channel_assets_mock(
- FIRST_MEMBER_ORIGIN,
- ContentActor::Member(FIRST_MEMBER_ID),
- channel_id,
- assets_to_delete,
- Ok(()),
- );
- // successful deletion
- delete_channel_mock(
- FIRST_MEMBER_ORIGIN,
- ContentActor::Member(FIRST_MEMBER_ID),
- channel_id,
- Ok(()),
- );
- })
- }
- #[test]
- fn successful_channel_assets_deletion() {
- with_default_mock_builder(|| {
- // Run to block one to see emitted events
- run_to_block(1);
- // create an account with enought balance
- let _ = balances::Module::<Test>::deposit_creating(
- &FIRST_MEMBER_ORIGIN,
- <Test as balances::Trait>::Balance::from(100u32),
- );
- // 3 assets
- let assets = NewAssets::<Test>::Upload(CreationUploadParameters {
- object_creation_list: vec![
- DataObjectCreationParameters {
- size: 3,
- ipfs_content_id: b"first".to_vec(),
- },
- DataObjectCreationParameters {
- size: 3,
- ipfs_content_id: b"second".to_vec(),
- },
- DataObjectCreationParameters {
- size: 3,
- ipfs_content_id: b"third".to_vec(),
- },
- ],
- expected_data_size_fee: storage::DataObjectPerMegabyteFee::<Test>::get(),
- });
- let channel_id = NextChannelId::<Test>::get();
- // create channel
- create_channel_mock(
- FIRST_MEMBER_ORIGIN,
- ContentActor::Member(FIRST_MEMBER_ID),
- ChannelCreationParametersRecord {
- assets: assets,
- meta: vec![],
- reward_account: None,
- },
- Ok(()),
- );
- // delete assets
- let assets_to_delete = [0u64, 1u64].iter().map(|&x| x).collect::<BTreeSet<_>>();
- // delete channel assets
- delete_channel_assets_mock(
- FIRST_MEMBER_ORIGIN,
- ContentActor::Member(FIRST_MEMBER_ID),
- channel_id,
- assets_to_delete,
- Ok(()),
- );
- })
- }
- #[test]
- fn succesful_channel_update() {
- with_default_mock_builder(|| {
- // Run to block one to see emitted events
- run_to_block(1);
- // create an account with enought balance
- let _ = balances::Module::<Test>::deposit_creating(
- &FIRST_MEMBER_ORIGIN,
- <Test as balances::Trait>::Balance::from(100u32),
- );
- // 2 + 1 assets to be uploaded
- let assets = NewAssets::<Test>::Upload(CreationUploadParameters {
- object_creation_list: vec![
- DataObjectCreationParameters {
- size: 3,
- ipfs_content_id: b"first".to_vec(),
- },
- DataObjectCreationParameters {
- size: 3,
- ipfs_content_id: b"second".to_vec(),
- },
- ],
- expected_data_size_fee: storage::DataObjectPerMegabyteFee::<Test>::get(),
- });
- let new_assets = NewAssets::<Test>::Upload(CreationUploadParameters {
- object_creation_list: vec![
- DataObjectCreationParameters {
- size: 3,
- ipfs_content_id: b"first".to_vec(),
- },
- DataObjectCreationParameters {
- size: 3,
- ipfs_content_id: b"second".to_vec(),
- },
- ],
- expected_data_size_fee: storage::DataObjectPerMegabyteFee::<Test>::get(),
- });
- let channel_id = NextChannelId::<Test>::get();
- // create channel
- create_channel_mock(
- FIRST_MEMBER_ORIGIN,
- ContentActor::Member(FIRST_MEMBER_ID),
- ChannelCreationParametersRecord {
- assets: assets,
- meta: vec![],
- reward_account: None,
- },
- Ok(()),
- );
- // update channel
- update_channel_mock(
- FIRST_MEMBER_ORIGIN,
- ContentActor::Member(FIRST_MEMBER_ID),
- channel_id,
- ChannelUpdateParametersRecord {
- assets: Some(new_assets),
- new_meta: None,
- reward_account: None,
- },
- Ok(()),
- );
- // update with 0 assets
- update_channel_mock(
- FIRST_MEMBER_ORIGIN,
- ContentActor::Member(FIRST_MEMBER_ID),
- channel_id,
- ChannelUpdateParametersRecord {
- assets: None,
- new_meta: None,
- reward_account: None,
- },
- Ok(()),
- );
- })
- }
- #[test]
- fn succesful_channel_creation() {
- with_default_mock_builder(|| {
- // Run to block one to see emitted events
- run_to_block(1);
- // create an account with enought balance
- let _ = balances::Module::<Test>::deposit_creating(
- &FIRST_MEMBER_ORIGIN,
- <Test as balances::Trait>::Balance::from(100u32),
- );
- // 3 assets to be uploaded
- let assets = NewAssets::<Test>::Upload(CreationUploadParameters {
- object_creation_list: vec![
- DataObjectCreationParameters {
- size: 3,
- ipfs_content_id: b"first".to_vec(),
- },
- DataObjectCreationParameters {
- size: 3,
- ipfs_content_id: b"second".to_vec(),
- },
- DataObjectCreationParameters {
- size: 3,
- ipfs_content_id: b"third".to_vec(),
- },
- ],
- expected_data_size_fee: storage::DataObjectPerMegabyteFee::<Test>::get(),
- });
- // create channel
- create_channel_mock(
- FIRST_MEMBER_ORIGIN,
- ContentActor::Member(FIRST_MEMBER_ID),
- ChannelCreationParametersRecord {
- assets: assets,
- meta: vec![],
- reward_account: None,
- },
- Ok(()),
- );
- })
- }
- #[test]
- fn lead_cannot_create_channel() {
- with_default_mock_builder(|| {
- assert_err!(
- Content::create_channel(
- Origin::signed(LEAD_ORIGIN),
- ContentActor::Lead,
- ChannelCreationParametersRecord {
- assets: NewAssets::<Test>::Urls(vec![]),
- meta: vec![],
- reward_account: None,
- }
- ),
- Error::<Test>::ActorCannotOwnChannel
- );
- })
- }
- #[test]
- fn curator_owned_channels() {
- with_default_mock_builder(|| {
- // Run to block one to see emitted events
- run_to_block(1);
- // Curator group doesn't exist yet
- assert_err!(
- Content::create_channel(
- Origin::signed(FIRST_CURATOR_ORIGIN),
- ContentActor::Curator(FIRST_CURATOR_GROUP_ID, FIRST_CURATOR_ID),
- ChannelCreationParametersRecord {
- assets: NewAssets::<Test>::Urls(vec![]),
- meta: vec![],
- reward_account: None,
- }
- ),
- Error::<Test>::CuratorGroupIsNotActive
- );
- let group_id = curators::add_curator_to_new_group(FIRST_CURATOR_ID);
- assert_eq!(FIRST_CURATOR_GROUP_ID, group_id);
- // Curator from wrong group
- assert_err!(
- Content::create_channel(
- Origin::signed(SECOND_CURATOR_ORIGIN),
- ContentActor::Curator(FIRST_CURATOR_GROUP_ID, SECOND_CURATOR_ID),
- ChannelCreationParametersRecord {
- assets: NewAssets::<Test>::Urls(vec![]),
- meta: vec![],
- reward_account: None,
- }
- ),
- Error::<Test>::CuratorIsNotAMemberOfGivenCuratorGroup
- );
- // Curator in correct active group, but wrong origin
- assert_err!(
- Content::create_channel(
- Origin::signed(SECOND_CURATOR_ORIGIN),
- ContentActor::Curator(FIRST_CURATOR_GROUP_ID, FIRST_CURATOR_ID),
- ChannelCreationParametersRecord {
- assets: NewAssets::<Test>::Urls(vec![]),
- meta: vec![],
- reward_account: None,
- }
- ),
- Error::<Test>::CuratorAuthFailed
- );
- let channel_id = Content::next_channel_id();
- // Curator in correct active group, with correct origin
- assert_ok!(Content::create_channel(
- Origin::signed(FIRST_CURATOR_ORIGIN),
- ContentActor::Curator(FIRST_CURATOR_GROUP_ID, FIRST_CURATOR_ID),
- ChannelCreationParametersRecord {
- assets: NewAssets::<Test>::Urls(vec![]),
- meta: vec![],
- reward_account: None,
- }
- ));
- assert_eq!(
- System::events().last().unwrap().event,
- MetaEvent::content(RawEvent::ChannelCreated(
- ContentActor::Curator(FIRST_CURATOR_GROUP_ID, FIRST_CURATOR_ID),
- channel_id,
- ChannelRecord {
- owner: ChannelOwner::CuratorGroup(FIRST_CURATOR_GROUP_ID),
- is_censored: false,
- reward_account: None,
- deletion_prize_source_account_id: FIRST_CURATOR_ORIGIN,
- num_assets: 0,
- num_videos: 0,
- },
- ChannelCreationParametersRecord {
- assets: NewAssets::<Test>::Urls(vec![]),
- meta: vec![],
- reward_account: None,
- }
- ))
- );
- // Curator can update channel
- assert_ok!(Content::update_channel(
- Origin::signed(FIRST_CURATOR_ORIGIN),
- ContentActor::Curator(FIRST_CURATOR_GROUP_ID, FIRST_CURATOR_ID),
- channel_id,
- ChannelUpdateParametersRecord {
- assets: None,
- new_meta: None,
- reward_account: None,
- }
- ));
- // Lead can update curator owned channels
- assert_ok!(Content::update_channel(
- Origin::signed(LEAD_ORIGIN),
- ContentActor::Lead,
- channel_id,
- ChannelUpdateParametersRecord {
- assets: None,
- new_meta: None,
- reward_account: None,
- }
- ));
- })
- }
- #[test]
- fn member_owned_channels() {
- with_default_mock_builder(|| {
- // Run to block one to see emitted events
- run_to_block(1);
- // Not a member
- assert_err!(
- Content::create_channel(
- Origin::signed(UNKNOWN_ORIGIN),
- ContentActor::Member(MEMBERS_COUNT + 1),
- ChannelCreationParametersRecord {
- assets: NewAssets::<Test>::Urls(vec![]),
- meta: vec![],
- reward_account: None,
- }
- ),
- Error::<Test>::MemberAuthFailed
- );
- let channel_id_1 = Content::next_channel_id();
- // Member can create the channel
- assert_ok!(Content::create_channel(
- Origin::signed(FIRST_MEMBER_ORIGIN),
- ContentActor::Member(FIRST_MEMBER_ID),
- ChannelCreationParametersRecord {
- assets: NewAssets::<Test>::Urls(vec![]),
- meta: vec![],
- reward_account: None,
- }
- ));
- assert_eq!(
- System::events().last().unwrap().event,
- MetaEvent::content(RawEvent::ChannelCreated(
- ContentActor::Member(FIRST_MEMBER_ID),
- channel_id_1,
- ChannelRecord {
- owner: ChannelOwner::Member(FIRST_MEMBER_ID),
- is_censored: false,
- reward_account: None,
- deletion_prize_source_account_id: FIRST_MEMBER_ORIGIN,
- num_assets: 0,
- num_videos: 0,
- },
- ChannelCreationParametersRecord {
- assets: NewAssets::<Test>::Urls(vec![]),
- meta: vec![],
- reward_account: None,
- }
- ))
- );
- let channel_id_2 = Content::next_channel_id();
- // Member can create the channel
- assert_ok!(Content::create_channel(
- Origin::signed(SECOND_MEMBER_ORIGIN),
- ContentActor::Member(SECOND_MEMBER_ID),
- ChannelCreationParametersRecord {
- assets: NewAssets::<Test>::Urls(vec![]),
- meta: vec![],
- reward_account: None,
- }
- ));
- assert_eq!(
- System::events().last().unwrap().event,
- MetaEvent::content(RawEvent::ChannelCreated(
- ContentActor::Member(SECOND_MEMBER_ID),
- channel_id_2,
- ChannelRecord {
- owner: ChannelOwner::Member(SECOND_MEMBER_ID),
- is_censored: false,
- reward_account: None,
- deletion_prize_source_account_id: SECOND_MEMBER_ORIGIN,
- num_assets: 0,
- num_videos: 0,
- },
- ChannelCreationParametersRecord {
- assets: NewAssets::<Test>::Urls(vec![]),
- meta: vec![],
- reward_account: None,
- }
- ))
- );
- // Update channel
- assert_ok!(Content::update_channel(
- Origin::signed(FIRST_MEMBER_ORIGIN),
- ContentActor::Member(FIRST_MEMBER_ID),
- channel_id_1,
- ChannelUpdateParametersRecord {
- assets: None,
- new_meta: None,
- reward_account: None,
- }
- ));
- assert_eq!(
- System::events().last().unwrap().event,
- MetaEvent::content(RawEvent::ChannelUpdated(
- ContentActor::Member(FIRST_MEMBER_ID),
- channel_id_1,
- ChannelRecord {
- owner: ChannelOwner::Member(FIRST_MEMBER_ID),
- is_censored: false,
- reward_account: None,
- deletion_prize_source_account_id: FIRST_MEMBER_ORIGIN,
- num_assets: 0,
- num_videos: 0,
- },
- ChannelUpdateParametersRecord {
- assets: None,
- new_meta: None,
- reward_account: None,
- }
- ))
- );
- // Member cannot update a channel they do not own
- assert_err!(
- Content::update_channel(
- Origin::signed(FIRST_MEMBER_ORIGIN),
- ContentActor::Member(FIRST_MEMBER_ID),
- channel_id_2,
- ChannelUpdateParametersRecord {
- assets: None,
- new_meta: None,
- reward_account: None,
- }
- ),
- Error::<Test>::ActorNotAuthorized
- );
- })
- }
- #[test]
- fn channel_censoring() {
- with_default_mock_builder(|| {
- // Run to block one to see emitted events
- run_to_block(1);
- let channel_id = Content::next_channel_id();
- assert_ok!(Content::create_channel(
- Origin::signed(FIRST_MEMBER_ORIGIN),
- ContentActor::Member(FIRST_MEMBER_ID),
- ChannelCreationParametersRecord {
- assets: NewAssets::<Test>::Urls(vec![]),
- meta: vec![],
- reward_account: None,
- }
- ));
- let group_id = curators::add_curator_to_new_group(FIRST_CURATOR_ID);
- // Curator can censor channels
- let is_censored = true;
- assert_ok!(Content::update_channel_censorship_status(
- Origin::signed(FIRST_CURATOR_ORIGIN),
- ContentActor::Curator(group_id, FIRST_CURATOR_ID),
- channel_id,
- is_censored,
- vec![]
- ));
- assert_eq!(
- System::events().last().unwrap().event,
- MetaEvent::content(RawEvent::ChannelCensorshipStatusUpdated(
- ContentActor::Curator(group_id, FIRST_CURATOR_ID),
- channel_id,
- is_censored,
- vec![]
- ))
- );
- let channel = Content::channel_by_id(channel_id);
- assert!(channel.is_censored);
- // Curator can un-censor channels
- let is_censored = false;
- assert_ok!(Content::update_channel_censorship_status(
- Origin::signed(FIRST_CURATOR_ORIGIN),
- ContentActor::Curator(group_id, FIRST_CURATOR_ID),
- channel_id,
- is_censored,
- vec![]
- ));
- assert_eq!(
- System::events().last().unwrap().event,
- MetaEvent::content(RawEvent::ChannelCensorshipStatusUpdated(
- ContentActor::Curator(group_id, FIRST_CURATOR_ID),
- channel_id,
- is_censored,
- vec![]
- ))
- );
- let channel = Content::channel_by_id(channel_id);
- assert!(!channel.is_censored);
- // Member cannot censor channels
- let is_censored = true;
- assert_err!(
- Content::update_channel_censorship_status(
- Origin::signed(FIRST_MEMBER_ORIGIN),
- ContentActor::Member(FIRST_MEMBER_ID),
- channel_id,
- is_censored,
- vec![]
- ),
- Error::<Test>::ActorNotAuthorized
- );
- let curator_channel_id = Content::next_channel_id();
- // create curator channel
- assert_ok!(Content::create_channel(
- Origin::signed(FIRST_CURATOR_ORIGIN),
- ContentActor::Curator(group_id, FIRST_CURATOR_ID),
- ChannelCreationParametersRecord {
- assets: NewAssets::<Test>::Urls(vec![]),
- meta: vec![],
- reward_account: None,
- }
- ));
- // Curator cannot censor curator group channels
- assert_err!(
- Content::update_channel_censorship_status(
- Origin::signed(FIRST_CURATOR_ORIGIN),
- ContentActor::Curator(group_id, FIRST_CURATOR_ID),
- curator_channel_id,
- is_censored,
- vec![]
- ),
- Error::<Test>::CannotCensoreCuratorGroupOwnedChannels
- );
- // Lead can still censor curator group channels
- assert_ok!(Content::update_channel_censorship_status(
- Origin::signed(LEAD_ORIGIN),
- ContentActor::Lead,
- curator_channel_id,
- is_censored,
- vec![]
- ));
- })
- }
|