Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
5636ebf
chore: code-formatter, gitignore, tsconfig, cypress init
hochan222 Jun 7, 2021
a0a90a7
docs: todo λͺ©λ‘ μ •ν•˜κ³ , env 파일 μΆ”κ°€
hochan222 Jun 7, 2021
196db6a
test: describe, it μž‘μ„±
yechoi42 Jun 7, 2021
0e974b5
feat: κΈ°λŠ₯ κ΅¬ν˜„ BTS 검색해 youtube API μš”μ²­ μ‹œ μƒνƒœμ½”λ“œ 200인지 확인
yechoi42 Jun 7, 2021
7a36867
feat: youtube API λΆˆλŸ¬μ™”μ„ λ•Œ 10개의 item이 μžˆλŠ”μ§€ 확인
yechoi42 Jun 7, 2021
9bb5b78
feat: skeleton UI κΈ°λŠ₯ κ΅¬ν˜„
yechoi42 Jun 7, 2021
47d64b1
feat: skeleton UI, awaitλ₯Ό λ”ν•œ
yechoi42 Jun 7, 2021
131fcc7
feat: 졜근 검색어 쑰회 λ Œλ”λ§ κΈ°λŠ₯ κ΅¬ν˜„ μ™„λ£Œ
yechoi42 Jun 7, 2021
c5008aa
feat: κΈ°λŠ₯ κ΅¬ν˜„, 졜근 검색어 κ²€μƒ‰μ‹œ 둜컬 μŠ€ν† λ¦¬μ§€μ— 등둝
yechoi42 Jun 7, 2021
b1230ad
test: BTS μž…λ ₯ ν›„ κ²€μƒ‰λ²„νŠΌ λˆ„λ₯Όλ•Œ 졜근 검색어 shift μ΅œλŒ€ 3κ°œμΆ”κ°€
hochan222 Jun 8, 2021
8d23dba
feat: BTS μž…λ ₯ ν›„ κ²€μƒ‰λ²„νŠΌ λˆ„λ₯Όλ•Œ 졜근 검색어 shift μ΅œλŒ€ 3개
hochan222 Jun 8, 2021
ead99ac
feat: ν•œ item에 λŒ€ν•΄ μ €μž₯ λ²„νŠΌ λˆŒλ €μ„ λ•Œ localstorage videos μžλ£Œκ΅¬μ‘°μ— μΆ”κ°€λ˜λŠ”μ§€ 확인
hochan222 Jun 8, 2021
89005a5
feat: ν•œ item에 λŒ€ν•΄ μ €μž₯ λ²„νŠΌ λˆŒλ €μ„ λ•Œ μ €μž₯된 μ˜μƒ 갯수 였λ₯Έμͺ½ 상단에 λ„μš°κΈ°
hochan222 Jun 8, 2021
4f60c64
feat: 검색어 μ€‘λ³΅μ²˜λ¦¬
hochan222 Jun 8, 2021
9c4d50c
feat: modal 전체 grid κ΅¬ν˜„ μ™„λ£Œ
hochan222 Jun 8, 2021
baf7a72
fix: 이벀트 μœ„μž„ μ‹œ 전체 section λΆˆλŸ¬μ˜€λŠ” 버그 μˆ˜μ •
hochan222 Jun 8, 2021
110a506
refactor: 폴더 ꡬ쑰 λ¦¬νŽ™ν† λ§
hochan222 Jun 8, 2021
81e5c42
feat: btsμ˜μƒ μ €μž₯ ν›„ μ˜μƒ λ²„νŠΌ λˆŒλ €μ„ λ•Œ, local storage의 saved-videos쀑 checkView가…
hochan222 Jun 8, 2021
6c21caf
feat: λ³Ό μ˜μƒ λ²„νŠΌ λˆŒλ €μ„λ•Œ νŽ˜μ΄μ§€ ꡬ성 κΈ°λŠ₯ κ΅¬ν˜„ μ™„λ£Œ
hochan222 Jun 8, 2021
d4dd3b0
test: refactor__ search-page.spec.js둜 파일 뢄리
hochan222 Jun 8, 2021
4141b23
test: refactor__ main-page testcase 파일둜 뢄리
hochan222 Jun 8, 2021
79393dc
feat:local storage의 saved-videos쀑 checkViewκ°€ true인것 λ Œλ”λ§
yechoi42 Jun 9, 2021
fc66392
feat: watched-pageμ—μ„œ μ‚­μ œ, view, like κΈ°λŠ₯
yechoi42 Jun 9, 2021
ceb15ee
test: λ³Ό μ˜μƒ λ²„νŠΌ λˆ„λ₯Ό μ‹œ λ‹€λ₯Έ νŽ˜μ΄μ§€ μ‚­μ œ 및 λ³Ό μ˜μƒ λ Œλ”λ§
yechoi42 Jun 9, 2021
154b67c
feat: λ³Ό μ˜μƒ λ²„νŠΌ λˆ„λ₯Ό μ‹œ λ‹€λ₯Έ νŽ˜μ΄μ§€ μ‚­μ œ 및 λ³Ό μ˜μƒ λ Œλ”λ§
yechoi42 Jun 9, 2021
3c3d447
fix: 졜근 검색어 μ€‘λ³΅λ˜μ„œ λ Œλ”λ§ λ˜λŠ”κ±° ν•΄κ²°
yechoi42 Jun 9, 2021
299c1c7
fix: - λ³Έ μ˜μƒμ—μ„œ 체크 λˆŒλ €μ„ λ•Œ 사라지도둝 μˆ˜μ •
yechoi42 Jun 9, 2021
19bda25
fix: - κ²€μƒ‰μ°½μ—μ„œ μ €μž₯ λˆŒλ €μ„ λ•Œ λ³Ό μ˜μƒμ— μΆ”κ°€
yechoi42 Jun 9, 2021
908b3e8
feat: search-page - Inner text λ°”κΎΈκΈ°, disabled
yechoi42 Jun 9, 2021
007a46c
fix: κ²€μƒ‰μ‹œ μ €μž₯된 ν•­λͺ©λ“€μ—” μ €μž₯ λŒ€μ‹  μ €μž₯μ™„λ£Œ λ²„νŠΌ λ„μš°κΈ°, disabled둜 λ³€ν™˜
yechoi42 Jun 9, 2021
aa08a0c
fix: μŠ€μΌˆλ ˆν†€λ Œλ”λ§ 전에 κΈ°μ‘΄ μ˜μƒ μ§€μš°κΈ°
yechoi42 Jun 9, 2021
840fd5e
feat: scroll - 슀크둀 내리면 μΆ”κ°€.
yechoi42 Jun 9, 2021
5aac75e
fix: 슀크둀 내릴 μ‹œ ν™”λ©΄ μœ„μΉ˜ μœ μ§€ν•˜κΈ°
yechoi42 Jun 9, 2021
689e88a
refactor: 슀크둀 ν•¨μˆ˜ λ¦¬νŽ™ν† λ§
yechoi42 Jun 9, 2021
992f3dc
feat: - λͺ¨λ‹¬μ—μ„œ 졜근 검색 쀑볡 둜직처리 μ™„λ£Œ
yechoi42 Jun 9, 2021
b5e202f
feat: add iframe loading=lazy
yechoi42 Jun 9, 2021
78d1454
feat: κ²€μƒ‰μ—μ„œ keyup으둜 μ—”ν„° 감지해 검색
yechoi42 Jun 9, 2021
525ac09
feat: λ³Όμ˜μƒ, λ³Έμ˜μƒ, λ™μ˜μƒ 검색 λ²„νŠΌ ν΄λ¦­μ‹œ 색깔 ν† κΈ€
yechoi42 Jun 9, 2021
23f620e
feat: modal-close λ²„νŠΌ λˆŒλ €μ„λ•Œ λ³Ό μ˜μƒ 클릭 이벀트 κΈ°λŠ₯ κ΅¬ν˜„
yechoi42 Jun 9, 2021
0009bfb
feat: dataset element에 μ„€μ • μ™„λ£Œ
hochan222 Jun 10, 2021
6553074
bug: μ΄μƒν•΄μš”.. λΆˆλŸ¬μ˜€μ§€ μ•ŠλŠ” bts μ—μŠ€νŒŒκ°€ λ‚˜μ˜΅λ‹ˆλŒœ..
hochan222 Jun 10, 2021
8224592
fix: dataset λ³€κ²½ μœ ν‹Έ λŒ€μ‹  직접 μ‘°μž‘ν•΄μ£ΌκΈ°
hochan222 Jun 10, 2021
05c3184
feat: 검색 λ²„νŠΌ λˆŒλ €μ„λ•Œ 졜근 검색어 쑰회 λ Œλ”λ§
hochan222 Jun 10, 2021
a22924c
feat: λΉˆνŽ˜μ΄μ§€ λ Œλ”λ§
hochan222 Jun 10, 2021
90c519a
feat: μ˜μƒμ €μž₯ 100개 μ œν•œ
yechoi42 Jun 14, 2021
695e286
fix: ν•œκ΅­μ–΄ 검색 μ‹œ μ—”ν„°κ°€ λ‘λ²ˆ 이벀트 μ²˜λ¦¬λ˜λŠ” 문제
yechoi42 Jun 14, 2021
652b1c4
feat: μ’‹μ•„μš” λ²„νŠΌμ„ λˆ„λ₯Έ λ°μ΄ν„°λ§Œ ν•„ν„°λ§ν•΄μ„œ 보여쀀닀
yechoi42 Jun 14, 2021
e19f801
feat: - μ‚¬μš©μžκ°€ λ²„νŠΌμ„ ν΄λ¦­ν–ˆμ„ λ•Œ ν•΄λ‹Ή ν–‰μœ„κ°€ μ •μƒμ μœΌλ‘œ λ™μž‘ν•˜κ±°λ‚˜, μ‹€νŒ¨ν•˜μ˜€μŒμ„Β snackbarλ₯Ό 톡해 보여쀀닀.
yechoi42 Jun 14, 2021
e7ccf22
feat: dark mode
yechoi42 Jun 14, 2021
3fc40c7
feat: λ°˜μ‘ν˜• css
yechoi42 Jun 14, 2021
3a6cbfc
refactor: snackbar λ„μš°λŠ” μ‹œκ°„ μˆ˜μ •
yechoi42 Jun 14, 2021
2504482
refactor: search-page view λ¦¬νŒ©ν† λ§
yechoi42 Jun 14, 2021
48cbc4e
refactor: getVideoHTML둜 video html λ Œλ”λ§ ν•¨μˆ˜ν™”
yechoi42 Jun 14, 2021
bdd0d00
refactor: getQueryString type
yechoi42 Jun 14, 2021
5679237
refactor: type force
yechoi42 Jun 14, 2021
3bd7647
refactor: @shared 폴더 ꡬ쑰 λ³€κ²½
yechoi42 Jun 14, 2021
0e4e12b
refactor: import convention refactoring
yechoi42 Jun 14, 2021
9254270
refactor: 폴더 ꡬ쑰 ν•˜λ‚˜λ‘œ 병합
yechoi42 Jun 14, 2021
676d319
fix: PAGE_NOT_FOUND_IMG 경둜 distμ—μ„œ src둜 μˆ˜μ •
yechoi42 Jun 14, 2021
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
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
dist/js/env.js
src/js/env.ts

# Logs
logs
*.log
Expand All @@ -6,6 +9,8 @@ yarn-debug.log*
yarn-error.log*
lerna-debug.log*

.vscode/

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

Expand Down Expand Up @@ -80,7 +85,6 @@ typings/

# Nuxt.js build / generate output
.nuxt
dist

# Gatsby files
.cache/
Expand Down
5 changes: 5 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"singleQuote": true,
"trailingComma": "all",
"printWidth": 120
}
3 changes: 3 additions & 0 deletions cypress.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"baseUrl": "http://127.0.0.1:5500"
}
5 changes: 5 additions & 0 deletions cypress/fixtures/example.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"name": "Using fixtures to represent data",
"email": "[email protected]",
"body": "Fixtures are a great way to mock data for responses to routes"
}
27 changes: 27 additions & 0 deletions cypress/integration/main-page.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { typeSearchInputAndClick } from './utils.js';

describe('λ³Ό μ˜μƒ λ²„νŠΌ λˆŒλ €μ„λ•Œ νŽ˜μ΄μ§€ ꡬ성', () => {
beforeEach(() => {
cy.visit('/');
});

it('btsμ˜μƒ μ €μž₯ ν›„ μ˜μƒ λ²„νŠΌ λˆŒλ €μ„ λ•Œ, checkViewκ°€ false인것 λ Œλ”λ§', () => {
cy.get('#search-button').click();
typeSearchInputAndClick('bts');
cy.get(`:nth-child(1) > .content-container > :nth-child(2) > .d-flex > .btn`).click();
cy.get('svg').click();
cy.reload()
});

// it("μ‚­μ œ λ²„νŠΌ ν΄λ¦­μ‹œ μžλ£Œκ΅¬μ‘°μ—μ„œ ν•΄λ‹Ή item μ‚­μ œ", () => {
// })
// it("checkLike false일 λ•Œ μ’‹μ•„μš” λ²„νŠΌ ν΄λ¦­μ‹œ, checkLike true둜 λ³€κ²½", () => {
// })
// it("checkLike true일 λ•Œ μ’‹μ•„μš” λ²„νŠΌ ν΄λ¦­μ‹œ, checkLike false둜 λ³€κ²½", () => {
// })
// it("checkViewκ°€ falseμΌλ•Œ μ²΄ν¬λ°•μŠ€ 클릭 μ‹œ, 자료ꡬ쑰 checkView κ°’ true둜 λ³€κ²½.", () => {
// })
// it("λ³Ό μ˜μƒ λ²„νŠΌ λˆ„λ₯Ό μ‹œ λ‹€λ₯Έ νŽ˜μ΄μ§€ μ‚­μ œ 및 λ³Ό μ˜μƒ λ Œλ”λ§", () => {
// })

});
78 changes: 78 additions & 0 deletions cypress/integration/search-page.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import { typeSearchInputAndClick } from './utils.js';

describe('검색 λ²„νŠΌ λˆŒλ €μ„ λ•Œ νŽ˜μ΄μ§€ ꡬ성', () => {
beforeEach(() => {
cy.visit('/');
});

it('youtube API λΆˆλŸ¬μ™”μ„ λ•Œ 10개의 skeleton UI 생성 확인', () => {
cy.get('#search-button').click();
typeSearchInputAndClick('bts');

cy.get('.skeleton').should('have.length', 10);
});

it('youtube API λΆˆλŸ¬μ™”μ„ λ•Œ 10개의 item이 μžˆλŠ”μ§€ 확인', () => {
cy.get('#search-button').click();
typeSearchInputAndClick('bts');
cy.get('.skeleton').should('have.length', 0);
cy.get('.clip').should('have.length', 10);
});

it('item을 λΆˆλŸ¬μ™”μ„λ•Œ channelTitle, publishedAt, thumbnail, title, videoId κ°’ 뢈러였기', () => {
cy.get('#search-button').click();
typeSearchInputAndClick('bts');
cy.get(':nth-child(1) > .preview-container > iframe').should('have.attr', 'src');
cy.get(`:nth-child(1) > .content-container > h3`).contains(/[^\s]/);
cy.get(`:nth-child(1) > .content-container > :nth-child(2) > .channel-name`).should('have.attr', 'href');
cy.get(`:nth-child(1) > .content-container > :nth-child(2) > .channel-name`).contains(/[^\s]/);
cy.get(`:nth-child(1) > .content-container > :nth-child(2) > .meta > p`).contains(/[^\s]/);
cy.get(`:nth-child(1) > .content-container > :nth-child(2) > .d-flex > .btn`).should('exist');
});

it('BTS μž…λ ₯ ν›„ κ²€μƒ‰λ²„νŠΌ λˆ„λ₯Όλ•Œ 졜근 검색어 shift μ΅œλŒ€ 3개', () => {
cy.get('#search-button').click();
typeSearchInputAndClick('bts');
cy.get('#modal-recent-search-items > :nth-child(1)').should('have.text', 'bts');
typeSearchInputAndClick('ccc');
cy.get('#modal-recent-search-items > :nth-child(1)').should('have.text', 'ccc');
typeSearchInputAndClick('aaa');
cy.get('#modal-recent-search-items > :nth-child(1)').should('have.text', 'aaa');
});

it('bts μž…λ ₯ν›„ item μΉ΄λ“œλ‘œ UI λ„μš°κΈ°', () => {
cy.get('#search-button').click();
typeSearchInputAndClick('bts');

for (let youtubeCardCount = 1; youtubeCardCount < 11; youtubeCardCount++) {
cy.get(`:nth-child(${youtubeCardCount}) > .preview-container > iframe`).should('exist');
cy.get(`:nth-child(${youtubeCardCount}) > .content-container > h3`).should('exist');
cy.get(`:nth-child(${youtubeCardCount}) > .content-container > :nth-child(2) > .channel-name`).should('exist');
cy.get(`:nth-child(${youtubeCardCount}) > .content-container > :nth-child(2) > .meta > p`).should('exist');
cy.get(`:nth-child(${youtubeCardCount}) > .content-container > :nth-child(2) > .d-flex > .btn`).should('exist');
}
});

/*// 검색어 μ€‘λ³΅μ²˜λ¦¬
it("ν•œ item에 λŒ€ν•΄ μ €μž₯ λ²„νŠΌ λˆŒλ €μ„ λ•Œ localstorage videos μžλ£Œκ΅¬μ‘°μ— μΆ”κ°€λ˜λŠ”μ§€ 확인", () => {
// cy.get('#search-button').click();
// typeSearchInputAndClick('bts');
// cy.log(window.localStorage.getItem('recent-search'))
// expect(window.localStorage.getItem('recent-search')).to.equal(['bts'])
})*/

it('ν•œ item에 λŒ€ν•΄ μ €μž₯ λ²„νŠΌ λˆŒλ €μ„ λ•Œ μ €μž₯된 μ˜μƒ 갯수 였λ₯Έμͺ½ 상단에 λ„μš°κΈ°', () => {
cy.get('#search-button').click();
typeSearchInputAndClick('bts');
cy.get(`:nth-child(1) > .content-container > :nth-child(2) > .d-flex > .btn`).click();
cy.get(`#modal-saved-video-length`).contains('μ €μž₯된 μ˜μƒ 갯수: 1개');
});

// it("[3단계] scroll ν–ˆμ„λ•Œ 10κ°œμ”© λŠ˜μ–΄λ‚˜κ²Œ ν•˜κΈ°(lazy loading)", () => {

// })

// it("ν•œ item에 λŒ€ν•΄ μ €μž₯ λ²„νŠΌ λˆŒλ €μ„ λ•Œ μ €μž₯된 μ˜μƒ 갯수 100개 μ œν•œν•˜κΈ°", () => {

// })
});
6 changes: 6 additions & 0 deletions cypress/integration/utils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const typeSearchInputAndClick = (type) => {
cy.get('#modal-search-input').type(type);
cy.get('#modal-search-button').click();
};

export { typeSearchInputAndClick };
17 changes: 17 additions & 0 deletions cypress/integration/watched-page.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// describe("λ³Έ μ˜μƒ λ²„νŠΌ λˆŒλ €μ„λ•Œ νŽ˜μ΄μ§€ ꡬ성", () => {
// it("local storage의 saved-videos쀑 checkViewκ°€ true인것 λ Œλ”λ§", () => {

// })
// it("μ‚­μ œ λ²„νŠΌ ν΄λ¦­μ‹œ μžλ£Œκ΅¬μ‘°μ—μ„œ ν•΄λ‹Ή item μ‚­μ œ", () => {

// })
// it("checkLike falseμΌλ•Œ μ’‹μ•„μš” λ²„νŠΌ ν΄λ¦­μ‹œ, checkLike true둜 λ³€κ²½", () => {

// })
// it("checkLike trueμΌλ•Œ μ’‹μ•„μš” λ²„νŠΌ ν΄λ¦­μ‹œ, checkLike false둜 λ³€κ²½", () => {

// })
// it("checkViewκ°€ trueμΌλ•Œ μ²΄ν¬λ°•μŠ€ 클릭 μ‹œ, 자료ꡬ쑰 checkView κ°’ false둜 λ³€κ²½.", () => {

// })
// })
54 changes: 54 additions & 0 deletions cypress/integration/youtube-class.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import { ENV } from '../../src/js/@shared/constants/env.ts';
import { model } from '../../dist/js/model/index.js';

// const BTSQUERY = `https://www.googleapis.com/youtube/v3/search?key=${ENV.API_KEY}&part=snippet&q=bts&maxResults=10&type=video&videoEmbeddable=true`;

// describe("API μœ νš¨μ„± 확인", () => {
// it("BTS 검색해 youtube API μš”μ²­ μ‹œ μƒνƒœμ½”λ“œ 200인지 확인", () => {
// cy.visit('/');
// cy.request({
// url: BTSQUERY,
// followRedirection: false,
// }).then((resp) => {
// cy.log(resp.status)
// expect(resp.status).to.eq(200);
// });
// });
// })

// ⬇️ μ €μž₯
// β†ͺ️ μ €μž₯ μ·¨μ†Œ

// - model (local storage)
// - [ ] video : [
// "a": {
// videodata: videoModel,
// checkLike : boolean,
// checkView: boolean
// }
// ]

// describe("λΆ€κ°€κΈ°λŠ₯", () => {
// it("닀크λͺ¨λ“œ ν΄λ¦­μ‹œ 닀크λͺ¨λ“œ μ „ν™˜", () => {

// })
// it("각 이벀트 λ°œμƒμ‹œ μ•Œλ¦Όμ°½ λ„μš°κΈ° (좔후에 μ„ΈλΆ€μ μœΌλ‘œ λΆ„λ₯˜)", () => {

// })
// })


// describe("μ’‹μ•„μš” μ˜μƒ λ²„νŠΌ λˆŒλ €μ„λ•Œ νŽ˜μ΄μ§€ ꡬ성", () => {
// it("local storage의 saved-videos쀑 checkLikeκ°€ true인것 λ Œλ”λ§", () => {

// })
// it("μ‚­μ œ λ²„νŠΌ ν΄λ¦­μ‹œ μžλ£Œκ΅¬μ‘°μ—μ„œ ν•΄λ‹Ή item μ‚­μ œ", () => {

// })
// it("checkLike trueμΌλ•Œ μ’‹μ•„μš” λ²„νŠΌ ν΄λ¦­μ‹œ, checkLike false둜 λ³€κ²½ν•˜κ³  νŽ˜μ΄μ§€μ—μ„œ 제거", () => {

// })
// it("checkViewκ°€ trueμΌλ•Œ μ²΄ν¬λ°•μŠ€ 클릭 μ‹œ, 자료ꡬ쑰 checkView κ°’ false둜 λ³€κ²½.", () => {

// })
// })
22 changes: 22 additions & 0 deletions cypress/plugins/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/// <reference types="cypress" />
// ***********************************************************
// This example plugins/index.js can be used to load plugins
//
// You can change the location of this file or turn off loading
// the plugins file with the 'pluginsFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/plugins-guide
// ***********************************************************

// This function is called when a project is opened or re-opened (e.g. due to
// the project's config changing)

/**
* @type {Cypress.PluginConfig}
*/
// eslint-disable-next-line no-unused-vars
module.exports = (on, config) => {
// `on` is used to hook into various events Cypress emits
// `config` is the resolved Cypress config
}
25 changes: 25 additions & 0 deletions cypress/support/commands.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// ***********************************************
// This example commands.js shows you how to
// create various custom commands and overwrite
// existing commands.
//
// For more comprehensive examples of custom
// commands please read more here:
// https://on.cypress.io/custom-commands
// ***********************************************
//
//
// -- This is a parent command --
// Cypress.Commands.add('login', (email, password) => { ... })
//
//
// -- This is a child command --
// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
//
//
// -- This is a dual command --
// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
//
//
// -- This will overwrite an existing command --
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
20 changes: 20 additions & 0 deletions cypress/support/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// ***********************************************************
// This example support/index.js is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************

// Import commands.js using ES2015 syntax:
import './commands'

// Alternatively you can use CommonJS syntax:
// require('./commands')
68 changes: 68 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
## πŸ”₯ Projects!

### κΈ°λŠ₯ κ΅¬ν˜„

### local storage

μ €μž₯ 해야될 것듀: λ³Όμ˜μƒ, μ’‹μ•„μš” μ˜μƒ, λ³Έμ˜μƒ

- model (local storage)
- [ ] video : [
"a": {
like-youtube : boolean,
check: boolean
}
]

- [ ] Data fetch
- [ ] API_KEY github에 곡개 μ•ˆλ˜κ²Œ ν•˜κΈ°/
- [ ] λ™μ˜μƒ 검색 λ²„νŠΌ λˆ„λ₯΄λ©΄ 유튜브 api json으둜 κ°€μ Έμ˜€λŠ”κ±° console.log둜 확인

- [ ] View
- [ ] search κ²°κ³Ό λ™μ˜μƒ ν‹€ UI μž‘μ„±
- [ ] λͺ¨λ‹¬ λ§Œλ“€κΈ°
- [ ] μ°½ 생성
- [ ] 검색 search UI
- [ ] λ™μ˜μƒ UI

### 🎯 step1 검색 κΈ°λŠ₯

- [ ] [유튜브 검색 API](https://developers.google.com/youtube/v3/getting-started?hl=ko)λ₯Ό ν†΅ν•΄μ„œ, λ‚΄κ°€ μΆ”κ°€λ‘œ 보고 싢은 μ˜μƒλ“€μ„ 검색할 수 μžˆλ‹€.
- [ ] 검색 μ‹œ μ—”ν„°ν‚€λ₯Ό λˆŒλ €μ„ λ•Œμ™€ 마우슀둜 검색 λ²„νŠΌμ„ λˆŒλ €μ„ λ•Œ 검색 λ™μž‘μ΄ 이루어진닀.
- [ ] λ‘œλ”©μ»΄ν¬λ„ŒνŠΈ: 데이터λ₯Ό λΆˆλŸ¬μ˜€λŠ” 쀑일 λ•Œ, ν˜„μž¬ 데이터λ₯Ό λΆˆλŸ¬μ˜€λŠ” μ€‘μž„μ„ skeleton UI둜 보여쀀닀.
- [ ] 검색 κ²°κ³Όκ°€ μ—†λŠ” 경우 κ²°κ³Ό μ—†μŒ 이미지λ₯Ό μΆ”κ°€ν•˜μ—¬, μ‚¬μš©μžμ—κ²Œ λ©”μ‹œμ§€λ₯Ό 보여쀀닀.
- [ ] 검색 κ²°κ³Ό μ—†μŒ μ΄λ―Έμ§€λŠ” `src/images/status/not_found.png` κ²½λ‘œμ— μžˆλ‹€.
- [ ] 졜초 κ²€μƒ‰κ²°κ³ΌλŠ” 10κ°œκΉŒμ§€λ§Œ 보여쀀닀. 더 λ§Žμ€ λ°μ΄ν„°λŠ” μŠ€ν¬λ‘€μ„ 내릴 λ•Œ μΆ”κ°€λ‘œ λΆˆλŸ¬μ˜¨λ‹€.
- 검색 κ²°κ³Ό ν™”λ©΄μ—μ„œ μœ μ €κ°€ λΈŒλΌμš°μ € 슀크둀 λ°”λ₯Ό λκΉŒμ§€ μ΄λ™μ‹œμΌ°μ„ 경우, κ·Έλ‹€μŒ 10개 μ•„μ΄ν…œμ„ μΆ”κ°€λ‘œ apiμš”μ²­ν•˜μ—¬ λΆˆλŸ¬μ˜¨λ‹€.
- [ ] λ‚΄κ°€ κ²€μƒ‰ν•œ μ˜μƒλ“€μ˜ json 데이터λ₯Ό `μ €μž₯`ν•  수 μžˆλ‹€. (μ‹€μ œ μ €μž₯이 μ•„λ‹Œ μ˜μƒ idλ₯Ό Web Storage에 μ €μž₯). 단 이미 μ €μž₯된 κ²½μš°λŠ” μ €μž₯ λ²„νŠΌμ΄ 보이지 μ•Šκ²Œ ν•œλ‹€.
- [ ] μ €μž₯ κ°€λŠ₯ν•œ μ΅œλŒ€ λ™μ˜μƒμ˜ κ°―μˆ˜λŠ” 100κ°œμ΄λ‹€.
- [ ] 검색 λͺ¨λ‹¬μ— λ‹€μ‹œ μ ‘κ·Όν–ˆμ„ λ•Œ κ°€μž₯ λ§ˆμ§€λ§‰μ— κ²€μƒ‰ν•œ ν‚€μ›Œλ“œλ‘œ κ²€μƒ‰ν•œ κ²°κ³Όλ₯Ό 보여쀀닀.
- [ ] 졜근 검색 ν‚€μ›Œλ“œλ₯Ό 3κ°œκΉŒμ§€ 화면상에 검색창 ν•˜λ‹¨μ— 보여쀀닀.

### 🎯🎯 step2 κ°•μ˜μ‹€ 관리 κΈ°λŠ₯

- [ ] κ°€μž₯ μ²˜μŒμ—λŠ” μ €μž₯된 μ˜μƒμ΄ μ—†μŒμœΌλ‘œ, λΉ„μ–΄μžˆλ‹€λŠ” 것을 μ‚¬μš©μžμ—κ²Œ μ•Œλ €μ£ΌλŠ” μƒνƒœλ₯Ό 보여쀀닀.
- [ ] 이후 νŽ˜μ΄μ§€λ₯Ό λ°©λ¬Έν–ˆμ„ λ•Œ κΈ°λ³Έ 메인 화면은 λ‚΄κ°€ **λ³Ό μ˜μƒ**λ“€μ˜ 리슀트λ₯Ό 보여쀀닀.
- [ ] μ˜μƒ μΉ΄λ“œμ˜ 이λͺ¨μ§€ λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ μ•„λž˜μ™€ 같은 μƒνƒœ 변경이 κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€.
- [ ] βœ… λ³Έ μ˜μƒμœΌλ‘œ 체크
- [ ] πŸ—‘οΈ λ²„νŠΌμœΌλ‘œ μ €μž₯된 λ¦¬μŠ€νŠΈμ—μ„œ μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€. (μ‚­μ œ μ‹œ μ‚¬μš©μžμ—κ²Œ 정말 μ‚­μ œν•  것인지 λ¬Όμ–΄λ΄…λ‹ˆλ‹€.)
- [ ] μ‚¬μš©μžκ°€ λ²„νŠΌμ„ ν΄λ¦­ν–ˆμ„ λ•Œ ν•΄λ‹Ή ν–‰μœ„κ°€ μ •μƒμ μœΌλ‘œ λ™μž‘ν•˜κ±°λ‚˜, μ‹€νŒ¨ν•˜μ˜€μŒμ„ `snackbar`λ₯Ό 톡해 보여쀀닀.
- [ ] λ³Έ μ˜μƒ, λ³Ό μ˜μƒ λ²„νŠΌμ„ 눌러 필터링 ν•  수 μžˆλ‹€.

### 🎯🎯🎯 step3 μœ μ € κ²½ν—˜ 증가 κΈ°λŠ₯

- [ ] λ‚΄κ°€ λ³Έ μ˜μƒ 쀑 쒋은 μ˜μƒμ—λŠ” μ’‹μ•„μš”, μ½”λ©˜νŠΈλ₯Ό 직접 μΆ”κ°€ν•  수 μžˆλ‹€. (μ‹€μ œ 유튜브 μ˜μƒμ— μΆ”κ°€ν•˜λŠ” api μ‚¬μš©)
- [ ] πŸ‘ μ’‹μ•„μš” APIλ₯Ό μ΄μš©ν•˜μ—¬ 전솑
- [ ] πŸ’¬ λŒ“κΈ€ APIλ₯Ό μ΄μš©ν•˜μ—¬ 전솑 (λŒ“κΈ€ 전솑을 μœ„ν•œ modalκ³Ό form은 슀슀둜 κ΅¬ν˜„ν•©λ‹ˆλ‹€.)
- [ ] μ’‹μ•„μš” λ²„νŠΌμ„ λˆ„λ₯Έ λ°μ΄ν„°λ§Œ ν•„ν„°λ§ν•΄μ„œ 보여쀀닀.
- [ ] 닀크 λͺ¨λ“œλ₯Ό μœ„ν•œ λ²„νŠΌμ„ λ§Œλ“ λ‹€. λ²„νŠΌ uiλŠ” 직접 λ§Œλ“ λ‹€.
- [ ] λͺ¨λ“  κΈ€μž 색상은 #FFFFFF, λ°°κ²½ 색상은 #000000 둜 ν•œμ •ν•œλ‹€.
- [ ] λ°˜μ‘ν˜• μ›Ή: μœ μ €κ°€ μ‚¬μš©ν•˜λŠ” λ””λ°”μ΄μŠ€μ˜ κ°€λ‘œ 길이에 따라 검색 결과의 row λ‹Ή column 개수λ₯Ό λ³€κ²½ν•œλ‹€.
- 992px μ΄ν•˜: 4개
- 768px μ΄ν•˜: 2개
- 576px μ΄ν•˜: 1개
- [ ] 슀크둀 νŽ˜μ΄μ§• 방식을 μ΄μš©ν•΄μ„œ Lazy loading을 κ°œμ„ ν•œλ‹€.

### err

[Refused to display 'url' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'](https://stackoverflow.com/questions/41522652/refused-to-display-url-in-a-frame-because-it-set-x-frame-options-to-sameori)
Loading