diff --git a/.cargo/config b/.cargo/config index e07889471fc44618fa13e359d1f07e76008b280e..7c3f14a169503d8bc7103c920c42e32318794b1d 100644 --- a/.cargo/config +++ b/.cargo/config @@ -1,6 +1,6 @@ [alias] cucumber = "test -p duniter-end2end-tests --test cucumber_tests --" sanity-gdev = "test -p duniter-live-tests --test sanity_gdev -- --nocapture" -tu = "test --workspace --exclude duniter-end2end-tests" +tu = "test --workspace --exclude duniter-end2end-tests --exclude duniter-live-tests" xtask = "run --package xtask --" diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index eff2a284513d0488cc87080161d07760cf7b7618..e628a155137bee1eafa2e04668f6b797b15dab57 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -158,7 +158,7 @@ tests_debug: DUNITER_BINARY_PATH: "../build/duniter" DUNITER_END2END_TESTS_SPAWN_NODE_TIMEOUT: "20" script: - - cargo test --workspace --exclude duniter-end2end-tests + - cargo test --workspace --exclude duniter-end2end-tests --exclude duniter-live-tests - cargo cucumber -i balance* - cargo cucumber -i monetary* - cargo cucumber -i transfer* @@ -182,7 +182,7 @@ tests_release: DUNITER_BINARY_PATH: "../build/duniter" DUNITER_END2END_TESTS_SPAWN_NODE_TIMEOUT: "20" script: - - cargo test --workspace --exclude duniter-end2end-tests + - cargo test --workspace --exclude duniter-end2end-tests --exclude duniter-live-tests - cargo cucumber -i balance* - cargo cucumber -i monetary* - cargo cucumber -i transfer* diff --git a/pallets/duniter-account/src/lib.rs b/pallets/duniter-account/src/lib.rs index 0615fbd99f8ddc6b5bb031a5616f8d84b6c77b41..17d890eaf0384fb181dfb01bcdbd93fbb524c16f 100644 --- a/pallets/duniter-account/src/lib.rs +++ b/pallets/duniter-account/src/lib.rs @@ -284,13 +284,11 @@ where let result = f(&mut some_data)?; let is_providing = some_data.is_some(); if !was_providing && is_providing { - if !frame_system::Pallet::<T>::account_exists(account_id) { - // If the account does not exist, we should program its creation - PendingNewAccounts::<T>::insert(account_id, ()); - } else { - // If the account already exists, we should register increment providers directly + if frame_system::Pallet::<T>::account_exists(account_id) { + // If the account is self-sufficient, we should increment providers directly frame_system::Pallet::<T>::inc_providers(account_id); } + PendingNewAccounts::<T>::insert(account_id, ()); } else if was_providing && !is_providing { match frame_system::Pallet::<T>::dec_providers(account_id)? { frame_system::DecRefStatus::Reaped => return Ok(result), diff --git a/runtime/gdev/tests/integration_tests.rs b/runtime/gdev/tests/integration_tests.rs index 9647ceb01149e985592f82f6c46e6e0d71a7a792..d8933647023f8c47a45b3de0ed9e103c9f382e1f 100644 --- a/runtime/gdev/tests/integration_tests.rs +++ b/runtime/gdev/tests/integration_tests.rs @@ -350,3 +350,44 @@ fn test_create_new_idty() { ); }); } + +#[test] +fn test_create_new_idty_without_founds() { + ExtBuilder::new(1, 3, 4) + .with_initial_balances(vec![(AccountKeyring::Alice.to_account_id(), 1_000)]) + .build() + .execute_with(|| { + run_to_block(2); + + // Should be able to create an identity without founds + assert_ok!(Identity::create_identity( + frame_system::RawOrigin::Signed(AccountKeyring::Alice.to_account_id()).into(), + AccountKeyring::Eve.to_account_id(), + )); + + // At next block, nothing should be preleved + run_to_block(3); + let events = System::events(); + assert_eq!(events.len(), 0); + + // Deposit some founds on the identity account, + // this should trigger the random id assignemt + assert_ok!(Balances::transfer( + frame_system::RawOrigin::Signed(AccountKeyring::Alice.to_account_id()).into(), + MultiAddress::Id(AccountKeyring::Eve.to_account_id()), + 200 + )); + + // At next block, nothing should be preleved, + // and a random id request should be registered + run_to_block(4); + assert_eq!( + Balances::free_balance(AccountKeyring::Eve.to_account_id()), + 200 + ); + assert_eq!( + Account::pending_random_id_assignments(0), + Some(AccountKeyring::Eve.to_account_id()) + ); + }); +}