Skip to content

Commit c8b0b88

Browse files
authored
Fix flow.json import resolution across multiple different deployment accounts (#2683)
1 parent b7d73c7 commit c8b0b88

File tree

3 files changed

+103
-3
lines changed

3 files changed

+103
-3
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"@onflow/config": patch
3+
---
4+
5+
Ensure `getContracts` accumulates `flow.json` deployments across multiple accounts
6+
7+

packages/config/src/utils/utils.test.ts

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,99 @@ describe("getContracts", () => {
7777
expect(getContracts([flowJSON], "testnet")).toEqual(testnetMappings)
7878
expect(getContracts([flowJSON], "mainnet")).toEqual(mainnetMappings)
7979
})
80+
81+
test("it should handle multiple contracts in deployments section", () => {
82+
const flowJSON: FlowJson = {
83+
accounts: {
84+
"emulator-account": {
85+
address: "f8d6e0586b0a20c7",
86+
},
87+
"testnet-account": {
88+
address: "a470920a30c770a5",
89+
},
90+
},
91+
deployments: {
92+
emulator: {
93+
"emulator-account": ["ContractA", "ContractB", "ContractC"],
94+
},
95+
testnet: {
96+
"testnet-account": ["ContractA", "ContractB"],
97+
},
98+
},
99+
}
100+
101+
const emulatorMappings = {
102+
ContractA: "f8d6e0586b0a20c7",
103+
ContractB: "f8d6e0586b0a20c7",
104+
ContractC: "f8d6e0586b0a20c7",
105+
}
106+
107+
const testnetMappings = {
108+
ContractA: "a470920a30c770a5",
109+
ContractB: "a470920a30c770a5",
110+
}
111+
112+
expect(getContracts(flowJSON, "emulator")).toEqual(emulatorMappings)
113+
expect(getContracts(flowJSON, "testnet")).toEqual(testnetMappings)
114+
})
115+
116+
test("it should merge deployments with contract aliases", () => {
117+
const flowJSON: FlowJson = {
118+
contracts: {
119+
HelloWorld: {
120+
source: "./cadence/contracts/HelloWorld.cdc",
121+
aliases: {
122+
emulator: "0x123",
123+
},
124+
},
125+
},
126+
accounts: {
127+
"emulator-account": {
128+
address: "0xf8d6e0586b0a20c7",
129+
},
130+
},
131+
deployments: {
132+
emulator: {
133+
"emulator-account": ["DeployedContract"],
134+
},
135+
},
136+
}
137+
138+
const emulatorMappings = {
139+
HelloWorld: "0x123",
140+
DeployedContract: "0xf8d6e0586b0a20c7",
141+
}
142+
143+
expect(getContracts(flowJSON, "emulator")).toEqual(emulatorMappings)
144+
})
145+
146+
test("it should handle multiple accounts with multiple contracts each", () => {
147+
const flowJSON: FlowJson = {
148+
accounts: {
149+
"account-1": {
150+
address: "0x01",
151+
},
152+
"account-2": {
153+
address: "0x02",
154+
},
155+
},
156+
deployments: {
157+
emulator: {
158+
"account-1": ["Contract1A", "Contract1B"],
159+
"account-2": ["Contract2A", "Contract2B"],
160+
},
161+
},
162+
}
163+
164+
const emulatorMappings = {
165+
Contract1A: "0x01",
166+
Contract1B: "0x01",
167+
Contract2A: "0x02",
168+
Contract2B: "0x02",
169+
}
170+
171+
expect(getContracts(flowJSON, "emulator")).toEqual(emulatorMappings)
172+
})
80173
})
81174

82175
describe("anyHasPrivateKeys", () => {

packages/config/src/utils/utils.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,9 @@ const mapDeploymentsToNetworkAddress =
176176
if (!accountAddress) return c
177177

178178
// Create an object assigning the address to the contract name.
179-
return value.reduce((c, contract) => {
180-
return {...c, [contract]: accountAddress}
181-
}, {})
179+
return value.reduce((acc, contract) => {
180+
return {...acc, [contract]: accountAddress}
181+
}, c)
182182
}, {})
183183
}
184184

0 commit comments

Comments
 (0)