Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions src/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import React from 'react';
import { Switch, Route } from 'react-router-dom';

import MainPage from './pages/MainPage';
import WritePage from './pages/WritePage';
import IntroducePage from './pages/IntroducePage';
import HeaderContainer from './containers/common/HeaderContainer';

Expand All @@ -12,6 +13,7 @@ const App = () => (
<Switch>
<Route exact path="/" component={MainPage} />
<Route path="/introduce/:id" component={IntroducePage} />
<Route path="/write" component={WritePage} />
</Switch>
</>
);
Expand Down
8 changes: 8 additions & 0 deletions src/App.test.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,12 @@ describe('App', () => {
expect(container).toHaveTextContent('스터디를 소개합니다.2');
});
});

context('with path /write', () => {
it('renders the study write page', () => {
const { container } = renderApp({ path: '/write' });

expect(container).toHaveTextContent('스터디 그룹 개설하기');
});
});
});
27 changes: 26 additions & 1 deletion src/pages/MainPage.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,41 @@ import React from 'react';

import styled from '@emotion/styled';

import { Link } from 'react-router-dom';
import StudyGroupsContainer from '../containers/groups/StudyGroupsContainer';
import Responsive from '../styles/Responsive';
import palette from '../styles/palette';

const MainPageWrapper = styled(Responsive)`

`;

const TitleHeader = styled.div`
display: flex;
justify-content: space-between;
align-items: center;
// TODO: Link 공통 style component 만들기
a {
margin-right: 4rem;
padding: .6rem .9rem .6rem .9rem;
border: 1px solid ${palette.gray[7]};
background: white;
color: ${palette.gray[7]};
font-weight: bold;
border-radius: .7rem;
:hover {
color: white;
background: ${palette.gray[7]};
}
}
Comment on lines +19 to +31
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • 버튼이랑 Link 버튼이랑 공통 Styled Component로 만들기 (추후 예정)

`;

const MainPage = () => (
<MainPageWrapper>
<h2>지금 바로 시작하세요!</h2>
<TitleHeader>
<h2>지금 바로 시작하세요!</h2>
<Link to="/write">스터디 개설하기</Link>
</TitleHeader>
<StudyGroupsContainer />
</MainPageWrapper>
);
Expand Down
35 changes: 23 additions & 12 deletions src/pages/MainPage.test.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from 'react';

import { useDispatch, useSelector } from 'react-redux';

import { render, fireEvent } from '@testing-library/react';
import { render } from '@testing-library/react';

import { MemoryRouter } from 'react-router-dom';

Expand All @@ -11,6 +11,7 @@ import STUDY_GROUPS from '../../fixtures/study-groups';

describe('MainPage', () => {
const dispatch = jest.fn();

beforeEach(() => {
dispatch.mockClear();

Expand All @@ -27,10 +28,28 @@ describe('MainPage', () => {
</MemoryRouter>
));

it('renders Main Page Title', () => {
const { container } = renderMainPage();
describe('renders Main Page text contents', () => {
it('renders Main Page Title', () => {
const { container } = renderMainPage();

expect(container).toHaveTextContent('지금 바로 시작하세요!');
});

it('renders Main Page Link text', () => {
const { container } = renderMainPage();

expect(container).toHaveTextContent('스터디 개설하기');
});

it('renders Main Page study group tags', () => {
const { container } = renderMainPage();

expect(container).toHaveTextContent('지금 바로 시작하세요!');
STUDY_GROUPS.forEach(({ tags }) => {
tags.forEach((tag) => {
expect(container).toHaveTextContent(tag);
});
});
});
});

it('calls dispatch with loadStudyGroups action', () => {
Expand All @@ -41,12 +60,4 @@ describe('MainPage', () => {
expect(container).toHaveTextContent('스터디를 소개합니다.1');
expect(container).toHaveTextContent('스터디를 소개합니다.2');
});

it('Click event to calls dispatch', () => {
const { getByText } = renderMainPage();

fireEvent.click(getByText('#JavaScript'));

expect(dispatch).toBeCalled();
});
});
22 changes: 22 additions & 0 deletions src/pages/WritePage.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import React from 'react';

import Responsive from '../styles/Responsive';

const IntroducePage = () => (
<Responsive>
<h1>스터디 그룹 개설하기</h1>
<div>
<input type="text" placeholder="제목을 입력하세요" />
</div>
<div>
<textarea rows="10" cols="100" placeholder="내용" />
</div>
Comment on lines +11 to +13
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<div>
<input type="text" placeholder="태그를 입력하세요" />
</div>
<div>
<button type="button">저장</button>
</div>
</Responsive>
);
export default IntroducePage;
28 changes: 28 additions & 0 deletions src/pages/WritePage.test.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import React from 'react';

import { render } from '@testing-library/react';

import WritePage from './WritePage';

describe('WritePage', () => {
const renderWritePage = () => render((
<WritePage />
));

describe('render Write Page contents text', () => {
it('renders Write Page Title', () => {
const { container } = renderWritePage();

expect(container).toHaveTextContent('스터디 그룹 개설하기');
});

it('renders write form tag', () => {
const { getByPlaceholderText, getByText } = renderWritePage();

expect(getByPlaceholderText('제목을 입력하세요')).not.toBeNull();
expect(getByPlaceholderText('내용')).not.toBeNull();
expect(getByPlaceholderText('태그를 입력하세요')).not.toBeNull();
expect(getByText('저장')).not.toBeNull();
});
});
});