diff --git a/bindings/src/Capgemini.PowerApps.SpecFlowBindings/Capgemini.PowerApps.SpecFlowBindings.csproj b/bindings/src/Capgemini.PowerApps.SpecFlowBindings/Capgemini.PowerApps.SpecFlowBindings.csproj index 2fae7456..493ea0a1 100644 --- a/bindings/src/Capgemini.PowerApps.SpecFlowBindings/Capgemini.PowerApps.SpecFlowBindings.csproj +++ b/bindings/src/Capgemini.PowerApps.SpecFlowBindings/Capgemini.PowerApps.SpecFlowBindings.csproj @@ -45,7 +45,7 @@ - + all diff --git a/driver/src/data/dataManager.ts b/driver/src/data/dataManager.ts index 53c4dc22..486a6d77 100644 --- a/driver/src/data/dataManager.ts +++ b/driver/src/data/dataManager.ts @@ -105,28 +105,31 @@ export default class DataManager { * @returns {Promise} * @memberof DataManager */ + public async cleanup(): Promise<(Xrm.LookupValue | void)[]> { const repo = this.appUserRecordRepo || this.currentUserRecordRepo; - const deletePromises = this.refs.map(async (record) => { - let reference; - let retry = 0; - while (retry < 3) { + let passThrough = 0; + let deletePromises: (Xrm.LookupValue | void)[] = []; + while (passThrough < 3 && this.refs.length > 0) { + // eslint-disable-next-line no-await-in-loop + deletePromises = await Promise.all(this.refs.map(async (record) => { + let reference; try { // eslint-disable-next-line no-await-in-loop reference = await repo.deleteRecord(record); - break; + const i = this.refs.indexOf(record); + this.refs.splice(i, 1); } catch (err) { - retry += 1; + // TODO: Log records failed to be deleted after finale passthrough } - } - return reference; - }); + return reference; + })); + passThrough += 1; + } - this.refs.splice(0, this.refs.length); Object.keys(this.refsByAlias).forEach((alias) => delete this.refsByAlias[alias]); - - return Promise.all(deletePromises); + return deletePromises; } private preprocess(data: Record): Record { diff --git a/driver/test/data/dataManager.spec.ts b/driver/test/data/dataManager.spec.ts index 3e97686b..4c1d6580 100644 --- a/driver/test/data/dataManager.spec.ts +++ b/driver/test/data/dataManager.spec.ts @@ -113,7 +113,7 @@ describe('TestDriver', () => { it('retries failed delete requests', async () => { appUserRecordRepo.deleteRecord.and.throwError('Failed to delete'); - dataManager.cleanup(); + await dataManager.cleanup(); expect(appUserRecordRepo.deleteRecord.calls.count()).toBe(6); });