Skip to content

Commit d237e58

Browse files
committed
Add tests for AssetRef::make_partial_parent
1 parent 6d09b4a commit d237e58

1 file changed

Lines changed: 58 additions & 0 deletions

File tree

src/asset.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1464,6 +1464,64 @@ mod tests {
14641464
assert_eq!(count, 1);
14651465
}
14661466

1467+
#[fixture]
1468+
fn parent_asset(asset_divisible: Asset) -> AssetRef {
1469+
let asset = AssetRef::from(asset_divisible);
1470+
let mut parent = None;
1471+
1472+
asset.into_for_each_child(&mut 0, |maybe_parent, _| {
1473+
if parent.is_none() {
1474+
parent = maybe_parent.cloned();
1475+
}
1476+
});
1477+
1478+
parent.expect("Divisible asset should create a parent")
1479+
}
1480+
1481+
#[rstest]
1482+
#[case::subset_of_children(2, false)]
1483+
#[case::all_children(3, true)]
1484+
fn make_partial_parent(
1485+
parent_asset: AssetRef,
1486+
#[case] num_units: u32,
1487+
#[case] expect_same_asset: bool,
1488+
) {
1489+
let parent = parent_asset;
1490+
assert!(parent.is_parent());
1491+
1492+
let partial_parent = parent.make_partial_parent(num_units);
1493+
1494+
assert!(partial_parent.is_parent());
1495+
assert_eq!(
1496+
partial_parent.capacity(),
1497+
AssetCapacity::Discrete(num_units, Capacity(4.0))
1498+
);
1499+
assert_eq!(partial_parent.num_children(), Some(num_units));
1500+
assert_eq!(partial_parent.group_id(), parent.group_id());
1501+
assert_eq!(partial_parent.agent_id(), parent.agent_id());
1502+
assert_eq!(Rc::ptr_eq(&partial_parent.0, &parent.0), expect_same_asset);
1503+
assert_eq!(parent.capacity(), AssetCapacity::Discrete(3, Capacity(4.0)));
1504+
}
1505+
1506+
#[rstest]
1507+
#[should_panic(expected = "Cannot make a partial parent from a non-parent asset")]
1508+
fn make_partial_parent_panics_for_non_parent_asset(asset_divisible: Asset) {
1509+
let asset = AssetRef::from(asset_divisible);
1510+
asset.make_partial_parent(1);
1511+
}
1512+
1513+
#[rstest]
1514+
#[should_panic(expected = "Cannot make a partial parent with zero units")]
1515+
fn make_partial_parent_panics_for_zero_units(parent_asset: AssetRef) {
1516+
parent_asset.make_partial_parent(0);
1517+
}
1518+
1519+
#[rstest]
1520+
#[should_panic(expected = "Cannot make a partial parent with more units than original")]
1521+
fn make_partial_parent_panics_for_too_many_units(parent_asset: AssetRef) {
1522+
parent_asset.make_partial_parent(4);
1523+
}
1524+
14671525
#[rstest]
14681526
fn asset_commission(process: Process) {
14691527
// Test successful commissioning of Future asset

0 commit comments

Comments
 (0)