Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

formatting: Reorder and rename tests #7

Merged
merged 1 commit into from
Mar 7, 2022
Merged
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
184 changes: 93 additions & 91 deletions contracts/test/Migrator.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -34,21 +34,16 @@ contract MigratorTest is TestUtils {
newToken.mint(address(migrator), OLD_SUPPLY);
}

function test_migration(uint256 amount_) external {
amount_ = constrictToRange(amount_, 1, OLD_SUPPLY);

// Mint amount of old token
oldToken.mint(address(this), amount_);
function test_migrate_zeroAmount() external {
uint256 amount_ = 0;

// Approve
oldToken.approve(address(migrator), amount_);
vm.expectRevert("M:M:ZERO_AMOUNT");
migrator.migrate(amount_);

assertEq(oldToken.allowance(address(this), address(migrator)), amount_);
amount_ = 1;

assertEq(oldToken.balanceOf(address(this)), amount_);
assertEq(oldToken.balanceOf(address(migrator)), 0);
assertEq(newToken.balanceOf(address(this)), 0);
assertEq(newToken.balanceOf(address(migrator)), OLD_SUPPLY);
oldToken.mint(address(this), amount_);
oldToken.approve(address(migrator), amount_);

migrator.migrate(amount_);

Expand All @@ -60,65 +55,21 @@ contract MigratorTest is TestUtils {
assertEq(newToken.balanceOf(address(migrator)), OLD_SUPPLY - amount_);
}

function test_migrationForSpecifiedOwner(uint256 amount_) external {
function test_migrate_insufficientApproval(uint256 amount_) external {
amount_ = constrictToRange(amount_, 1, OLD_SUPPLY);

SomeAccount someAccount = new SomeAccount();

// Mint amount of old token
oldToken.mint(address(someAccount), amount_);

// Approve
someAccount.approve(address(oldToken), address(migrator), amount_);

assertEq(oldToken.allowance(address(someAccount), address(migrator)), amount_);

assertEq(oldToken.balanceOf(address(someAccount)), amount_);
assertEq(oldToken.balanceOf(address(migrator)), 0);
assertEq(newToken.balanceOf(address(someAccount)), 0);
assertEq(newToken.balanceOf(address(migrator)), OLD_SUPPLY);

migrator.migrate(address(someAccount), amount_);

assertEq(oldToken.allowance(address(someAccount), address(migrator)), 0);

assertEq(oldToken.balanceOf(address(someAccount)), 0);
assertEq(oldToken.balanceOf(address(migrator)), amount_);
assertEq(newToken.balanceOf(address(someAccount)), amount_);
assertEq(newToken.balanceOf(address(migrator)), OLD_SUPPLY - amount_);
}

function test_partialMigration(uint256 amount_, uint256 partialAmount_) external {
amount_ = constrictToRange(amount_, 2, OLD_SUPPLY);
partialAmount_ = constrictToRange(partialAmount_, 1, amount_ - 1);

// Mint amount of old token
oldToken.mint(address(this), amount_);

// Approve partial
oldToken.approve(address(migrator), partialAmount_);

assertEq(oldToken.allowance(address(this), address(migrator)), partialAmount_);

assertEq(oldToken.balanceOf(address(this)), amount_);
assertEq(oldToken.balanceOf(address(migrator)), 0);
assertEq(newToken.balanceOf(address(this)), 0);
assertEq(newToken.balanceOf(address(migrator)), OLD_SUPPLY);
oldToken.approve(address(migrator), amount_ - 1);

migrator.migrate(partialAmount_);

assertEq(oldToken.allowance(address(this), address(migrator)), 0);

assertEq(oldToken.balanceOf(address(this)), amount_ - partialAmount_);
assertEq(oldToken.balanceOf(address(migrator)), partialAmount_);
assertEq(newToken.balanceOf(address(this)), partialAmount_);
assertEq(newToken.balanceOf(address(migrator)), OLD_SUPPLY - partialAmount_);

uint256 remaining = amount_ - partialAmount_;
vm.expectRevert("M:M:TRANSFER_FROM_FAILED");
migrator.migrate(amount_);

oldToken.approve(address(migrator), remaining);
// Approve
oldToken.approve(address(migrator), amount_);

migrator.migrate(remaining);
migrator.migrate(amount_);

assertEq(oldToken.allowance(address(this), address(migrator)), 0);

Expand All @@ -128,17 +79,19 @@ contract MigratorTest is TestUtils {
assertEq(newToken.balanceOf(address(migrator)), OLD_SUPPLY - amount_);
}

function test_zeroAmount() external {
uint256 amount_ = 0;

vm.expectRevert("M:M:ZERO_AMOUNT");
migrator.migrate(amount_);
function test_migrate_insufficientBalance(uint256 amount_) external {
amount_ = constrictToRange(amount_, 1, OLD_SUPPLY);

amount_ = 1;
oldToken.mint(address(this), amount_ - 1);

oldToken.mint(address(this), amount_);
oldToken.approve(address(migrator), amount_);

vm.expectRevert("M:M:TRANSFER_FROM_FAILED");
migrator.migrate(amount_);

// Mint
oldToken.mint(address(this), 1);

migrator.migrate(amount_);

assertEq(oldToken.allowance(address(this), address(migrator)), 0);
Expand All @@ -149,40 +102,48 @@ contract MigratorTest is TestUtils {
assertEq(newToken.balanceOf(address(migrator)), OLD_SUPPLY - amount_);
}

function test_failWithoutApprove(uint256 amount_) external {
function test_migrate_newTokenInsufficientBalance(uint256 amount_) external {
amount_ = constrictToRange(amount_, 1, OLD_SUPPLY);

// Burn new supply that was added in setUp
newToken.burn(address(migrator), OLD_SUPPLY - amount_ + 1);

// Mint amount of old token
oldToken.mint(address(this), amount_);

vm.expectRevert("M:M:TRANSFER_FROM_FAILED");
migrator.migrate(amount_);

// Approve
oldToken.approve(address(migrator), amount_);

vm.expectRevert("M:M:TRANSFER_FAILED");
migrator.migrate(amount_);

newToken.mint(address(migrator), 1);

migrator.migrate(amount_);

assertEq(oldToken.allowance(address(this), address(migrator)), 0);

assertEq(oldToken.balanceOf(address(this)), 0);
assertEq(oldToken.balanceOf(address(migrator)), amount_);
assertEq(newToken.balanceOf(address(this)), amount_);
assertEq(newToken.balanceOf(address(migrator)), OLD_SUPPLY - amount_);
assertEq(newToken.balanceOf(address(migrator)), 0);
}

function test_failWithoutBalance(uint256 amount_) external {
function test_migrate_success(uint256 amount_) external {
amount_ = constrictToRange(amount_, 1, OLD_SUPPLY);

oldToken.mint(address(this), amount_ - 1);
// Mint amount of old token
oldToken.mint(address(this), amount_);

// Approve
oldToken.approve(address(migrator), amount_);

vm.expectRevert("M:M:TRANSFER_FROM_FAILED");
migrator.migrate(amount_);
assertEq(oldToken.allowance(address(this), address(migrator)), amount_);

// Mint
oldToken.mint(address(this), 1);
assertEq(oldToken.balanceOf(address(this)), amount_);
assertEq(oldToken.balanceOf(address(migrator)), 0);
assertEq(newToken.balanceOf(address(this)), 0);
assertEq(newToken.balanceOf(address(migrator)), OLD_SUPPLY);

migrator.migrate(amount_);

Expand All @@ -194,31 +155,72 @@ contract MigratorTest is TestUtils {
assertEq(newToken.balanceOf(address(migrator)), OLD_SUPPLY - amount_);
}

function test_failWithoutNewToken(uint256 amount_) external {
function test_migration_specifiedOwner(uint256 amount_) external {
amount_ = constrictToRange(amount_, 1, OLD_SUPPLY);

// Burn new supply that was added in setUp
newToken.burn(address(migrator), OLD_SUPPLY - amount_ + 1);
SomeAccount someAccount = new SomeAccount();

// Mint amount of old token
oldToken.mint(address(this), amount_);
oldToken.mint(address(someAccount), amount_);

// Approve
oldToken.approve(address(migrator), amount_);
someAccount.approve(address(oldToken), address(migrator), amount_);

vm.expectRevert("M:M:TRANSFER_FAILED");
migrator.migrate(amount_);
assertEq(oldToken.allowance(address(someAccount), address(migrator)), amount_);

newToken.mint(address(migrator), 1);
assertEq(oldToken.balanceOf(address(someAccount)), amount_);
assertEq(oldToken.balanceOf(address(migrator)), 0);
assertEq(newToken.balanceOf(address(someAccount)), 0);
assertEq(newToken.balanceOf(address(migrator)), OLD_SUPPLY);

migrator.migrate(amount_);
migrator.migrate(address(someAccount), amount_);

assertEq(oldToken.allowance(address(someAccount), address(migrator)), 0);

assertEq(oldToken.balanceOf(address(someAccount)), 0);
assertEq(oldToken.balanceOf(address(migrator)), amount_);
assertEq(newToken.balanceOf(address(someAccount)), amount_);
assertEq(newToken.balanceOf(address(migrator)), OLD_SUPPLY - amount_);
}

function test_migrate_partialMigration(uint256 amount_, uint256 partialAmount_) external {
amount_ = constrictToRange(amount_, 2, OLD_SUPPLY);
partialAmount_ = constrictToRange(partialAmount_, 1, amount_ - 1);

// Mint amount of old token
oldToken.mint(address(this), amount_);

// Approve partial
oldToken.approve(address(migrator), partialAmount_);

assertEq(oldToken.allowance(address(this), address(migrator)), partialAmount_);

assertEq(oldToken.balanceOf(address(this)), amount_);
assertEq(oldToken.balanceOf(address(migrator)), 0);
assertEq(newToken.balanceOf(address(this)), 0);
assertEq(newToken.balanceOf(address(migrator)), OLD_SUPPLY);

migrator.migrate(partialAmount_);

assertEq(oldToken.allowance(address(this), address(migrator)), 0);

assertEq(oldToken.balanceOf(address(this)), amount_ - partialAmount_);
assertEq(oldToken.balanceOf(address(migrator)), partialAmount_);
assertEq(newToken.balanceOf(address(this)), partialAmount_);
assertEq(newToken.balanceOf(address(migrator)), OLD_SUPPLY - partialAmount_);

uint256 remaining = amount_ - partialAmount_;

oldToken.approve(address(migrator), remaining);

migrator.migrate(remaining);

assertEq(oldToken.allowance(address(this), address(migrator)), 0);

assertEq(oldToken.balanceOf(address(this)), 0);
assertEq(oldToken.balanceOf(address(migrator)), amount_);
assertEq(newToken.balanceOf(address(this)), amount_);
assertEq(newToken.balanceOf(address(migrator)), 0);
assertEq(newToken.balanceOf(address(migrator)), OLD_SUPPLY - amount_);
}

}