Skip to content
Prev Previous commit
Next Next commit
Fixed: waitForNoLocks test helper
  • Loading branch information
GPortas committed Dec 19, 2023
commit b08f37fa780251c362ee55ad75494ed0ff26fbbe
8 changes: 4 additions & 4 deletions test/integration/datasets/DatasetsRepository.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import {
createDatasetViaApi,
createPrivateUrlViaApi,
publishDatasetViaApi,
deaccessionDatasetViaApi
// , waitForNoLocks
deaccessionDatasetViaApi,
waitForNoLocks
} from '../../testHelpers/datasets/datasetHelper';
import { ReadError } from '../../../src/core/domain/repositories/ReadError';
import { DatasetNotNumberedVersion, DatasetLockType } from '../../../src/datasets';
Expand Down Expand Up @@ -110,8 +110,8 @@ describe('DatasetsRepository', () => {
.catch(() => {
assert.fail('Error while publishing test Dataset');
});

// await waitForNoLocks(createdDatasetId,2)
await waitForNoLocks(createdDatasetId, 10)
let locks = await sut.getDatasetLocks(createdDatasetId);
const maxTries = 10;
let tries = 0;
Expand Down
57 changes: 33 additions & 24 deletions test/testHelpers/datasets/datasetHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -212,37 +212,46 @@ export const publishDatasetViaApi = async (datasetId: number): Promise<AxiosResp
);
};

export const deaccessionDatasetViaApi = async (datasetId: number,versionId: string): Promise<AxiosResponse> => {
const data = { deaccessionReason: 'Test reason.'};
return await axios.post(
`${TestConstants.TEST_API_URL}/datasets/${datasetId}/versions/${versionId}/deaccession`,
JSON.stringify(data),
DATAVERSE_API_REQUEST_HEADERS,
);
}
export const deaccessionDatasetViaApi = async (datasetId: number, versionId: string): Promise<AxiosResponse> => {
const data = { deaccessionReason: 'Test reason.' };
return await axios.post(
`${TestConstants.TEST_API_URL}/datasets/${datasetId}/versions/${versionId}/deaccession`,
JSON.stringify(data),
DATAVERSE_API_REQUEST_HEADERS,
);
};

export const createPrivateUrlViaApi = async (datasetId: number): Promise<AxiosResponse> => {
return await axios.post(
`${TestConstants.TEST_API_URL}/datasets/${datasetId}/privateUrl`,
{},
DATAVERSE_API_REQUEST_HEADERS,
);
};
export const getLocksViaApi = async (persistentId: string): Promise<any> => {
return axios.get(`${TestConstants.TEST_API_URL}/datasets/:persistentId/locks?persistentId=${persistentId}`).then((response) => {
return response.data.data;
})
}

export const waitForNoLocks = async (persistentId: string, maxRetries = 20, delay = 1000): Promise<void> => {
for (let retry = 0; retry < maxRetries; retry++) {
await getLocksViaApi(persistentId)
.then(
response => {
if (Object.keys(response).length === 1) {
return;
}})
await new Promise(resolve => setTimeout(resolve, delay));
export const waitForNoLocks = async (datasetId: number, maxRetries = 20, delay = 1000): Promise<void> => {
let hasLocks = true;
let retry = 0;
while (hasLocks && retry < maxRetries) {
await axios
.get(`${TestConstants.TEST_API_URL}/datasets/${datasetId}/locks`)
.then((response) => {
const nLocks = response.data.data.length;
if (nLocks == 0) {
hasLocks = false;
}
})
.catch((error) => {
console.log(
`Error while waiting for no dataset locks: [${error.response.status}]${
error.response.data ? ` ${error.response.data.message}` : ''
}`,
);
});
await new Promise((resolve) => setTimeout(resolve, delay));
retry++;
}
if (hasLocks) {
throw new Error('Max retries reached.');
}
throw new Error('Max retries reached.');
};