const _setLatestReview = (value) => { return setLatestReview({ userId, addonId, review: value, }); };
const _setLatestReview = ({ review = { ...fakeReview, id: 1 }, ...params } = {}) => { return setLatestReview({ addonId: 9, userId: 7, review, ...params, }); };
.then(() => { sinon.assert.calledWith( dispatch, setLatestReview({ addonId, addonSlug, userId, versionId, review: null, }), ); });
return actions.submitReview(params).then(() => { sinon.assert.calledWith( dispatch, setLatestReview({ addonId: reviewResult.addon.id, addonSlug: reviewResult.addon.slug, userId: reviewResult.user.id, versionId, review: reviewResult, }), ); });
.then(() => { mockApi.verify(); sinon.assert.calledWith(dispatch, setReview(fakeReview)); sinon.assert.calledWith( dispatch, setLatestReview({ userId, addonId, addonSlug, versionId, review: fakeReview, }), ); });
const createStoreWithLatestReview = ({ addon = createInternalAddon({ ...fakeAddon, id: 7663 }), review = fakeReview, userId = 92345, } = {}) => { const { store } = dispatchSignInActions({ userId }); if (review) { store.dispatch(setReview(review)); } store.dispatch( setLatestReview({ addonId: addon.id, review, userId, }), ); return { addon, review, userId, store }; };
it('does not render AddonReviewManager without a saved review', async () => { const addon = createInternalAddon({ ...fakeAddon, id: 7777 }); const userId = 9876; const versionId = 1234; const { store } = dispatchSignInActions({ userId }); store.dispatch( setLatestReview({ addonId: addon.id, addonSlug: addon.slug, review: null, userId, versionId, }), ); const root = renderInline({ addon, store, version: versionId }); root.setState({ showTextEntry: true }); expect(root.find(AddonReviewManager)).toHaveLength(0); expect(root.find(UserRating)).toHaveLength(1); });
const createStoreWithLatestReview = ({ addon = createInternalAddon(fakeAddon), review = fakeReview, userId = 92345, versionId = review ? review.version.id : fakeAddon.current_version.id, } = {}) => { const { store } = dispatchSignInActions({ userId }); if (review) { store.dispatch(setReview(review)); } store.dispatch( setLatestReview({ addonId: addon.id, addonSlug: addon.slug, review, userId, versionId, }), ); return store; };
function* manageAddonReview( action: CreateAddonReviewAction | UpdateAddonReviewAction, { _delay = delay }: Options = {}, ) { const { body, errorHandlerId, score } = action.payload; const errorHandler = createErrorHandler(errorHandlerId); const savingRating = !!score; const savingReview = !!body; yield put(errorHandler.createClearingAction()); if (savingRating) { yield put(flashReviewMessage(STARTED_SAVE_RATING)); } if (savingReview) { yield put(flashReviewMessage(STARTED_SAVE_REVIEW)); } try { const state: AppState = yield select(getState); const baseParams = { apiState: state.api, body, score, }; let params; let oldReview = null; if (action.type === CREATE_ADDON_REVIEW) { params = { ...baseParams, addonId: action.payload.addonId, versionId: action.payload.versionId, }; } else if (action.type === UPDATE_ADDON_REVIEW) { params = { ...baseParams, reviewId: action.payload.reviewId, }; oldReview = selectReview(state.reviews, action.payload.reviewId); invariant( oldReview, `review with ID=${action.payload.reviewId} does not exist in state`, ); } invariant( params, `params was unexpectedly empty; action.type: ${action.type}`, ); const submitParams: SubmitReviewParams = params; const reviewFromResponse: SubmitReviewResponse = yield call( submitReview, submitParams, ); yield put(setReview(reviewFromResponse)); if (savingRating) { yield put(flashReviewMessage(SAVED_RATING)); } if (savingReview) { yield put(flashReviewMessage(SAVED_REVIEW)); yield put(hideEditReviewForm({ reviewId: reviewFromResponse.id })); } if (!reviewFromResponse.is_developer_reply) { yield put( setLatestReview({ addonId: reviewFromResponse.addon.id, review: reviewFromResponse, userId: reviewFromResponse.user.id, }), ); yield put( updateRatingCounts({ addonId: reviewFromResponse.addon.id, oldReview, newReview: createInternalReview(reviewFromResponse), }), ); } // Make the message disappear after some time. yield _delay(FLASH_SAVED_MESSAGE_DURATION); yield put(hideFlashedReviewMessage()); } catch (error) { log.warn( `Failed to create/update review with action ${action.type}: ${error}`, ); yield put(errorHandler.createErrorAction(error)); yield put(flashReviewMessage(ABORTED)); } }