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

[FE] dev-fe 에서 dev 로 최종 프로젝트를 업로드한다. #869

Merged
merged 75 commits into from
Oct 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
412718b
feat: 로그인 api 변경으로 redirectUri 함께 보내기
healim01 Oct 4, 2024
98154ba
[FE] 전반적인 페이지 UI에 적절한 시맨틱 태그를 적용한다. (#728)
skiende74 Oct 4, 2024
2db95cf
feat: 카카오 로그인 다중 리다렉 url 기능 추가
healim01 Oct 6, 2024
c148da9
[FE] 좋아요 낙관적 업데이트 수정하여 API 실패 시 상태 롤백 추가한다. (#734)
healim01 Oct 7, 2024
013d7b8
Merge branch 'dev-fe' of https://github.com/woowacourse-teams/2024-ba…
healim01 Oct 7, 2024
1adffb7
fix: 컴포넌트 이름 변경 수정
healim01 Oct 7, 2024
0834e33
[FE] 회의 내용으로 스토어와 훅의 네이밍을 수정하고 필요없는 방 비교 코드를 삭제한다. (#748)
ooherin Oct 7, 2024
c2997b0
[FE] 로그인 처리 및 경로를 변경된 기획에 따라 반영한다. (#756)
skiende74 Oct 7, 2024
c066254
feat: 랜딩 페이지 접근성 개선
healim01 Oct 7, 2024
2efe537
refactor: 불필요한 이미지 라벨 제거
healim01 Oct 7, 2024
133087d
refactor: 이미지 접근성 개선
healim01 Oct 7, 2024
ef47d97
refactor: 답변 선택 이모지 버튼 role 추가
healim01 Oct 7, 2024
c4d3c03
[FE] 접근성 개선을 위해 인풋필드의 label/input를 서로 htmlFor, id로 연결한다. (#758)
skiende74 Oct 8, 2024
3d2da54
[FE] playwright 초기세팅한다. (#761)
skiende74 Oct 8, 2024
65a408f
refactor: html 한국어 언어 설정
healim01 Oct 8, 2024
99c7579
refactor: 이미지 카테고리 라벨링 작업
healim01 Oct 8, 2024
caa2e3a
refactor: 이미지 alt 추가
healim01 Oct 8, 2024
df74109
refactor: 불필요한 조건 삭제
healim01 Oct 8, 2024
6a74c96
Merge branch 'dev-fe' of https://github.com/woowacourse-teams/2024-ba…
healim01 Oct 8, 2024
90afe27
[FE] 접근성 개선을 위해 이미지 라벨을 달아준다. (#763)
skiende74 Oct 8, 2024
3e0e5e3
[FE] 접근성 개선을 위해 폼의 에러 메세지와 탭으로 이동하는 기능을 추가한다. (#765)
healim01 Oct 8, 2024
44f0661
[FE] 스토리북의 버그를 고치고, 관련 컴포넌트를 일부 수정한다. (#768)
ooherin Oct 8, 2024
4a7698a
chore: 토스트 아이콘 추가
healim01 Oct 9, 2024
bd9d6b3
feat: 새로운 토스트 UI
healim01 Oct 9, 2024
3ce370b
test: 토스트 스토리북 추가
healim01 Oct 9, 2024
b0f0516
refactor: 토스트 훅 수정
healim01 Oct 9, 2024
6b0dca2
chore: 이미지 alt 추가
healim01 Oct 9, 2024
e72f499
chore: 오타인 파일 이름 수정
healim01 Oct 9, 2024
270c18a
design: 토스트 UI 위치 변경
healim01 Oct 9, 2024
d238d68
chore: 변경된 토스트 적용
healim01 Oct 9, 2024
16be442
[FE] playwright를 CI 설정한다. (#770)
skiende74 Oct 9, 2024
8e493df
feat: 두줄 에러 메세지 가능하게 변경
healim01 Oct 9, 2024
0b7436b
feat: 탄스택 쿼리 사용이 빠진 부분 추가
healim01 Oct 9, 2024
453d344
chore: toast info 아이콘 추가
healim01 Oct 9, 2024
2727b36
feat: 토스트 info 타입 추가
healim01 Oct 9, 2024
c1ee41f
fix: 좋아요 기능 버그 수정
healim01 Oct 9, 2024
703280b
[FE] 랜딩 페이지를 클릭으로 섹션을 이동할 수 있게 리팩토링한다. (#773)
ooherin Oct 10, 2024
0429dee
chore: 에러 코드 추가
healim01 Oct 10, 2024
7b720ac
chore: 토스트 타입 변경 반영
healim01 Oct 10, 2024
5f46038
feat: 체크리스트 리스트 error boundary 추가
healim01 Oct 11, 2024
1db8857
feat: 디테일 api 바뀐 포맷으로 수정
ooherin Oct 11, 2024
534ab5f
fix: get api 의 이름 수정
ooherin Oct 11, 2024
9025d62
feat: 체크리스트 섹션 지역 에러 바운더리 추가
healim01 Oct 14, 2024
e02ddd5
feat: 아티클 섹션 지역 바운더리 추가
healim01 Oct 14, 2024
7712ba3
[FE] 바뀐 포스트 api 의 포맷에 맞게 로직을 수정한다. (#783)
ooherin Oct 14, 2024
1a67fb3
feat: 체크리스트 지역 에러바운더리 적용
healim01 Oct 14, 2024
74af8e1
feat: 아티클 지역 에러바운더리 적용
healim01 Oct 14, 2024
4cabbe5
fix: dev-fe 병합
ooherin Oct 14, 2024
6333084
[FE] 바뀐 디테일 api 에 맞게 포맷을 수정한다. (#785)
skiende74 Oct 14, 2024
ebd36f0
[FE] 토스트 에러 핸들링 리팩토링 및 시나리오 개편을 진행한다. (#793)
healim01 Oct 14, 2024
8dc30bf
feat: 디폴트 roomName 에러 바운더리 작업
healim01 Oct 14, 2024
ed766ce
feat: 새 질문 쿼리 에러바운더리 임시방편
healim01 Oct 14, 2024
1e52dd3
feat: 질문 항목 지역 에러 바운더리 추가
healim01 Oct 14, 2024
c563a0e
feat: 아티클 디테일 페이지 지역 에러바운더리 처리
healim01 Oct 14, 2024
fc793f1
feat: 디테일 페이지 지역 에러바운더리 작업
healim01 Oct 14, 2024
6b799bc
feat: 쿼리 클라리언트 옵션 변경
healim01 Oct 14, 2024
4c5d1fe
feat: 메인 체크리스트 섹션 에러 바운더리 처리
healim01 Oct 14, 2024
e83bedc
Merge branch 'dev-fe' of https://github.com/woowacourse-teams/2024-ba…
healim01 Oct 14, 2024
3d8af18
chore: api mock 수정
healim01 Oct 15, 2024
59b33c6
[FE] query 가 적용된 컴포넌트에 지역 에러바운더리를 추가한다. (#802)
skiende74 Oct 16, 2024
876ed95
[FE] 자동 로그인 기능 및 토큰 재발행 로직을 구현한다. (#782)
ooherin Oct 16, 2024
69396f5
[FE] roomInfoStore의 구조변경을 수행한다. (#809)
skiende74 Oct 17, 2024
d8ca50b
[FE] 새 체크리스트 에러 바운더리를 추가하고 내부에 재시도 버튼을 추가한다. (#812)
healim01 Oct 17, 2024
d03cf17
[FE] 탭 스토어와 체크리스트 스토어 리팩토링을 진행한다. (#815)
healim01 Oct 17, 2024
59c0c97
[FE] 좋아요 필터링 기능을 구현한다. (#817)
skiende74 Oct 18, 2024
6e976eb
[FE] 일반 회원가입과 로그인을 개발한다. (#816)
ooherin Oct 18, 2024
ad142de
[FE] 에러 코드 작업 및 메세지 맵핑을 진행한다. (#836)
healim01 Oct 22, 2024
c914113
[FE] 마이페이지에 Voc, 로그아웃, 회원탈퇴 등의 컨텐츠를 추가한다. (#844)
healim01 Oct 22, 2024
a8af108
[FE] playwright에 자동 로그인 기능과 탭과 질문 렌더링, 체크리스트 생성과 관련된 e2e 테스트를 추가한다. …
ooherin Oct 22, 2024
7dd8f79
[FE] roomInfoStore변경을 Nonvalidated에 반영한다. (#851)
skiende74 Oct 22, 2024
30be656
[FE] 구글 상단 검색을 위해 OG 태그 및 구글 서치 작업을 진행한다. (#853)
healim01 Oct 22, 2024
b8dc5f9
[FE] 접근성 개선 작업인 모달, 포커스, 스크린리더 개선을 진행한다. (#814)
ooherin Oct 23, 2024
9c6f7da
[FE] 사용자 트래킹을 위해 Amplitude 초기 설정 및 MVP 기능 트래킹을 지정한다. (#862)
healim01 Oct 23, 2024
ab14b5d
[FE] 지하철 포맷을 일시 수정한다. (#866)
ooherin Oct 23, 2024
4f8ac6b
[FE] 탭 랜더링 실패 오류를 수정한다. (#868)
healim01 Oct 23, 2024
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
64 changes: 64 additions & 0 deletions .github/workflows/playwright.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: Playwright Tests
on:
pull_request:
branches: [main, dev-fe]
paths:
- 'frontend/**'
push:
branches: [main, dev-fe]
paths:
- 'frontend/**'
jobs:
test:
timeout-minutes: 10
runs-on: ubuntu-latest
environment: frontend-msw
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- name: Cache dependencies
id: cache
uses: actions/cache@v3
with:
path: '**/node_modules'
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: |
cd frontend
yarn install --frozen-lockfile
- name: Install Playwright Browsers
run: |
cd frontend
yarn playwright install --with-deps
- name: Create .env File
run: |
cd frontend
echo "CLIENT_ID=${{ secrets.CLIENT_ID }}" >> .env
echo "GA_ID=${{ secrets.GA_ID }}" >> .env
echo "COOKIE=${{ secrets.COOKIE }}" >> .env
echo "KAKAO_MAP_KEY=${{ secrets.KAKAO_MAP_KEY }}" >> .env
echo "SENTRY_DSN_TOKEN=${{ secrets.SENTRY_DSN_TOKEN }}" >> .env
echo "SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }}" >> .env
echo "SENTRY_ORG=${{ secrets.SENTRY_ORG }}" >> .env
echo "SENTRY_PROJECT=${{ secrets.SENTRY_PROJECT }}" >> .env
echo "ANALYZE_BUNDLE=${{ secrets.ANALYZE_BUNDLE }}" >> .env
echo "CI=${{ secrets.CI }}" >> .env
echo "API_ENV=${{ secrets.API_ENV }}" >> .env
echo "API_URL=${{ secrets.API_URL }}" >> .env
echo "REDIRECT_URI=${{ secrets.REDIRECT_URI }}" >> .env
echo "AMPLITUDE_API_KEY=${{ secrets.AMPLITUDE_API_KEY }}" >> .env
- name: Run Playwright tests
run: |
cd frontend
yarn e2e:mock
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
name: playwright-report
path: frontend/playwright-report/
retention-days: 30
2 changes: 1 addition & 1 deletion frontend/.eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"eqeqeq": "error",
"dot-notation": "warn",
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": ["error"],
"@typescript-eslint/no-unused-vars": ["error", { "varsIgnorePattern": "_" }],
"unused-imports/no-unused-imports": "error",
"unused-imports/no-unused-vars": [
"warn",
Expand Down
10 changes: 9 additions & 1 deletion frontend/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
logs
**/*.backup.*
**/*.back.*
user.json

node_modules
dist
Expand All @@ -23,4 +24,11 @@ stories
.env.sentry-build-plugin


private*
private*
test-results/
playwright-report/
blob-report/
playwright/.auth/*
playwright/.cache/
*/.auth

4 changes: 3 additions & 1 deletion frontend/.storybook/preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ const decorator = Story => (
<Global
styles={css`
${normalize}
font-size: 10px;
html {
font-size: 62.5%;
}
`}
/>
<ThemeProvider theme={theme}>
Expand Down
2 changes: 1 addition & 1 deletion frontend/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ npm run build

or

```
```a
yarn build
```

Expand Down
1 change: 1 addition & 0 deletions frontend/jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ module.exports = {
'\\.svg': '<rootDir>/src/mocks/svg.ts',
},
testEnvironment: 'jest-environment-jsdom',
testPathIgnorePatterns: ['\\.spec\\.ts$'],
};
8 changes: 8 additions & 0 deletions frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,17 @@
"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build",
"test": "concurrently --names ,[TYPE] --prefix {name} \"jest\" \"tsc --noEmit\"",
"e2e:mock": "playwright test --config=playwright.mock.config.ts",
"e2e:mock-ui": "playwright test --config=playwright.mock.config.ts --ui",
"e2e:api": "playwright test --config=playwright.api.config.ts",
"e2e:api-ui": "playwright test --config=playwright.api.config.ts --ui",
"postinstall": "cd .. && husky frontend/.husky",
"format": "prettier --cache --write .",
"lint": "eslint --cache .",
"lint:styled": "stylelint --cache --fix ./*"
},
"dependencies": {
"@amplitude/analytics-browser": "^2.11.8",
"@babel/cli": "^7.25.6",
"@babel/core": "^7.25.2",
"@babel/preset-env": "^7.25.4",
Expand All @@ -37,13 +42,15 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-draggable": "^4.4.6",
"react-error-boundary": "^4.0.13",
"react-ga4": "^2.1.0",
"react-router-dom": "^6.24.1",
"zustand": "^4.5.4"
},
"devDependencies": {
"@chromatic-com/storybook": "^1.6.1",
"@eslint/js": "^8.6.0",
"@playwright/test": "^1.47.2",
"@sentry/webpack-plugin": "^2.22.4",
"@storybook/addon-docs": "^8.3.0",
"@storybook/addon-essentials": "^8.2.4",
Expand All @@ -62,6 +69,7 @@
"@testing-library/jest-dom": "^6.5.0",
"@testing-library/react": "^16.0.0",
"@types/jest": "^29.5.12",
"@types/node": "^22.7.4",
"@types/react": "^18.3.5",
"@types/react-dom": "^18.3.0",
"@webpack-cli/generators": "^3.0.7",
Expand Down
83 changes: 83 additions & 0 deletions frontend/playwright.api.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import { defineConfig, devices } from '@playwright/test';
/**
* Read environment variables from file.
* https://github.com/motdotla/dotenv
*/
import dotenv from 'dotenv';
import path from 'path';

dotenv.config({ path: path.resolve(__dirname, '.env.development') });
/**
* See https://playwright.dev/docs/test-configuration.
*/
export default defineConfig({
testDir: './playwright/tests/api',
/* Run tests in files in parallel */
fullyParallel: true,
/* Fail the build on CI if you accidentally left test.only in the source code. */
forbidOnly: !!process.env.CI,
/* Retry on CI only */
retries: process.env.CI ? 2 : 0,
/* Opt out of parallel tests on CI. */
workers: process.env.CI ? 1 : undefined,
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
reporter: 'html',
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
/* Base URL to use in actions like `await page.goto('/')`. */
baseURL: 'http://localhost:3000',

/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: 'on-first-retry',
actionTimeout: 5000,
},

/* Configure projects for major browsers */
projects: [
{ name: 'setup', testMatch: /.*\.setup\.ts/ },
{
name: 'chromium',
use: { ...devices['Desktop Chrome'], storageState: 'playwright/.auth/user.json' },
dependencies: ['setup'],
},

{
name: 'firefox',
use: { ...devices['Desktop Firefox'], storageState: 'playwright/.auth/user.json' },
dependencies: ['setup'],
},

{
name: 'webkit',
use: { ...devices['Desktop Safari'], storageState: 'playwright/.auth/user.json' },
dependencies: ['setup'],
},

/* Test against mobile viewports. */
// {
// name: 'Mobile Chrome',
// use: { ...devices['Pixel 5'] },
// },
// {
// name: 'Mobile Safari',
// use: { ...devices['iPhone 12'] },
// },

/* Test against branded browsers. */
// {
// name: 'Microsoft Edge',
// use: { ...devices['Desktop Edge'], channel: 'msedge' },
// },
// {
// name: 'Google Chrome',
// use: { ...devices['Desktop Chrome'], channel: 'chrome' },
// },
],

/* Run your local dev server before starting the tests */
webServer: {
command: 'yarn dev -- --no-open',
url: 'http://localhost:3000/',
reuseExistingServer: !process.env.CI,
},
});
78 changes: 78 additions & 0 deletions frontend/playwright.mock.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import { defineConfig, devices } from '@playwright/test';
/**
* Read environment variables from file.
* https://github.com/motdotla/dotenv
*/
import dotenv from 'dotenv';
import path from 'path';

dotenv.config({ path: path.resolve(__dirname, '.env.msw') });
/**
* See https://playwright.dev/docs/test-configuration.
*/
export default defineConfig({
testDir: './playwright/tests/mock',
/* Run tests in files in parallel */
fullyParallel: true,
/* Fail the build on CI if you accidentally left test.only in the source code. */
forbidOnly: !!process.env.CI,
/* Retry on CI only */
retries: process.env.CI ? 2 : 0,
/* Opt out of parallel tests on CI. */
workers: process.env.CI ? 1 : undefined,
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
reporter: 'html',
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
baseURL: 'http://localhost:3000',

/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: 'on-first-retry',
actionTimeout: 5000,
},

/* Configure projects for major browsers */
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},

{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},

{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},

/* Test against mobile viewports. */
// {
// name: 'Mobile Chrome',
// use: { ...devices['Pixel 5'] },
// },
// {
// name: 'Mobile Safari',
// use: { ...devices['iPhone 12'] },
// },

/* Test against branded browsers. */
// {
// name: 'Microsoft Edge',
// use: { ...devices['Desktop Edge'], channel: 'msedge' },
// },
// {
// name: 'Google Chrome',
// use: { ...devices['Desktop Chrome'], channel: 'chrome' },
// },
],

/* Run your local dev server before starting the tests */
webServer: {
command: 'yarn msw -- --no-open',
url: 'http://localhost:3000/',
reuseExistingServer: !process.env.CI,
},
});
16 changes: 16 additions & 0 deletions frontend/playwright/tests/api/auth.setup.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { test as setup } from '@playwright/test';
import path from 'path';

const authFile = path.join(__dirname, '../../../playwright/.auth/user.json');

setup('authenticate', async ({ page }) => {
const username = process.env.EMAIL || '';
const password = process.env.PASSWORD || '';

await page.goto('/sign-in');
await page.locator('input[name="email"]').fill(username);
await page.locator('input[name="password"]').fill(password);
await page.getByRole('button', { name: '로그인 하기' }).click();
await page.waitForURL('/home');
await page.context().storageState({ path: authFile });
});
Loading
Loading