Skip to content
Snippets Groups Projects
Commit 85811413 authored by Lewis Liu's avatar Lewis Liu
Browse files

Refactored fetch error handling into function, added tests

parent 7a723299
No related branches found
No related tags found
No related merge requests found
......@@ -113,6 +113,15 @@ const updateDashcardId = createAction(UPDATE_DASHCARD_ID, (oldDashcardId, newDas
const CLEAR_CARD_DATA = "CLEAR_CARD_DATA";
export const clearCardData = createAction(CLEAR_CARD_DATA, (cardId, dashcardId) => ({ cardId, dashcardId }));
export async function fetchDataOrError(dataPromise) {
try {
return await dataPromise;
}
catch (error) {
return { error };
}
}
export const fetchCardData = createThunkAction(FETCH_CARD_DATA, function(card, dashcard, clearExisting = false) {
return async function(dispatch, getState) {
if (clearExisting) {
......@@ -152,13 +161,7 @@ export const fetchCardData = createThunkAction(FETCH_CARD_DATA, function(card, d
}
}, DATASET_SLOW_TIMEOUT);
try {
result = await MetabaseApi.dataset(datasetQuery);
}
catch (error) {
result = { error };
}
result = await fetchDataOrError(Promise.reject({data: {message: 'test'}}));
clearTimeout(slowCardTimer);
return { dashcard_id: dashcard.id, card_id: card.id, result };
......
import { fetchDataOrError } from 'metabase/dashboard/dashboard';
describe("Dashboard", () => {
describe("fetchDataOrError()", () => {
it("should return data on successful fetch", async () => {
const data = {
series: [1, 2, 3]
};
const successfulFetch = Promise.resolve(data);
const result = await fetchDataOrError(successfulFetch);
expect(result.error).toBeUndefined();
expect(result).toEqual(data);
});
it("should return map with error key on failed fetch", async () => {
const error = {
status: 504,
statusText: "GATEWAY_TIMEOUT",
data: {
message: "Failed to load resource: the server responded with a status of 504 (GATEWAY_TIMEOUT)"
}
};
const failedFetch = Promise.reject(error);
const result = await fetchDataOrError(failedFetch);
expect(result.error).toEqual(error);
});
});
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment