From c1595447b16967e74df54bf139f34a6fca968bbc Mon Sep 17 00:00:00 2001 From: saseungmin Date: Thu, 8 Apr 2021 01:22:10 +0900 Subject: [PATCH 1/4] [UI & UX] Apply CSS to the review list --- src/components/common/Header.jsx | 5 +- src/components/introduce/Review.jsx | 58 +++++++++++++++++--- src/components/introduce/Review.test.jsx | 1 - src/components/introduce/ReviewList.jsx | 10 +++- src/components/introduce/ReviewList.test.jsx | 1 - src/containers/introduce/ReviewContainer.jsx | 4 +- 6 files changed, 62 insertions(+), 17 deletions(-) diff --git a/src/components/common/Header.jsx b/src/components/common/Header.jsx index cf4819e..9810588 100644 --- a/src/components/common/Header.jsx +++ b/src/components/common/Header.jsx @@ -4,9 +4,10 @@ import { Link } from 'react-router-dom'; import styled from '@emotion/styled'; -import Responsive from '../../styles/Responsive'; -import palette from '../../styles/palette'; import Button from '../../styles/Button'; +import palette from '../../styles/palette'; +import Responsive from '../../styles/Responsive'; + import { LOGOUT, LOGIN, REGISTER } from '../../util/constants/constants'; const HeaderWrapper = styled.div` diff --git a/src/components/introduce/Review.jsx b/src/components/introduce/Review.jsx index ffdff1e..a0d5a7b 100644 --- a/src/components/introduce/Review.jsx +++ b/src/components/introduce/Review.jsx @@ -1,9 +1,36 @@ import React from 'react'; +import Moment from 'react-moment'; + +import StarRatings from 'react-star-ratings'; + import styled from '@emotion/styled'; +import palette from '../../styles/palette'; + +import { changeDateToTime } from '../../util/utils'; + const ReviewWrapper = styled.div` + background-color: #f8f8f8; + display: flex; + flex-direction: column; + margin: 1rem 0 1rem 0; + padding: 20px 35px 20px 35px; + border: 1px solid ${palette.gray[3]}; + border-radius: 5px; +`; + +const ReviewContent = styled.div` + font-size: 1.1rem; + color: ${palette.gray[8]}; + margin: .7rem 0 .8rem 0; +`; +const ReviewContentInfo = styled.div` + font-size: 0.9rem; + color: ${palette.gray[5]}; + display: flex; + justify-content: space-between; `; const Review = ({ review }) => { @@ -13,15 +40,30 @@ const Review = ({ review }) => { return ( -
- {rating} -
-
+ + {content} -
-
- {`${id} | ${createDate}`} -
+ + +
+ {id} +
+ + {changeDateToTime(createDate)} + +
); }; diff --git a/src/components/introduce/Review.test.jsx b/src/components/introduce/Review.test.jsx index c98ea3c..93926b3 100644 --- a/src/components/introduce/Review.test.jsx +++ b/src/components/introduce/Review.test.jsx @@ -22,7 +22,6 @@ describe('Review', () => { const { container } = renderReview(mockReview); expect(container).toHaveTextContent('review'); - expect(container).toHaveTextContent(3); expect(container).toHaveTextContent('test@test.com'); }); }); diff --git a/src/components/introduce/ReviewList.jsx b/src/components/introduce/ReviewList.jsx index 379405a..d9ccc18 100644 --- a/src/components/introduce/ReviewList.jsx +++ b/src/components/introduce/ReviewList.jsx @@ -2,8 +2,14 @@ import React from 'react'; import _ from 'lodash'; +import styled from '@emotion/styled'; + import Review from './Review'; +const ReviewWrapper = styled.div` + margin-bottom: 3rem; +`; + const ReviewList = ({ reviews }) => { if (_.isEmpty(reviews)) { return ( @@ -12,14 +18,14 @@ const ReviewList = ({ reviews }) => { } return ( - <> + {reviews.map((review) => ( ))} - + ); }; diff --git a/src/components/introduce/ReviewList.test.jsx b/src/components/introduce/ReviewList.test.jsx index 3c8ce7f..3a3ba1d 100644 --- a/src/components/introduce/ReviewList.test.jsx +++ b/src/components/introduce/ReviewList.test.jsx @@ -24,7 +24,6 @@ describe('ReviewList', () => { expect(container).toHaveTextContent('review'); expect(container).toHaveTextContent('test@test.com'); - expect(container).toHaveTextContent(3); }); }); diff --git a/src/containers/introduce/ReviewContainer.jsx b/src/containers/introduce/ReviewContainer.jsx index dac6b53..3ccda5f 100644 --- a/src/containers/introduce/ReviewContainer.jsx +++ b/src/containers/introduce/ReviewContainer.jsx @@ -37,9 +37,7 @@ const ReviewFormContainer = () => { return null; } - const { - participants, personnel, applyEndDate, - } = group; + const { participants, personnel, applyEndDate } = group; const isApplyTime = isCheckedTimeStatus({ applyEndTime: changeDateToTime(applyEndDate), From 9431225608bed310621f03086399d8477563414a Mon Sep 17 00:00:00 2001 From: saseungmin Date: Thu, 8 Apr 2021 04:24:40 +0900 Subject: [PATCH 2/4] [Feature] Average rating for study reviews - Apply Average rating for study reviews with CSS --- src/components/introduce/IntroduceForm.jsx | 27 ++-- src/components/introduce/Review.jsx | 1 - src/components/introduce/ReviewForm.jsx | 2 +- src/components/introduce/ReviewList.jsx | 117 ++++++++++++++++-- src/components/introduce/ReviewList.test.jsx | 4 +- src/containers/introduce/ReviewContainer.jsx | 3 + .../introduce/ReviewContainer.test.jsx | 2 +- src/styles/SubTitle.jsx | 24 ++++ 8 files changed, 151 insertions(+), 29 deletions(-) create mode 100644 src/styles/SubTitle.jsx diff --git a/src/components/introduce/IntroduceForm.jsx b/src/components/introduce/IntroduceForm.jsx index fff85ab..236447f 100644 --- a/src/components/introduce/IntroduceForm.jsx +++ b/src/components/introduce/IntroduceForm.jsx @@ -8,8 +8,10 @@ import styled from '@emotion/styled'; import { INTRODUCE_FORM_TITLE } from '../../util/constants/constants'; import { authorizedUsersNumber, changeDateToTime } from '../../util/utils'; -import Tags from '../common/Tags'; import palette from '../../styles/palette'; +import SubTitle from '../../styles/SubTitle'; + +import Tags from '../common/Tags'; import DateTimeChange from '../common/DateTimeChange'; import IntroduceActionButtons from './IntroduceActionButtons'; @@ -20,6 +22,10 @@ const mq = facepaint([ '@media(min-width: 1150px)', ]); +const IntroduceFormWrapper = styled.div` + margin-bottom: 3rem; +`; + const IntroduceReferenceWrapper = styled.div` ${mq({ @@ -69,17 +75,6 @@ ${mq({ border-right: 0.1rem solid ${palette.gray[3]}; `; -const IntroduceContentTitle = styled.div` - font-size: 1.4rem; - font-weight: bold; - text-align: center; - margin-bottom: 0; - margin-top: 1rem; - padding: 7px 2rem 7px 2rem; - border-bottom: 2px solid ${palette.violet[3]}; - width: 17%; -`; - const IntroduceContent = styled.div` position: relative; margin-top: 2rem; @@ -104,7 +99,7 @@ const IntroduceForm = ({ const isCheckOwnGroupPost = user && (user === moderatorId); return ( - <> +
{`πŸ™‹β€β™‚οΈ${moderatorId}`} @@ -128,9 +123,7 @@ const IntroduceForm = ({ page="introduce" /> - - {INTRODUCE} - + @@ -141,7 +134,7 @@ const IntroduceForm = ({ /> )} - + ); }; diff --git a/src/components/introduce/Review.jsx b/src/components/introduce/Review.jsx index a0d5a7b..12e2e30 100644 --- a/src/components/introduce/Review.jsx +++ b/src/components/introduce/Review.jsx @@ -48,7 +48,6 @@ const Review = ({ review }) => { starSpacing="0" starHoverColor="#ffc816" name="rating" - data-testid="star-rating" /> {content} diff --git a/src/components/introduce/ReviewForm.jsx b/src/components/introduce/ReviewForm.jsx index 76c4f57..e0f13fe 100644 --- a/src/components/introduce/ReviewForm.jsx +++ b/src/components/introduce/ReviewForm.jsx @@ -21,7 +21,7 @@ const mq = facepaint([ const StudyReviewFormWrapper = styled.div` display: flex; flex-direction: column; - margin: 3rem 0 3rem 0; + margin: 2rem 0 3rem 0; padding: 20px 20px 20px 20px; border: 1px solid ${palette.gray[3]}; border-radius: 5px; diff --git a/src/components/introduce/ReviewList.jsx b/src/components/introduce/ReviewList.jsx index d9ccc18..2024b4a 100644 --- a/src/components/introduce/ReviewList.jsx +++ b/src/components/introduce/ReviewList.jsx @@ -4,27 +4,128 @@ import _ from 'lodash'; import styled from '@emotion/styled'; +import StarRatings from 'react-star-ratings'; + import Review from './Review'; +import palette from '../../styles/palette'; + const ReviewWrapper = styled.div` - margin-bottom: 3rem; + margin: 2rem 0 3rem 0; +`; + +const EmptyReviewWrapper = styled.div` + background-color: #f8f8f8; + font-size: 1.1rem; + font-weight: bold; + color: ${palette.gray[6]}; + display: flex; + align-items: center; + flex-direction: column; + margin: 2rem 0 3rem 0; + padding: 45px; + border: 1px solid ${palette.gray[3]}; + border-radius: 5px; +`; + +const AverageReviewsWrapper = styled.div` + display: flex; + flex-direction: column; + align-items: center; + padding: 1.5rem 0 1rem 0; + border: 1px solid ${palette.gray[3]}; + border-radius: 5px; +`; + +const AverageReviewTitle = styled.div` + line-height: 40px; + color: ${palette.gray[7]}; + font-size: 1.6rem; + font-weight: bold; + + span { + font-size: 1.8rem; + color: ${palette.teal[5]}; + } +`; + +const AverageRatingWrapper = styled.div` + line-height: 50px; + + em { + margin-left: .5rem; + } + + .average-rating { + font-size: 2rem; + font-weight: bold; + color: ${palette.gray[7]}; + } + + .total-rating { + font-size: 1.5rem; + font-weight: bold; + color: ${palette.gray[5]}; + } `; +const averageReviews = (reviews) => (reviews + .reduce((acc, { rating }) => acc + rating, 0) / reviews.length).toFixed(1) * 2; + +const convertToRating = (rating) => { + if (Number.isInteger(rating)) { + return `${rating}.0`; + } + + return rating; +}; + const ReviewList = ({ reviews }) => { if (_.isEmpty(reviews)) { return ( -
아직 리뷰가 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€!
+ + λ“±λ‘λœ 리뷰가 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€! + ); } + const averageRating = averageReviews(reviews); + return ( - {reviews.map((review) => ( - - ))} + + + μŠ€ν„°λ””λ₯Ό μ°Έμ—¬ν•œ  + + {reviews.length} + + λͺ…μ˜ νšŒμ› 평균평점 + + + + + {convertToRating(averageRating)} + + + / 10.0 + + + + <> + {reviews.map((review) => ( + + ))} + ); }; diff --git a/src/components/introduce/ReviewList.test.jsx b/src/components/introduce/ReviewList.test.jsx index 3a3ba1d..346624e 100644 --- a/src/components/introduce/ReviewList.test.jsx +++ b/src/components/introduce/ReviewList.test.jsx @@ -22,6 +22,8 @@ describe('ReviewList', () => { it('Render reviews', () => { const { container } = renderReviewList(mockReviews); + expect(container).toHaveTextContent('μŠ€ν„°λ””λ₯Ό μ°Έμ—¬ν•œ 1λͺ…μ˜ νšŒμ› 평균평점'); + expect(container).toHaveTextContent('6.0'); expect(container).toHaveTextContent('review'); expect(container).toHaveTextContent('test@test.com'); }); @@ -31,7 +33,7 @@ describe('ReviewList', () => { it('Render nothing review message', () => { const { container } = renderReviewList([]); - expect(container).toHaveTextContent('아직 리뷰가 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€!'); + expect(container).toHaveTextContent('λ“±λ‘λœ 리뷰가 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€!'); }); }); }); diff --git a/src/containers/introduce/ReviewContainer.jsx b/src/containers/introduce/ReviewContainer.jsx index 3ccda5f..2d9ad34 100644 --- a/src/containers/introduce/ReviewContainer.jsx +++ b/src/containers/introduce/ReviewContainer.jsx @@ -8,6 +8,8 @@ import { } from '../../util/utils'; import { changeStudyReviewFields, setStudyReview } from '../../reducers/groupSlice'; +import SubTitle from '../../styles/SubTitle'; + import ReviewForm from '../../components/introduce/ReviewForm'; import ReviewList from '../../components/introduce/ReviewList'; @@ -52,6 +54,7 @@ const ReviewFormContainer = () => { return ( <> + { const { container } = renderReviewContainer(); - expect(container).toHaveTextContent('아직 리뷰가 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€!'); + expect(container).toHaveTextContent('λ“±λ‘λœ 리뷰가 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€!'); }); context('with login and group', () => { diff --git a/src/styles/SubTitle.jsx b/src/styles/SubTitle.jsx new file mode 100644 index 0000000..22e515b --- /dev/null +++ b/src/styles/SubTitle.jsx @@ -0,0 +1,24 @@ +import React from 'react'; + +import styled from '@emotion/styled'; + +import palette from './palette'; + +const SubTitleWrapper = styled.div` + font-size: 1.4rem; + font-weight: bold; + text-align: center; + margin-bottom: 0; + margin-top: 1rem; + padding: 7px 2rem 7px 2rem; + border-bottom: 2px solid ${palette.violet[3]}; + width: 17%; +`; + +const SubTitle = ({ title }) => ( + + {title} + +); + +export default SubTitle; From bd17702e48730c954a344830132ecc7464591d4f Mon Sep 17 00:00:00 2001 From: saseungmin Date: Thu, 8 Apr 2021 04:47:28 +0900 Subject: [PATCH 3/4] [Refactoring] Separate AverageReview Component - Separated into AverageReview Component --- src/components/introduce/AverageReview.jsx | 93 ++++++++++++++++ .../introduce/AverageReview.test.jsx | 40 +++++++ src/components/introduce/ReviewList.jsx | 101 ++---------------- 3 files changed, 144 insertions(+), 90 deletions(-) create mode 100644 src/components/introduce/AverageReview.jsx create mode 100644 src/components/introduce/AverageReview.test.jsx diff --git a/src/components/introduce/AverageReview.jsx b/src/components/introduce/AverageReview.jsx new file mode 100644 index 0000000..426b6c2 --- /dev/null +++ b/src/components/introduce/AverageReview.jsx @@ -0,0 +1,93 @@ +import React from 'react'; + +import StarRatings from 'react-star-ratings'; + +import styled from '@emotion/styled'; + +import palette from '../../styles/palette'; + +const AverageReviewWrapper = styled.div` + display: flex; + flex-direction: column; + align-items: center; + padding: 1.5rem 0 1rem 0; + border: 1px solid ${palette.gray[3]}; + border-radius: 5px; +`; + +const AverageReviewTitle = styled.div` + line-height: 40px; + color: ${palette.gray[7]}; + font-size: 1.6rem; + font-weight: bold; + + span { + font-size: 1.8rem; + color: ${palette.teal[5]}; + } +`; + +const AverageRatingWrapper = styled.div` + line-height: 50px; + + em { + margin-left: .5rem; + } + + .average-rating { + font-size: 2rem; + font-weight: bold; + color: ${palette.gray[7]}; + } + + .total-rating { + font-size: 1.5rem; + font-weight: bold; + color: ${palette.gray[5]}; + } +`; + +const averageReviews = (reviews) => (reviews + .reduce((acc, { rating }) => acc + rating, 0) / reviews.length).toFixed(1) * 2; + +const convertToRating = (rating) => { + if (Number.isInteger(rating)) { + return `${rating}.0`; + } + + return rating; +}; + +const AverageReview = ({ reviews }) => { + const averageRating = averageReviews(reviews); + + return ( + + + μŠ€ν„°λ””λ₯Ό μ°Έμ—¬ν•œ  + + {reviews.length} + + λͺ…μ˜ νšŒμ› 평균평점 + + + + + {convertToRating(averageRating)} + + + / 10.0 + + + + ); +}; + +export default AverageReview; diff --git a/src/components/introduce/AverageReview.test.jsx b/src/components/introduce/AverageReview.test.jsx new file mode 100644 index 0000000..73237c9 --- /dev/null +++ b/src/components/introduce/AverageReview.test.jsx @@ -0,0 +1,40 @@ +import React from 'react'; + +import { render } from '@testing-library/react'; + +import AverageReview from './AverageReview'; + +describe('AverageReview', () => { + const renderAverageReview = (reviews) => render(( + + )); + + context('When the average rating is integer', () => { + const reviews = [ + { rating: 3 }, + { rating: 3 }, + ]; + it('Renders average reviews contents', () => { + const { container } = renderAverageReview(reviews); + + expect(container).toHaveTextContent(`μŠ€ν„°λ””λ₯Ό μ°Έμ—¬ν•œ ${reviews.length}λͺ…μ˜ νšŒμ› 평균평점`); + expect(container).toHaveTextContent(6.0); + }); + }); + + context("When the average rating isn't integer", () => { + const reviews = [ + { rating: 3 }, + { rating: 4 }, + { rating: 4 }, + ]; + it('Renders average reviews contents', () => { + const { container } = renderAverageReview(reviews); + + expect(container).toHaveTextContent(`μŠ€ν„°λ””λ₯Ό μ°Έμ—¬ν•œ ${reviews.length}λͺ…μ˜ νšŒμ› 평균평점`); + expect(container).toHaveTextContent(7.4); + }); + }); +}); diff --git a/src/components/introduce/ReviewList.jsx b/src/components/introduce/ReviewList.jsx index 2024b4a..720baef 100644 --- a/src/components/introduce/ReviewList.jsx +++ b/src/components/introduce/ReviewList.jsx @@ -4,11 +4,10 @@ import _ from 'lodash'; import styled from '@emotion/styled'; -import StarRatings from 'react-star-ratings'; +import palette from '../../styles/palette'; import Review from './Review'; - -import palette from '../../styles/palette'; +import AverageReview from './AverageReview'; const ReviewWrapper = styled.div` margin: 2rem 0 3rem 0; @@ -28,58 +27,6 @@ const EmptyReviewWrapper = styled.div` border-radius: 5px; `; -const AverageReviewsWrapper = styled.div` - display: flex; - flex-direction: column; - align-items: center; - padding: 1.5rem 0 1rem 0; - border: 1px solid ${palette.gray[3]}; - border-radius: 5px; -`; - -const AverageReviewTitle = styled.div` - line-height: 40px; - color: ${palette.gray[7]}; - font-size: 1.6rem; - font-weight: bold; - - span { - font-size: 1.8rem; - color: ${palette.teal[5]}; - } -`; - -const AverageRatingWrapper = styled.div` - line-height: 50px; - - em { - margin-left: .5rem; - } - - .average-rating { - font-size: 2rem; - font-weight: bold; - color: ${palette.gray[7]}; - } - - .total-rating { - font-size: 1.5rem; - font-weight: bold; - color: ${palette.gray[5]}; - } -`; - -const averageReviews = (reviews) => (reviews - .reduce((acc, { rating }) => acc + rating, 0) / reviews.length).toFixed(1) * 2; - -const convertToRating = (rating) => { - if (Number.isInteger(rating)) { - return `${rating}.0`; - } - - return rating; -}; - const ReviewList = ({ reviews }) => { if (_.isEmpty(reviews)) { return ( @@ -89,43 +36,17 @@ const ReviewList = ({ reviews }) => { ); } - const averageRating = averageReviews(reviews); - return ( - - - μŠ€ν„°λ””λ₯Ό μ°Έμ—¬ν•œ  - - {reviews.length} - - λͺ…μ˜ νšŒμ› 평균평점 - - - - - {convertToRating(averageRating)} - - - / 10.0 - - - - <> - {reviews.map((review) => ( - - ))} - + + {reviews.map((review) => ( + + ))} ); }; From c2e518f59de0089bccf467fb2943500b25af11b0 Mon Sep 17 00:00:00 2001 From: saseungmin Date: Thu, 8 Apr 2021 05:59:46 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[Feature]=20Add=20setGroupReview=20Redux=20?= =?UTF-8?q?action=20-=20=EB=A6=AC=EB=B7=B0=20=EC=9E=91=EC=84=B1=20?= =?UTF-8?q?=ED=9B=84=20=EB=A6=AC=EB=B7=B0=EC=97=90=20=EB=8C=80=ED=95=9C=20?= =?UTF-8?q?=ED=9B=84=EC=B2=98=EB=A6=AC=20action=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/reducers/groupSlice.js | 35 ++++++++++++++++++++++ src/reducers/groupSlice.test.js | 53 +++++++++++++++++++++++++++++++-- 2 files changed, 86 insertions(+), 2 deletions(-) diff --git a/src/reducers/groupSlice.js b/src/reducers/groupSlice.js index 03ac9d1..934c997 100644 --- a/src/reducers/groupSlice.js +++ b/src/reducers/groupSlice.js @@ -137,6 +137,39 @@ const { actions, reducer } = createSlice({ studyReviewFields: studyReviewInitialState, }; }, + + setGroupReview(state, { payload: review }) { + const { group } = state; + + if (group.reviews) { + return { + ...state, + group: { + ...group, + reviews: [ + { + ...review, + createDate: new Date().toString(), + }, + ...group.reviews, + ], + }, + }; + } + + return { + ...state, + group: { + ...group, + reviews: [ + { + ...review, + createDate: new Date().toString(), + }, + ], + }, + }; + }, }, }); @@ -152,6 +185,7 @@ export const { setOriginalArticle, changeStudyReviewFields, clearStudyReviewFields, + setGroupReview, } = actions; export const loadStudyGroups = (tag) => async (dispatch) => { @@ -298,6 +332,7 @@ export const setStudyReview = (review) => async (dispatch, getState) => { review, }); + dispatch(setGroupReview(review)); dispatch(clearStudyReviewFields()); }; diff --git a/src/reducers/groupSlice.test.js b/src/reducers/groupSlice.test.js index 043c8fc..4aac8b3 100644 --- a/src/reducers/groupSlice.test.js +++ b/src/reducers/groupSlice.test.js @@ -24,6 +24,7 @@ import reducer, { changeStudyReviewFields, clearStudyReviewFields, setStudyReview, + setGroupReview, } from './groupSlice'; import STUDY_GROUPS from '../../fixtures/study-groups'; @@ -268,6 +269,46 @@ describe('reducer', () => { expect(content).toBe(''); }); }); + + describe('setGroupReview', () => { + const review = { + id: 'test', + content: 'test', + rating: 3, + }; + + context('When the group reviews field is exists', () => { + const initialState = { + group: { + reviews: [], + }, + }; + + it('Set in the group review field', () => { + const state = reducer(initialState, setGroupReview(review)); + + const { group: { reviews } } = state; + + expect(reviews[0].id).toBe('test'); + expect(reviews[0].rating).toBe(3); + }); + }); + + context("When the group reviews field isn't exists", () => { + const initialState = { + group: {}, + }; + + it('Set in the group review field', () => { + const state = reducer(initialState, setGroupReview(review)); + + const { group: { reviews } } = state; + + expect(reviews[0].id).toBe('test'); + expect(reviews[0].rating).toBe(3); + }); + }); + }); }); describe('async actions', () => { @@ -592,9 +633,9 @@ describe('async actions', () => { }); }); - it('dispatches clearStudyReviewFields', async () => { + it('dispatches setGroupReview and clearStudyReviewFields', async () => { await store.dispatch(setStudyReview({ - user: 'user', + id: 'user', review: 'test', rating: 5, })); @@ -602,6 +643,14 @@ describe('async actions', () => { const actions = store.getActions(); expect(actions[0]).toEqual({ + type: 'group/setGroupReview', + payload: { + rating: 5, + review: 'test', + id: 'user', + }, + }); + expect(actions[1]).toEqual({ type: 'group/clearStudyReviewFields', }); });