From 00ebbc7fb92c3f719514817e6db616a0535f0f77 Mon Sep 17 00:00:00 2001 From: 2yunseong Date: Fri, 23 Aug 2024 16:02:50 +0900 Subject: [PATCH 1/4] =?UTF-8?q?test:=20=EC=9D=B8=EC=A0=81=EC=82=AC?= =?UTF-8?q?=ED=95=AD=20=EC=B2=AB=EB=B2=88=EC=A7=B8=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=9E=85=EB=A0=A5=EC=B0=BD=20=EC=8B=9C=EB=82=98?= =?UTF-8?q?=EB=A6=AC=EC=98=A4=20=EA=B2=80=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../e2e/application.personal_info.cy.ts | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 frontend/cypress/e2e/application.personal_info.cy.ts diff --git a/frontend/cypress/e2e/application.personal_info.cy.ts b/frontend/cypress/e2e/application.personal_info.cy.ts new file mode 100644 index 00000000..8564410a --- /dev/null +++ b/frontend/cypress/e2e/application.personal_info.cy.ts @@ -0,0 +1,59 @@ +describe('신청폼 테스트: ', () => { + beforeEach(() => { + cy.visit('http://localhost:3000/application') + cy.get('label').contains("개발자").click(); + cy.get('label').contains("WEB").click(); + cy.wait(100); + cy.get('label').contains("선택없음").click(); + cy.get('button').contains(/다음/).click(); + + cy.get('input').first().as('nameInput'); + cy.get('input').eq(1).as('phoneInput'); + cy.get('input').eq(2).as('studentIdInput'); + cy.get('input').eq(3).as('academicStatusInput'); + + }) + + describe('인적사항 첫번째 페이지 테스트', () => { + it('사용자는 이름을 5글자까지 입력할 수 있다.', () => { + cy.get('@nameInput').type("에").should("have.value", "에").clear() + cy.get('@nameInput').type("에코노").should("have.value", "에코노").clear() + cy.get('@nameInput').type("abcde").should("have.value", "abcde").clear() + + }); + + it('사용자는 5글자가 넘는 이름을 입력할 시 앞의 5글자까지만 입력을 받는다.', () => { + cy.get('@nameInput').type("에코노베이션").should("have.value", "에코노베이").clear(); + }); + + it('사용자는 연락처에 11자리 숫자만 기입할 수 있다. 숫자를 기입하면, 표준 연락처 형식에 맞게 값을 보여준다.', () => { + cy.get('@phoneInput').type('01011111111').should("have.value", "010-1111-1111").clear(); + }); + + it('사용자가 연락처를 입력한 시점부터 연락처 형식에 맞게 작성을 완료하지 못한경우 \"연락처를 입력해주세요.\" 라는 안내문구가 입력창에 나타난다.', () => { + cy.get('@phoneInput').type('01011'); + cy.get('@phoneInput').siblings().find('div').should("have.text", "연락처를 입력해주세요."); + }); + + it('사용자는 학번에 6자리 숫자를 입력할 수 있다.', () => { + cy.get('@studentIdInput').type('1').should("have.value", "1").clear(); + cy.get('@studentIdInput').type('123').should("have.value", "123").clear(); + cy.get('@studentIdInput').type('123456').should("have.value", "123456").clear(); + }); + + it('사용자는 학번에 6자리를 초과하는 숫자를 입력할 경우 앞의 6글자까지만 입력받는다.', () => { + cy.get('@studentIdInput').type('1234567').should("have.value", "123456").clear(); + }); + + it('사용자는 학번을 입력한 시점부터 학번 형식에 맞게 작성을 완료하지 못한경우 "\학번을 입력해주세요"\라는 안내문구가 입력창에 나타난다.', () => { + cy.get('@studentIdInput').type('1'); + cy.get('@studentIdInput').siblings().find('div').should('have.text', "학번을 입력해주세요."); + }); + + it('사용자는 학적상태(재학/휴학)을 입력할 수 있다.', () => { + cy.get('@academicStatusInput').type("재학중").should('have.value', '재학중').clear(); + cy.get('@academicStatusInput').type("부트캠프로 인한 휴학. 2025년 1학기에 복학할 예정입니다.").should("have.value", "부트캠프로 인한 휴학. 2025년 1학기에 복학할 예정입니다."); + }); + }) + +}) \ No newline at end of file From 658ba70793b4274aa48b6a4356f19582dc6af6d2 Mon Sep 17 00:00:00 2001 From: 2yunseong Date: Sat, 24 Aug 2024 18:52:10 +0900 Subject: [PATCH 2/4] =?UTF-8?q?test:=20=ED=95=99=EB=85=84/=ED=95=99?= =?UTF-8?q?=EA=B8=B0=20=EB=B0=8F=20=EC=9E=91=EC=84=B1=20=EA=B0=92=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=EC=97=AC=EB=B6=80=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../e2e/application.personal_info.cy.ts | 83 +++++++++++++++++-- 1 file changed, 77 insertions(+), 6 deletions(-) diff --git a/frontend/cypress/e2e/application.personal_info.cy.ts b/frontend/cypress/e2e/application.personal_info.cy.ts index 8564410a..51af4361 100644 --- a/frontend/cypress/e2e/application.personal_info.cy.ts +++ b/frontend/cypress/e2e/application.personal_info.cy.ts @@ -1,6 +1,9 @@ -describe('신청폼 테스트: ', () => { +const BASE_URL = "http://localhost:3000"; + +describe('인적사항 첫번째 페이지 입력 검증 테스트: ', () => { beforeEach(() => { - cy.visit('http://localhost:3000/application') + cy.visit(`${BASE_URL}/application`) + cy.clearAllLocalStorage(); cy.get('label').contains("개발자").click(); cy.get('label').contains("WEB").click(); cy.wait(100); @@ -11,10 +14,9 @@ describe('신청폼 테스트: ', () => { cy.get('input').eq(1).as('phoneInput'); cy.get('input').eq(2).as('studentIdInput'); cy.get('input').eq(3).as('academicStatusInput'); - + cy.get('label').contains("4학년").as("fourthGradeLabel"); }) - describe('인적사항 첫번째 페이지 테스트', () => { it('사용자는 이름을 5글자까지 입력할 수 있다.', () => { cy.get('@nameInput').type("에").should("have.value", "에").clear() cy.get('@nameInput').type("에코노").should("have.value", "에코노").clear() @@ -54,6 +56,75 @@ describe('신청폼 테스트: ', () => { cy.get('@academicStatusInput').type("재학중").should('have.value', '재학중').clear(); cy.get('@academicStatusInput').type("부트캠프로 인한 휴학. 2025년 1학기에 복학할 예정입니다.").should("have.value", "부트캠프로 인한 휴학. 2025년 1학기에 복학할 예정입니다."); }); - }) -}) \ No newline at end of file + it("사용자는 학년을 선택한 후 학기를 1학기, 2학기 중 선택할 수 있다.", () => { + cy.get('@fourthGradeLabel').click(); + cy.get('label').contains(/학기/).eq(0).click(); + + cy.getAllLocalStorage({ log: true }).then((result) => { + const ls = result[BASE_URL]; + expect(ls['grade']).to.match(/4학년/); + expect(ls['semester']).to.match(/1학기/); + }) + }); +}); + +describe("인적사항 첫번째 페이지 전환 테스트:", () => { + beforeEach(() => { + cy.visit(`${BASE_URL}/application`) + cy.clearAllLocalStorage(); + cy.get('label').contains("개발자").click(); + cy.get('label').contains("WEB").click(); + cy.wait(100); + cy.get('label').contains("선택없음").click(); + cy.get('button').contains(/다음/).click(); + + cy.get('input').first().as('nameInput'); + cy.get('input').eq(1).as('phoneInput'); + cy.get('input').eq(2).as('studentIdInput'); + cy.get('input').eq(3).as('academicStatusInput'); + cy.get('label').contains("4학년").as("fourthGradeLabel"); +}); + +it("모든 올바른 값을 입력한 뒤에는 작성한 값이 LocalStorage에 저장된다.", () => { + /* test 케이스 데이터 */ + const testSuite = { + input: { + name: "김아무개", + contacted: "01012341234", + classOf: "123456", + registered: "재학", + grade: "4학년", + semester: "1학기" + }, + answer: { + name: "\"김아무개\"", + contacted: "\"010-1234-1234\"", + classOf: "\"123456\"", + registered: "\"재학\"", + grade: "\"4학년\"", + semester: "\"1학기\"" + } + } + /* 폼 작성 */ + cy.get('@nameInput').type("김아무개"); + cy.get('@phoneInput').type("01012341234"); + cy.get('@studentIdInput').type("123456"); + cy.get('@academicStatusInput').type("재학"); + cy.get("@fourthGradeLabel").click(); + cy.get('label').contains(/학기/).eq(0).click(); + + /* 값 검증 */ +cy.getAllLocalStorage({ log: true }).then((result) => { + // TODO: 중복 줄이기 + const ls = result[BASE_URL]; + expect(ls['name']).to.equal(testSuite.answer.name); + expect(ls['contacted']).to.equal(testSuite.answer.contacted); + expect(ls['classOf']).to.equal(testSuite.answer.classOf); + expect(ls['registered']).to.equal(testSuite.answer.registered); + expect(ls['grade']).to.equal(testSuite.answer.grade); + expect(ls['semester']).to.equal(testSuite.answer.semester); +}); + +}); +}); \ No newline at end of file From 9ccf6b6f71daa945a6ca3fa37b4f632718efb061 Mon Sep 17 00:00:00 2001 From: 2yunseong Date: Sat, 24 Aug 2024 19:34:46 +0900 Subject: [PATCH 3/4] =?UTF-8?q?style:=20prettier=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../e2e/application.personal_info.cy.ts | 248 ++++++++++-------- 1 file changed, 136 insertions(+), 112 deletions(-) diff --git a/frontend/cypress/e2e/application.personal_info.cy.ts b/frontend/cypress/e2e/application.personal_info.cy.ts index 51af4361..fdb91ea7 100644 --- a/frontend/cypress/e2e/application.personal_info.cy.ts +++ b/frontend/cypress/e2e/application.personal_info.cy.ts @@ -1,130 +1,154 @@ const BASE_URL = "http://localhost:3000"; -describe('인적사항 첫번째 페이지 입력 검증 테스트: ', () => { +describe("인적사항 첫번째 페이지 입력 검증 테스트: ", () => { beforeEach(() => { - cy.visit(`${BASE_URL}/application`) - cy.clearAllLocalStorage(); - cy.get('label').contains("개발자").click(); - cy.get('label').contains("WEB").click(); - cy.wait(100); - cy.get('label').contains("선택없음").click(); - cy.get('button').contains(/다음/).click(); - - cy.get('input').first().as('nameInput'); - cy.get('input').eq(1).as('phoneInput'); - cy.get('input').eq(2).as('studentIdInput'); - cy.get('input').eq(3).as('academicStatusInput'); - cy.get('label').contains("4학년").as("fourthGradeLabel"); - }) - - it('사용자는 이름을 5글자까지 입력할 수 있다.', () => { - cy.get('@nameInput').type("에").should("have.value", "에").clear() - cy.get('@nameInput').type("에코노").should("have.value", "에코노").clear() - cy.get('@nameInput').type("abcde").should("have.value", "abcde").clear() + cy.visit(`${BASE_URL}/application`); + cy.clearAllLocalStorage(); + cy.get("label").contains("개발자").click(); + cy.get("label").contains("WEB").click(); + cy.wait(100); + cy.get("label").contains("선택없음").click(); + cy.get("button").contains(/다음/).click(); - }); - - it('사용자는 5글자가 넘는 이름을 입력할 시 앞의 5글자까지만 입력을 받는다.', () => { - cy.get('@nameInput').type("에코노베이션").should("have.value", "에코노베이").clear(); - }); - - it('사용자는 연락처에 11자리 숫자만 기입할 수 있다. 숫자를 기입하면, 표준 연락처 형식에 맞게 값을 보여준다.', () => { - cy.get('@phoneInput').type('01011111111').should("have.value", "010-1111-1111").clear(); - }); + cy.get("input").first().as("nameInput"); + cy.get("input").eq(1).as("phoneInput"); + cy.get("input").eq(2).as("studentIdInput"); + cy.get("input").eq(3).as("academicStatusInput"); + cy.get("label").contains("4학년").as("fourthGradeLabel"); + }); - it('사용자가 연락처를 입력한 시점부터 연락처 형식에 맞게 작성을 완료하지 못한경우 \"연락처를 입력해주세요.\" 라는 안내문구가 입력창에 나타난다.', () => { - cy.get('@phoneInput').type('01011'); - cy.get('@phoneInput').siblings().find('div').should("have.text", "연락처를 입력해주세요."); - }); + it("사용자는 이름을 5글자까지 입력할 수 있다.", () => { + cy.get("@nameInput").type("에").should("have.value", "에").clear(); + cy.get("@nameInput").type("에코노").should("have.value", "에코노").clear(); + cy.get("@nameInput").type("abcde").should("have.value", "abcde").clear(); + }); - it('사용자는 학번에 6자리 숫자를 입력할 수 있다.', () => { - cy.get('@studentIdInput').type('1').should("have.value", "1").clear(); - cy.get('@studentIdInput').type('123').should("have.value", "123").clear(); - cy.get('@studentIdInput').type('123456').should("have.value", "123456").clear(); - }); - - it('사용자는 학번에 6자리를 초과하는 숫자를 입력할 경우 앞의 6글자까지만 입력받는다.', () => { - cy.get('@studentIdInput').type('1234567').should("have.value", "123456").clear(); - }); + it("사용자는 5글자가 넘는 이름을 입력할 시 앞의 5글자까지만 입력을 받는다.", () => { + cy.get("@nameInput") + .type("에코노베이션") + .should("have.value", "에코노베이") + .clear(); + }); - it('사용자는 학번을 입력한 시점부터 학번 형식에 맞게 작성을 완료하지 못한경우 "\학번을 입력해주세요"\라는 안내문구가 입력창에 나타난다.', () => { - cy.get('@studentIdInput').type('1'); - cy.get('@studentIdInput').siblings().find('div').should('have.text', "학번을 입력해주세요."); - }); + it("사용자는 연락처에 11자리 숫자만 기입할 수 있다. 숫자를 기입하면, 표준 연락처 형식에 맞게 값을 보여준다.", () => { + cy.get("@phoneInput") + .type("01011111111") + .should("have.value", "010-1111-1111") + .clear(); + }); + + it('사용자가 연락처를 입력한 시점부터 연락처 형식에 맞게 작성을 완료하지 못한경우 "연락처를 입력해주세요." 라는 안내문구가 입력창에 나타난다.', () => { + cy.get("@phoneInput").type("01011"); + cy.get("@phoneInput") + .siblings() + .find("div") + .should("have.text", "연락처를 입력해주세요."); + }); - it('사용자는 학적상태(재학/휴학)을 입력할 수 있다.', () => { - cy.get('@academicStatusInput').type("재학중").should('have.value', '재학중').clear(); - cy.get('@academicStatusInput').type("부트캠프로 인한 휴학. 2025년 1학기에 복학할 예정입니다.").should("have.value", "부트캠프로 인한 휴학. 2025년 1학기에 복학할 예정입니다."); - }); - - it("사용자는 학년을 선택한 후 학기를 1학기, 2학기 중 선택할 수 있다.", () => { - cy.get('@fourthGradeLabel').click(); - cy.get('label').contains(/학기/).eq(0).click(); - - cy.getAllLocalStorage({ log: true }).then((result) => { - const ls = result[BASE_URL]; - expect(ls['grade']).to.match(/4학년/); - expect(ls['semester']).to.match(/1학기/); - }) + it("사용자는 학번에 6자리 숫자를 입력할 수 있다.", () => { + cy.get("@studentIdInput").type("1").should("have.value", "1").clear(); + cy.get("@studentIdInput").type("123").should("have.value", "123").clear(); + cy.get("@studentIdInput") + .type("123456") + .should("have.value", "123456") + .clear(); + }); + + it("사용자는 학번에 6자리를 초과하는 숫자를 입력할 경우 앞의 6글자까지만 입력받는다.", () => { + cy.get("@studentIdInput") + .type("1234567") + .should("have.value", "123456") + .clear(); + }); + + it('사용자는 학번을 입력한 시점부터 학번 형식에 맞게 작성을 완료하지 못한경우 "학번을 입력해주세요"라는 안내문구가 입력창에 나타난다.', () => { + cy.get("@studentIdInput").type("1"); + cy.get("@studentIdInput") + .siblings() + .find("div") + .should("have.text", "학번을 입력해주세요."); + }); + + it("사용자는 학적상태(재학/휴학)을 입력할 수 있다.", () => { + cy.get("@academicStatusInput") + .type("재학중") + .should("have.value", "재학중") + .clear(); + cy.get("@academicStatusInput") + .type("부트캠프로 인한 휴학. 2025년 1학기에 복학할 예정입니다.") + .should( + "have.value", + "부트캠프로 인한 휴학. 2025년 1학기에 복학할 예정입니다." + ); + }); + + it("사용자는 학년을 선택한 후 학기를 1학기, 2학기 중 선택할 수 있다.", () => { + cy.get("@fourthGradeLabel").click(); + cy.get("label").contains(/학기/).eq(0).click(); + + cy.getAllLocalStorage({ log: true }).then((result) => { + const ls = result[BASE_URL]; + expect(ls["grade"]).to.match(/4학년/); + expect(ls["semester"]).to.match(/1학기/); }); + }); }); describe("인적사항 첫번째 페이지 전환 테스트:", () => { beforeEach(() => { - cy.visit(`${BASE_URL}/application`) + cy.visit(`${BASE_URL}/application`); cy.clearAllLocalStorage(); - cy.get('label').contains("개발자").click(); - cy.get('label').contains("WEB").click(); + cy.get("label").contains("개발자").click(); + cy.get("label").contains("WEB").click(); cy.wait(100); - cy.get('label').contains("선택없음").click(); - cy.get('button').contains(/다음/).click(); - - cy.get('input').first().as('nameInput'); - cy.get('input').eq(1).as('phoneInput'); - cy.get('input').eq(2).as('studentIdInput'); - cy.get('input').eq(3).as('academicStatusInput'); - cy.get('label').contains("4학년").as("fourthGradeLabel"); -}); + cy.get("label").contains("선택없음").click(); + cy.get("button").contains(/다음/).click(); -it("모든 올바른 값을 입력한 뒤에는 작성한 값이 LocalStorage에 저장된다.", () => { - /* test 케이스 데이터 */ - const testSuite = { - input: { - name: "김아무개", - contacted: "01012341234", - classOf: "123456", - registered: "재학", - grade: "4학년", - semester: "1학기" - }, - answer: { - name: "\"김아무개\"", - contacted: "\"010-1234-1234\"", - classOf: "\"123456\"", - registered: "\"재학\"", - grade: "\"4학년\"", - semester: "\"1학기\"" - } - } - /* 폼 작성 */ - cy.get('@nameInput').type("김아무개"); - cy.get('@phoneInput').type("01012341234"); - cy.get('@studentIdInput').type("123456"); - cy.get('@academicStatusInput').type("재학"); - cy.get("@fourthGradeLabel").click(); - cy.get('label').contains(/학기/).eq(0).click(); - - /* 값 검증 */ -cy.getAllLocalStorage({ log: true }).then((result) => { - // TODO: 중복 줄이기 - const ls = result[BASE_URL]; - expect(ls['name']).to.equal(testSuite.answer.name); - expect(ls['contacted']).to.equal(testSuite.answer.contacted); - expect(ls['classOf']).to.equal(testSuite.answer.classOf); - expect(ls['registered']).to.equal(testSuite.answer.registered); - expect(ls['grade']).to.equal(testSuite.answer.grade); - expect(ls['semester']).to.equal(testSuite.answer.semester); -}); + cy.get("input").first().as("nameInput"); + cy.get("input").eq(1).as("phoneInput"); + cy.get("input").eq(2).as("studentIdInput"); + cy.get("input").eq(3).as("academicStatusInput"); + cy.get("label").contains("4학년").as("fourthGradeLabel"); + }); + it("모든 올바른 값을 입력한 뒤에는 작성한 값이 LocalStorage에 저장된다.", () => { + /* test 케이스 데이터 */ + const testSuite = { + input: { + name: "김아무개", + contacted: "01012341234", + classOf: "123456", + registered: "재학", + grade: "4학년", + semester: "1학기", + }, + answer: { + name: '"김아무개"', + contacted: '"010-1234-1234"', + classOf: '"123456"', + registered: '"재학"', + grade: '"4학년"', + semester: '"1학기"', + }, + }; + /* 폼 작성 */ + cy.get("@nameInput").type("김아무개"); + cy.get("@phoneInput").type("01012341234"); + cy.get("@studentIdInput").type("123456"); + cy.get("@academicStatusInput").type("재학"); + cy.get("@fourthGradeLabel").click(); + cy.get("label").contains(/학기/).eq(0).click(); + + /* 값 검증 */ + cy.getAllLocalStorage({ log: true }).then((result) => { + // TODO: 중복 줄이기 + const ls = result[BASE_URL]; + expect(ls["name"]).to.equal(testSuite.answer.name); + expect(ls["contacted"]).to.equal(testSuite.answer.contacted); + expect(ls["classOf"]).to.equal(testSuite.answer.classOf); + expect(ls["registered"]).to.equal(testSuite.answer.registered); + expect(ls["grade"]).to.equal(testSuite.answer.grade); + expect(ls["semester"]).to.equal(testSuite.answer.semester); + }); + }); }); -}); \ No newline at end of file From 84369c532512912115c8d45f815f0de7fba6c917 Mon Sep 17 00:00:00 2001 From: 2yunseong Date: Sat, 24 Aug 2024 19:48:11 +0900 Subject: [PATCH 4/4] =?UTF-8?q?test:=20=ED=8E=98=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EC=A0=84=ED=99=98=20=EA=B2=80=EC=A6=9D=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../e2e/application.personal_info.cy.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/frontend/cypress/e2e/application.personal_info.cy.ts b/frontend/cypress/e2e/application.personal_info.cy.ts index fdb91ea7..6147b513 100644 --- a/frontend/cypress/e2e/application.personal_info.cy.ts +++ b/frontend/cypress/e2e/application.personal_info.cy.ts @@ -151,4 +151,22 @@ describe("인적사항 첫번째 페이지 전환 테스트:", () => { expect(ls["semester"]).to.equal(testSuite.answer.semester); }); }); + + it("질문 제목 네비게이션을 통해 이전 페이지로 이동 가능하다.", () => { + cy.get("button") + .contains(/프로젝트 희망 분야/) + .click(); + cy.get("span") + .contains("2순위가 없다면 '없음'을 선택해주세요.") + .should("have.text", "2순위가 없다면 '없음'을 선택해주세요."); + }); + + it("현재 페이지가 제대로 작성되어있지 않은 상황에서 이후 질문 페이지로 이동 시 작성을 요청하는 alert창이 나타난다.", () => { + cy.get("button") + .contains(/기타 질문 사항/) + .click(); + cy.on("window:alert", (text) => { + expect(text).to.equal("필수 질문을 작성해주세요."); + }); + }); });