Skip to content

Commit

Permalink
add TeamRegistry tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Sabnock01 committed Nov 15, 2023
1 parent 97fc4b4 commit 6a32eab
Show file tree
Hide file tree
Showing 4 changed files with 379 additions and 74 deletions.
144 changes: 76 additions & 68 deletions .gas-snapshot
Original file line number Diff line number Diff line change
@@ -1,77 +1,85 @@
AuthorshipTokenTest:test_curtaMint() (gas: 85648)
AuthorshipTokenTest:test_curtaMint_SenderIsNotCurta_RevertsUnauthorized(address) (runs: 256, μ: 10204, ~: 10204)
AuthorshipTokenTest:test_ownerMint_FuzzMintTimestamps_IssuesTokensCorrectly(uint256) (runs: 256, μ: 6430685, ~: 5928022)
AuthorshipTokenTest:test_ownerMint_SenderIsNotOwner_RevertUnauthorized(address) (runs: 256, μ: 12935, ~: 12935)
AuthorshipTokenTest:test_curtaMint_SenderIsNotCurta_RevertsUnauthorized(address) (runs: 256, μ: 10248, ~: 10248)
AuthorshipTokenTest:test_ownerMint_FuzzMintTimestamps_IssuesTokensCorrectly(uint256) (runs: 256, μ: 6412423, ~: 5915354)
AuthorshipTokenTest:test_ownerMint_SenderIsNotOwner_RevertUnauthorized(address) (runs: 256, μ: 12979, ~: 12979)
AuthorshipTokenTest:test_ownerMint_SenderIsOwner_AllowsMint() (gas: 108202)
AuthorshipTokenTest:test_tokenURI_MintedToken_Succeeds() (gas: 232)
AuthorshipTokenTest:test_tokenURI_UnmintedToken_Fails() (gas: 12629)
CurtaTest:test_Initialization_DeployAddressesMatch() (gas: 11297)
CurtaTest:test_addPuzzle() (gas: 305332)
CurtaTest:test_addPuzzle_UseAuthorshipToken_UpdatesStorage() (gas: 298535)
CurtaTest:test_addPuzzle_UseSameAuthorshipTokenTwice_Fails() (gas: 299355)
CurtaTest:test_addPuzzle_UseUnownedAuthorshipToken_RevertsUnauthorized() (gas: 199252)
CurtaTest:test_approve() (gas: 434876)
CurtaTest:test_approve_SenderIsNotOwner_RevertsUnauthorized() (gas: 410380)
CurtaTest:test_approve_WithApprovalForAllTrue_AllowsTransfer() (gas: 457096)
CurtaTest:test_balanceOf_ZeroAddress_Fails() (gas: 8674)
CurtaTest:test_setApprovalForAll_False_UpdatesStorage() (gas: 15966)
CurtaTest:test_setApprovalForAll_True_UpdatesStorage() (gas: 35841)
AuthorshipTokenTest:test_tokenURI_MintedToken_Succeeds() (gas: 254)
AuthorshipTokenTest:test_tokenURI_UnmintedToken_Fails() (gas: 12652)
CurtaTest:test_Initialization_DeployAddressesMatch() (gas: 11275)
CurtaTest:test_addPuzzle() (gas: 305309)
CurtaTest:test_addPuzzle_UseAuthorshipToken_UpdatesStorage() (gas: 298512)
CurtaTest:test_addPuzzle_UseSameAuthorshipTokenTwice_Fails() (gas: 299421)
CurtaTest:test_addPuzzle_UseUnownedAuthorshipToken_RevertsUnauthorized() (gas: 199296)
CurtaTest:test_approve() (gas: 434878)
CurtaTest:test_approve_SenderIsNotOwner_RevertsUnauthorized() (gas: 410379)
CurtaTest:test_approve_WithApprovalForAllTrue_AllowsTransfer() (gas: 457095)
CurtaTest:test_balanceOf_ZeroAddress_Fails() (gas: 8718)
CurtaTest:test_setApprovalForAll_False_UpdatesStorage() (gas: 15965)
CurtaTest:test_setApprovalForAll_True_UpdatesStorage() (gas: 35840)
CurtaTest:test_setFermat_AsRandomAccount_Succeeds(address) (runs: 256, μ: 455137, ~: 455137)
CurtaTest:test_setFermat_InitialSet_UpdatesStorage() (gas: 511807)
CurtaTest:test_setFermat_SetAfterTransfer_Succeeds(address) (runs: 256, μ: 876595, ~: 876595)
CurtaTest:test_setFermat_SetDifferentPuzzlesTwiceInIncreasingOrder_Succeeds() (gas: 870154)
CurtaTest:test_setFermat_SetNonFermatPuzzle_Fails() (gas: 780207)
CurtaTest:test_setFermat_SetSamePuzzleTwice_Fails() (gas: 456913)
CurtaTest:test_setFermat_SetUnsolvedPuzzle_Fails() (gas: 300144)
CurtaTest:test_setPuzzleColors() (gas: 306229)
CurtaTest:test_setPuzzleColors_SetUnauthoredPuzzle_RevertsUnauthorized() (gas: 299507)
CurtaTest:test_solve() (gas: 657540)
CurtaTest:test_solve_DuringAllPhases_FirstSolveTimestampOnlySetOnFirstBlood(uint40) (runs: 256, μ: 520949, ~: 520275)
CurtaTest:test_solve_DuringPhase1WithPayment_PaysAuthor(uint256) (runs: 256, μ: 495665, ~: 496974)
CurtaTest:test_solve_DuringPhase2WithPayment_PaysAuthor(uint256) (runs: 256, μ: 533897, ~: 533897)
CurtaTest:test_solve_DuringPhase2_RequiresETH(uint256) (runs: 256, μ: 489577, ~: 487644)
CurtaTest:test_solve_DuringPhase3_Fails(uint40) (runs: 256, μ: 434098, ~: 434098)
CurtaTest:test_setFermat_InitialSet_UpdatesStorage() (gas: 511851)
CurtaTest:test_setFermat_SetAfterTransfer_Succeeds(address) (runs: 256, μ: 876639, ~: 876639)
CurtaTest:test_setFermat_SetDifferentPuzzlesTwiceInIncreasingOrder_Succeeds() (gas: 870131)
CurtaTest:test_setFermat_SetNonFermatPuzzle_Fails() (gas: 780187)
CurtaTest:test_setFermat_SetSamePuzzleTwice_Fails() (gas: 456892)
CurtaTest:test_setFermat_SetUnsolvedPuzzle_Fails() (gas: 300099)
CurtaTest:test_setPuzzleColors() (gas: 306206)
CurtaTest:test_setPuzzleColors_SetUnauthoredPuzzle_RevertsUnauthorized() (gas: 299486)
CurtaTest:test_solve() (gas: 657518)
CurtaTest:test_solve_DuringAllPhases_FirstSolveTimestampOnlySetOnFirstBlood(uint40) (runs: 256, μ: 521015, ~: 520341)
CurtaTest:test_solve_DuringPhase1WithPayment_PaysAuthor(uint256) (runs: 256, μ: 495643, ~: 496952)
CurtaTest:test_solve_DuringPhase2WithPayment_PaysAuthor(uint256) (runs: 256, μ: 533875, ~: 533875)
CurtaTest:test_solve_DuringPhase2_RequiresETH(uint256) (runs: 256, μ: 489257, ~: 487666)
CurtaTest:test_solve_DuringPhase3_Fails(uint40) (runs: 256, μ: 434097, ~: 434097)
CurtaTest:test_solve_FirstBlood_AuthorshipTokenMintPotentialRevertBranch() (gas: 311249)
CurtaTest:test_solve_FirstBlood_MintsAuthorshipToken() (gas: 413358)
CurtaTest:test_solve_FirstBlood_UpdatesFirstSolveTimestamp(uint40) (runs: 256, μ: 407340, ~: 407340)
CurtaTest:test_solve_IncorrectSolution_Fails(uint256) (runs: 256, μ: 309250, ~: 309250)
CurtaTest:test_solve_FirstBlood_MintsAuthorshipToken() (gas: 413335)
CurtaTest:test_solve_FirstBlood_UpdatesFirstSolveTimestamp(uint40) (runs: 256, μ: 407384, ~: 407384)
CurtaTest:test_solve_IncorrectSolution_Fails(uint256) (runs: 256, μ: 309228, ~: 309228)
CurtaTest:test_solve_NonExistantPuzzle_Fails() (gas: 13650)
CurtaTest:test_solve_SamePuzzleTwice_Fails() (gas: 407397)
CurtaTest:test_solve_Success_MintsFlag() (gas: 409078)
CurtaTest:test_solve_Success_UpdatesSolveCounters() (gas: 613748)
CurtaTest:test_solve_Success_UpdatesStorage() (gas: 408000)
CurtaTest:test_supportsInterface() (gas: 8058)
CurtaTest:test_tokenURI_MintedToken_Succeeds() (gas: 234)
CurtaTest:test_tokenURI_UnmintedToken_Fails() (gas: 12952)
CurtaTest:test_transferFrom() (gas: 450609)
CurtaTest:test_transferFrom_SenderIsOwner_AllowsTransfer() (gas: 434582)
CurtaTest:test_transferFrom_ToZeroAddress_Fails() (gas: 407936)
CurtaTest:test_transferFrom_Unauthorized_RevertsUnauthorized() (gas: 412838)
CurtaTest:test_transferFrom_WithApprovalForAllTrue_AllowsTransfer() (gas: 460343)
CurtaTest:test_transferFrom_WithTokenApproval_AllowsTransfer() (gas: 440767)
CurtaTest:test_transferFrom_WrongFrom_Fails() (gas: 407858)
DeployBaseGoerliTest:test_AddressInitializationCorrectness() (gas: 23494)
DeployBaseGoerliTest:test_authorshipTokenAuthorsEquality() (gas: 13651)
DeployBaseGoerliTest:test_authorshipTokenIssueLengthEquality() (gas: 11460)
DeployBaseGoerliTest:test_authorshipTokenMinting() (gas: 108701)
CurtaTest:test_solve_SamePuzzleTwice_Fails() (gas: 407374)
CurtaTest:test_solve_Success_MintsFlag() (gas: 409057)
CurtaTest:test_solve_Success_UpdatesSolveCounters() (gas: 613814)
CurtaTest:test_solve_Success_UpdatesStorage() (gas: 408044)
CurtaTest:test_supportsInterface() (gas: 8102)
CurtaTest:test_tokenURI_MintedToken_Succeeds() (gas: 278)
CurtaTest:test_tokenURI_UnmintedToken_Fails() (gas: 12908)
CurtaTest:test_transferFrom() (gas: 450588)
CurtaTest:test_transferFrom_SenderIsOwner_AllowsTransfer() (gas: 434581)
CurtaTest:test_transferFrom_ToZeroAddress_Fails() (gas: 407958)
CurtaTest:test_transferFrom_Unauthorized_RevertsUnauthorized() (gas: 412860)
CurtaTest:test_transferFrom_WithApprovalForAllTrue_AllowsTransfer() (gas: 460342)
CurtaTest:test_transferFrom_WithTokenApproval_AllowsTransfer() (gas: 440811)
CurtaTest:test_transferFrom_WrongFrom_Fails() (gas: 407902)
DeployBaseGoerliTest:test_AddressInitializationCorrectness() (gas: 23561)
DeployBaseGoerliTest:test_authorshipTokenAuthorsEquality() (gas: 13695)
DeployBaseGoerliTest:test_authorshipTokenIssueLengthEquality() (gas: 11482)
DeployBaseGoerliTest:test_authorshipTokenMinting() (gas: 108745)
DeployBaseGoerliTest:test_authorshipTokenOwnerEquality() (gas: 13799)
DeployBaseGoerliTest:test_curtaOwnerEquality() (gas: 13832)
DeployBaseMainnetTest:test_AddressInitializationCorrectness() (gas: 23494)
DeployBaseMainnetTest:test_authorshipTokenAuthorsEquality() (gas: 27900)
DeployBaseMainnetTest:test_authorshipTokenIssueLengthEquality() (gas: 11460)
DeployBaseMainnetTest:test_authorshipTokenMinting() (gas: 91601)
DeployBaseGoerliTest:test_curtaOwnerEquality() (gas: 13854)
DeployBaseMainnetTest:test_AddressInitializationCorrectness() (gas: 23561)
DeployBaseMainnetTest:test_authorshipTokenAuthorsEquality() (gas: 27944)
DeployBaseMainnetTest:test_authorshipTokenIssueLengthEquality() (gas: 11482)
DeployBaseMainnetTest:test_authorshipTokenMinting() (gas: 91645)
DeployBaseMainnetTest:test_authorshipTokenOwnerEquality() (gas: 13799)
DeployBaseMainnetTest:test_curtaOwnerEquality() (gas: 13832)
DeployGoerliTest:test_AddressInitializationCorrectness() (gas: 23494)
DeployGoerliTest:test_authorshipTokenAuthorsEquality() (gas: 13651)
DeployGoerliTest:test_authorshipTokenIssueLengthEquality() (gas: 11460)
DeployGoerliTest:test_authorshipTokenMinting() (gas: 108701)
DeployBaseMainnetTest:test_curtaOwnerEquality() (gas: 13854)
DeployGoerliTest:test_AddressInitializationCorrectness() (gas: 23561)
DeployGoerliTest:test_authorshipTokenAuthorsEquality() (gas: 13695)
DeployGoerliTest:test_authorshipTokenIssueLengthEquality() (gas: 11482)
DeployGoerliTest:test_authorshipTokenMinting() (gas: 108745)
DeployGoerliTest:test_authorshipTokenOwnerEquality() (gas: 13799)
DeployGoerliTest:test_curtaOwnerEquality() (gas: 13832)
DeployMainnetTest:test_AddressInitializationCorrectness() (gas: 23494)
DeployMainnetTest:test_authorshipTokenAuthorsEquality() (gas: 227362)
DeployMainnetTest:test_authorshipTokenIssueLengthEquality() (gas: 11460)
DeployMainnetTest:test_authorshipTokenMinting() (gas: 91601)
DeployGoerliTest:test_curtaOwnerEquality() (gas: 13854)
DeployMainnetTest:test_AddressInitializationCorrectness() (gas: 23561)
DeployMainnetTest:test_authorshipTokenAuthorsEquality() (gas: 227406)
DeployMainnetTest:test_authorshipTokenIssueLengthEquality() (gas: 11482)
DeployMainnetTest:test_authorshipTokenMinting() (gas: 91645)
DeployMainnetTest:test_authorshipTokenOwnerEquality() (gas: 13799)
DeployMainnetTest:test_curtaOwnerEquality() (gas: 13832)
OptimizationsTest:testFuzzComputePhaseFromTimestampBranchlessOptimization(uint40,uint40) (runs: 256, μ: 3545, ~: 3531)
DeployMainnetTest:test_curtaOwnerEquality() (gas: 13854)
OptimizationsTest:testFuzzComputePhaseFromTimestampBranchlessOptimization(uint40,uint40) (runs: 256, μ: 3602, ~: 3575)
TeamRegistyTest:test_acceptInvite() (gas: 264448)
TeamRegistyTest:test_createTeam(address[]) (runs: 256, μ: 3459354, ~: 3449502)
TeamRegistyTest:test_inviteMember() (gas: 287392)
TeamRegistyTest:test_inviteMembers() (gas: 318320)
TeamRegistyTest:test_kickMember() (gas: 229136)
TeamRegistyTest:test_kickMembers() (gas: 241032)
TeamRegistyTest:test_leaveTeam() (gas: 223522)
TeamRegistyTest:test_transferLeadership() (gas: 301341)
13 changes: 8 additions & 5 deletions src/TeamRegistry.sol
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ contract TeamRegistry {
mapping(address => bool) public isTeamMember;

/// @notice Team ID counter. Starts at 1.
uint16 teamId;
uint16 private teamId;

// -------------------------------------------------------------------------
// Functions
Expand Down Expand Up @@ -131,7 +131,7 @@ contract TeamRegistry {
function acceptInvite(uint32 _teamId) external {
if (isTeamMember[msg.sender] == true) revert AlreadyInTeam(msg.sender);
if (teamMemberStatus[_teamId][msg.sender] != 1) revert NoPendingInvite(_teamId, msg.sender);
teamMemberStatus[_teamId][msg.sender] == 2;
teamMemberStatus[_teamId][msg.sender] = 2;
isTeamMember[msg.sender] = true;

emit TeamInviteAccepted(_teamId, msg.sender);
Expand All @@ -144,7 +144,7 @@ contract TeamRegistry {
/// or if `_member` is not in the team.
function kickMember(uint32 _teamId, address _member) external {
if (teamMemberStatus[_teamId][msg.sender] < 3) revert NotTeamLeader(_teamId, msg.sender);
if (teamMemberStatus[_teamId][_member] < 2) revert NotInTeam(_teamId, msg.sender);
if (teamMemberStatus[_teamId][_member] < 2) revert NotInTeam(_teamId, _member);
delete teamMemberStatus[_teamId][_member];
isTeamMember[_member] = false;
}
Expand All @@ -157,9 +157,12 @@ contract TeamRegistry {
function kickMembers(uint32 _teamId, address[] calldata _members) external {
if (teamMemberStatus[_teamId][msg.sender] < 3) revert NotTeamLeader(_teamId, msg.sender);
for (uint8 i; i < _members.length;) {
if (teamMemberStatus[_teamId][_members[i]] < 2) revert NotInTeam(_teamId, msg.sender);
if (teamMemberStatus[_teamId][_members[i]] < 2) revert NotInTeam(_teamId, _members[i]);
delete teamMemberStatus[_teamId][_members[i]];
isTeamMember[_members[i]] = false;
unchecked {
i++;
}
}
}

Expand All @@ -178,7 +181,7 @@ contract TeamRegistry {
/// @param _newLeader The address of the new leader.
/// @dev Reverts if `msg.sender` is not the current leader
/// or `_newLeader` is not a team member.
function transferTeamOwnership(uint32 _teamId, address _newLeader) external {
function transferLeadership(uint32 _teamId, address _newLeader) external {
if (teamMemberStatus[_teamId][msg.sender] < 3) revert NotTeamLeader(_teamId, msg.sender);
if (teamMemberStatus[_teamId][_newLeader] != 2) revert NotInTeam(_teamId, _newLeader);
teamMemberStatus[_teamId][msg.sender] = 2;
Expand Down
Loading

0 comments on commit 6a32eab

Please sign in to comment.