Skip to content

Commit

Permalink
feat(discoveryEnhancedLoading): Added MDSUtils unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
jarvisraymond-uchicago committed Sep 20, 2024
1 parent dc64792 commit 6f43811
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ const DiscoveryLoadingProgressBar = ({
// Auto incrementing percent logic
const percentUpdateInterval = 500;
const percentIncrementAmount = 5;

useEffect(() => {
const interval = setInterval(() => {
setPercent((prevPercent) => prevPercent + percentIncrementAmount);
Expand All @@ -24,14 +25,12 @@ const DiscoveryLoadingProgressBar = ({

// hide the bar after a delay after the batches are loaded,
// giving the browser some time to process the batch
const delayTimeBeforeHidingProgressBar = 2000;
const delayTimeBeforeHidingProgressBar = 2500;
useEffect(() => {
console.log('useeffect achieved!');
if (allBatchesAreLoaded) {
setPercent(100);
// Change displayProgressBar to false after delay
setTimeout(() => {
console.log('timeout achieved!');
setDisplayProgressBar(false);
}, delayTimeBeforeHidingProgressBar);
}
Expand All @@ -40,10 +39,7 @@ const DiscoveryLoadingProgressBar = ({
return (
<React.Fragment>
{ displayProgressBar && (
<div
className='discovery-loading-progress-bar'
style={{ display: displayProgressBar ? 'block' : 'none' }}
>
<div className='discovery-loading-progress-bar'>
<Progress
width={80}
showInfo={false}
Expand Down
93 changes: 93 additions & 0 deletions src/Discovery/MDSUtils.test.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import { loadStudiesFromMDS, getSomeStudiesFromMDS } from './MDSUtils';
import { mdsURL } from '../localconf';

// Mocking the global fetch API
global.fetch = jest.fn();

describe('MDS Data Loading Functions', () => {
afterEach(() => {
jest.clearAllMocks(); // Clear mocks after each test
});

/*
describe('loadStudiesFromMDS', () => {
it('should load studies successfully', async () => {
const mockResponse = {
0: { gen3_discovery: { name: 'Study 1' } },
1: { gen3_discovery: { name: 'Study 2' } },
};
fetch.mockResolvedValueOnce({
status: 200,
json: jest.fn().mockResolvedValueOnce(mockResponse),
});
const studies = await loadStudiesFromMDS();
expect(studies).toEqual([{ name: 'Study 1' }, { name: 'Study 2' }]);
expect(fetch).toHaveBeenCalledTimes(1);
expect(fetch).toHaveBeenCalledWith(`${mdsURL}?data=True&_guid_type=discovery_metadata&limit=2000&offset=0`);
});
it('should throw an error on fetch failure', async () => {
const mockResponse = {
0: { gen3_discovery: { name: 'Study 1' } },
1: { gen3_discovery: { name: 'Study 2' } },
};
fetch.mockResolvedValueOnce({
status: 401,
json: jest.fn().mockResolvedValueOnce(mockResponse),
});
const expectedErrorMsg = 'Request for study data failed: Error';
let actualErrorMsg = null;
try {
const studies = await loadStudiesFromMDS();
} catch (e) {
actualErrorMsg = e.message;
}
expect(actualErrorMsg.toString().includes(expectedErrorMsg)).toBe(true);
});
it('should load up to 2000 studies, then load more with a secondary request', async () => {
const mockStudies = new Array(2500).fill({mockStudy:'info'});
// Simulate first fetch (2000 studies)
fetch.mockImplementationOnce(() =>
Promise.resolve({
status: 200,
json: () => Promise.resolve(mockStudies.slice(0, 2000))
})
);
// Simulate second fetch (500 studies)
fetch.mockImplementationOnce(() =>
Promise.resolve({
status: 200,
json: () => Promise.resolve(mockStudies.slice(2000, 2500))
})
);
const studies = await loadStudiesFromMDS();
expect(fetch).toHaveBeenCalledTimes(2);
expect(studies.length).toBe(2500);
});
*/

describe('getSomeStudiesFromMDS', () => {
it('should retrieve a limited number of studies', async () => {
const mockResponse = {
0: { gen3_discovery: { name: 'Study 1' } },
1: { gen3_discovery: { name: 'Study 2' } },
};

fetch.mockResolvedValueOnce({
status: 200,
json: jest.fn().mockResolvedValueOnce(mockResponse),
});

const studies = await getSomeStudiesFromMDS('discovery_metadata', 2);
expect(studies).toEqual([{ name: 'Study 1' }, { name: 'Study 2' }]);
expect(fetch).toHaveBeenCalledTimes(1);
expect(fetch).toHaveBeenCalledWith(`${mdsURL}?data=True&_guid_type=discovery_metadata&limit=2`);
});


});
});

0 comments on commit 6f43811

Please sign in to comment.