-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathreport.json
1 lines (1 loc) · 158 KB
/
report.json
1
{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":32,"numPassedTests":391,"numPendingTestSuites":0,"numPendingTests":1,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":32,"numTotalTests":392,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1736520707197,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":["balanceOf()"],"duration":2907,"failureDetails":[],"failureMessages":[],"fullName":"balanceOf() Returns the correct balance of tokens for an account and tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct balance of tokens for an account and tokenId"},{"ancestorTitles":["balanceOf()"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"balanceOf() Returns zero for accounts with no tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns zero for accounts with no tokens"},{"ancestorTitles":["balanceOfBatch()"],"duration":60,"failureDetails":[],"failureMessages":[],"fullName":"balanceOfBatch() Returns correct balances for multiple accounts and tokenIds","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Returns correct balances for multiple accounts and tokenIds"},{"ancestorTitles":["balanceOfBatch()"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"balanceOfBatch() Returns zeros for accounts with no tokens","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Returns zeros for accounts with no tokens"},{"ancestorTitles":["getERC20ContractV2()"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"getERC20ContractV2() Returns the address of USDC contract","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the address of USDC contract"},{"ancestorTitles":["getTokenPurchasePrice()"],"duration":21,"failureDetails":[],"failureMessages":[],"fullName":"getTokenPurchasePrice() Returns the correct price for purchasing a given amount of tokens, taking into account current supply and bonding curve formula of 2S + 2","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"Returns the correct price for purchasing a given amount of tokens, taking into account current supply and bonding curve formula of 2S + 2"},{"ancestorTitles":["totalSupply()"],"duration":27,"failureDetails":[],"failureMessages":[],"fullName":"totalSupply() Returns the total supply of a given tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the total supply of a given tokenId"},{"ancestorTitles":["totalSupply()"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"totalSupply() Returns zero for tokens with no supply","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns zero for tokens with no supply"},{"ancestorTitles":["getBuilderIdForToken()"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"getBuilderIdForToken() Returns the correct builderId for a given tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct builderId for a given tokenId"},{"ancestorTitles":["getBuilderIdForToken()"],"duration":1091,"failureDetails":[],"failureMessages":[],"fullName":"getBuilderIdForToken() Reverts if the tokenId is not registered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if the tokenId is not registered"},{"ancestorTitles":["getTokenIdForBuilder()"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"getTokenIdForBuilder() Returns the correct tokenId for a given builderId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct tokenId for a given builderId"},{"ancestorTitles":["getTokenIdForBuilder()"],"duration":1066,"failureDetails":[],"failureMessages":[],"fullName":"getTokenIdForBuilder() Reverts if the builderId is not registered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if the builderId is not registered"},{"ancestorTitles":["totalBuilderTokens()"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"totalBuilderTokens() Returns the total number of registered builder tokens","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Returns the total number of registered builder tokens"},{"ancestorTitles":["getPriceIncrement()"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"getPriceIncrement() Returns the price increment used for calculating token prices","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the price increment used for calculating token prices"},{"ancestorTitles":["uri()"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"uri() Returns the correct URI for a given tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct URI for a given tokenId"},{"ancestorTitles":["tokenURI()"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"tokenURI() Returns the correct token URI for a given tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct token URI for a given tokenId"},{"ancestorTitles":["isValidUUID()"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"isValidUUID() Returns true for valid UUIDs","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns true for valid UUIDs"},{"ancestorTitles":["isValidUUID()"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"isValidUUID() Returns false for invalid UUIDs","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns false for invalid UUIDs"},{"ancestorTitles":["read","getMinter()"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"read getMinter() Should return the correct minter address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Should return the correct minter address"}],"endTime":1736520722886,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/BuilderNFTImplementation/read.spec.ts","startTime":1736520707327,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","balanceOf()","returns"],"duration":382,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation balanceOf() returns Returns the correct balance of tokens for an account and tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct balance of tokens for an account and tokenId"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","balanceOf()","returns"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation balanceOf() returns Returns zero for accounts with no tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns zero for accounts with no tokens"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","balanceOfBatch()","returns"],"duration":72,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation balanceOfBatch() returns Returns correct balances for multiple accounts and tokenIds","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Returns correct balances for multiple accounts and tokenIds"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","balanceOfBatch()","returns"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation balanceOfBatch() returns Returns zeros for accounts with no tokens","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Returns zeros for accounts with no tokens"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","ERC20Token()","returns"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation ERC20Token() returns Returns the address of USDC contract","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the address of USDC contract"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","getTokenPurchasePrice()","returns"],"duration":40,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation getTokenPurchasePrice() returns Returns the correct price for purchasing a given amount of tokens, taking into account current supply and bonding curve formula of 2S + 2","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"Returns the correct price for purchasing a given amount of tokens, taking into account current supply and bonding curve formula of 2S + 2"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","totalSupply()","returns"],"duration":52,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation totalSupply() returns Returns the total supply of a given tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the total supply of a given tokenId"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","totalSupply()","returns"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation totalSupply() returns Returns zero for tokens with no supply","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns zero for tokens with no supply"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","getBuilderIdForToken()","returns"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation getBuilderIdForToken() returns Returns the correct builderId for a given tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct builderId for a given tokenId"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","getBuilderIdForToken()","returns"],"duration":1081,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation getBuilderIdForToken() returns Reverts if the tokenId is not registered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if the tokenId is not registered"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","getTokenIdForBuilder()","returns"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation getTokenIdForBuilder() returns Returns the correct tokenId for a given builderId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct tokenId for a given builderId"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","getTokenIdForBuilder()","returns"],"duration":1069,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation getTokenIdForBuilder() returns Reverts if the builderId is not registered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if the builderId is not registered"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","totalBuilderTokens()","returns"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation totalBuilderTokens() returns Returns the total number of registered builder tokens","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Returns the total number of registered builder tokens"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","getPriceIncrement()","returns"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation getPriceIncrement() returns Returns the price increment used for calculating token prices","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the price increment used for calculating token prices"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","uri()","returns"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation uri() returns Returns the correct URI for a given tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct URI for a given tokenId"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","tokenURI()","returns"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation tokenURI() returns Returns the correct token URI for a given tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct token URI for a given tokenId"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","minter()","returns"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation minter() returns Should return the correct minter address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Should return the correct minter address"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","acceptUpgrade()","returns"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation acceptUpgrade() returns returns its own address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"returns its own address"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","supportsInterface()","returns"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation supportsInterface() returns Returns true for IERC1155 and IERC1155MetadataURI","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Returns true for IERC1155 and IERC1155MetadataURI"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","supportsInterface()","returns"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation supportsInterface() returns Returns false for ERC20 and ERC721 interfaces","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Returns false for ERC20 and ERC721 interfaces"}],"endTime":1736520722958,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/Protocol/ScoutProtocolBuilderNFT/ScoutProtocolBuilderNFTImplementation/read.spec.ts","startTime":1736520707326,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","balanceOf()","returns"],"duration":2988,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation balanceOf() returns Returns the correct balance of tokens for an account and tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct balance of tokens for an account and tokenId"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","balanceOf()","returns"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation balanceOf() returns Returns zero for accounts with no tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns zero for accounts with no tokens"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","balanceOfBatch()","returns"],"duration":61,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation balanceOfBatch() returns Returns correct balances for multiple accounts and tokenIds","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Returns correct balances for multiple accounts and tokenIds"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","balanceOfBatch()","returns"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation balanceOfBatch() returns Returns zeros for accounts with no tokens","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Returns zeros for accounts with no tokens"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","ERC20Token()","returns"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation ERC20Token() returns Returns the address of USDC contract","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the address of USDC contract"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","getTokenPurchasePrice()","returns"],"duration":44,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation getTokenPurchasePrice() returns Returns the correct price for purchasing a given amount of tokens, taking into account current supply and bonding curve formula of 2S + 2","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"Returns the correct price for purchasing a given amount of tokens, taking into account current supply and bonding curve formula of 2S + 2"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","totalSupply()","returns"],"duration":25,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation totalSupply() returns Returns the total supply of a given tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the total supply of a given tokenId"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","totalSupply()","returns"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation totalSupply() returns Returns zero for tokens with no supply","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns zero for tokens with no supply"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","getBuilderIdForToken()","returns"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation getBuilderIdForToken() returns Returns the correct builderId for a given tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct builderId for a given tokenId"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","getBuilderIdForToken()","returns"],"duration":1082,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation getBuilderIdForToken() returns Reverts if the tokenId is not registered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if the tokenId is not registered"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","getTokenIdForBuilder()","returns"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation getTokenIdForBuilder() returns Returns the correct tokenId for a given builderId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct tokenId for a given builderId"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","getTokenIdForBuilder()","returns"],"duration":1064,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation getTokenIdForBuilder() returns Reverts if the builderId is not registered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if the builderId is not registered"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","totalBuilderTokens()","returns"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation totalBuilderTokens() returns Returns the total number of registered builder tokens","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Returns the total number of registered builder tokens"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","getPriceIncrement()","returns"],"duration":1,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation getPriceIncrement() returns Returns the price increment used for calculating token prices","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the price increment used for calculating token prices"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","uri()","returns"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation uri() returns Returns the correct URI for a given tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct URI for a given tokenId"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","tokenURI()","returns"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation tokenURI() returns Returns the correct token URI for a given tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct token URI for a given tokenId"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","minter()","returns"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation minter() returns Should return the correct minter address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Should return the correct minter address"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","acceptUpgrade()","returns"],"duration":0,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation acceptUpgrade() returns returns its own address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"returns its own address"}],"endTime":1736520722961,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/ScoutGamePreSeason02NFT/ScoutGamePreSeason02NFTImplementation/read.spec.ts","startTime":1736520707325,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","balanceOf()"],"duration":2836,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation balanceOf() Returns the correct balance of tokens for an account and tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct balance of tokens for an account and tokenId"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","balanceOf()"],"duration":39,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation balanceOf() Returns zero for accounts with no tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns zero for accounts with no tokens"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","balanceOfBatch()"],"duration":47,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation balanceOfBatch() Returns correct balances for multiple accounts and tokenIds","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Returns correct balances for multiple accounts and tokenIds"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","balanceOfBatch()"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation balanceOfBatch() Returns zeros for accounts with no tokens","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Returns zeros for accounts with no tokens"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","getERC20Contract()"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation getERC20Contract() Returns the address of USDC contract","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the address of USDC contract"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","getTokenPurchasePrice()"],"duration":25,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation getTokenPurchasePrice() Returns the correct price for purchasing a given amount of tokens, taking into account current supply and of 2 USDC per token","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"Returns the correct price for purchasing a given amount of tokens, taking into account current supply and of 2 USDC per token"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","totalSupply()"],"duration":29,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation totalSupply() Returns the total supply of a given tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the total supply of a given tokenId"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","totalSupply()"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation totalSupply() Returns zero for tokens with no supply","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns zero for tokens with no supply"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","getBuilderIdForToken()"],"duration":16,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation getBuilderIdForToken() Returns the correct builderId for a given tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct builderId for a given tokenId"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","getBuilderIdForToken()"],"duration":1087,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation getBuilderIdForToken() Reverts if the tokenId is not registered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if the tokenId is not registered"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","getTokenIdForBuilder()"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation getTokenIdForBuilder() Returns the correct tokenId for a given builderId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct tokenId for a given builderId"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","getTokenIdForBuilder()"],"duration":1078,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation getTokenIdForBuilder() Reverts if the builderId is not registered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if the builderId is not registered"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","totalBuilderTokens()"],"duration":21,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation totalBuilderTokens() Returns the total number of registered builder tokens","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Returns the total number of registered builder tokens"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","getPriceIncrement()"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation getPriceIncrement() Returns the price increment used for calculating token prices","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the price increment used for calculating token prices"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","uri()"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation uri() Returns the correct URI for a given tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct URI for a given tokenId"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","tokenURI()"],"duration":23,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation tokenURI() Returns the correct token URI for a given tokenId","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the correct token URI for a given tokenId"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","isValidUUID()"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation isValidUUID() Returns true for valid UUIDs","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns true for valid UUIDs"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","isValidUUID()"],"duration":20,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation isValidUUID() Returns false for invalid UUIDs","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns false for invalid UUIDs"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","getMinter()"],"duration":68,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation getMinter() Should return the correct minter address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Should return the correct minter address"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","name"],"duration":75,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation name should return the token name","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return the token name"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","symbol"],"duration":32,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation symbol should return the token symbol","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should return the token symbol"}],"endTime":1736520723380,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/ScoutGameStarterPackNFT/ScoutGameStarterPackNFTImplementation/read.spec.ts","startTime":1736520707344,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["LockupWeeklyStreamCreator","createStream()","effects"],"duration":3295,"failureDetails":[],"failureMessages":[],"fullName":"LockupWeeklyStreamCreator createStream() effects creates a claimable, cancellable, non-transferable stream for the protocol","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"status":"passed","title":"creates a claimable, cancellable, non-transferable stream for the protocol"},{"ancestorTitles":["LockupWeeklyStreamCreator","createStream()","effects"],"duration":75,"failureDetails":[],"failureMessages":[],"fullName":"LockupWeeklyStreamCreator createStream() effects immediately deducts the balance from the stream creator","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"immediately deducts the balance from the stream creator"},{"ancestorTitles":["LockupWeeklyStreamCreator","claim()","effects"],"duration":281,"failureDetails":[],"failureMessages":[],"fullName":"LockupWeeklyStreamCreator claim() effects allows the protocol contract to receive a stream in 13 tranches with the first tranche unlockable at the target timestamp and the 12 increments spread out by 1 week each following the allocation percentages: 5%, 5%, 6%, 6%, 7%, 7%, 8%, 8%, 9%, 9%, 10%, 10%, 10%","invocations":1,"location":null,"numPassingAsserts":27,"retryReasons":[],"status":"passed","title":"allows the protocol contract to receive a stream in 13 tranches with the first tranche unlockable at the target timestamp and the 12 increments spread out by 1 week each following the allocation percentages: 5%, 5%, 6%, 6%, 7%, 7%, 8%, 8%, 9%, 9%, 10%, 10%, 10%"},{"ancestorTitles":["LockupWeeklyStreamCreator","claim()","validations"],"duration":1211,"failureDetails":[],"failureMessages":[],"fullName":"LockupWeeklyStreamCreator claim() validations throws an error if there are no tokens to claim","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"throws an error if there are no tokens to claim"},{"ancestorTitles":["LockupWeeklyStreamCreator","(SablierLockupTranched) cancel()","effects"],"duration":113,"failureDetails":[],"failureMessages":[],"fullName":"LockupWeeklyStreamCreator (SablierLockupTranched) cancel() effects allows the stream creator to cancel the stream and receive a refund for the remaining assets","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"allows the stream creator to cancel the stream and receive a refund for the remaining assets"}],"endTime":1736520731919,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/Protocol/LockupWeeklyStreamCreator/write.spec.ts","startTime":1736520722964,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ScoutTokenERC20Implementation","transfer","effects"],"duration":3443,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Implementation transfer effects transfers tokens correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"transfers tokens correctly"},{"ancestorTitles":["ScoutTokenERC20Implementation","transfer","events"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Implementation transfer events emits Transfer event on transfer","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"emits Transfer event on transfer"},{"ancestorTitles":["ScoutTokenERC20Implementation","transfer","permissions"],"duration":39,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Implementation transfer permissions allows token holders to transfer their tokens","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"allows token holders to transfer their tokens"},{"ancestorTitles":["ScoutTokenERC20Implementation","transfer","validations"],"duration":1102,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Implementation transfer validations prevents transferring more tokens than balance","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"prevents transferring more tokens than balance"},{"ancestorTitles":["ScoutTokenERC20Implementation","approve","effects"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Implementation approve effects approves allowance correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"approves allowance correctly"},{"ancestorTitles":["ScoutTokenERC20Implementation","approve","events"],"duration":17,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Implementation approve events emits Approval event on approve","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"emits Approval event on approve"},{"ancestorTitles":["ScoutTokenERC20Implementation","transferFrom","effects"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Implementation transferFrom effects transfers tokens correctly using allowance","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"transfers tokens correctly using allowance"},{"ancestorTitles":["ScoutTokenERC20Implementation","transferFrom","events"],"duration":30,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Implementation transferFrom events emits Transfer event on transferFrom","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"emits Transfer event on transferFrom"},{"ancestorTitles":["ScoutTokenERC20Implementation","transferFrom","permissions"],"duration":20,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Implementation transferFrom permissions allows spender to transfer within allowance","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"allows spender to transfer within allowance"},{"ancestorTitles":["ScoutTokenERC20Implementation","transferFrom","permissions"],"duration":1077,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Implementation transferFrom permissions prevents spender from transferring more than allowance","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"prevents spender from transferring more than allowance"},{"ancestorTitles":["ScoutTokenERC20Implementation","transferFrom","permissions"],"duration":1071,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Implementation transferFrom permissions prevents spender from transferring more than balance","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"prevents spender from transferring more than balance"},{"ancestorTitles":["ScoutTokenERC20Implementation","increaseAllowance","effects"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Implementation increaseAllowance effects increases allowance correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"increases allowance correctly"},{"ancestorTitles":["ScoutTokenERC20Implementation","increaseAllowance","events"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Implementation increaseAllowance events emits Approval event on increaseAllowance","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"emits Approval event on increaseAllowance"},{"ancestorTitles":["ScoutTokenERC20Implementation","decreaseAllowance","effects"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Implementation decreaseAllowance effects decreases allowance correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"decreases allowance correctly"},{"ancestorTitles":["ScoutTokenERC20Implementation","decreaseAllowance","validations"],"duration":1062,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Implementation decreaseAllowance validations reverts when decreasing allowance below zero","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when decreasing allowance below zero"}],"endTime":1736520733689,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/Protocol/ScoutProtocolERC20/ScoutTokenERC20Implementation/write.spec.ts","startTime":1736520722894,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ScoutProtocolImplementation","multiClaim","effects"],"duration":130,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation multiClaim effects allows a user to perform multiple claims in a single call","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"allows a user to perform multiple claims in a single call"},{"ancestorTitles":["ScoutProtocolImplementation","multiClaim","effects"],"duration":1187,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation multiClaim effects does not have any effect if a single claim is invalid","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"does not have any effect if a single claim is invalid"},{"ancestorTitles":["ScoutProtocolImplementation","multiClaim","events"],"duration":29,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation multiClaim events emits a TokensClaimed event for each claim","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"emits a TokensClaimed event for each claim"},{"ancestorTitles":["ScoutProtocolImplementation","claim","effects"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation claim effects allows a user to claim tokens correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"allows a user to claim tokens correctly"},{"ancestorTitles":["ScoutProtocolImplementation","claim","permissions"],"duration":1069,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation claim permissions reverts when the contract is paused","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when the contract is paused"},{"ancestorTitles":["ScoutProtocolImplementation","claim","events"],"duration":17,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation claim events emits a TokensClaimed event","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"emits a TokensClaimed event"},{"ancestorTitles":["ScoutProtocolImplementation","claim","validations"],"duration":1091,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation claim validations denies claims if user has already claimed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"denies claims if user has already claimed"},{"ancestorTitles":["ScoutProtocolImplementation","claim","validations"],"duration":1079,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation claim validations denies claims if user is at a time too far in the future","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"denies claims if user is at a time too far in the future"},{"ancestorTitles":["ScoutProtocolImplementation","claim","validations"],"duration":1091,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation claim validations reverts with invalid merkle proof","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts with invalid merkle proof"},{"ancestorTitles":["ScoutProtocolImplementation","claim","validations"],"duration":1659,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation claim validations reverts when merkle root is not set","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when merkle root is not set"},{"ancestorTitles":["ScoutProtocolImplementation","claim","validations"],"duration":1213,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation claim validations reverts when contract balance is insufficient","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when contract balance is insufficient"},{"ancestorTitles":["ScoutProtocolImplementation","setWeeklyMerkleRoot","effects"],"duration":82,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation setWeeklyMerkleRoot effects allows admin to set merkle root correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"allows admin to set merkle root correctly"},{"ancestorTitles":["ScoutProtocolImplementation","setWeeklyMerkleRoot","effects"],"duration":306,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation setWeeklyMerkleRoot effects sets the merkle root with a unique key","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"status":"passed","title":"sets the merkle root with a unique key"},{"ancestorTitles":["ScoutProtocolImplementation","setWeeklyMerkleRoot","events"],"duration":18,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation setWeeklyMerkleRoot events emits a WeeklyMerkleRootSet event","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"emits a WeeklyMerkleRootSet event"},{"ancestorTitles":["ScoutProtocolImplementation","setWeeklyMerkleRoot","permissions"],"duration":1086,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation setWeeklyMerkleRoot permissions reverts when the contract is paused","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when the contract is paused"},{"ancestorTitles":["ScoutProtocolImplementation","setWeeklyMerkleRoot","permissions"],"duration":1080,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation setWeeklyMerkleRoot permissions reverts when not called by admin","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when not called by admin"},{"ancestorTitles":["ScoutProtocolImplementation","setWeeklyMerkleRoot","permissions"],"duration":18,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation setWeeklyMerkleRoot permissions allows the claims manager to set the merkle root","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"allows the claims manager to set the merkle root"},{"ancestorTitles":["ScoutProtocolImplementation","setWeeklyMerkleRoot","validations"],"duration":1085,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation setWeeklyMerkleRoot validations reverts when the validUntil is in the past","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when the validUntil is in the past"},{"ancestorTitles":["ScoutProtocolImplementation","setClaimsManager()","effects"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation setClaimsManager() effects Sets the claims manager","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Sets the claims manager"},{"ancestorTitles":["ScoutProtocolImplementation","setClaimsManager()","permissions"],"duration":1069,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolImplementation setClaimsManager() permissions reverts when not called by admin","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when not called by admin"}],"endTime":1736520734066,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/Protocol/ScoutProtocol/ScoutProtocolImplementation/write.spec.ts","startTime":1736520707326,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["MemoryUtils","IMPLEMENTATION_SLOT","returns"],"duration":19,"failureDetails":[],"failureMessages":[],"fullName":"MemoryUtils IMPLEMENTATION_SLOT returns the correct value, compliant with EIP 1967","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"the correct value, compliant with EIP 1967"},{"ancestorTitles":["MemoryUtils","PROCEEDS_RECEIVER_SLOT","returns"],"duration":26,"failureDetails":[],"failureMessages":[],"fullName":"MemoryUtils PROCEEDS_RECEIVER_SLOT returns the correct value","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"the correct value"},{"ancestorTitles":["MemoryUtils","CLAIMS_TOKEN_SLOT","returns"],"duration":22,"failureDetails":[],"failureMessages":[],"fullName":"MemoryUtils CLAIMS_TOKEN_SLOT returns the correct value","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"the correct value"},{"ancestorTitles":["MemoryUtils","MINTER_SLOT","returns"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"MemoryUtils MINTER_SLOT returns the correct value","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"the correct value"},{"ancestorTitles":["MemoryUtils","CLAIMS_HISTORY_SLOT","returns"],"duration":16,"failureDetails":[],"failureMessages":[],"fullName":"MemoryUtils CLAIMS_HISTORY_SLOT returns the correct value","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"the correct value"},{"ancestorTitles":["MemoryUtils","WEEKLY_MERKLE_ROOTS_SLOT","returns"],"duration":21,"failureDetails":[],"failureMessages":[],"fullName":"MemoryUtils WEEKLY_MERKLE_ROOTS_SLOT returns the correct value","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"the correct value"},{"ancestorTitles":["MemoryUtils","ADMIN_SLOT","returns"],"duration":11,"failureDetails":[],"failureMessages":[],"fullName":"MemoryUtils ADMIN_SLOT returns the correct value","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"the correct value"},{"ancestorTitles":["MemoryUtils","PAUSER_SLOT","returns"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"MemoryUtils PAUSER_SLOT returns the correct value","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"the correct value"},{"ancestorTitles":["MemoryUtils","CLAIM_MANAGER_SLOT","returns"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"MemoryUtils CLAIM_MANAGER_SLOT returns the correct value","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"the correct value"},{"ancestorTitles":["MemoryUtils","EAS_ATTESTER_SLOT","returns"],"duration":25,"failureDetails":[],"failureMessages":[],"fullName":"MemoryUtils EAS_ATTESTER_SLOT returns the correct value","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"the correct value"},{"ancestorTitles":["MemoryUtils","SECONDARY_EAS_ATTESTER_SLOT","returns"],"duration":29,"failureDetails":[],"failureMessages":[],"fullName":"MemoryUtils SECONDARY_EAS_ATTESTER_SLOT returns the correct value","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"the correct value"},{"ancestorTitles":["MemoryUtils","IS_PAUSED_SLOT","returns"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"MemoryUtils IS_PAUSED_SLOT returns the correct value","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"the correct value"}],"endTime":1736520736231,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/Protocol/MemoryUtils/read.spec.ts","startTime":1736520733699,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["constructor"],"duration":3880,"failureDetails":[],"failureMessages":[],"fullName":"constructor Should set the correct admin, implementation, and payment token","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Should set the correct admin, implementation, and payment token"},{"ancestorTitles":["write","setImplementation()","effects"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"write setImplementation() effects Should allow the admin to change the implementation","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Should allow the admin to change the implementation"},{"ancestorTitles":["write","setImplementation()","effects"],"duration":37,"failureDetails":[],"failureMessages":[],"fullName":"write setImplementation() effects Should preserve state between implementation changes","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Should preserve state between implementation changes"},{"ancestorTitles":["write","setImplementation()","permissions"],"duration":1077,"failureDetails":[],"failureMessages":[],"fullName":"write setImplementation() permissions Should deny another user than the admin to change the implementation","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Should deny another user than the admin to change the implementation"},{"ancestorTitles":["write","setProceedsReceiver()","effects"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"write setProceedsReceiver() effects Should set the proceeds receiver address correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Should set the proceeds receiver address correctly"},{"ancestorTitles":["write","setProceedsReceiver()","permissions"],"duration":1063,"failureDetails":[],"failureMessages":[],"fullName":"write setProceedsReceiver() permissions Only admin can set the proceeds receiver","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Only admin can set the proceeds receiver"},{"ancestorTitles":["write","setProceedsReceiver()","validations"],"duration":1059,"failureDetails":[],"failureMessages":[],"fullName":"write setProceedsReceiver() validations Reverts when setting proceeds receiver to zero address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts when setting proceeds receiver to zero address"},{"ancestorTitles":["write","updatePriceIncrement()","effects"],"duration":2,"failureDetails":[],"failureMessages":[],"fullName":"write updatePriceIncrement() effects Should update the price increment correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Should update the price increment correctly"},{"ancestorTitles":["write","updatePriceIncrement()","permissions"],"duration":1060,"failureDetails":[],"failureMessages":[],"fullName":"write updatePriceIncrement() permissions Only admin can update the price increment","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Only admin can update the price increment"},{"ancestorTitles":["write","updateERC20Contract()","effects"],"duration":3,"failureDetails":[],"failureMessages":[],"fullName":"write updateERC20Contract() effects Should update the ERC20 contract address correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Should update the ERC20 contract address correctly"},{"ancestorTitles":["write","updateERC20Contract()","permissions"],"duration":1098,"failureDetails":[],"failureMessages":[],"fullName":"write updateERC20Contract() permissions Only admin can update the ERC20 contract address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Only admin can update the ERC20 contract address"},{"ancestorTitles":["write","updateERC20Contract()","validations"],"duration":1088,"failureDetails":[],"failureMessages":[],"fullName":"write updateERC20Contract() validations Reverts when setting ERC20 contract to zero address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts when setting ERC20 contract to zero address"},{"ancestorTitles":["read","getProceedsReceiver()"],"duration":48,"failureDetails":[],"failureMessages":[],"fullName":"read getProceedsReceiver() Should return the correct proceeds receiver address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Should return the correct proceeds receiver address"},{"ancestorTitles":["read","getPriceIncrement()"],"duration":15,"failureDetails":[],"failureMessages":[],"fullName":"read getPriceIncrement() Should return the correct price increment","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Should return the correct price increment"},{"ancestorTitles":["read","getERC20Contract()"],"duration":null,"failureDetails":[],"failureMessages":[],"fullName":"read getERC20Contract() Should return the correct ERC20 contract address","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"pending","title":"Should return the correct ERC20 contract address"}],"endTime":1736520736640,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/BuilderNFTSeasonOneUpgradeable.spec.ts","startTime":1736520723387,"status":"focused","summary":""},{"assertionResults":[{"ancestorTitles":["ProtocolAccessControl","transferAdmin","effects"],"duration":4253,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl transferAdmin effects allows admin to transfer admin","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"allows admin to transfer admin"},{"ancestorTitles":["ProtocolAccessControl","transferAdmin","permissions"],"duration":1068,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl transferAdmin permissions reverts when not called by admin","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when not called by admin"},{"ancestorTitles":["ProtocolAccessControl","transferAdmin","validations"],"duration":1085,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl transferAdmin validations reverts when setting to zero address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when setting to zero address"},{"ancestorTitles":["ProtocolAccessControl","setRole","effects"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl setRole effects sets a role to a new account","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"sets a role to a new account"},{"ancestorTitles":["ProtocolAccessControl","setRole","events"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl setRole events emits a RoleTransferred event with roleName, previous and new holder if the new holder is different from the previous one","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"emits a RoleTransferred event with roleName, previous and new holder if the new holder is different from the previous one"},{"ancestorTitles":["ProtocolAccessControl","setRole","validations"],"duration":1074,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl setRole validations reverts when setting to zero address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when setting to zero address"},{"ancestorTitles":["ProtocolAccessControl","pause","effects"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl pause effects marks the contract as paused","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"marks the contract as paused"},{"ancestorTitles":["ProtocolAccessControl","pause","permissions"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl pause permissions can be paused by the pauser role ","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"can be paused by the pauser role "},{"ancestorTitles":["ProtocolAccessControl","pause","permissions"],"duration":1064,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl pause permissions reverts when called by non-pauser and non-admin","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when called by non-pauser and non-admin"},{"ancestorTitles":["ProtocolAccessControl","pause","events"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl pause events emits Paused event when paused","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"emits Paused event when paused"},{"ancestorTitles":["ProtocolAccessControl","unPause","effects"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl unPause effects allows admin to unpause the contract","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"allows admin to unpause the contract"},{"ancestorTitles":["ProtocolAccessControl","unPause","permissions"],"duration":1209,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl unPause permissions reverts when called by non-admin","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when called by non-admin"},{"ancestorTitles":["ProtocolAccessControl","unPause","events"],"duration":23,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl unPause events emits Unpaused event when unpaused","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"emits Unpaused event when unpaused"},{"ancestorTitles":["ProtocolAccessControl","testPaused"],"duration":1077,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl testPaused reverts when the contract is paused","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when the contract is paused"},{"ancestorTitles":["ProtocolAccessControl","testPaused"],"duration":22,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl testPaused succeeds when the contract is not paused","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"passed","title":"succeeds when the contract is not paused"},{"ancestorTitles":["ProtocolAccessControl","setPauser","effects"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl setPauser effects allows admin to set a new pauser","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"allows admin to set a new pauser"},{"ancestorTitles":["ProtocolAccessControl","setPauser","permissions"],"duration":1087,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl setPauser permissions reverts when not called by admin","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when not called by admin"},{"ancestorTitles":["ProtocolAccessControl","setPauser","validations"],"duration":1079,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl setPauser validations reverts when setting to zero address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when setting to zero address"},{"ancestorTitles":["ProtocolAccessControl","setPauser","events"],"duration":18,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolAccessControl setPauser events emits a RoleTransferred event when pauser is changed","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"emits a RoleTransferred event when pauser is changed"}],"endTime":1736520738610,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/Protocol/ProtocolAccessControl/write.spec.ts","startTime":1736520722988,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","registerBuilderToken()","effects"],"duration":2821,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation registerBuilderToken() effects Register a new builder token using a builderId","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Register a new builder token using a builderId"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","registerBuilderToken()","events"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation registerBuilderToken() events Emits BuilderTokenRegistered event new tokenId and builderId","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Emits BuilderTokenRegistered event new tokenId and builderId"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","registerBuilderToken()","permissions"],"duration":1094,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation registerBuilderToken() permissions Normal users cannot register a builder token","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Normal users cannot register a builder token"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","registerBuilderToken()","permissions"],"duration":8,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation registerBuilderToken() permissions Minter can register a builder token","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Minter can register a builder token"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","registerBuilderToken()","validations"],"duration":1072,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation registerBuilderToken() validations Revert if the builderId is already registered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Revert if the builderId is already registered"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","registerBuilderToken()","validations"],"duration":1100,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation registerBuilderToken() validations Revert if the builderId is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Revert if the builderId is empty"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","registerBuilderToken()","validations"],"duration":2166,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation registerBuilderToken() validations Revert if the builderId is an invalid uuid","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Revert if the builderId is an invalid uuid"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","mint()","effects"],"duration":41,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation mint() effects Mints tokens to a user account","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Mints tokens to a user account"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","mint()","effects"],"duration":36,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation mint() effects Mints tokens to a different address than the one paying for the transfer","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Mints tokens to a different address than the one paying for the transfer"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","mint()","effects"],"duration":61,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation mint() effects Increments total supply of the token","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Increments total supply of the token"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","mint()","effects"],"duration":56,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation mint() effects Forwards the full proceeds to the proceeds receiver","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Forwards the full proceeds to the proceeds receiver"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","mint()","events"],"duration":1051,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation mint() events Emits TransferSingle event on mint","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"Emits TransferSingle event on mint"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","mint()","permissions"],"duration":401,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation mint() permissions Allows any user to mint tokens if they pay the price","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows any user to mint tokens if they pay the price"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","mint()","validations"],"duration":1095,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation mint() validations Reverts if tokenId is not registered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if tokenId is not registered"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","burn()","effects"],"duration":49,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation burn() effects Burns tokens from a user account","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Burns tokens from a user account"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","burn()","effects"],"duration":79,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation burn() effects Decrements total supply of the token","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Decrements total supply of the token"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","burn()","events"],"duration":34,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation burn() events Emits TransferSingle event on burn","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"status":"passed","title":"Emits TransferSingle event on burn"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","burn()","permissions"],"duration":21,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation burn() permissions Allows token owner to burn tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows token owner to burn tokens"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","burn()","permissions"],"duration":33,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation burn() permissions Allows approved operator to burn tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows approved operator to burn tokens"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","burn()","permissions"],"duration":47,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation burn() permissions Allows admin to burn tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows admin to burn tokens"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","burn()","permissions"],"duration":1139,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation burn() permissions Prevents burning tokens if not owner nor approved","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Prevents burning tokens if not owner nor approved"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","burn()","validations"],"duration":1086,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation burn() validations Reverts if burning more tokens than balance","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if burning more tokens than balance"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","setApprovalForAll()","effects"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation setApprovalForAll() effects Sets operator approval for the caller","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Sets operator approval for the caller"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","setApprovalForAll()","events"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation setApprovalForAll() events Emits ApprovalForAll event","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"Emits ApprovalForAll event"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","setApprovalForAll()","permissions"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation setApprovalForAll() permissions Allows any user to set operator approval","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows any user to set operator approval"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","setApprovalForAll()","validations"],"duration":1068,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation setApprovalForAll() validations Reverts if setting approval for self","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if setting approval for self"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","safeTransferFrom()","effects"],"duration":25,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation safeTransferFrom() effects Transfers tokens from one account to another","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Transfers tokens from one account to another"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","safeTransferFrom()","events"],"duration":26,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation safeTransferFrom() events Emits TransferSingle event on transfer","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"Emits TransferSingle event on transfer"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","safeTransferFrom()","permissions"],"duration":25,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation safeTransferFrom() permissions Allows token owner to transfer tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows token owner to transfer tokens"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","safeTransferFrom()","permissions"],"duration":22,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation safeTransferFrom() permissions Allows approved operator to transfer tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows approved operator to transfer tokens"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","safeTransferFrom()","permissions"],"duration":1087,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation safeTransferFrom() permissions Prevents transferring tokens if not owner nor approved","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Prevents transferring tokens if not owner nor approved"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","safeTransferFrom()","validations"],"duration":1097,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation safeTransferFrom() validations Reverts if caller is not owner nor approved","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if caller is not owner nor approved"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","safeTransferFrom()","validations"],"duration":1140,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation safeTransferFrom() validations Reverts if transferring more tokens than balance","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if transferring more tokens than balance"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","safeBatchTransferFrom()","effects"],"duration":101,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation safeBatchTransferFrom() effects Transfers multiple tokens from one account to another","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Transfers multiple tokens from one account to another"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","safeBatchTransferFrom()","events"],"duration":56,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation safeBatchTransferFrom() events Emits TransferBatch event on transfer","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"Emits TransferBatch event on transfer"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","safeBatchTransferFrom()","permissions"],"duration":64,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation safeBatchTransferFrom() permissions Allows token owner to transfer tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows token owner to transfer tokens"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","safeBatchTransferFrom()","permissions"],"duration":57,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation safeBatchTransferFrom() permissions Allows approved operator to transfer tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows approved operator to transfer tokens"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","safeBatchTransferFrom()","permissions"],"duration":1152,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation safeBatchTransferFrom() permissions Prevents transferring tokens if not owner nor approved","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Prevents transferring tokens if not owner nor approved"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","safeBatchTransferFrom()","validations"],"duration":1098,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation safeBatchTransferFrom() validations Reverts if transferring more tokens than balance","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if transferring more tokens than balance"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","setBaseUri()","effects"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation setBaseUri() effects Updates the base URI when called with a valid newBaseUri","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Updates the base URI when called with a valid newBaseUri"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","setBaseUri()","permissions"],"duration":1068,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation setBaseUri() permissions Only admin can set the base URI","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Only admin can set the base URI"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","mintTo()","effects"],"duration":23,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation mintTo() effects Mints tokens to the specified account and increments balances correctly","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Mints tokens to the specified account and increments balances correctly"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","mintTo()","events"],"duration":20,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation mintTo() events Emits TransferSingle event with correct parameters","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"Emits TransferSingle event with correct parameters"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","mintTo()","permissions"],"duration":1089,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation mintTo() permissions prevents non-admins from minting tokens to an account","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"prevents non-admins from minting tokens to an account"},{"ancestorTitles":["ScoutGamePreSeason02NFTImplementation","mintTo()","permissions"],"duration":60,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTImplementation mintTo() permissions allows minter to mint tokens to an account","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"allows minter to mint tokens to an account"}],"endTime":1736520740653,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/ScoutGamePreSeason02NFT/ScoutGamePreSeason02NFTImplementation/write.spec.ts","startTime":1736520707323,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["deployScoutTokenERC20"],"duration":149,"failureDetails":[],"failureMessages":[],"fullName":"deployScoutTokenERC20 should deploy the ScoutTokenERC20 contract, with minting, approve, transfer, balanceOf and transferFrom enabled, as well as a starting balance of 1 billion tokens for the admin, with balances preserved between upgrades","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"status":"passed","title":"should deploy the ScoutTokenERC20 contract, with minting, approve, transfer, balanceOf and transferFrom enabled, as well as a starting balance of 1 billion tokens for the admin, with balances preserved between upgrades"}],"endTime":1736520741812,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/utils/deployScoutTokenERC20.spec.ts","startTime":1736520736270,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["registerBuilderToken()","effects"],"duration":2953,"failureDetails":[],"failureMessages":[],"fullName":"registerBuilderToken() effects Register a new builder token using a builderId","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Register a new builder token using a builderId"},{"ancestorTitles":["registerBuilderToken()","events"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"registerBuilderToken() events Emits BuilderTokenRegistered event new tokenId and builderId","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Emits BuilderTokenRegistered event new tokenId and builderId"},{"ancestorTitles":["registerBuilderToken()","permissions"],"duration":1107,"failureDetails":[],"failureMessages":[],"fullName":"registerBuilderToken() permissions Only admin can register a builder token","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Only admin can register a builder token"},{"ancestorTitles":["registerBuilderToken()","validations"],"duration":1080,"failureDetails":[],"failureMessages":[],"fullName":"registerBuilderToken() validations Revert if the builderId is already registered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Revert if the builderId is already registered"},{"ancestorTitles":["registerBuilderToken()","validations"],"duration":1069,"failureDetails":[],"failureMessages":[],"fullName":"registerBuilderToken() validations Revert if the builderId is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Revert if the builderId is empty"},{"ancestorTitles":["registerBuilderToken()","validations"],"duration":1097,"failureDetails":[],"failureMessages":[],"fullName":"registerBuilderToken() validations Revert if the builderId is an invalid uuid","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Revert if the builderId is an invalid uuid"},{"ancestorTitles":["mint()","effects"],"duration":20,"failureDetails":[],"failureMessages":[],"fullName":"mint() effects Accept USDC and mint the requested amount of tokens for an NFT","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Accept USDC and mint the requested amount of tokens for an NFT"},{"ancestorTitles":["mint()","effects"],"duration":37,"failureDetails":[],"failureMessages":[],"fullName":"mint() effects Forwards the full fees of the mint to the proceeds receiver","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Forwards the full fees of the mint to the proceeds receiver"},{"ancestorTitles":["mint()","events"],"duration":29,"failureDetails":[],"failureMessages":[],"fullName":"mint() events Emits standard ERC1155 \"TransferSingle\" event","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"Emits standard ERC1155 \"TransferSingle\" event"},{"ancestorTitles":["mint()","events"],"duration":18,"failureDetails":[],"failureMessages":[],"fullName":"mint() events Emits BuilderScouted event with tokenId (number), amount of tokens purchased (), and scoutId (uuid)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"Emits BuilderScouted event with tokenId (number), amount of tokens purchased (), and scoutId (uuid)"},{"ancestorTitles":["mint()","permissions"],"duration":1097,"failureDetails":[],"failureMessages":[],"fullName":"mint() permissions Should revert if the caller has not provided USDC allowance to the contract","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Should revert if the caller has not provided USDC allowance to the contract"},{"ancestorTitles":["mint()","validations"],"duration":2107,"failureDetails":[],"failureMessages":[],"fullName":"mint() validations Revert if the caller's USDC balance is insufficent","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Revert if the caller's USDC balance is insufficent"},{"ancestorTitles":["setBaseUri()","effects"],"duration":28,"failureDetails":[],"failureMessages":[],"fullName":"setBaseUri() effects Updates the base URI when called with a valid newBaseUri","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Updates the base URI when called with a valid newBaseUri"},{"ancestorTitles":["setBaseUri()","permissions"],"duration":1380,"failureDetails":[],"failureMessages":[],"fullName":"setBaseUri() permissions Only admin can set the base URI","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Only admin can set the base URI"},{"ancestorTitles":["setBaseUri()","validations"],"duration":1087,"failureDetails":[],"failureMessages":[],"fullName":"setBaseUri() validations Reverts when called with an empty newBaseUri","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts when called with an empty newBaseUri"},{"ancestorTitles":["burn()","effects"],"duration":31,"failureDetails":[],"failureMessages":[],"fullName":"burn() effects Burns the specified amount of tokens from the account, updating holder balance and total supply of a tokenID","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"Burns the specified amount of tokens from the account, updating holder balance and total supply of a tokenID"},{"ancestorTitles":["burn()","events"],"duration":21,"failureDetails":[],"failureMessages":[],"fullName":"burn() events Emits TransferSingle event with correct parameters when burning tokens","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"Emits TransferSingle event with correct parameters when burning tokens"},{"ancestorTitles":["burn()","permissions"],"duration":1097,"failureDetails":[],"failureMessages":[],"fullName":"burn() permissions Only admin can burn tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Only admin can burn tokens"},{"ancestorTitles":["burn()","validations"],"duration":1078,"failureDetails":[],"failureMessages":[],"fullName":"burn() validations Reverts when trying to burn more tokens than the account has","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts when trying to burn more tokens than the account has"},{"ancestorTitles":["mintTo()","effects"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"mintTo() effects Mints tokens to the specified account","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Mints tokens to the specified account"},{"ancestorTitles":["mintTo()","events"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"mintTo() events Emits TransferSingle event with correct parameters","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"Emits TransferSingle event with correct parameters"},{"ancestorTitles":["mintTo()","events"],"duration":9,"failureDetails":[],"failureMessages":[],"fullName":"mintTo() events Emits BuilderScouted event with correct parameters","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"Emits BuilderScouted event with correct parameters"},{"ancestorTitles":["mintTo()","permissions"],"duration":1069,"failureDetails":[],"failureMessages":[],"fullName":"mintTo() permissions Admin can mint tokens to an account","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Admin can mint tokens to an account"},{"ancestorTitles":["mintTo()","permissions"],"duration":33,"failureDetails":[],"failureMessages":[],"fullName":"mintTo() permissions Minter can mint tokens to an account","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Minter can mint tokens to an account"},{"ancestorTitles":["mintTo()","validations"],"duration":1096,"failureDetails":[],"failureMessages":[],"fullName":"mintTo() validations Reverts when called with an invalid scout UUID","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts when called with an invalid scout UUID"},{"ancestorTitles":["setUriPrefix()","effects"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"setUriPrefix() effects Updates the URI prefix when called with a valid newPrefix","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Updates the URI prefix when called with a valid newPrefix"},{"ancestorTitles":["setUriPrefix()","permissions"],"duration":1077,"failureDetails":[],"failureMessages":[],"fullName":"setUriPrefix() permissions Only admin can set the URI prefix","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Only admin can set the URI prefix"},{"ancestorTitles":["setUriPrefix()","validations"],"duration":1101,"failureDetails":[],"failureMessages":[],"fullName":"setUriPrefix() validations Reverts when called with an empty newPrefix","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Reverts when called with an empty newPrefix"},{"ancestorTitles":["setUriSuffix()","effects"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"setUriSuffix() effects Updates the URI suffix when called with a valid newSuffix","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Updates the URI suffix when called with a valid newSuffix"},{"ancestorTitles":["setUriSuffix()","permissions"],"duration":1069,"failureDetails":[],"failureMessages":[],"fullName":"setUriSuffix() permissions Only admin can set the URI suffix","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Only admin can set the URI suffix"},{"ancestorTitles":["setUriSuffix()","validations"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"setUriSuffix() validations Allows setting an empty URI suffix","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Allows setting an empty URI suffix"},{"ancestorTitles":["setUriPrefixAndSuffix()","effects"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"setUriPrefixAndSuffix() effects Updates both URI prefix and suffix when called with valid values","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Updates both URI prefix and suffix when called with valid values"},{"ancestorTitles":["setUriPrefixAndSuffix()","permissions"],"duration":1077,"failureDetails":[],"failureMessages":[],"fullName":"setUriPrefixAndSuffix() permissions Only admin can set both URI prefix and suffix","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Only admin can set both URI prefix and suffix"},{"ancestorTitles":["setUriPrefixAndSuffix()","validations"],"duration":1080,"failureDetails":[],"failureMessages":[],"fullName":"setUriPrefixAndSuffix() validations Reverts when called with an empty newPrefix","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Reverts when called with an empty newPrefix"},{"ancestorTitles":["setUriPrefixAndSuffix()","validations"],"duration":10,"failureDetails":[],"failureMessages":[],"fullName":"setUriPrefixAndSuffix() validations Allows setting an empty URI suffix","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Allows setting an empty URI suffix"},{"ancestorTitles":["setMinter()","effects"],"duration":36,"failureDetails":[],"failureMessages":[],"fullName":"setMinter() effects Should set the minter address correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Should set the minter address correctly"},{"ancestorTitles":["setMinter()","permissions"],"duration":1075,"failureDetails":[],"failureMessages":[],"fullName":"setMinter() permissions Only admin can set the minter","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Only admin can set the minter"},{"ancestorTitles":["setMinter()","validations"],"duration":1093,"failureDetails":[],"failureMessages":[],"fullName":"setMinter() validations Reverts when setting minter to zero address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts when setting minter to zero address"}],"endTime":1736520742792,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/BuilderNFTImplementation/write.spec.ts","startTime":1736520707330,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ProtocolEASResolver","setAttesterWallet","effects"],"duration":1692,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolEASResolver setAttesterWallet effects updates the attester wallet correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"updates the attester wallet correctly"},{"ancestorTitles":["ProtocolEASResolver","setAttesterWallet","permissions"],"duration":16,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolEASResolver setAttesterWallet permissions allows authorized users","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"allows authorized users"},{"ancestorTitles":["ProtocolEASResolver","setAttesterWallet","permissions"],"duration":1094,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolEASResolver setAttesterWallet permissions denies unauthorized users","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"denies unauthorized users"},{"ancestorTitles":["ProtocolEASResolver","setAttesterWallet","validations"],"duration":1157,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolEASResolver setAttesterWallet validations reverts when input is invalid","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when input is invalid"},{"ancestorTitles":["ProtocolEASResolver","rolloverAttesterWallet","effects"],"duration":232,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolEASResolver rolloverAttesterWallet effects updates the attester wallets correctly and sets the current attester as secondary attester","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"updates the attester wallets correctly and sets the current attester as secondary attester"},{"ancestorTitles":["ProtocolEASResolver","rolloverAttesterWallet","permissions"],"duration":25,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolEASResolver rolloverAttesterWallet permissions allows authorized users","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"allows authorized users"},{"ancestorTitles":["ProtocolEASResolver","rolloverAttesterWallet","permissions"],"duration":1151,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolEASResolver rolloverAttesterWallet permissions denies unauthorized users","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"denies unauthorized users"},{"ancestorTitles":["ProtocolEASResolver","rolloverAttesterWallet","validations"],"duration":1096,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolEASResolver rolloverAttesterWallet validations reverts when input is invalid","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when input is invalid"},{"ancestorTitles":["ProtocolEASResolver","transferAdmin","effects"],"duration":17,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolEASResolver transferAdmin effects updates the admin correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"updates the admin correctly"},{"ancestorTitles":["ProtocolEASResolver","transferAdmin","permissions"],"duration":20,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolEASResolver transferAdmin permissions allows authorized users","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"allows authorized users"},{"ancestorTitles":["ProtocolEASResolver","transferAdmin","permissions"],"duration":1112,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolEASResolver transferAdmin permissions denies unauthorized users","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"denies unauthorized users"},{"ancestorTitles":["ProtocolEASResolver","transferAdmin","validations"],"duration":1102,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolEASResolver transferAdmin validations reverts when input is invalid","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"reverts when input is invalid"},{"ancestorTitles":["ProtocolEASResolver","onAttest","validations"],"duration":68,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolEASResolver onAttest validations allows the attester wallet to attest","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"allows the attester wallet to attest"},{"ancestorTitles":["ProtocolEASResolver","onAttest","validations"],"duration":40,"failureDetails":[],"failureMessages":[],"fullName":"ProtocolEASResolver onAttest validations prevents other wallets than the attester wallet from attesting","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"prevents other wallets than the attester wallet from attesting"}],"endTime":1736520742855,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/Protocol/ProtocolEASResolver/write.spec.ts","startTime":1736520731924,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","registerBuilderToken()","effects"],"duration":2861,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation registerBuilderToken() effects Register a new builder token using a builderId","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Register a new builder token using a builderId"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","registerBuilderToken()","events"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation registerBuilderToken() events Emits BuilderTokenRegistered event new tokenId and builderId","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Emits BuilderTokenRegistered event new tokenId and builderId"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","registerBuilderToken()","permissions"],"duration":1108,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation registerBuilderToken() permissions Normal users cannot register a builder token","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Normal users cannot register a builder token"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","registerBuilderToken()","permissions"],"duration":12,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation registerBuilderToken() permissions Minter can register a builder token","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Minter can register a builder token"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","registerBuilderToken()","validations"],"duration":1075,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation registerBuilderToken() validations Revert if the builderId is already registered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Revert if the builderId is already registered"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","registerBuilderToken()","validations"],"duration":1076,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation registerBuilderToken() validations Revert if the builderId is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Revert if the builderId is empty"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","registerBuilderToken()","validations"],"duration":2139,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation registerBuilderToken() validations Revert if the builderId is an invalid uuid","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Revert if the builderId is an invalid uuid"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","rolloverMinterWallet()","effects"],"duration":14,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation rolloverMinterWallet() effects Updates minter and secondary minter roles","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"Updates minter and secondary minter roles"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","rolloverMinterWallet()","events"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation rolloverMinterWallet() events Emits RoleTransferred event","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Emits RoleTransferred event"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","rolloverMinterWallet()","permissions"],"duration":1333,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation rolloverMinterWallet() permissions Can only be called by the admin","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Can only be called by the admin"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","rolloverMinterWallet()","validations"],"duration":1174,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation rolloverMinterWallet() validations Rejects zero address as new minter","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Rejects zero address as new minter"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","mint()","effects"],"duration":72,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation mint() effects Mints tokens to a user account","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Mints tokens to a user account"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","mint()","effects"],"duration":90,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation mint() effects Mints tokens to a different address than the one paying for the transfer","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Mints tokens to a different address than the one paying for the transfer"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","mint()","effects"],"duration":204,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation mint() effects Increments total supply of the token","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Increments total supply of the token"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","mint()","effects"],"duration":62,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation mint() effects Forwards 20% of the $SCOUT to the builder, and the remaining 80% to the proceeds receiver","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Forwards 20% of the $SCOUT to the builder, and the remaining 80% to the proceeds receiver"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","mint()","events"],"duration":95,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation mint() events Emits TransferSingle event on mint","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"Emits TransferSingle event on mint"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","mint()","permissions"],"duration":24,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation mint() permissions Allows any user to mint tokens if they pay the price","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows any user to mint tokens if they pay the price"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","mint()","permissions"],"duration":1109,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation mint() permissions Cannot mint when contract is paused","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Cannot mint when contract is paused"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","mint()","validations"],"duration":1073,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation mint() validations Reverts if tokenId is not registered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if tokenId is not registered"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","burn()","effects"],"duration":20,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation burn() effects Burns tokens from a user account","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Burns tokens from a user account"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","burn()","effects"],"duration":19,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation burn() effects Decrements total supply of the token","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Decrements total supply of the token"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","burn()","events"],"duration":20,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation burn() events Emits TransferSingle event on burn","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"status":"passed","title":"Emits TransferSingle event on burn"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","burn()","permissions"],"duration":18,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation burn() permissions Allows token owner to burn tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows token owner to burn tokens"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","burn()","permissions"],"duration":19,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation burn() permissions Allows approved operator to burn tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows approved operator to burn tokens"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","burn()","permissions"],"duration":1082,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation burn() permissions Prevents burning tokens if not owner nor approved","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Prevents burning tokens if not owner nor approved"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","burn()","validations"],"duration":1082,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation burn() validations Reverts if burning more tokens than balance","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if burning more tokens than balance"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","setApprovalForAll()","effects"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation setApprovalForAll() effects Sets operator approval for the caller","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Sets operator approval for the caller"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","setApprovalForAll()","events"],"duration":4,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation setApprovalForAll() events Emits ApprovalForAll event","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"Emits ApprovalForAll event"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","setApprovalForAll()","permissions"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation setApprovalForAll() permissions Allows any user to set operator approval","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows any user to set operator approval"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","setApprovalForAll()","validations"],"duration":1067,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation setApprovalForAll() validations Reverts if setting approval for self","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if setting approval for self"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","safeTransferFrom()","effects"],"duration":131,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation safeTransferFrom() effects Transfers tokens from one account to another","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Transfers tokens from one account to another"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","safeTransferFrom()","events"],"duration":58,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation safeTransferFrom() events Emits TransferSingle event on transfer","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"Emits TransferSingle event on transfer"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","safeTransferFrom()","permissions"],"duration":69,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation safeTransferFrom() permissions Allows token owner to transfer tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows token owner to transfer tokens"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","safeTransferFrom()","permissions"],"duration":67,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation safeTransferFrom() permissions Allows approved operator to transfer tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows approved operator to transfer tokens"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","safeTransferFrom()","permissions"],"duration":1127,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation safeTransferFrom() permissions Prevents transferring tokens if not owner nor approved","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Prevents transferring tokens if not owner nor approved"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","safeTransferFrom()","validations"],"duration":1155,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation safeTransferFrom() validations Reverts if caller is not owner nor approved","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if caller is not owner nor approved"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","safeTransferFrom()","validations"],"duration":1104,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation safeTransferFrom() validations Reverts if transferring more tokens than balance","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if transferring more tokens than balance"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","safeBatchTransferFrom()","effects"],"duration":64,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation safeBatchTransferFrom() effects Transfers multiple tokens from one account to another","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Transfers multiple tokens from one account to another"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","safeBatchTransferFrom()","events"],"duration":27,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation safeBatchTransferFrom() events Emits TransferBatch event on transfer","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"Emits TransferBatch event on transfer"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","safeBatchTransferFrom()","permissions"],"duration":25,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation safeBatchTransferFrom() permissions Allows token owner to transfer tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows token owner to transfer tokens"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","safeBatchTransferFrom()","permissions"],"duration":28,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation safeBatchTransferFrom() permissions Allows approved operator to transfer tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows approved operator to transfer tokens"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","safeBatchTransferFrom()","permissions"],"duration":1090,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation safeBatchTransferFrom() permissions Prevents transferring tokens if not owner nor approved","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Prevents transferring tokens if not owner nor approved"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","safeBatchTransferFrom()","validations"],"duration":1114,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation safeBatchTransferFrom() validations Reverts if transferring more tokens than balance","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if transferring more tokens than balance"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","setBaseUri()","effects"],"duration":6,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation setBaseUri() effects Updates the base URI when called with a valid newBaseUri","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Updates the base URI when called with a valid newBaseUri"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","setBaseUri()","permissions"],"duration":1072,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation setBaseUri() permissions Only admin can set the base URI","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Only admin can set the base URI"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","updateBuilderTokenAddress()","effects"],"duration":38,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation updateBuilderTokenAddress() effects Updates the builder address for a token","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Updates the builder address for a token"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","updateBuilderTokenAddress()","permissions"],"duration":44,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation updateBuilderTokenAddress() permissions Allows current builder to update their address","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Allows current builder to update their address"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","updateBuilderTokenAddress()","permissions"],"duration":52,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation updateBuilderTokenAddress() permissions Allows admin to update builder address","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Allows admin to update builder address"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","updateBuilderTokenAddress()","permissions"],"duration":1144,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation updateBuilderTokenAddress() permissions Reverts if caller is not admin or current builder","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if caller is not admin or current builder"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","updateBuilderTokenAddress()","validations"],"duration":1104,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation updateBuilderTokenAddress() validations Reverts if new address is zero address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if new address is zero address"},{"ancestorTitles":["ScoutProtocolBuilderNFTImplementation","updateBuilderTokenAddress()","validations"],"duration":1073,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTImplementation updateBuilderTokenAddress() validations Reverts if token is not yet allocated","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if token is not yet allocated"}],"endTime":1736520745154,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/Protocol/ScoutProtocolBuilderNFT/ScoutProtocolBuilderNFTImplementation/write.spec.ts","startTime":1736520707327,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ScoutProtocolBuilderNFTProxy","setImplementation()","effects"],"duration":1814,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTProxy setImplementation() effects Updates the implementation address correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Updates the implementation address correctly"},{"ancestorTitles":["ScoutProtocolBuilderNFTProxy","setImplementation()","permissions"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTProxy setImplementation() permissions Allows admin to set implementation","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows admin to set implementation"},{"ancestorTitles":["ScoutProtocolBuilderNFTProxy","setImplementation()","permissions"],"duration":1092,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTProxy setImplementation() permissions Prevents non-admin from setting implementation","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Prevents non-admin from setting implementation"},{"ancestorTitles":["ScoutProtocolBuilderNFTProxy","setImplementation()","validations"],"duration":1123,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTProxy setImplementation() validations Reverts if new implementation address is zero address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if new implementation address is zero address"},{"ancestorTitles":["ScoutProtocolBuilderNFTProxy","setImplementation()","validations"],"duration":1090,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTProxy setImplementation() validations Reverts if new implementation address is an EOA wallet","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if new implementation address is an EOA wallet"},{"ancestorTitles":["ScoutProtocolBuilderNFTProxy","setImplementation()","validations"],"duration":1192,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTProxy setImplementation() validations Reverts if new implementation address does not accept the upgrade","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if new implementation address does not accept the upgrade"},{"ancestorTitles":["ScoutProtocolBuilderNFTProxy","setImplementation()","validations"],"duration":1080,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTProxy setImplementation() validations Reverts if new implementation address is the same as current","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if new implementation address is the same as current"}],"endTime":1736520745636,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/Protocol/ScoutProtocolBuilderNFT/ScoutProtocolBuilderNFTProxy/write.spec.ts","startTime":1736520734075,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","registerBuilderToken()","effects"],"duration":3032,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation registerBuilderToken() effects Register a new builder token using a builderId and a specific tokenId","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"Register a new builder token using a builderId and a specific tokenId"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","registerBuilderToken()","effects"],"duration":81,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation registerBuilderToken() effects increments the total builders count","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"increments the total builders count"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","registerBuilderToken()","events"],"duration":54,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation registerBuilderToken() events Emits BuilderTokenRegistered event new tokenId and builderId","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Emits BuilderTokenRegistered event new tokenId and builderId"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","registerBuilderToken()","permissions"],"duration":1119,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation registerBuilderToken() permissions Only admin can register a builder token","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Only admin can register a builder token"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","registerBuilderToken()","permissions"],"duration":18,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation registerBuilderToken() permissions Minter wallet can register a builder token","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Minter wallet can register a builder token"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","registerBuilderToken()","validations"],"duration":1078,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation registerBuilderToken() validations Revert if the builderId is already registered","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Revert if the builderId is already registered"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","registerBuilderToken()","validations"],"duration":1077,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation registerBuilderToken() validations Revert if the builderId is empty","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Revert if the builderId is empty"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","registerBuilderToken()","validations"],"duration":1084,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation registerBuilderToken() validations Revert if the builderId is an invalid uuid","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Revert if the builderId is an invalid uuid"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","mint()","effects"],"duration":33,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation mint() effects Accept USDC and mint the requested amount of tokens for an NFT","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Accept USDC and mint the requested amount of tokens for an NFT"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","mint()","effects"],"duration":28,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation mint() effects Forwards the full fees of the mint to the proceeds receiver","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Forwards the full fees of the mint to the proceeds receiver"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","mint()","events"],"duration":37,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation mint() events Emits standard ERC1155 \"TransferSingle\" event","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"Emits standard ERC1155 \"TransferSingle\" event"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","mint()","events"],"duration":32,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation mint() events Emits BuilderScouted event with tokenId (number), amount of tokens purchased (), and scoutId (uuid)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"Emits BuilderScouted event with tokenId (number), amount of tokens purchased (), and scoutId (uuid)"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","mint()","permissions"],"duration":1290,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation mint() permissions Should revert if the caller has not provided USDC allowance to the contract","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Should revert if the caller has not provided USDC allowance to the contract"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","mint()","validations"],"duration":2266,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation mint() validations Revert if the caller's USDC balance is insufficent","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Revert if the caller's USDC balance is insufficent"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","mint()","validations"],"duration":1173,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation mint() validations Reverts if trying to mint more than 1 NFT","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if trying to mint more than 1 NFT"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","mint()","validations"],"duration":1133,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation mint() validations Reverts if user already minted a specific NFT","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Reverts if user already minted a specific NFT"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","mint()","validations"],"duration":1120,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation mint() validations Reverts if the user has already minted the max amount of NFTs","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"Reverts if the user has already minted the max amount of NFTs"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","setBaseUri()","effects"],"duration":13,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation setBaseUri() effects Updates the base URI when called with a valid newBaseUri","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Updates the base URI when called with a valid newBaseUri"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","setBaseUri()","permissions"],"duration":1076,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation setBaseUri() permissions Only admin can set the base URI","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Only admin can set the base URI"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","setBaseUri()","validations"],"duration":1077,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation setBaseUri() validations Reverts when called with an empty newBaseUri","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts when called with an empty newBaseUri"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","burn()","effects"],"duration":50,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation burn() effects Burns the specified amount of tokens from the account, updating holder balance and total supply of a tokenID","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"Burns the specified amount of tokens from the account, updating holder balance and total supply of a tokenID"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","burn()","events"],"duration":42,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation burn() events Emits TransferSingle event with correct parameters when burning tokens","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"Emits TransferSingle event with correct parameters when burning tokens"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","burn()","permissions"],"duration":1160,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation burn() permissions Only admin can burn tokens","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Only admin can burn tokens"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","burn()","validations"],"duration":1118,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation burn() validations Reverts when trying to burn more tokens than the account has","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts when trying to burn more tokens than the account has"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","mintTo()","effects"],"duration":89,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation mintTo() effects Mints tokens to the specified account","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Mints tokens to the specified account"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","mintTo()","events"],"duration":45,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation mintTo() events Emits TransferSingle event with correct parameters","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"Emits TransferSingle event with correct parameters"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","mintTo()","events"],"duration":29,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation mintTo() events Emits BuilderScouted event with correct parameters","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"Emits BuilderScouted event with correct parameters"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","mintTo()","permissions"],"duration":1087,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation mintTo() permissions Admin can mint tokens to an account","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Admin can mint tokens to an account"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","mintTo()","permissions"],"duration":94,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation mintTo() permissions Minter can mint tokens to an account","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"status":"passed","title":"Minter can mint tokens to an account"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","mintTo()","validations"],"duration":1135,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation mintTo() validations Reverts when called with an invalid scout UUID","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts when called with an invalid scout UUID"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","setUriPrefix()","effects"],"duration":36,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation setUriPrefix() effects Updates the URI prefix when called with a valid newPrefix","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Updates the URI prefix when called with a valid newPrefix"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","setUriPrefix()","permissions"],"duration":1096,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation setUriPrefix() permissions Only admin can set the URI prefix","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Only admin can set the URI prefix"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","setUriPrefix()","validations"],"duration":1097,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation setUriPrefix() validations Reverts when called with an empty newPrefix","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Reverts when called with an empty newPrefix"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","setUriSuffix()","effects"],"duration":81,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation setUriSuffix() effects Updates the URI suffix when called with a valid newSuffix","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Updates the URI suffix when called with a valid newSuffix"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","setUriSuffix()","permissions"],"duration":1131,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation setUriSuffix() permissions Only admin can set the URI suffix","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Only admin can set the URI suffix"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","setUriSuffix()","validations"],"duration":43,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation setUriSuffix() validations Allows setting an empty URI suffix","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Allows setting an empty URI suffix"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","setUriPrefixAndSuffix()","effects"],"duration":21,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation setUriPrefixAndSuffix() effects Updates both URI prefix and suffix when called with valid values","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Updates both URI prefix and suffix when called with valid values"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","setUriPrefixAndSuffix()","permissions"],"duration":1097,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation setUriPrefixAndSuffix() permissions Only admin can set both URI prefix and suffix","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Only admin can set both URI prefix and suffix"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","setUriPrefixAndSuffix()","validations"],"duration":1124,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation setUriPrefixAndSuffix() validations Reverts when called with an empty newPrefix","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Reverts when called with an empty newPrefix"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","setUriPrefixAndSuffix()","validations"],"duration":54,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation setUriPrefixAndSuffix() validations Allows setting an empty URI suffix","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Allows setting an empty URI suffix"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","setMinter()","effects"],"duration":28,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation setMinter() effects Should set the minter address correctly","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Should set the minter address correctly"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","setMinter()","permissions"],"duration":1090,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation setMinter() permissions Only admin can set the minter","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Only admin can set the minter"},{"ancestorTitles":["ScoutGameStarterPackNFTImplementation","setMinter()","validations"],"duration":1109,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGameStarterPackNFTImplementation setMinter() validations Reverts when setting minter to zero address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts when setting minter to zero address"}],"endTime":1736520747196,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/ScoutGameStarterPackNFT/ScoutGameStarterPackNFTImplementation/write.spec.ts","startTime":1736520707330,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["deployScoutTokenERC20"],"duration":265,"failureDetails":[],"failureMessages":[],"fullName":"deployScoutTokenERC20 should deploy the weekly vesting contract, with functional vesting","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"should deploy the weekly vesting contract, with functional vesting"}],"endTime":1736520747527,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/utils/deployWeeklyVesting.spec.ts","startTime":1736520740714,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ScoutGamePreSeason02NFTUpgradeable","setImplementation()","effects"],"duration":2442,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTUpgradeable setImplementation() effects Updates the implementation address correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Updates the implementation address correctly"},{"ancestorTitles":["ScoutGamePreSeason02NFTUpgradeable","setImplementation()","permissions"],"duration":7,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTUpgradeable setImplementation() permissions Allows admin to set implementation","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows admin to set implementation"},{"ancestorTitles":["ScoutGamePreSeason02NFTUpgradeable","setImplementation()","permissions"],"duration":1096,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTUpgradeable setImplementation() permissions Prevents non-admin from setting implementation","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Prevents non-admin from setting implementation"},{"ancestorTitles":["ScoutGamePreSeason02NFTUpgradeable","setImplementation()","validations"],"duration":1088,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTUpgradeable setImplementation() validations Reverts if new implementation address is zero address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if new implementation address is zero address"},{"ancestorTitles":["ScoutGamePreSeason02NFTUpgradeable","setImplementation()","validations"],"duration":1089,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTUpgradeable setImplementation() validations Reverts if new implementation address is an EOA wallet","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if new implementation address is an EOA wallet"},{"ancestorTitles":["ScoutGamePreSeason02NFTUpgradeable","setImplementation()","validations"],"duration":1390,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTUpgradeable setImplementation() validations Reverts if new implementation address does not accept the upgrade","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if new implementation address does not accept the upgrade"},{"ancestorTitles":["ScoutGamePreSeason02NFTUpgradeable","setImplementation()","validations"],"duration":1143,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTUpgradeable setImplementation() validations Reverts if new implementation address is the same as current","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if new implementation address is the same as current"}],"endTime":1736520748163,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/ScoutGamePreSeason02NFT/ScoutGamePreSeason02NFTUpgradeable/write.spec.ts","startTime":1736520736708,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["generateWallets"],"duration":3608,"failureDetails":[],"failureMessages":[],"fullName":"generateWallets should generate an admin wallet and 3 user wallets","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"should generate an admin wallet and 3 user wallets"},{"ancestorTitles":["generateWallets"],"duration":34,"failureDetails":[],"failureMessages":[],"fullName":"generateWallets should generate a different set of addresses each time it is called","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"should generate a different set of addresses each time it is called"}],"endTime":1736520749228,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/utils/testUtils.spec.ts","startTime":1736520742846,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["deployUsdc"],"duration":35,"failureDetails":[],"failureMessages":[],"fullName":"deployUsdc should deploy the USDC contract, with minting, approve, transfer, balanceOf and transferFrom enabled","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"status":"passed","title":"should deploy the USDC contract, with minting, approve, transfer, balanceOf and transferFrom enabled"}],"endTime":1736520749931,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/utils/deployUsdc.spec.ts","startTime":1736520741827,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ScoutProtocolProxy","setImplementation()","effects"],"duration":2016,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolProxy setImplementation() effects Updates the implementation address correctly","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"Updates the implementation address correctly"},{"ancestorTitles":["ScoutProtocolProxy","setImplementation()","permissions"],"duration":5,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolProxy setImplementation() permissions Allows admin to set implementation","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Allows admin to set implementation"},{"ancestorTitles":["ScoutProtocolProxy","setImplementation()","permissions"],"duration":1095,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolProxy setImplementation() permissions Prevents non-admin from setting implementation","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Prevents non-admin from setting implementation"},{"ancestorTitles":["ScoutProtocolProxy","setImplementation()","validations"],"duration":1122,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolProxy setImplementation() validations Reverts if new implementation address is zero address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if new implementation address is zero address"},{"ancestorTitles":["ScoutProtocolProxy","setImplementation()","validations"],"duration":1110,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolProxy setImplementation() validations Reverts if new implementation address is an EOA wallet","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if new implementation address is an EOA wallet"},{"ancestorTitles":["ScoutProtocolProxy","setImplementation()","validations"],"duration":1265,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolProxy setImplementation() validations Reverts if new implementation address cannot accept the upgrade","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if new implementation address cannot accept the upgrade"},{"ancestorTitles":["ScoutProtocolProxy","setImplementation()","validations"],"duration":1100,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolProxy setImplementation() validations Reverts if new implementation address is the same as current","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Reverts if new implementation address is the same as current"}],"endTime":1736520750166,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/Protocol/ScoutProtocol/ScoutProtocolProxy/write.spec.ts","startTime":1736520738616,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Proxy and Initialization"],"duration":4853,"failureDetails":[],"failureMessages":[],"fullName":"Proxy and Initialization Should set the correct admin, implementation","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"status":"passed","title":"Should set the correct admin, implementation"}],"endTime":1736520750408,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/utils/deployScoutGamePreSeason02NftContract.spec.ts","startTime":1736520742862,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["generateTestReport"],"duration":54,"failureDetails":[],"failureMessages":[],"fullName":"generateTestReport should generate a test report","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"status":"passed","title":"should generate a test report"}],"endTime":1736520750891,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/utils/generateTestReport.spec.ts","startTime":1736520750412,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Scout Protocol Builder NFT Proxy and Initialization"],"duration":2788,"failureDetails":[],"failureMessages":[],"fullName":"Scout Protocol Builder NFT Proxy and Initialization Should set the correct admin, implementation and ERC20 token","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Should set the correct admin, implementation and ERC20 token"}],"endTime":1736520752949,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/utils/deployScoutProtocolBuilderNft.spec.ts","startTime":1736520745206,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Proxy and Initialization"],"duration":3103,"failureDetails":[],"failureMessages":[],"fullName":"Proxy and Initialization Should set the correct admin and implementation","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Should set the correct admin and implementation"}],"endTime":1736520754010,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/utils/deployProtocolContract.spec.ts","startTime":1736520745693,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ScoutProtocolBuilderNFTProxy","implementation()","returns"],"duration":3221,"failureDetails":[],"failureMessages":[],"fullName":"ScoutProtocolBuilderNFTProxy implementation() returns Returns the current implementation address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the current implementation address"}],"endTime":1736520756318,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/Protocol/ScoutProtocolBuilderNFT/ScoutProtocolBuilderNFTProxy/read.spec.ts","startTime":1736520748172,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Proxy and Initialization"],"duration":3146,"failureDetails":[],"failureMessages":[],"fullName":"Proxy and Initialization Should set the correct admin, implementation, and payment token","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Should set the correct admin, implementation, and payment token"}],"endTime":1736520756340,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/utils/deployBuilderNftStarterPackContract.spec.ts","startTime":1736520747262,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ScoutGamePreSeason02NFTUpgradeable","implementation()","returns"],"duration":2686,"failureDetails":[],"failureMessages":[],"fullName":"ScoutGamePreSeason02NFTUpgradeable implementation() returns Returns the current implementation address","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"Returns the current implementation address"}],"endTime":1736520756429,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/ScoutGamePreSeason02NFT/ScoutGamePreSeason02NFTUpgradeable/read.spec.ts","startTime":1736520749234,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Proxy and Initialization"],"duration":3395,"failureDetails":[],"failureMessages":[],"fullName":"Proxy and Initialization Should set the correct admin, implementation, and payment token","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"Should set the correct admin, implementation, and payment token"}],"endTime":1736520756533,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/utils/deployBuilderNftContract.spec.ts","startTime":1736520747559,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["deployEAS"],"duration":4330,"failureDetails":[],"failureMessages":[],"fullName":"deployEAS should deploy EAS contract along with the builder event schema and Protocol Resolver","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"status":"passed","title":"should deploy EAS contract along with the builder event schema and Protocol Resolver"}],"endTime":1736520758184,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/utils/deployEAS.spec.ts","startTime":1736520749941,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["ScoutTokenERC20Proxy","setImplementation()","effects"],"duration":5509,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Proxy setImplementation() effects updates the implementation address correctly, preserving balances and initialized state","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"status":"passed","title":"updates the implementation address correctly, preserving balances and initialized state"},{"ancestorTitles":["ScoutTokenERC20Proxy","setImplementation()","permissions"],"duration":1279,"failureDetails":[],"failureMessages":[],"fullName":"ScoutTokenERC20Proxy setImplementation() permissions prevents non-admin from setting the implementation","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"status":"passed","title":"prevents non-admin from setting the implementation"}],"endTime":1736520761330,"message":"","name":"/Users/mo/Products/charmverse/scout-protocol/__test__/contracts/Protocol/ScoutProtocolERC20/ScoutTokenERC20Proxy/write.spec.ts","startTime":1736520750174,"status":"passed","summary":""}],"wasInterrupted":false}