Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion contracts/masset/BasketManagerV3.sol
Original file line number Diff line number Diff line change
Expand Up @@ -373,14 +373,19 @@ contract BasketManagerV3 is OwnableUpgradeable, ERC1967UpgradeUpgradeable {
factorMap[_basset] = 0;

uint256 index;
bool found = false;
for (uint256 i = 0; i < bassetsArray.length - 1; i++) {
if (bassetsArray[i] == _basset) {
index = i;
found = true;
break;
}
}

bassetsArray[index] = bassetsArray[bassetsArray.length - 1];
if(found) {
bassetsArray[index] = bassetsArray[bassetsArray.length - 1];
}

bassetsArray.pop();

emit BassetRemoved(_basset);
Expand Down
5 changes: 4 additions & 1 deletion dist/hardhat.config.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/hardhat.config.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

91 changes: 89 additions & 2 deletions tests/masset/TestBasketManagerV3.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -696,10 +696,18 @@ contract("BasketManagerV3", async (accounts) => {
from: owner,
});

mockToken2 = await MockERC20.new("", "", 18, sa.dummy1, tokens(1000), {
from: owner,
});

await basketManager.initialize(massetManagerMock, { from: owner });
await basketManager.addBasset(mockToken1.address, 1, 10, 100, false, {
from: owner,
});

await basketManager.addBasset(mockToken2.address, 1, 10, 100, false, {
from: owner,
});
});

context("should fail", async () => {
Expand Down Expand Up @@ -728,7 +736,37 @@ contract("BasketManagerV3", async (accounts) => {

context("should succeed", async () => {
it("with all valid params", async () => {
const bassetToRemove = mockToken1.address;
const allCurrentlyActiveBassets = await basketManager.getBassets();
const initialBassetLength = allCurrentlyActiveBassets.length;

const bassetToRemove = allCurrentlyActiveBassets[0];

const bassetsListBefore = await basketManager.getBassets();
expect(bassetsListBefore).to.contain(bassetToRemove);

const { receipt } = await basketManager.removeBasset(bassetToRemove, {
from: owner,
});

const isValid = await basketManager.isValidBasset(bassetToRemove);
expect(isValid).to.equal(false);

const bassetsListAfter = await basketManager.getBassets();
expect(bassetsListAfter).not.to.contain(bassetToRemove);

const latestBassetLength = bassetsListAfter.length;
expect(latestBassetLength + 1).to.equal(initialBassetLength);

await expectEvent(receipt, "BassetRemoved", { basset: bassetToRemove });
});

it("successfully removed the last index of basset", async () => {
const allCurrentlyActiveBassets = await basketManager.getBassets();
const initialBassetLength = allCurrentlyActiveBassets.length;

expect(allCurrentlyActiveBassets)

const bassetToRemove = allCurrentlyActiveBassets[allCurrentlyActiveBassets.length - 1];

const bassetsListBefore = await basketManager.getBassets();
expect(bassetsListBefore).to.contain(bassetToRemove);
Expand All @@ -743,8 +781,57 @@ contract("BasketManagerV3", async (accounts) => {
const bassetsListAfter = await basketManager.getBassets();
expect(bassetsListAfter).not.to.contain(bassetToRemove);

const latestBassetLength = bassetsListAfter.length;
expect(latestBassetLength + 1).to.equal(initialBassetLength);

await expectEvent(receipt, "BassetRemoved", { basset: bassetToRemove });
});

it("successfully removed the last index of basset with 1 basset list only", async () => {
const allCurrentlyActiveBassets = await basketManager.getBassets();
const initialBassetLength = allCurrentlyActiveBassets.length;

expect(allCurrentlyActiveBassets)

const bassetToRemove = allCurrentlyActiveBassets[allCurrentlyActiveBassets.length - 1];

const bassetsListBefore = await basketManager.getBassets();
expect(bassetsListBefore).to.contain(bassetToRemove);

const tx = await basketManager.removeBasset(bassetToRemove, {
from: owner,
});

let isValid = await basketManager.isValidBasset(bassetToRemove);
expect(isValid).to.equal(false);

let bassetsListAfter = await basketManager.getBassets();
expect(bassetsListAfter).not.to.contain(bassetToRemove);

let latestBassetLength = bassetsListAfter.length;
expect(latestBassetLength + 1).to.equal(initialBassetLength);

await expectEvent(tx.receipt, "BassetRemoved", { basset: bassetToRemove });


/** remove last basset */
const lastActiveBassets = await basketManager.getBassets();
expect(lastActiveBassets.length).to.equal(1);
const tx2 = await basketManager.removeBasset(lastActiveBassets[0], {
from: owner,
});

isValid = await basketManager.isValidBasset(lastActiveBassets[0]);
expect(isValid).to.equal(false);

bassetsListAfter = await basketManager.getBassets();
expect(bassetsListAfter).not.to.contain(lastActiveBassets[0]);

latestBassetLength = bassetsListAfter.length;
expect(latestBassetLength).to.equal(0);

await expectEvent(tx2.receipt, "BassetRemoved", { basset: lastActiveBassets[0] });
});
});
});
});
});
Loading