123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- #![cfg(test)]
- use crate::tests::fixtures::{
- create_default_member_owned_channel_with_video, create_initial_storage_buckets_helper,
- increase_account_balance_helper,
- };
- use crate::tests::mock::*;
- use crate::*;
- use frame_support::{assert_err, assert_ok};
- #[test]
- fn issue_nft() {
- with_default_mock_builder(|| {
- // Run to block one to see emitted events
- run_to_block(1);
- let video_id = NextVideoId::<Test>::get();
- create_initial_storage_buckets_helper();
- increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE);
- create_default_member_owned_channel_with_video();
- // Video does not have an nft
- assert_eq!(None, Content::video_by_id(video_id).nft_status);
- // Runtime tested state before call
- // Events number before tested calls
- let number_of_events_before_call = System::events().len();
- // Issue nft
- assert_ok!(Content::issue_nft(
- Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID),
- ContentActor::Member(DEFAULT_MEMBER_ID),
- video_id,
- NftIssuanceParameters::<Test>::default(),
- ));
- // Runtime tested state after call
- // Ensure nft created succesfully
- let nft_status = Some(OwnedNft::new(
- NftOwner::ChannelOwner,
- None,
- TransactionalStatus::<Test>::Idle,
- ));
- assert_eq!(nft_status, Content::video_by_id(video_id).nft_status);
- // Last event checked
- let nft_issue_params = NftIssuanceParameters::<Test>::default();
- assert_event(
- MetaEvent::content(RawEvent::NftIssued(
- ContentActor::Member(DEFAULT_MEMBER_ID),
- video_id,
- nft_issue_params,
- )),
- number_of_events_before_call + 1,
- );
- })
- }
- #[test]
- fn issue_nft_video_does_not_exist() {
- with_default_mock_builder(|| {
- // Run to block one to see emitted events
- run_to_block(1);
- let video_id = NextVideoId::<Test>::get();
- // Make an attempt to issue nft for non existent video
- let issue_nft_result = Content::issue_nft(
- Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID),
- ContentActor::Member(DEFAULT_MEMBER_ID),
- video_id,
- NftIssuanceParameters::<Test>::default(),
- );
- // Failure checked
- assert_err!(issue_nft_result, Error::<Test>::VideoDoesNotExist);
- })
- }
- #[test]
- fn issue_nft_already_issued() {
- with_default_mock_builder(|| {
- // Run to block one to see emitted events
- run_to_block(1);
- let video_id = NextVideoId::<Test>::get();
- create_initial_storage_buckets_helper();
- increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE);
- create_default_member_owned_channel_with_video();
- // Issue nft
- assert_ok!(Content::issue_nft(
- Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID),
- ContentActor::Member(DEFAULT_MEMBER_ID),
- video_id,
- NftIssuanceParameters::<Test>::default(),
- ));
- // Make an attempt to issue nft once again for the same video
- let issue_nft_result = Content::issue_nft(
- Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID),
- ContentActor::Member(DEFAULT_MEMBER_ID),
- video_id,
- NftIssuanceParameters::<Test>::default(),
- );
- // Failure checked
- assert_err!(issue_nft_result, Error::<Test>::NftAlreadyExists);
- })
- }
- #[test]
- fn issue_nft_auth_failed() {
- with_default_mock_builder(|| {
- // Run to block one to see emitted events
- run_to_block(1);
- let video_id = NextVideoId::<Test>::get();
- create_initial_storage_buckets_helper();
- increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE);
- create_default_member_owned_channel_with_video();
- // Make an attempt to issue nft with wrong credentials
- let issue_nft_result = Content::issue_nft(
- Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID),
- ContentActor::Member(DEFAULT_MEMBER_ID),
- video_id,
- NftIssuanceParameters::<Test>::default(),
- );
- // Failure checked
- assert_err!(issue_nft_result, Error::<Test>::MemberAuthFailed);
- })
- }
- #[test]
- fn issue_nft_actor_not_authorized() {
- with_default_mock_builder(|| {
- // Run to block one to see emitted events
- run_to_block(1);
- let video_id = NextVideoId::<Test>::get();
- create_initial_storage_buckets_helper();
- increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE);
- create_default_member_owned_channel_with_video();
- // Make an attempt to issue nft if actor is not authorized
- let issue_nft_result = Content::issue_nft(
- Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID),
- ContentActor::Member(UNAUTHORIZED_MEMBER_ID),
- video_id,
- NftIssuanceParameters::<Test>::default(),
- );
- // Failure checked
- assert_err!(issue_nft_result, Error::<Test>::ActorNotAuthorized);
- })
- }
- #[test]
- fn issue_nft_royalty_bounds_violated() {
- with_default_mock_builder(|| {
- // Run to block one to see emitted events
- run_to_block(1);
- let video_id = NextVideoId::<Test>::get();
- create_initial_storage_buckets_helper();
- increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE);
- create_default_member_owned_channel_with_video();
- // Make an attempt to issue nft with wrong credentials
- let issue_nft_result = Content::issue_nft(
- Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID),
- ContentActor::Member(DEFAULT_MEMBER_ID),
- video_id,
- NftIssuanceParameters::<Test> {
- royalty: Some(Perbill::one()),
- ..NftIssuanceParameters::<Test>::default()
- },
- );
- // Failure checked
- assert_err!(issue_nft_result, Error::<Test>::RoyaltyUpperBoundExceeded);
- // Make an attempt to issue nft with wrong credentials
- let issue_nft_result = Content::issue_nft(
- Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID),
- ContentActor::Member(DEFAULT_MEMBER_ID),
- video_id,
- NftIssuanceParameters::<Test> {
- royalty: Some(Perbill::from_perthousand(1)),
- ..NftIssuanceParameters::<Test>::default()
- },
- );
- // Failure checked
- assert_err!(issue_nft_result, Error::<Test>::RoyaltyLowerBoundExceeded);
- })
- }
- #[test]
- fn issue_nft_fails_with_invalid_auction_parameters() {
- with_default_mock_builder(|| {
- // Run to block one to see emitted events
- run_to_block(1);
- let video_id = NextVideoId::<Test>::get();
- create_initial_storage_buckets_helper();
- increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE);
- create_default_member_owned_channel_with_video();
- let auction_params = AuctionParams {
- starting_price: Content::min_starting_price() - 1,
- buy_now_price: None,
- auction_type: AuctionType::Open(OpenAuctionDetails {
- bid_lock_duration: Content::min_bid_lock_duration(),
- }),
- minimal_bid_step: Content::min_bid_step(),
- starts_at: None,
- whitelist: BTreeSet::new(),
- };
- // Make an attempt to issue nft with wrong credentials
- let issue_nft_result = Content::issue_nft(
- Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID),
- ContentActor::Member(DEFAULT_MEMBER_ID),
- video_id,
- NftIssuanceParameters::<Test> {
- init_transactional_status: InitTransactionalStatus::<Test>::Auction(auction_params),
- ..NftIssuanceParameters::<Test>::default()
- },
- );
- // Failure checked
- assert_err!(
- issue_nft_result,
- Error::<Test>::StartingPriceLowerBoundExceeded
- );
- })
- }
|