Skip to content

Commit 078b54f

Browse files
committed
implement test number 2
1 parent 6974ce2 commit 078b54f

File tree

1 file changed

+99
-3
lines changed

1 file changed

+99
-3
lines changed

test/000_fullchain.test.ts

Lines changed: 99 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -180,10 +180,11 @@ describe('Integration tests', function () {
180180
);
181181
expect(finalizeTx).to.changeTokenBalances(
182182
iexecPoco,
183-
[proxyAddress, sponsor, scheduler, appProvider, datasetProvider],
183+
[proxyAddress, sponsor, requester, scheduler, appProvider, datasetProvider],
184184
[
185185
expectedProxyBalanceChange, // Proxy
186186
-taskPrice * completedTasks, // Sponsor
187+
0, // Requester
187188
schedulerStakePerTask + schedulerRewardPerTask, // Scheduler
188189
appPrice, // AppProvider
189190
datasetPrice, // DatasetProvider
@@ -215,9 +216,104 @@ describe('Integration tests', function () {
215216
}
216217
});
217218

218-
// TODO implement the following tests.
219+
it('[2] No sponsorship, beneficiary, callback, BoT, replication', async function () {
220+
const volume = 3;
221+
// Create deal.
222+
const workers = [worker1, worker2];
223+
const orders = buildOrders({
224+
assets: ordersAssets,
225+
prices: ordersPrices,
226+
requester: requester.address,
227+
tag: standardDealTag,
228+
beneficiary: beneficiary.address,
229+
callback: callbackAddress,
230+
volume,
231+
trust: workers.length ** 2 - 1,
232+
});
233+
const { dealId, dealPrice, schedulerStakePerDeal } = await iexecWrapper.signAndMatchOrders(
234+
...orders.toArray(),
235+
);
236+
const taskPrice = appPrice + datasetPrice + workerpoolPrice;
237+
const schedulerStakePerTask = schedulerStakePerDeal / volume;
238+
const workerRewardPerTask = await iexecWrapper.computeWorkerRewardPerTask(
239+
dealId,
240+
PocoMode.CLASSIC,
241+
);
242+
const schedulerRewardPerTask = workerpoolPrice - workerRewardPerTask;
243+
// Save frozens
219244

220-
it('[2] No sponsorship, beneficiary, callback, BoT, replication', async function () {});
245+
const accounts = [requester, scheduler, appProvider, datasetProvider, ...workers];
246+
const accountsInitialFrozens = await getInitialFrozens(accounts);
247+
// Finalize each task and check balance changes.
248+
for (let taskIndex = 0; taskIndex < volume; taskIndex++) {
249+
const taskId = await iexecWrapper.initializeTask(dealId, taskIndex);
250+
const workerStakePerTask = await iexecPoco
251+
.viewDeal(dealId)
252+
.then((deal) => deal.workerStake.toNumber());
253+
for (const worker of workers) {
254+
await iexecWrapper.contributeToTask(
255+
dealId,
256+
taskIndex,
257+
callbackResultDigest,
258+
worker,
259+
);
260+
}
261+
// Reveal contributions for all workers
262+
for (const worker of workers) {
263+
await iexecPoco
264+
.connect(worker)
265+
.reveal(taskId, callbackResultDigest)
266+
.then((tx) => tx.wait());
267+
}
268+
const finalizeTx = await iexecPoco
269+
.connect(scheduler)
270+
.finalize(taskId, results, resultsCallback);
271+
expect((await iexecPoco.viewTask(taskId)).status).to.equal(TaskStatusEnum.COMPLETED);
272+
// Multiply amount by the number of finalized tasks to correctly compute
273+
// stake and reward amounts.
274+
const completedTasks = taskIndex + 1;
275+
// Verify token balance changes
276+
const expectedProxyBalanceChange = -(
277+
taskPrice * completedTasks +
278+
schedulerStakePerTask * completedTasks
279+
);
280+
expect(finalizeTx).to.changeTokenBalances(
281+
iexecPoco,
282+
[proxyAddress, requester, scheduler, appProvider, datasetProvider],
283+
[
284+
expectedProxyBalanceChange, // Proxy
285+
-taskPrice * completedTasks, // Requester
286+
schedulerStakePerTask + schedulerRewardPerTask, // Scheduler
287+
appPrice, // AppProvider
288+
datasetPrice, // DatasetProvider
289+
],
290+
);
291+
for (const worker of workers) {
292+
expect(finalizeTx).to.changeTokenBalances(
293+
iexecPoco,
294+
[worker],
295+
[workerStakePerTask + workerRewardPerTask / workers.length],
296+
);
297+
}
298+
// Calculate expected frozen changes
299+
const expectedFrozenChanges = [
300+
0, // Proxy
301+
-taskPrice * completedTasks, // Requester
302+
-schedulerStakePerTask * completedTasks, // Scheduler
303+
0, // AppProvider
304+
0, // DatasetProvider
305+
];
306+
for (let i = 0; i < workers.length; i++) {
307+
expectedFrozenChanges.push(0);
308+
}
309+
await changesInFrozen({
310+
accountsInitialFrozens,
311+
frozenChanges: expectedFrozenChanges,
312+
});
313+
}
314+
});
315+
316+
// TODO implement the following tests.
221317

222318
it('[3] Sponsorship, beneficiary, callback, BoT, no replication', async function () {});
223319

0 commit comments

Comments
 (0)