Skip to content
Snippets Groups Projects
Commit 4b1f1bb0 authored by Éloïs's avatar Éloïs
Browse files

fix(account): When a self-sufficient accounts receive money for the first...

fix(account): When a self-sufficient accounts receive money for the first time, that should trigger the random id assignment (!90)

* ci: not execute live tests in non-scheduled jobs

* fix(account): bug #85

When a self-sufficient accounts receive money for the first time, that should trigger the random id assignment

* tests: reproduce bug #85
parent c4dfd1bd
No related branches found
No related tags found
1 merge request!90fix(account): When a self-sufficient accounts receive money for the first time, that should trigger the random id assignment
[alias] [alias]
cucumber = "test -p duniter-end2end-tests --test cucumber_tests --" cucumber = "test -p duniter-end2end-tests --test cucumber_tests --"
sanity-gdev = "test -p duniter-live-tests --test sanity_gdev -- --nocapture" 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 --" xtask = "run --package xtask --"
...@@ -158,7 +158,7 @@ tests_debug: ...@@ -158,7 +158,7 @@ tests_debug:
DUNITER_BINARY_PATH: "../build/duniter" DUNITER_BINARY_PATH: "../build/duniter"
DUNITER_END2END_TESTS_SPAWN_NODE_TIMEOUT: "20" DUNITER_END2END_TESTS_SPAWN_NODE_TIMEOUT: "20"
script: 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 balance*
- cargo cucumber -i monetary* - cargo cucumber -i monetary*
- cargo cucumber -i transfer* - cargo cucumber -i transfer*
...@@ -182,7 +182,7 @@ tests_release: ...@@ -182,7 +182,7 @@ tests_release:
DUNITER_BINARY_PATH: "../build/duniter" DUNITER_BINARY_PATH: "../build/duniter"
DUNITER_END2END_TESTS_SPAWN_NODE_TIMEOUT: "20" DUNITER_END2END_TESTS_SPAWN_NODE_TIMEOUT: "20"
script: 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 balance*
- cargo cucumber -i monetary* - cargo cucumber -i monetary*
- cargo cucumber -i transfer* - cargo cucumber -i transfer*
......
...@@ -284,13 +284,11 @@ where ...@@ -284,13 +284,11 @@ where
let result = f(&mut some_data)?; let result = f(&mut some_data)?;
let is_providing = some_data.is_some(); let is_providing = some_data.is_some();
if !was_providing && is_providing { if !was_providing && is_providing {
if !frame_system::Pallet::<T>::account_exists(account_id) { if frame_system::Pallet::<T>::account_exists(account_id) {
// If the account does not exist, we should program its creation // If the account is self-sufficient, we should increment providers directly
PendingNewAccounts::<T>::insert(account_id, ());
} else {
// If the account already exists, we should register increment providers directly
frame_system::Pallet::<T>::inc_providers(account_id); frame_system::Pallet::<T>::inc_providers(account_id);
} }
PendingNewAccounts::<T>::insert(account_id, ());
} else if was_providing && !is_providing { } else if was_providing && !is_providing {
match frame_system::Pallet::<T>::dec_providers(account_id)? { match frame_system::Pallet::<T>::dec_providers(account_id)? {
frame_system::DecRefStatus::Reaped => return Ok(result), frame_system::DecRefStatus::Reaped => return Ok(result),
......
...@@ -350,3 +350,44 @@ fn test_create_new_idty() { ...@@ -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())
);
});
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment