@@ -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