@bananapus/core-v6 0.0.36 → 0.0.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/foundry.lock +1 -7
  2. package/foundry.toml +1 -1
  3. package/package.json +19 -7
  4. package/src/JBController.sol +26 -5
  5. package/src/JBMultiTerminal.sol +85 -47
  6. package/src/JBTerminalStore.sol +6 -6
  7. package/src/interfaces/IJBController.sol +4 -1
  8. package/src/libraries/JBFees.sol +47 -9
  9. package/src/libraries/JBPayoutSplitGroupLib.sol +2 -2
  10. package/src/periphery/JBMatchingPriceFeed.sol +1 -1
  11. package/test/mock/MockMaliciousBeneficiary.sol +15 -15
  12. package/ADMINISTRATION.md +0 -103
  13. package/ARCHITECTURE.md +0 -133
  14. package/AUDIT_INSTRUCTIONS.md +0 -139
  15. package/RISKS.md +0 -215
  16. package/SKILLS.md +0 -55
  17. package/STYLE_GUIDE.md +0 -610
  18. package/USER_JOURNEYS.md +0 -215
  19. package/script/Deploy.s.sol +0 -124
  20. package/script/DeployPeriphery.s.sol +0 -354
  21. package/slither-ci.config.json +0 -10
  22. package/test/AuditFixes.t.sol +0 -808
  23. package/test/ComprehensiveInvariant.t.sol +0 -306
  24. package/test/CoreExploitTests.t.sol +0 -2741
  25. package/test/EconomicSimulation.t.sol +0 -348
  26. package/test/EntryPointPermutations.t.sol +0 -684
  27. package/test/FlashLoanAttacks.t.sol +0 -797
  28. package/test/PermissionEscalation.t.sol +0 -711
  29. package/test/PermissionsInvariant.t.sol +0 -403
  30. package/test/RulesetTransitions.t.sol +0 -713
  31. package/test/SplitLoopTests.t.sol +0 -752
  32. package/test/TestAccessToFunds.sol +0 -2683
  33. package/test/TestAuditResponseDesignProofs.sol +0 -434
  34. package/test/TestCashOut.sol +0 -198
  35. package/test/TestCashOutCountFor.sol +0 -271
  36. package/test/TestCashOutHooks.sol +0 -351
  37. package/test/TestCashOutTimingEdge.sol +0 -241
  38. package/test/TestDataHookFuzzing.sol +0 -524
  39. package/test/TestDurationUnderflow.sol +0 -233
  40. package/test/TestFeeFreeCashOutBypass.sol +0 -949
  41. package/test/TestFeeProcessingFailure.sol +0 -218
  42. package/test/TestFees.sol +0 -619
  43. package/test/TestForwardedTokenConsumption.sol +0 -425
  44. package/test/TestInterfaceSupport.sol +0 -81
  45. package/test/TestJBERC20Inheritance.sol +0 -103
  46. package/test/TestL2SequencerPriceFeed.sol +0 -292
  47. package/test/TestLaunchProject.sol +0 -188
  48. package/test/TestMetaTx.sol +0 -217
  49. package/test/TestMetadataOffsetOverflow.sol +0 -179
  50. package/test/TestMetadataParserLib.sol +0 -471
  51. package/test/TestMigrationHeldFees.sol +0 -255
  52. package/test/TestMintTokensOf.sol +0 -185
  53. package/test/TestMultiTerminalSurplus.sol +0 -348
  54. package/test/TestMultiTokenSurplus.sol +0 -202
  55. package/test/TestMultipleAccessLimits.sol +0 -664
  56. package/test/TestPayBurnRedeemFlow.sol +0 -195
  57. package/test/TestPayHooks.sol +0 -209
  58. package/test/TestPermissions.sol +0 -324
  59. package/test/TestPermissionsEdge.sol +0 -290
  60. package/test/TestPermit2DataHook.t.sol +0 -360
  61. package/test/TestPermit2Terminal.sol +0 -372
  62. package/test/TestRulesetQueueing.sol +0 -1025
  63. package/test/TestRulesetQueuingStress.sol +0 -806
  64. package/test/TestRulesetWeightCaching.sol +0 -178
  65. package/test/TestSplits.sol +0 -391
  66. package/test/TestTerminalMigration.sol +0 -274
  67. package/test/TestTerminalPreviewParity.sol +0 -208
  68. package/test/TestTokenFlow.sol +0 -191
  69. package/test/TestWeightCacheStaleAfterRejection.sol +0 -303
  70. package/test/WeirdTokenTests.t.sol +0 -817
  71. package/test/audit/CashOutReenterPay.t.sol +0 -501
  72. package/test/audit/CodexHeldFeeRounding.t.sol +0 -159
  73. package/test/audit/CrossTerminalSurplusSpoof.t.sol +0 -140
  74. package/test/audit/CycledSurplusAllowanceReset.t.sol +0 -184
  75. package/test/audit/FeeFreeSurplusLifecycle.t.sol +0 -399
  76. package/test/audit/FeeFreeSurplusStale.t.sol +0 -248
  77. package/test/audit/USDTVoidReturnCompat.t.sol +0 -525
  78. package/test/fork/TestChainlinkPriceFeedFork.sol +0 -254
  79. package/test/fork/TestSequencerPriceFeedFork.sol +0 -168
  80. package/test/fork/TestTerminalPreviewParityFork.sol +0 -108
  81. package/test/formal/BondingCurveProperties.t.sol +0 -420
  82. package/test/formal/FeeProperties.t.sol +0 -252
  83. package/test/invariants/Phase3DeepInvariant.t.sol +0 -412
  84. package/test/invariants/RulesetsInvariant.t.sol +0 -125
  85. package/test/invariants/TerminalStoreInvariant.t.sol +0 -227
  86. package/test/invariants/TokensInvariant.t.sol +0 -195
  87. package/test/invariants/handlers/ComprehensiveHandler.sol +0 -303
  88. package/test/invariants/handlers/EconomicHandler.sol +0 -377
  89. package/test/invariants/handlers/Phase3Handler.sol +0 -443
  90. package/test/invariants/handlers/RulesetsHandler.sol +0 -115
  91. package/test/invariants/handlers/TerminalStoreHandler.sol +0 -151
  92. package/test/invariants/handlers/TokensHandler.sol +0 -126
  93. package/test/regression/HoldFeesCashOutReserved.t.sol +0 -415
  94. package/test/regression/WeightCacheBoundary.t.sol +0 -291
  95. package/test/trees/JBController/burnTokensOf.tree +0 -9
  96. package/test/trees/JBController/claimTokensFor.tree +0 -5
  97. package/test/trees/JBController/deployERC20For.tree +0 -5
  98. package/test/trees/JBController/getRulesetOf.tree +0 -5
  99. package/test/trees/JBController/launchProjectFor.tree +0 -12
  100. package/test/trees/JBController/launchRulesetsFor.tree +0 -8
  101. package/test/trees/JBController/migrateController.tree +0 -12
  102. package/test/trees/JBController/mintTokensOf.tree +0 -12
  103. package/test/trees/JBController/payReservedTokenToTerminal.tree +0 -8
  104. package/test/trees/JBController/receiveMigrationFrom.tree +0 -4
  105. package/test/trees/JBController/sendReservedTokensToSplitsOf.tree +0 -12
  106. package/test/trees/JBController/setMetadataOf.tree +0 -5
  107. package/test/trees/JBController/setSplitGroupsOf.tree +0 -5
  108. package/test/trees/JBController/setTokenFor.tree +0 -5
  109. package/test/trees/JBController/transferCreditsFrom.tree +0 -8
  110. package/test/trees/JBDirectory/primaryTerminalOf.tree +0 -8
  111. package/test/trees/JBDirectory/setControllerOf.tree +0 -11
  112. package/test/trees/JBDirectory/setPrimaryTerminalOf.tree +0 -15
  113. package/test/trees/JBDirectory/setTerminalsOf.tree +0 -11
  114. package/test/trees/JBERC20/initialize.tree +0 -7
  115. package/test/trees/JBERC20/name.tree +0 -5
  116. package/test/trees/JBERC20/nonces.tree +0 -5
  117. package/test/trees/JBERC20/symbol.tree +0 -5
  118. package/test/trees/JBFeelessAddresses/setFeelessAddress.tree +0 -5
  119. package/test/trees/JBFeelessAddresses/supportsInterface.tree +0 -5
  120. package/test/trees/JBFundAccessLimits/payoutLimitOf.tree +0 -5
  121. package/test/trees/JBFundAccessLimits/payoutLimitsOf.tree +0 -8
  122. package/test/trees/JBFundAccessLimits/setFundAccessLimitsFor.tree +0 -18
  123. package/test/trees/JBFundAccessLimits/surplusAllowanceOf.tree +0 -5
  124. package/test/trees/JBFundAccessLimits/surplusAllowancesOf.tree +0 -8
  125. package/test/trees/JBMetadataResolver/getDataFor.tree +0 -8
  126. package/test/trees/JBMultiTerminal/accountingContextsOf.tree +0 -5
  127. package/test/trees/JBMultiTerminal/addAccountingContextsFor.tree +0 -10
  128. package/test/trees/JBMultiTerminal/addToBalanceOf.tree +0 -23
  129. package/test/trees/JBMultiTerminal/cashOutTokensOf.tree +0 -23
  130. package/test/trees/JBMultiTerminal/executePayout.tree +0 -32
  131. package/test/trees/JBMultiTerminal/executeProcessFee.tree +0 -14
  132. package/test/trees/JBMultiTerminal/migrateBalanceOf.tree +0 -12
  133. package/test/trees/JBMultiTerminal/pay.tree +0 -23
  134. package/test/trees/JBMultiTerminal/processHeldFeesOf.tree +0 -8
  135. package/test/trees/JBMultiTerminal/sendPayoutsOf.tree +0 -34
  136. package/test/trees/JBMultiTerminal/useAllowanceOf.tree +0 -16
  137. package/test/trees/JBPermissions/hasPermission.tree +0 -8
  138. package/test/trees/JBPermissions/hasPermissions.tree +0 -8
  139. package/test/trees/JBPermissions/setPermissionsFor.tree +0 -5
  140. package/test/trees/JBPrices/addPriceFeedFor.tree +0 -14
  141. package/test/trees/JBPrices/pricePerUnitOf.tree +0 -11
  142. package/test/trees/JBProjects/createFor.tree +0 -11
  143. package/test/trees/JBProjects/setTokenUriResolver.tree +0 -5
  144. package/test/trees/JBProjects/supportsInterface.tree +0 -9
  145. package/test/trees/JBProjects/tokenURI.tree +0 -5
  146. package/test/trees/JBRulesets/currentApprovalStatusForLatestRulesetOf.tree +0 -8
  147. package/test/trees/JBRulesets/currentOf.tree +0 -12
  148. package/test/trees/JBRulesets/getRulesetOf.tree +0 -5
  149. package/test/trees/JBRulesets/latestQueuedRulesetOf.tree +0 -10
  150. package/test/trees/JBRulesets/rulesetsOf.tree +0 -11
  151. package/test/trees/JBRulesets/upcomingRulesetOf.tree +0 -20
  152. package/test/trees/JBRulesets/updateRulesetWeightCache.tree +0 -5
  153. package/test/trees/JBSplits/setSplitGroupsOf.tree +0 -17
  154. package/test/trees/JBSplits/splitsOf.tree +0 -5
  155. package/test/trees/JBTerminalStore/currentReclaimableSurplusOf.tree +0 -16
  156. package/test/trees/JBTerminalStore/currentSurplusOf.tree +0 -25
  157. package/test/trees/JBTerminalStore/currentTotalSurplusOf.tree +0 -5
  158. package/test/trees/JBTerminalStore/recordCashOutsFor.tree +0 -16
  159. package/test/trees/JBTerminalStore/recordPaymentFrom.tree +0 -14
  160. package/test/trees/JBTerminalStore/recordPayoutFor.tree +0 -10
  161. package/test/trees/JBTerminalStore/recordTerminalMigration.tree +0 -5
  162. package/test/trees/JBTerminalStore/recordUsedAllowanceOf.tree +0 -10
  163. package/test/trees/JBTokens/burnFrom.tree +0 -10
  164. package/test/trees/JBTokens/claimTokensFor.tree +0 -10
  165. package/test/trees/JBTokens/deployERC20For.tree +0 -12
  166. package/test/trees/JBTokens/mintFor.tree +0 -10
  167. package/test/trees/JBTokens/setTokenFor.tree +0 -11
  168. package/test/trees/JBTokens/totalBalanceOf.tree +0 -5
  169. package/test/trees/JBTokens/totalSupplyOf.tree +0 -5
  170. package/test/trees/JBTokens/transferCreditsFrom.tree +0 -8
  171. package/test/trees/mintTokensOf.tree +0 -12
  172. package/test/units/static/JBChainlinkV3PriceFeed/TestPriceFeed.sol +0 -223
  173. package/test/units/static/JBController/JBControllerSetup.sol +0 -50
  174. package/test/units/static/JBController/TestBurnTokensOf.sol +0 -114
  175. package/test/units/static/JBController/TestClaimTokensFor.sol +0 -63
  176. package/test/units/static/JBController/TestDeployErc20For.sol +0 -86
  177. package/test/units/static/JBController/TestLaunchProjectFor.sol +0 -302
  178. package/test/units/static/JBController/TestLaunchRulesetsFor.sol +0 -342
  179. package/test/units/static/JBController/TestMigrateController.sol +0 -157
  180. package/test/units/static/JBController/TestMintTokensOfUnits.sol +0 -111
  181. package/test/units/static/JBController/TestOmnichainRulesetOperator.sol +0 -324
  182. package/test/units/static/JBController/TestPayReservedTokenToTerminal.sol +0 -74
  183. package/test/units/static/JBController/TestPreviewMintOf.sol +0 -117
  184. package/test/units/static/JBController/TestReceiveMigrationFrom.sol +0 -99
  185. package/test/units/static/JBController/TestRulesetViews.sol +0 -225
  186. package/test/units/static/JBController/TestSendReservedTokensToSplitsOf.sol +0 -615
  187. package/test/units/static/JBController/TestSetSplitGroupsOf.sol +0 -68
  188. package/test/units/static/JBController/TestSetTokenFor.sol +0 -239
  189. package/test/units/static/JBController/TestSetUriOf.sol +0 -57
  190. package/test/units/static/JBController/TestTransferCreditsFrom.sol +0 -169
  191. package/test/units/static/JBDeadline/TestDeadlineFuzz.sol +0 -211
  192. package/test/units/static/JBDirectory/JBDirectorySetup.sol +0 -26
  193. package/test/units/static/JBDirectory/TestPrimaryTerminalOf.sol +0 -126
  194. package/test/units/static/JBDirectory/TestSetControllerOf.sol +0 -183
  195. package/test/units/static/JBDirectory/TestSetControllerOfMigrationOrder.sol +0 -104
  196. package/test/units/static/JBDirectory/TestSetPrimaryTerminalOf.sol +0 -179
  197. package/test/units/static/JBDirectory/TestSetTerminalsOf.sol +0 -137
  198. package/test/units/static/JBERC20/JBERC20Setup.sol +0 -34
  199. package/test/units/static/JBERC20/SigUtils.sol +0 -36
  200. package/test/units/static/JBERC20/TestInitialize.sol +0 -60
  201. package/test/units/static/JBERC20/TestName.sol +0 -30
  202. package/test/units/static/JBERC20/TestNonces.sol +0 -62
  203. package/test/units/static/JBERC20/TestSymbol.sol +0 -31
  204. package/test/units/static/JBFeelessAdresses/JBFeelessSetup.sol +0 -22
  205. package/test/units/static/JBFeelessAdresses/TestInterfaces.sol +0 -30
  206. package/test/units/static/JBFeelessAdresses/TestSetFeelessAddress.sol +0 -35
  207. package/test/units/static/JBFees/TestFeesFuzz.sol +0 -79
  208. package/test/units/static/JBFixedPointNumber/TestAdjustDecimals.sol +0 -16
  209. package/test/units/static/JBFixedPointNumber/TestAdjustDecimalsFuzz.sol +0 -71
  210. package/test/units/static/JBFundAccessLimits/JBFundAccessSetup.sol +0 -24
  211. package/test/units/static/JBFundAccessLimits/TestFundAccessLimitsEdge.sol +0 -163
  212. package/test/units/static/JBFundAccessLimits/TestPayoutLimitOf.sol +0 -59
  213. package/test/units/static/JBFundAccessLimits/TestPayoutLimitsOf.sol +0 -101
  214. package/test/units/static/JBFundAccessLimits/TestSetFundAccessLimitsFor.sol +0 -189
  215. package/test/units/static/JBFundAccessLimits/TestSurplusAllowanceOf.sol +0 -64
  216. package/test/units/static/JBFundAccessLimits/TestSurplusAllowancesOf.sol +0 -102
  217. package/test/units/static/JBMetadataResolver/TestGetDataFor.sol +0 -90
  218. package/test/units/static/JBMetadataResolver/TestMetadataResolverEdgeCases.sol +0 -247
  219. package/test/units/static/JBMetadataResolver/TestMetadataResolverFuzz.sol +0 -229
  220. package/test/units/static/JBMultiTerminal/JBMultiTerminalSetup.sol +0 -50
  221. package/test/units/static/JBMultiTerminal/TestAccountingContextsOf.sol +0 -72
  222. package/test/units/static/JBMultiTerminal/TestAddAccountingContextsFor.sol +0 -289
  223. package/test/units/static/JBMultiTerminal/TestAddToBalanceOf.sol +0 -474
  224. package/test/units/static/JBMultiTerminal/TestCashOutTokensOf.sol +0 -624
  225. package/test/units/static/JBMultiTerminal/TestExecutePayout.sol +0 -578
  226. package/test/units/static/JBMultiTerminal/TestExecuteProcessFee.sol +0 -202
  227. package/test/units/static/JBMultiTerminal/TestMigrateBalanceOf.sol +0 -222
  228. package/test/units/static/JBMultiTerminal/TestPay.sol +0 -604
  229. package/test/units/static/JBMultiTerminal/TestPreviewCashOutFrom.sol +0 -117
  230. package/test/units/static/JBMultiTerminal/TestPreviewPayFor.sol +0 -114
  231. package/test/units/static/JBMultiTerminal/TestProcessHeldFeesOf.sol +0 -228
  232. package/test/units/static/JBMultiTerminal/TestSelfPayRevert.sol +0 -55
  233. package/test/units/static/JBMultiTerminal/TestSendPayoutsOf.sol +0 -257
  234. package/test/units/static/JBMultiTerminal/TestUseAllowanceOf.sol +0 -611
  235. package/test/units/static/JBPermissions/JBPermissionsSetup.sol +0 -20
  236. package/test/units/static/JBPermissions/TestHasPermission.sol +0 -50
  237. package/test/units/static/JBPermissions/TestHasPermissions.sol +0 -93
  238. package/test/units/static/JBPermissions/TestSetPermissionsFor.sol +0 -64
  239. package/test/units/static/JBPrices/JBPricesSetup.sol +0 -32
  240. package/test/units/static/JBPrices/TestAddPriceFeedFor.sol +0 -107
  241. package/test/units/static/JBPrices/TestPricePerUnitOf.sol +0 -132
  242. package/test/units/static/JBPrices/TestPrices.sol +0 -265
  243. package/test/units/static/JBProjects/JBProjectsSetup.sol +0 -22
  244. package/test/units/static/JBProjects/TestCreateFor.sol +0 -71
  245. package/test/units/static/JBProjects/TestInitialProject.sol +0 -21
  246. package/test/units/static/JBProjects/TestInterfaces.sol +0 -26
  247. package/test/units/static/JBProjects/TestSetResolver.sol +0 -37
  248. package/test/units/static/JBProjects/TestTokenUri.sol +0 -40
  249. package/test/units/static/JBRulesetMetadataResolver/TestSetCashOutTaxRateTo.sol +0 -108
  250. package/test/units/static/JBRulesets/JBRulesetsSetup.sol +0 -24
  251. package/test/units/static/JBRulesets/TestCurrentApprovalStatusForLatestRulesetOf.sol +0 -265
  252. package/test/units/static/JBRulesets/TestCurrentOf.sol +0 -242
  253. package/test/units/static/JBRulesets/TestGetRulesetOf.sol +0 -100
  254. package/test/units/static/JBRulesets/TestLatestQueuedRulesetOf.sol +0 -260
  255. package/test/units/static/JBRulesets/TestRulesets.sol +0 -632
  256. package/test/units/static/JBRulesets/TestRulesetsOf.sol +0 -37
  257. package/test/units/static/JBRulesets/TestUpcomingRulesetOf.sol +0 -522
  258. package/test/units/static/JBRulesets/TestUpdateRulesetWeightCache.sol +0 -96
  259. package/test/units/static/JBSplits/JBSplitsSetup.sol +0 -26
  260. package/test/units/static/JBSplits/TestSelfManagedSplitGroups.sol +0 -552
  261. package/test/units/static/JBSplits/TestSetSplitGroupsOf.sol +0 -377
  262. package/test/units/static/JBSplits/TestSplitsLockedEdge.sol +0 -267
  263. package/test/units/static/JBSplits/TestSplitsOf.sol +0 -24
  264. package/test/units/static/JBSplits/TestSplitsPacking.sol +0 -36
  265. package/test/units/static/JBSurplus/TestSurplusFuzz.sol +0 -160
  266. package/test/units/static/JBTerminalStore/JBTerminalStoreSetup.sol +0 -45
  267. package/test/units/static/JBTerminalStore/TestCurrentReclaimableSurplusOf.sol +0 -536
  268. package/test/units/static/JBTerminalStore/TestCurrentSurplusOf.sol +0 -463
  269. package/test/units/static/JBTerminalStore/TestCurrentTotalSurplusOf.sol +0 -135
  270. package/test/units/static/JBTerminalStore/TestPreviewCashOutFrom.sol +0 -476
  271. package/test/units/static/JBTerminalStore/TestPreviewPayFrom.sol +0 -494
  272. package/test/units/static/JBTerminalStore/TestRecordCashOutsFor.sol +0 -652
  273. package/test/units/static/JBTerminalStore/TestRecordPaymentFrom.sol +0 -744
  274. package/test/units/static/JBTerminalStore/TestRecordPayoutFor.sol +0 -289
  275. package/test/units/static/JBTerminalStore/TestRecordTerminalMigration.sol +0 -138
  276. package/test/units/static/JBTerminalStore/TestRecordUsedAllowanceOf.sol +0 -415
  277. package/test/units/static/JBTerminalStore/TestUint224Overflow.sol +0 -219
  278. package/test/units/static/JBTokens/JBTokensSetup.sol +0 -32
  279. package/test/units/static/JBTokens/TestBurnFrom.sol +0 -107
  280. package/test/units/static/JBTokens/TestClaimTokensFor.sol +0 -110
  281. package/test/units/static/JBTokens/TestDeployERC20ForUnits.sol +0 -92
  282. package/test/units/static/JBTokens/TestMintFor.sol +0 -100
  283. package/test/units/static/JBTokens/TestSetTokenFor.sol +0 -98
  284. package/test/units/static/JBTokens/TestTotalBalanceOf.sol +0 -65
  285. package/test/units/static/JBTokens/TestTotalSupplyOf.sol +0 -56
  286. package/test/units/static/JBTokens/TestTransferCreditsFrom.sol +0 -56
@@ -1,26 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity 0.8.28;
3
-
4
- import {JBDirectory} from "../../../../src/JBDirectory.sol";
5
- import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
6
- import {IJBPermissions} from "../../../../src/interfaces/IJBPermissions.sol";
7
- import {IJBProjects} from "../../../../src/interfaces/IJBProjects.sol";
8
- import {JBTest} from "../../../helpers/JBTest.sol";
9
-
10
- /*
11
- Contract that deploys a target contract with other mock contracts to satisfy the constructor.
12
- Tests relative to this contract will be dependent on mock calls/emits and stdStorage.
13
- */
14
- contract JBDirectorySetup is JBTest {
15
- // Target Contract
16
- IJBDirectory public _directory;
17
-
18
- // Mocks
19
- IJBPermissions public permissions = IJBPermissions(makeAddr("permissions"));
20
- IJBProjects public projects = IJBProjects(makeAddr("projects"));
21
-
22
- function directorySetup() public virtual {
23
- // Instantiate the contract being tested
24
- _directory = new JBDirectory(permissions, projects, makeAddr("Juicer"));
25
- }
26
- }
@@ -1,126 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity 0.8.28;
3
-
4
- import {IJBDirectoryAccessControl} from "../../../../src/interfaces/IJBDirectoryAccessControl.sol";
5
- import {IJBTerminal} from "../../../../src/interfaces/IJBTerminal.sol";
6
- import {JBAccountingContext} from "../../../../src/structs/JBAccountingContext.sol";
7
- import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
8
- import {IERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol";
9
- import {JBDirectorySetup} from "./JBDirectorySetup.sol";
10
-
11
- contract TestPrimaryTerminalOf_Local is JBDirectorySetup {
12
- uint256 _projectId = 1;
13
- address _mockTerminal = makeAddr("mockTerminal");
14
- address _mockTerminal2 = makeAddr("mockTerminal2");
15
- address _mockToken = makeAddr("mockToken");
16
-
17
- function setUp() public {
18
- super.directorySetup();
19
- }
20
-
21
- function test_WhenThereAreNoTerminalsSupportingTheInputToken() external {
22
- // it will return the zero address
23
- }
24
-
25
- modifier whenThereIsAPrimaryTerminal() {
26
- _;
27
- }
28
-
29
- function test_GivenThereIsAPrimaryTerminalForTheToken() external whenThereIsAPrimaryTerminal {
30
- // it will return the primary terminal
31
-
32
- // first set the primary terminal
33
-
34
- // mock call to JBProjects ownerOf which will give permission
35
- bytes memory _projectsCall = abi.encodeCall(IERC721.ownerOf, (_projectId));
36
- bytes memory _projectsCallReturn = abi.encode(address(this));
37
- mockExpect(address(projects), _projectsCall, _projectsCallReturn);
38
-
39
- // mock call to the terminal accountingContextForTokenOf
40
-
41
- // accounting context needed for call
42
- JBAccountingContext memory _context =
43
- JBAccountingContext({token: _mockToken, decimals: 18, currency: uint32(1)});
44
- mockExpect(
45
- address(_mockTerminal),
46
- abi.encodeCall(IJBTerminal.accountingContextForTokenOf, (_projectId, _mockToken)),
47
- abi.encode(_context)
48
- );
49
-
50
- // mock call to "controller" (zero address here) for interface supp
51
- mockExpect(
52
- address(0),
53
- abi.encodeCall(IERC165.supportsInterface, (type(IJBDirectoryAccessControl).interfaceId)),
54
- abi.encode(true)
55
- );
56
-
57
- // mock call to "controller" (zero address here) for setTerminalsAllowed
58
- mockExpect(
59
- address(0), abi.encodeCall(IJBDirectoryAccessControl.setTerminalsAllowed, (_projectId)), abi.encode(true)
60
- );
61
-
62
- // Set the primary terminal of using the previous mocks
63
- _directory.setPrimaryTerminalOf(_projectId, _mockToken, IJBTerminal(_mockTerminal));
64
-
65
- // Make sure it is stored correctly
66
- IJBTerminal _storedTerminal = _directory.primaryTerminalOf(_projectId, _mockToken);
67
- assertEq(address(_storedTerminal), _mockTerminal);
68
- }
69
-
70
- function test_GivenThereAreMultipleTerminalsWithProperAccountingContextForTokenOf() external {
71
- // it will check each terminals accountingContextForTokenOf and return the first
72
- }
73
-
74
- function test_GivenThereAreMultipleTerminalsButNoneWithTheProperAccountingContextForTokenOf() external {
75
- // it will return the zero address
76
-
77
- // first set the terminals
78
-
79
- // mock call to JBProjects ownerOf which will give permission
80
- bytes memory _projectsCall = abi.encodeCall(IERC721.ownerOf, (_projectId));
81
- bytes memory _projectsCallReturn = abi.encode(address(this));
82
- mockExpect(address(projects), _projectsCall, _projectsCallReturn);
83
-
84
- // mock call to the terminal accountingContextForTokenOf
85
-
86
- // accounting context needed for call
87
- JBAccountingContext memory _context = JBAccountingContext({token: address(0), decimals: 0, currency: uint32(0)});
88
- mockExpect(
89
- address(_mockTerminal),
90
- abi.encodeCall(IJBTerminal.accountingContextForTokenOf, (_projectId, address(0))),
91
- abi.encode(_context)
92
- );
93
-
94
- // mock call the the 2nd terminal accountingContextForTokenOf
95
-
96
- // accounting context needed for call
97
- mockExpect(
98
- address(_mockTerminal2),
99
- abi.encodeCall(IJBTerminal.accountingContextForTokenOf, (_projectId, address(0))),
100
- abi.encode(_context)
101
- );
102
-
103
- // mock call to "controller" (zero address here) for interface supp
104
- mockExpect(
105
- address(0),
106
- abi.encodeCall(IERC165.supportsInterface, (type(IJBDirectoryAccessControl).interfaceId)),
107
- abi.encode(true)
108
- );
109
-
110
- // mock call to "controller" (zero address here) for setTerminalsAllowed
111
- mockExpect(
112
- address(0), abi.encodeCall(IJBDirectoryAccessControl.setTerminalsAllowed, (_projectId)), abi.encode(true)
113
- );
114
-
115
- // terminals to set
116
- IJBTerminal[] memory _terminals = new IJBTerminal[](2);
117
- _terminals[0] = IJBTerminal(_mockTerminal);
118
- _terminals[1] = IJBTerminal(_mockTerminal2);
119
-
120
- // Set the primary terminal of using the previous mocks
121
- _directory.setTerminalsOf(_projectId, _terminals);
122
-
123
- IJBTerminal returnedTerminal = _directory.primaryTerminalOf(_projectId, address(0));
124
- assertEq(address(returnedTerminal), address(0));
125
- }
126
- }
@@ -1,183 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity 0.8.28;
3
-
4
- import {StdStorage, stdStorage} from "forge-std/StdStorage.sol";
5
- import {JBDirectory} from "../../../../src/JBDirectory.sol";
6
- import {JBPermissioned} from "../../../../src/abstract/JBPermissioned.sol";
7
- import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
8
- import {IJBDirectoryAccessControl} from "../../../../src/interfaces/IJBDirectoryAccessControl.sol";
9
- import {IJBMigratable} from "../../../../src/interfaces/IJBMigratable.sol";
10
- import {IJBPermissions} from "../../../../src/interfaces/IJBPermissions.sol";
11
- import {IJBProjects} from "../../../../src/interfaces/IJBProjects.sol";
12
- import {JBPermissionIds} from "@bananapus/permission-ids-v6/src/JBPermissionIds.sol";
13
- import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
14
- import {IERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol";
15
- import {JBDirectorySetup} from "./JBDirectorySetup.sol";
16
-
17
- contract TestSetControllerOf_Local is JBDirectorySetup {
18
- using stdStorage for StdStorage;
19
-
20
- function setUp() public {
21
- super.directorySetup();
22
- }
23
-
24
- modifier givenProjectExists() {
25
- bytes memory _countCall = abi.encodeCall(IJBProjects.count, ());
26
- bytes memory _countReturn = abi.encode(type(uint256).max);
27
-
28
- mockExpect(address(projects), _countCall, _countReturn);
29
- _;
30
- }
31
-
32
- modifier whenCallerIsAllowedToSetFirstController() {
33
- stdstore.target(address(_directory)).sig("isAllowedToSetFirstController(address)").with_key(address(this))
34
- .depth(0).checked_write(true);
35
-
36
- stdstore.target(address(_directory)).sig("controllerOf(uint256)").with_key(1).depth(0).checked_write(address(0));
37
-
38
- // mock ownerOf call
39
- bytes memory _ownerOfCall = abi.encodeCall(IERC721.ownerOf, (1));
40
- bytes memory _ownerData = abi.encode(address(this));
41
-
42
- mockExpect(address(projects), _ownerOfCall, _ownerData);
43
-
44
- _;
45
- }
46
-
47
- modifier givenControllerIsAlreadySet() {
48
- address _bumController = makeAddr("bum");
49
-
50
- stdstore.target(address(_directory)).sig("controllerOf(uint256)").with_key(1).depth(0)
51
- .checked_write(_bumController);
52
-
53
- // mock erc165 call
54
- bytes memory _supportCall =
55
- abi.encodeCall(IERC165.supportsInterface, (type(IJBDirectoryAccessControl).interfaceId));
56
- bytes memory _supportReturned = abi.encode(true);
57
-
58
- mockExpect(address(_bumController), _supportCall, _supportReturned);
59
-
60
- // mock access control call
61
- bytes memory _accessCall = abi.encodeCall(IJBDirectoryAccessControl.setControllerAllowed, (1));
62
- bytes memory _accessReturned = abi.encode(false);
63
-
64
- mockExpect(address(_bumController), _accessCall, _accessReturned);
65
-
66
- _;
67
- }
68
-
69
- function test_RevertWhenCallerDoesNotHaveAnyPermission() external {
70
- // it should revert
71
- // mock ownerOf call
72
- bytes memory _ownerOfCall = abi.encodeCall(IERC721.ownerOf, (1));
73
- address _ownerData = address(1);
74
-
75
- mockExpect(address(projects), _ownerOfCall, abi.encode(_ownerData));
76
-
77
- // mock first permissions call
78
- bytes memory _permissionsCall = abi.encodeCall(
79
- IJBPermissions.hasPermission, (address(this), address(1), 1, JBPermissionIds.SET_CONTROLLER, true, true)
80
- );
81
- bytes memory _permissionsReturned = abi.encode(false);
82
-
83
- mockExpect(address(permissions), _permissionsCall, _permissionsReturned);
84
-
85
- vm.expectRevert(
86
- abi.encodeWithSelector(
87
- JBPermissioned.JBPermissioned_Unauthorized.selector,
88
- _ownerData,
89
- address(this),
90
- 1,
91
- JBPermissionIds.SET_CONTROLLER
92
- )
93
- );
94
- _directory.setControllerOf(1, IERC165(address(this)));
95
- }
96
-
97
- function test_RevertGivenAProjectDoesntExist() external whenCallerIsAllowedToSetFirstController {
98
- // it should revert
99
-
100
- // project count mock call
101
- bytes memory _countCall = abi.encodeCall(IJBProjects.count, ());
102
- bytes memory _countReturn = abi.encode(0);
103
-
104
- mockExpect(address(projects), _countCall, _countReturn);
105
-
106
- vm.expectRevert(abi.encodeWithSelector(JBDirectory.JBDirectory_InvalidProjectIdInDirectory.selector, 1, 0));
107
- _directory.setControllerOf(1, IERC165(address(this)));
108
- }
109
-
110
- function test_RevertGivenCurrentControllerIsNotSetControllerAllowed()
111
- external
112
- whenCallerIsAllowedToSetFirstController
113
- givenProjectExists
114
- givenControllerIsAlreadySet
115
- {
116
- // it should revert
117
- vm.expectRevert(abi.encodeWithSelector(JBDirectory.JBDirectory_SetControllerNotAllowed.selector, 1));
118
- _directory.setControllerOf(1, IERC165(address(this)));
119
- }
120
-
121
- function test_GivenCurrentControllerIsSetControllerAllowed()
122
- external
123
- whenCallerIsAllowedToSetFirstController
124
- givenProjectExists
125
- {
126
- // it should set controllerOf and emit SetController
127
- vm.expectEmit();
128
- emit IJBDirectory.SetController(1, IERC165(address(this)), address(this));
129
-
130
- _directory.setControllerOf(1, IERC165(address(this)));
131
- }
132
-
133
- function test_GivenCurrentControllerIsSetAndMigrating() external givenProjectExists {
134
- address _bumController = makeAddr("bum");
135
-
136
- stdstore.target(address(_directory)).sig("controllerOf(uint256)").with_key(1).depth(0)
137
- .checked_write(_bumController);
138
-
139
- // mock ownerOf call
140
- bytes memory _ownerOfCall = abi.encodeCall(IERC721.ownerOf, (1));
141
- bytes memory _ownerData = abi.encode(address(this));
142
-
143
- mockExpect(address(projects), _ownerOfCall, _ownerData);
144
-
145
- // Mock call to bum controller setControllerAllowed
146
- mockExpect(
147
- _bumController, abi.encodeCall(IJBDirectoryAccessControl.setControllerAllowed, (1)), abi.encode(true)
148
- );
149
-
150
- // Mock call to it's interface support
151
- mockExpect(
152
- _bumController,
153
- abi.encodeCall(IERC165.supportsInterface, (type(IJBDirectoryAccessControl).interfaceId)),
154
- abi.encode(true)
155
- );
156
- mockExpect(
157
- _bumController,
158
- abi.encodeCall(IERC165.supportsInterface, (type(IJBMigratable).interfaceId)),
159
- abi.encode(true)
160
- );
161
- mockExpect(
162
- address(this),
163
- abi.encodeCall(IERC165.supportsInterface, (type(IJBMigratable).interfaceId)),
164
- abi.encode(true)
165
- );
166
- mockExpect(
167
- address(this),
168
- abi.encodeCall(IJBMigratable.beforeReceiveMigrationFrom, (IERC165(address(_bumController)), 1)),
169
- abi.encode("")
170
- );
171
- mockExpect(
172
- address(this),
173
- abi.encodeCall(IJBMigratable.afterReceiveMigrationFrom, (IERC165(address(_bumController)), 1)),
174
- abi.encode("")
175
- );
176
-
177
- // it should set controllerOf and emit SetController
178
- vm.expectEmit();
179
- emit IJBDirectory.SetController(1, IERC165(address(this)), address(this));
180
-
181
- _directory.setControllerOf(1, IERC165(address(this)));
182
- }
183
- }
@@ -1,104 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity 0.8.28;
3
-
4
- import {StdStorage, stdStorage} from "forge-std/StdStorage.sol";
5
- import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
6
- import {IJBDirectoryAccessControl} from "../../../../src/interfaces/IJBDirectoryAccessControl.sol";
7
- import {IJBMigratable} from "../../../../src/interfaces/IJBMigratable.sol";
8
- import {IJBProjects} from "../../../../src/interfaces/IJBProjects.sol";
9
- import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
10
- import {ERC165, IERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol";
11
- import {JBDirectorySetup} from "./JBDirectorySetup.sol";
12
-
13
- /// @notice A mock controller that asserts the directory still points to it during migrate().
14
- /// This validates that controllerOf is NOT updated before migrate() is called.
15
- contract MockMigratingController is ERC165 {
16
- IJBDirectory public immutable DIRECTORY;
17
- uint256 public immutable PROJECT_ID;
18
- bool public migrateCalled;
19
- bool public directoryPointedToSelfDuringMigrate;
20
-
21
- constructor(IJBDirectory directory, uint256 projectId) {
22
- DIRECTORY = directory;
23
- PROJECT_ID = projectId;
24
- }
25
-
26
- function supportsInterface(bytes4 interfaceId) public view override returns (bool) {
27
- return interfaceId == type(IJBMigratable).interfaceId
28
- || interfaceId == type(IJBDirectoryAccessControl).interfaceId || super.supportsInterface(interfaceId);
29
- }
30
-
31
- function setControllerAllowed(uint256) external pure returns (bool) {
32
- return true;
33
- }
34
-
35
- function migrate(uint256, IERC165) external {
36
- migrateCalled = true;
37
- // The critical assertion: during migrate(), the directory should still point to this controller.
38
- directoryPointedToSelfDuringMigrate = (address(DIRECTORY.controllerOf(PROJECT_ID)) == address(this));
39
- }
40
-
41
- function beforeReceiveMigrationFrom(IERC165, uint256) external {}
42
-
43
- function afterReceiveMigrationFrom(IERC165, uint256) external {}
44
- }
45
-
46
- /// @notice A simple new controller that accepts migration.
47
- contract MockNewController is ERC165 {
48
- function supportsInterface(bytes4 interfaceId) public view override returns (bool) {
49
- return interfaceId == type(IJBMigratable).interfaceId || super.supportsInterface(interfaceId);
50
- }
51
-
52
- function migrate(uint256, IERC165) external {}
53
-
54
- function beforeReceiveMigrationFrom(IERC165, uint256) external {}
55
-
56
- function afterReceiveMigrationFrom(IERC165, uint256) external {}
57
- }
58
-
59
- contract TestSetControllerOfMigrationOrder is JBDirectorySetup {
60
- using stdStorage for StdStorage;
61
-
62
- uint256 constant PROJECT_ID = 1;
63
-
64
- function setUp() public {
65
- super.directorySetup();
66
- }
67
-
68
- /// @notice Verifies that during migrate(), the directory still points to the old controller.
69
- /// This test PASSES with the correct ordering (migrate before set) and FAILS if set happens before migrate.
70
- function test_DirectoryPointsToOldControllerDuringMigrate() external {
71
- // Deploy mock controllers with real code (not mocked addresses).
72
- MockMigratingController oldController = new MockMigratingController(_directory, PROJECT_ID);
73
- MockNewController newController = new MockNewController();
74
-
75
- // Set the old controller in the directory's storage.
76
- stdstore.target(address(_directory)).sig("controllerOf(uint256)").with_key(PROJECT_ID).depth(0)
77
- .checked_write(address(oldController));
78
-
79
- // Mock ownerOf to return this test contract as the project owner.
80
- mockExpect(address(projects), abi.encodeCall(IERC721.ownerOf, (PROJECT_ID)), abi.encode(address(this)));
81
-
82
- // Mock project count to allow the project to exist.
83
- mockExpect(address(projects), abi.encodeCall(IJBProjects.count, ()), abi.encode(type(uint256).max));
84
-
85
- // Perform the migration.
86
- _directory.setControllerOf(PROJECT_ID, IERC165(address(newController)));
87
-
88
- // Verify migrate() was called.
89
- assertTrue(oldController.migrateCalled(), "migrate() should have been called on old controller");
90
-
91
- // Verify the directory pointed to the old controller during migrate().
92
- assertTrue(
93
- oldController.directoryPointedToSelfDuringMigrate(),
94
- "Directory should point to old controller during migrate()"
95
- );
96
-
97
- // Verify the directory now points to the new controller after everything completes.
98
- assertEq(
99
- address(_directory.controllerOf(PROJECT_ID)),
100
- address(newController),
101
- "Directory should point to new controller after migration"
102
- );
103
- }
104
- }
@@ -1,179 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity 0.8.28;
3
-
4
- import {StdStorage, stdStorage} from "forge-std/StdStorage.sol";
5
- import {JBDirectory} from "../../../../src/JBDirectory.sol";
6
- import {JBPermissioned} from "../../../../src/abstract/JBPermissioned.sol";
7
- import {IJBDirectory} from "../../../../src/interfaces/IJBDirectory.sol";
8
- import {IJBDirectoryAccessControl} from "../../../../src/interfaces/IJBDirectoryAccessControl.sol";
9
- import {IJBPermissions} from "../../../../src/interfaces/IJBPermissions.sol";
10
- import {IJBTerminal} from "../../../../src/interfaces/IJBTerminal.sol";
11
- import {JBAccountingContext} from "../../../../src/structs/JBAccountingContext.sol";
12
- import {JBPermissionIds} from "@bananapus/permission-ids-v6/src/JBPermissionIds.sol";
13
- import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
14
- import {IERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol";
15
- import {JBDirectorySetup} from "./JBDirectorySetup.sol";
16
-
17
- contract TestSetPrimaryTerminalOf_Local is JBDirectorySetup {
18
- using stdStorage for StdStorage;
19
-
20
- IJBTerminal _terminalToAdd = IJBTerminal(makeAddr("newTerminal"));
21
- address _mockController = makeAddr("controller");
22
- address _token = makeAddr("newToken");
23
-
24
- function setUp() public {
25
- super.directorySetup();
26
- }
27
-
28
- modifier givenTerminalHasNotBeenAdded() {
29
- vm.expectEmit();
30
- emit IJBDirectory.AddTerminal(1, _terminalToAdd, address(this));
31
- _;
32
- }
33
-
34
- modifier whenCallerHasPermission() {
35
- // mock ownerOf call
36
- bytes memory _ownerOfCall = abi.encodeCall(IERC721.ownerOf, (1));
37
- bytes memory _ownerData = abi.encode(address(this));
38
-
39
- mockExpect(address(projects), _ownerOfCall, _ownerData);
40
- _;
41
- }
42
-
43
- modifier givenValidAccountingContext() {
44
- // accounting context
45
- JBAccountingContext memory _context = JBAccountingContext({token: _token, decimals: 6, currency: uint32(1)});
46
-
47
- // mock accountingContext call
48
- bytes memory _contextCall = abi.encodeCall(IJBTerminal.accountingContextForTokenOf, (1, _token));
49
- bytes memory _contextReturn = abi.encode(_context);
50
-
51
- mockExpect(address(_terminalToAdd), _contextCall, _contextReturn);
52
- _;
53
- }
54
-
55
- function test_WhenCallerHasNoMaidens() external {
56
- // it should revert with UNAUTHORIZED()
57
- // mock ownerOf call
58
- bytes memory _ownerOfCall = abi.encodeCall(IERC721.ownerOf, (1));
59
- address _ownerData = address(1);
60
-
61
- mockExpect(address(projects), _ownerOfCall, abi.encode(_ownerData));
62
-
63
- // mock first permissions call
64
- bytes memory _permissionsCall = abi.encodeCall(
65
- IJBPermissions.hasPermission,
66
- (address(this), address(1), 1, JBPermissionIds.SET_PRIMARY_TERMINAL, true, true)
67
- );
68
- bytes memory _permissionsReturned = abi.encode(false);
69
-
70
- mockExpect(address(permissions), _permissionsCall, _permissionsReturned);
71
-
72
- vm.expectRevert(
73
- abi.encodeWithSelector(
74
- JBPermissioned.JBPermissioned_Unauthorized.selector,
75
- _ownerData,
76
- address(this),
77
- 1,
78
- JBPermissionIds.SET_PRIMARY_TERMINAL
79
- )
80
- );
81
- _directory.setPrimaryTerminalOf(1, _token, _terminalToAdd);
82
- }
83
-
84
- function test_GivenNoValidAccountingContextForTokenOf() external whenCallerHasPermission {
85
- // it should revert with TOKEN_NOT_ACCEPTED
86
- // accounting context
87
- JBAccountingContext memory _context = JBAccountingContext({token: address(0), decimals: 6, currency: uint32(1)});
88
-
89
- // mock accountingContext call
90
- bytes memory _contextCall = abi.encodeCall(IJBTerminal.accountingContextForTokenOf, (1, _token));
91
- bytes memory _contextReturn = abi.encode(_context);
92
-
93
- mockExpect(address(_terminalToAdd), _contextCall, _contextReturn);
94
-
95
- vm.expectRevert(
96
- abi.encodeWithSelector(JBDirectory.JBDirectory_TokenNotAccepted.selector, 1, _token, _terminalToAdd)
97
- );
98
- _directory.setPrimaryTerminalOf(1, _token, _terminalToAdd);
99
- }
100
-
101
- function test_RevertIf_GivenTerminalHasAlreadyBeenAdded()
102
- external
103
- whenCallerHasPermission
104
- givenValidAccountingContext
105
- {
106
- stdstore.target(address(_directory)).sig("controllerOf(uint256)").with_key(1).depth(0)
107
- .checked_write(_mockController);
108
- // mock erc165 call
109
- bytes memory _supportCall =
110
- abi.encodeCall(IERC165.supportsInterface, (type(IJBDirectoryAccessControl).interfaceId));
111
- bytes memory _supportReturned = abi.encode(false);
112
-
113
- mockExpect(address(_mockController), _supportCall, _supportReturned);
114
-
115
- // it should not add the terminal, but set it as primary
116
- IJBTerminal[] memory _terminals = new IJBTerminal[](1);
117
- _terminals[0] = _terminalToAdd;
118
-
119
- vm.expectEmit();
120
- emit IJBDirectory.SetTerminals(1, _terminals, address(this));
121
-
122
- _directory.setTerminalsOf(1, _terminals);
123
-
124
- // prove that the terminal was not added - forces this test to fail as intended
125
- vm.expectEmit();
126
- emit IJBDirectory.SetPrimaryTerminal(1, _token, _terminals[0], address(this));
127
-
128
- // set the primary next and mock whatever calls
129
- _directory.setPrimaryTerminalOf(1, _token, _terminals[0]);
130
- }
131
-
132
- function test_GivenProjectIsNotAllowedToSetTerminals()
133
- external
134
- whenCallerHasPermission
135
- givenValidAccountingContext
136
- {
137
- // it should revert with SET_TERMINALS_NOT_ALLOWED
138
-
139
- stdstore.target(address(_directory)).sig("controllerOf(uint256)").with_key(1).depth(0)
140
- .checked_write(_mockController);
141
-
142
- // mock erc165 call
143
- bytes memory _supportCall =
144
- abi.encodeCall(IERC165.supportsInterface, (type(IJBDirectoryAccessControl).interfaceId));
145
- bytes memory _supportReturned = abi.encode(true);
146
-
147
- mockExpect(address(_mockController), _supportCall, _supportReturned);
148
-
149
- // mock setTerminalsAllowed call
150
- bytes memory _allowedCall = abi.encodeCall(IJBDirectoryAccessControl.setTerminalsAllowed, (1));
151
- bytes memory _allowedReturn = abi.encode(false);
152
-
153
- mockExpect(address(_mockController), _allowedCall, _allowedReturn);
154
-
155
- vm.expectRevert(abi.encodeWithSelector(JBDirectory.JBDirectory_SetTerminalsNotAllowed.selector, 1));
156
- _directory.setPrimaryTerminalOf(1, _token, _terminalToAdd);
157
- }
158
-
159
- function test_GivenProjectIsAllowedToSetTerminals()
160
- external
161
- whenCallerHasPermission
162
- givenValidAccountingContext
163
- givenTerminalHasNotBeenAdded
164
- {
165
- // it should set the terminal and emit AddTerminal
166
- // it should set the terminal as primary and emit SetPrimaryTerminal
167
-
168
- stdstore.target(address(_directory)).sig("controllerOf(uint256)").with_key(1).depth(0)
169
- .checked_write(_mockController);
170
- // mock erc165 call
171
- bytes memory _supportCall =
172
- abi.encodeCall(IERC165.supportsInterface, (type(IJBDirectoryAccessControl).interfaceId));
173
- bytes memory _supportReturned = abi.encode(false);
174
-
175
- mockExpect(address(_mockController), _supportCall, _supportReturned);
176
-
177
- _directory.setPrimaryTerminalOf(1, _token, _terminalToAdd);
178
- }
179
- }