Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[장바구니 미션 Step 2] 윤생(이윤성) 미션 제출합니다. #220

Merged
merged 64 commits into from
May 28, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
d3d1dcd
refactor: html 템플릿 변경
2yunseong May 13, 2023
aa317fb
refactor: test에 사용하는 local url 상수화
2yunseong May 13, 2023
e6c6582
chore: cypress 버전 변경
2yunseong May 13, 2023
2f5aecd
refactor: 콜백을 무기명함수로 전달
2yunseong May 13, 2023
7a2c53e
refactor: action 상수화
2yunseong May 13, 2023
e599430
refactor: ref를 hook에 포함
2yunseong May 15, 2023
6623dab
refactor: 불필요한 fragment tag 제거
2yunseong May 15, 2023
aaffb51
refactor: key name 일관성 지키기
2yunseong May 15, 2023
277e196
refactor: 조건부 렌더링을 텍스트만 조건부로 보여지게 변경
2yunseong May 15, 2023
f08f34c
test: custom command로 코드 축소
2yunseong May 15, 2023
5d77819
feat: 장바구니 에러 툴팁 박스 구현
2yunseong May 15, 2023
c8310f0
feat: 유효한 숫자가 아니면 장바구니 추가가 아니게 구현
2yunseong May 15, 2023
05edb5c
chore: msw 설치
2yunseong May 15, 2023
7a67983
chore: msw 세팅
2yunseong May 15, 2023
6a9c27f
test: 상품 조회 mock API 구현
2yunseong May 15, 2023
8a01a3d
refactor: 상품 목록 api 로직 계층 분리
2yunseong May 16, 2023
66a8145
refactor: deprecated 된 코드 제거
2yunseong May 16, 2023
2993d11
test: 장바구니 mock API 구현
2yunseong May 16, 2023
e5f71b7
feat: Error Boundary Fallback 컴포넌트 개선 중
2yunseong May 16, 2023
3d7f487
feat: 장바구니 페이지 기본 html 작성
2yunseong May 17, 2023
10bf58e
fix: key 값을 전달하지 않는 버그 수정
2yunseong May 17, 2023
541719b
style: 코드 스타일 수정
2yunseong May 17, 2023
377c2ce
refactor: ref 대신 state로 수량 상태 관리
2yunseong May 17, 2023
433d43a
test: useCount 테스트 작성
2yunseong May 17, 2023
93693fe
test: 기능 변경에 따른 e2e 테스트 수정
2yunseong May 17, 2023
ac7a505
feat: 마크업 추가 및 css 스타일링
2yunseong May 17, 2023
8dc3109
feat: 장바구니 페이지 스타일링
2yunseong May 17, 2023
9b71995
feat: 리다이렉트 버튼 추가
2yunseong May 18, 2023
0be6090
feat: msw와 연결
2yunseong May 18, 2023
dedc647
feat: patch 로직 개선
2yunseong May 18, 2023
3abc11d
feat: requset ID를 통한 비동기 상태 동기화
2yunseong May 19, 2023
70a22a5
feat: 카드 아이템 삭제 구현
2yunseong May 20, 2023
c2aa482
feat: 개별 선택 로직 구현
2yunseong May 20, 2023
3e36e73
feat: 전체 선택과 개별선택 상태 동기화
2yunseong May 20, 2023
eeead66
feat: 카드 전체선택 상태 동기화
2yunseong May 20, 2023
df28cb2
feat: 상품 가격 계산 및 표시 기능 구현
2yunseong May 21, 2023
3082e96
refactor: 불필요한 console.log 제거
2yunseong May 21, 2023
5595785
feat: 카트 수량 증가 로직 구현
2yunseong May 21, 2023
dfa67cb
refactor: 상태를 data flow graph로 변경
2yunseong May 21, 2023
71e16c9
feat: suspense 부분적으로 적용
2yunseong May 21, 2023
5e7dc52
fix: debounce로 change 이벤트 지연
2yunseong May 21, 2023
e29c63d
refactor: 디바운스 주기 조절
2yunseong May 21, 2023
7f378f9
fix: 개별 선택을 하면 사라지던 오류 해결
2yunseong May 21, 2023
3d03a46
refactor: 인라인 함수 분리
2yunseong May 21, 2023
9edb576
style: formatter
2yunseong May 21, 2023
343b5bc
refactor: 전체 선택 로직 개선
2yunseong May 22, 2023
808132e
feat: cartlist에 transition 적용
2yunseong May 25, 2023
7b82f40
refactor: 중복된 코드 삭제
2yunseong May 25, 2023
a3f8740
refactor: recoil key 네이밍 수정
2yunseong May 25, 2023
6a074fb
refactor: 불필요한 useEffect 제거
2yunseong May 25, 2023
976131b
refactor: 파일명 의미있게 수정
2yunseong May 25, 2023
b669a03
chore: delete EOL
2yunseong May 25, 2023
8f21e7b
fix: 잘못된 import 경로 변경
2yunseong May 25, 2023
f693f46
refactor: 의미없는 코드 제거 후 인라인
2yunseong May 25, 2023
fecb7c6
refactor: cart 네이밍 일관성 부여
2yunseong May 25, 2023
7c38fd7
refactor: 불필요한 상태 제거
2yunseong May 25, 2023
9989497
chore: 불필요한 파일 삭제
2yunseong May 25, 2023
c0fc2cf
refactor: 불필요한 컴포넌트 상태 제거
2yunseong May 25, 2023
0a51d44
refactor: 로직 재사용화
2yunseong May 25, 2023
732c918
refactor: debounce 로직 훅으로 분리
2yunseong May 25, 2023
efe9759
fix: any 타입 구체화
2yunseong May 25, 2023
8ac5fe5
refactor: api 메서드 재사용 코드 분리
2yunseong May 26, 2023
6d3f379
refactor: 인라인 이벤트 핸들러 분리
2yunseong May 26, 2023
ce609c9
refactor: useTransition 사용
2yunseong May 26, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 22 additions & 10 deletions cypress/e2e/product-list.cy.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import { TEST_URL } from './constant';

describe('개별 상품 장바구니 추가 테스트', () => {
import { TEST_URL } from './constant';

describe('개별 상품 장바구니 추가 테스트', () => {
beforeEach(() => {
cy.visit(TEST_URL);
Expand All @@ -20,49 +23,58 @@ describe('개별 상품 장바구니 추가 테스트', () => {
});

it('장바구니 수량 카운터에 영어는 입력되지 않는다.', () => {
cy.typingFirstProduct('nave', '');
cy.typingFirstProduct('nave', '0');
});

it('장바구니 수량 카운터에 한국어는 입력되지 않는다.', () => {
cy.typingFirstProduct('네이브', '');
cy.typingFirstProduct('네이브', '0');
});

it('장바구니 수량 카운터에 숫자 기호도 입력되지 않는다.', () => {
cy.typingFirstProduct('-', '');
cy.typingFirstProduct('+', '');
cy.typingFirstProduct('e', '');
});

it('장바구니 수량 카운터에 아무것도 입력되지않고 blur 되면 기본 값으로 설정한다.', () => {
cy.get('@firstProductItem').find('input').clear().blur();
cy.get('@firstProductItem').find('input').should('have.value', '1');
cy.typingFirstProduct('-', '0');
cy.typingFirstProduct('+', '0');
cy.typingFirstProduct('e', '0');
});
});

describe('장바구니 수량 변경 테스트', () => {
describe('장바구니 수량 변경 테스트', () => {
beforeEach(() => {
cy.visit(TEST_URL);
cy.visit(TEST_URL);
});

it('상품을 장바구니에 추가하면 수량이 증가한다.', () => {
cy.get('ul').find('li').first().as('firstProductItem');
it('상품을 장바구니에 추가하면 수량이 증가한다.', () => {
cy.get('ul').find('li').first().as('firstProductItem');

cy.get('@firstProductItem').find('button').click();
cy.get('@firstProductItem').find('button').click();

cy.get('@firstProductItem').find('button').last().click();
cy.get('@firstProductItem').find('button').last().click();

cy.get('header').find('.sc-gueYoa').should('have.text', '1');
cy.get('header').find('.sc-gueYoa').should('have.text', '1');
});

it('이미 등록된 상품을 추가하면 수량은 변경되지 않는다.', () => {
cy.get('ul').find('li').first().as('firstProductItem');
it('이미 등록된 상품을 추가하면 수량은 변경되지 않는다.', () => {
cy.get('ul').find('li').first().as('firstProductItem');

cy.get('@firstProductItem').find('button').click();
cy.get('@firstProductItem').find('button').last().click();
cy.get('@firstProductItem').find('button').click();
cy.get('@firstProductItem').find('button').last().click();

cy.get('@firstProductItem').find('button').click();
cy.get('@firstProductItem').find('button').last().click();
cy.get('@firstProductItem').find('button').click();
cy.get('@firstProductItem').find('button').last().click();

cy.get('header').find('.sc-gueYoa').should('have.text', '1');
cy.get('header').find('.sc-gueYoa').should('have.text', '1');
});
});
Loading