diff --git a/.gitignore b/.gitignore index c7908b4..fab38b1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ -/screenshots +/cypress/screenshots allure-results allure-report/ /node_modules cypress.env.json -/package-lock.json \ No newline at end of file +/package-lock.json +login.cy.ts \ No newline at end of file diff --git a/cypress/e2e/triagem.cy.ts b/cypress/e2e/triagem.cy.ts new file mode 100644 index 0000000..5794f31 --- /dev/null +++ b/cypress/e2e/triagem.cy.ts @@ -0,0 +1,283 @@ +import { TriagemPage } from "../support/page/triagemPage"; + +const triagemPage = new TriagemPage (); + +describe("Triagem Paciente", () => { + beforeEach(() => { + cy.visit("/"); + }); + + it("Acessar formulário de triagem", () => { + cy.login(Cypress.env("paciente").email, Cypress.env("paciente").senha) + cy.url({ timeout: 20000 }).should("include", "/paciente"); + triagemPage.clicarIniciartriagem(); + triagemPage.validarPaginaTriagemCarregada(); + cy.screenshot() + }); + + it("Validar preencimento de campos obrigatórios", () => { + cy.login(Cypress.env("paciente").email, Cypress.env("paciente").senha); + cy.url({ timeout: 20000 }).should("include", "/paciente"); + + triagemPage.clicarIniciartriagem(); + triagemPage.validarPaginaTriagemCarregada(); + + triagemPage.clicarEmAvancar(); + + triagemPage.validarCamposObrigatorios(); + + cy.screenshot() + }); + + it("Validar CPF", () => { + cy.login(Cypress.env("paciente").email, Cypress.env("paciente").senha); + + cy.url({ timeout: 20000 }).should("include", "/paciente"); + + triagemPage.clicarIniciartriagem(); + triagemPage.validarPaginaTriagemCarregada(); + + triagemPage.validarCPFInvalido(); + + cy.screenshot(); + }); + + it("Avançar para a etapa 2", () => { + cy.login(Cypress.env("paciente").email, Cypress.env("paciente").senha); + + cy.url({ timeout: 20000 }).should("include", "/paciente"); + + triagemPage.clicarIniciartriagem(); + triagemPage.validarPaginaTriagemCarregada(); + + triagemPage.preencherEtapa1(); + + triagemPage.clicarEmAvancar(); + + cy.url({ timeout: 20000 }).should("include", "/laudo-medico"); + + cy.screenshot(); + }); + + it("Voltar para etapa 1 ter dados persistidos", () => { + const nome = 'Maria de Souza'; + const dataNascimentoEsperada = '21/07/1990'; + const generoEsperado = 'Mulher (Cis)'; + const estadoEsperado = 'São Paulo'; + const cidadeEsperada = 'Osasco'; + + + cy.login(Cypress.env("paciente").email, Cypress.env("paciente").senha); + cy.url({ timeout: 20000 }).should("include", "/paciente"); + + triagemPage.clicarIniciartriagem(); + triagemPage.validarPaginaTriagemCarregada(); + triagemPage.preencherEtapa1(); + + triagemPage.clicarEmAvancar(); + cy.url({ timeout: 20000 }).should("include", "/laudo-medico"); + + triagemPage.clicarVoltar(); + + triagemPage.elements.seusDados.inputNome().should('have.value', nome); + + triagemPage.elements.seusDados.inputGenero().should('contain', generoEsperado); + + triagemPage.elements.seusDados.campoDataNascimento().should('contain', dataNascimentoEsperada); + + triagemPage.elements.seusDados.inputEstado().should('contain', estadoEsperado); + + triagemPage.elements.seusDados.inputCidade().should('contain', cidadeEsperada); + + cy.screenshot(); + }); + + it("Validar preenchimento de campos obrigatorios 2", () => { + cy.login(Cypress.env("paciente").email, Cypress.env("paciente").senha); + cy.url({ timeout: 20000 }).should("include", "/paciente"); + + triagemPage.clicarIniciartriagem(); + + triagemPage.validarPaginaTriagemCarregada(); + triagemPage.preencherEtapa1(); + triagemPage.clicarEmAvancar(); + + cy.url({ timeout: 20000 }).should("include", "/laudo-medico"); + + triagemPage.clicarEmAvancarFinal(); + + cy.contains('Você possui alguma deficiência?*').parents('div').contains('p', 'Selecione "Sim" ou "Não"').should('be.visible'); + cy.contains('Precisa de assistência legal?*').parents('div').contains('p', 'Selecione "Sim" ou "Não"').should('be.visible'); + cy.contains('Faz uso de medicamentos?*').parents('div').contains('p', 'Selecione "Sim" ou "Não"').should('be.visible'); + cy.contains('Você possui um Diagnóstico de NMO?*').parents('div').contains('p', 'Selecione "Sim" ou "Não"').should('be.visible'); + + cy.screenshot(); + + }); + + it("Avançar Etapa 3", () => { + cy.login(Cypress.env("paciente").email, Cypress.env("paciente").senha); + cy.url({ timeout: 20000 }).should("include", "/paciente"); + + triagemPage.clicarIniciartriagem(); + + triagemPage.validarPaginaTriagemCarregada(); + triagemPage.preencherEtapa1(); + triagemPage.clicarEmAvancar(); + + cy.url({ timeout: 20000 }).should("include", "/laudo-medico"); + + triagemPage.preencherEtapa2(); + triagemPage.clicarEmAvancarFinal(); + + cy.url({ timeout: 20000 }).should("include", "/rede-de-apoio"); + + cy.screenshot(); + }); + + it("Adicionar Rede de Apoio", () => { + + cy.login(Cypress.env("paciente").email, Cypress.env("paciente").senha); + + cy.url({ timeout: 20000 }).should("include", "/paciente"); + triagemPage.clicarIniciartriagem(); + + triagemPage.validarPaginaTriagemCarregada(); + triagemPage.preencherEtapa1(); + triagemPage.clicarEmAvancar(); + + cy.url({ timeout: 20000 }).should("include", "/laudo-medico"); + + triagemPage.preencherEtapa2(); + triagemPage.clicarEmAvancarFinal(); + + triagemPage.addRedeApoio(); + + cy.screenshot(); + + }); + + it("Remover Rede de Apoio", () => { + + cy.login(Cypress.env("paciente").email, Cypress.env("paciente").senha); + cy.url({ timeout: 20000 }).should("include", "/paciente"); + triagemPage.clicarIniciartriagem(); + + triagemPage.validarPaginaTriagemCarregada(); + triagemPage.preencherEtapa1(); + triagemPage.clicarEmAvancar(); + + cy.url({ timeout: 20000 }).should("include", "/laudo-medico"); + triagemPage.preencherEtapa2(); + triagemPage.clicarEmAvancarFinal(); + + triagemPage.addRedeApoio(); + triagemPage.removerRedeApoio(); + + cy.screenshot(); + }); + + it("Dados persistidos na Etapa2 e Apoio", () => { + + cy.login(Cypress.env("paciente").email, Cypress.env("paciente").senha); + cy.url({ timeout: 20000 }).should("include", "/paciente"); + triagemPage.clicarIniciartriagem(); + + triagemPage.validarPaginaTriagemCarregada(); + triagemPage.preencherEtapa1(); + triagemPage.clicarEmAvancar(); + + cy.url({ timeout: 20000 }).should("include", "/laudo-medico"); + triagemPage.preencherEtapa2(); + triagemPage.clicarEmAvancarFinal(); + + cy.url({ timeout: 20000 }).should("include", "/rede-de-apoio"); + triagemPage.addRedeApoio(); + triagemPage.clicarVoltar(); + + triagemPage.validarPersistenciaEtapa2(); + + triagemPage.clicarEmAvancarFinal(); + + triagemPage.persistirRededeApoio(); + + cy.screenshot(); + + }); + + it("Manter dados aos reabrir formulário", () => { + const nome = 'Maria de Souza'; + const dataNascimentoEsperada = '21/07/1990'; + const generoEsperado = 'Mulher (Cis)'; + const estadoEsperado = 'São Paulo'; + const cidadeEsperada = 'Osasco'; + + cy.login(Cypress.env("paciente").email, Cypress.env("paciente").senha); + cy.url({ timeout: 20000 }).should("include", "/paciente"); + triagemPage.clicarIniciartriagem(); + + triagemPage.validarPaginaTriagemCarregada(); + cy.url({ timeout: 20000 }).should("include", "/seus-dados"); + triagemPage.preencherEtapa1(); + triagemPage.clicarEmAvancar(); + + cy.url({ timeout: 20000 }).should("include", "/laudo-medico"); + triagemPage.preencherEtapa2(); + triagemPage.clicarEmAvancarFinal(); + + cy.url({ timeout: 20000 }).should("include", "/rede-de-apoio"); + triagemPage.addRedeApoio(); + + triagemPage.clicarInicio(); + + triagemPage.clicarIniciartriagem(); + + triagemPage.validarPaginaTriagemCarregada(); + + cy.url({ timeout: 20000 }).should("include", "/seus-dados"); + triagemPage.validarPersistenciaEtapa1(); + + triagemPage.clicarEmAvancar(); + + cy.url({ timeout: 20000 }).should("include", "/laudo-medico"); + triagemPage.validarPersistenciaEtapa2(); + + triagemPage.clicarEmAvancarFinal(); + + cy.url({ timeout: 20000 }).should("include", "/rede-de-apoio"); + triagemPage.persistirRededeApoio(); + + + cy.screenshot(); + + }); + + it("Finalizar formulário", () => { + cy.login(Cypress.env("paciente").email, Cypress.env("paciente").senha); + cy.url({ timeout: 20000 }).should("include", "/paciente"); + + triagemPage.clicarIniciartriagem(); + + triagemPage.validarPaginaTriagemCarregada(); + + cy.url({ timeout: 20000 }).should("include", "/seus-dados"); + triagemPage.preencherEtapa1(); + triagemPage.clicarEmAvancar(); + + cy.url({ timeout: 20000 }).should("include", "/laudo-medico"); + + triagemPage.preencherEtapa2(); + triagemPage.clicarEmAvancarFinal(); + + cy.url({ timeout: 20000 }).should("include", "/rede-de-apoio"); + triagemPage.addRedeApoio(); + + triagemPage.clicarFinalizar(); + triagemPage.mensagemDeConfirmacao(); + + cy.screenshot(); + }); + +}); + + diff --git a/cypress/screenshots/login.cy.ts/Login -- Realizar login com admin.png b/cypress/screenshots/login.cy.ts/Login -- Realizar login com admin.png deleted file mode 100644 index 40343ee..0000000 Binary files a/cypress/screenshots/login.cy.ts/Login -- Realizar login com admin.png and /dev/null differ diff --git a/cypress/screenshots/login.cy.ts/Login -- Realizar login com paciente.png b/cypress/screenshots/login.cy.ts/Login -- Realizar login com paciente.png deleted file mode 100644 index fbaa8ba..0000000 Binary files a/cypress/screenshots/login.cy.ts/Login -- Realizar login com paciente.png and /dev/null differ diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts index 5674070..a775860 100644 --- a/cypress/support/commands.ts +++ b/cypress/support/commands.ts @@ -1,4 +1,4 @@ -import { loginElemento } from "../support/page/loginPage" +import { loginElemento } from "./page/loginPage" Cypress.Commands.add("login", (emailEntrada, senhaEntrada) => { cy.visit("/") diff --git a/cypress/support/page/triagem/actions/TriagemActions.ts b/cypress/support/page/triagem/actions/TriagemActions.ts new file mode 100644 index 0000000..f257752 --- /dev/null +++ b/cypress/support/page/triagem/actions/TriagemActions.ts @@ -0,0 +1,23 @@ +import { commonElements } from "../elements/commonElements"; + +export class TriagemActions { + clickBotaoPorTexto(texto: string) { + cy.contains("button", texto).click(); + } + + avancar() { + commonElements.btnSubmit().click(); + } + + voltar() { + commonElements.btnVoltar().click(); + } + + proximaEtapa() { + commonElements.btnSubmitFinal().click(); + } + + finalizar() { + commonElements.btnFinalizar().click(); + } +} diff --git a/cypress/support/page/triagem/elements/commonElements.ts b/cypress/support/page/triagem/elements/commonElements.ts new file mode 100644 index 0000000..ce53272 --- /dev/null +++ b/cypress/support/page/triagem/elements/commonElements.ts @@ -0,0 +1,11 @@ +export const commonElements = { + btnSubmit: () => cy.get('button[type="submit"]'), + btnSubmitFinal: () => cy.contains('button[type="submit"]', 'Próxima etapa'), + btnVoltar: () => cy.contains('button', 'Voltar'), + btnFinalizar: () => cy.contains('button', 'Finalizar'), + btnInicioTriagem: () => cy.get('a[href="/paciente/triagem/seus-dados"]'), + btnInicio: () => cy.get('a[href="/paciente"]'), + mensagemConfirmacao: () => cy.contains( + 'Obrigado por enviar suas informações. Estamos analisando seu cadastro e entraremos em contato em breve.' + ) +}; diff --git a/cypress/support/page/triagem/elements/laudoMedicoElements.ts b/cypress/support/page/triagem/elements/laudoMedicoElements.ts new file mode 100644 index 0000000..94bd8f9 --- /dev/null +++ b/cypress/support/page/triagem/elements/laudoMedicoElements.ts @@ -0,0 +1,25 @@ +export const laudoMedicoElements = { + titulo: () => cy.contains('Laudo Médico'), + + possuiDeficiencia: (opcao: 'Sim' | 'Não') => { + const valor = opcao === 'Sim' ? 'yes' : 'no'; + + + return cy.get('#has_disability').find(`[role="radio"][value="${valor}"]`); + }, + + precisaAssistencia: (opcao: 'Sim' | 'Não') => { + const valor = opcao === 'Sim' ? 'yes' : 'no'; + return cy.get('#need_legal_assistance').find(`[role="radio"][value="${valor}"]`); + }, + + usaMedicamento: (opcao: 'Sim' | 'Não') => { + const valor = opcao === 'Sim' ? 'yes' : 'no'; + return cy.get('#take_medication').find(`[role="radio"][value="${valor}"]`); + }, + + possuiNmo: (opcao: 'Sim' | 'Não') => { + const valor = opcao === 'Sim' ? 'yes' : 'no'; + return cy.get('#has_nmo_diagnosis').find(`[role="radio"][value="${valor}"]`); + }, +}; \ No newline at end of file diff --git a/cypress/support/page/triagem/elements/redeApoioElements.ts b/cypress/support/page/triagem/elements/redeApoioElements.ts new file mode 100644 index 0000000..777f634 --- /dev/null +++ b/cypress/support/page/triagem/elements/redeApoioElements.ts @@ -0,0 +1,12 @@ +export const redeApoioElements = { + titulo: () => cy.contains('Rede de apoio'), + + inputNomeApoio: () => cy.get('#name'), + inputParentesco: () => cy.get('#kinship'), + inputTelefoneApoio: () => cy.get('#phone'), + + btnAdicionarContato: () => cy.contains('button', 'Adicionar contato'), + previewContato: (nome: string) => cy.contains('p', nome), + btnRemoverContato: () => cy.contains('button', 'Remover'), + }; + \ No newline at end of file diff --git a/cypress/support/page/triagem/elements/seusDadosElements.ts b/cypress/support/page/triagem/elements/seusDadosElements.ts new file mode 100644 index 0000000..465a0cb --- /dev/null +++ b/cypress/support/page/triagem/elements/seusDadosElements.ts @@ -0,0 +1,30 @@ +export const seusDadosElements = { + titulo: () => cy.contains('Seus dados'), + + inputNome: () => cy.get('#name'), + inputGenero: () => cy.get('button#gender'), + opcaoGenero: (genero: string) => cy.get('[role="option"]').contains(genero), + + campoDataNascimento: () => cy.get('button[name="date_of_birth"]'), + calendarioContainer: () => cy.get('[role="dialog"]'), + seletoresDeData: () => cy.get('[role="dialog"]').find('button[role="combobox"]'), + + botaoSelecaoMes: () => cy.get('[role="dialog"]').find('button[role="combobox"]').eq(0), + + botaoSelecaoAno: () => cy.get('[role="dialog"]').find('button[role="combobox"]').eq(1), + + cointainerListaAnos: () => cy.get('[role="listbox"][data-state="open"]'), + + viewportRolavelAnos: () => cy.get('[role="listbox"][data-state="open"]').find('[role="presentation"]'), + + inputEstado: () => cy.get('#state'), + selectEstadoOculto: () => cy.get('button#state').next('select[aria-hidden="true"]'), + + inputCidade: () => cy.get('#city'), + selectCidadeOculto: () => cy.get('button#city').next('select[aria-hidden="true"]'), + + inputTelefone: () => cy.get('#phone'), + + inputCPF: () => cy.get('#cpf'), + mensagemErroCPF: () => cy.contains('Informe um CPF válido'), +}; diff --git a/cypress/support/page/triagemPage.ts b/cypress/support/page/triagemPage.ts new file mode 100644 index 0000000..dcbff55 --- /dev/null +++ b/cypress/support/page/triagemPage.ts @@ -0,0 +1,193 @@ +import { commonElements } from "./triagem/elements/commonElements"; +import { seusDadosElements } from "./triagem/elements/seusDadosElements"; +import { laudoMedicoElements } from "./triagem/elements/laudoMedicoElements"; +import { redeApoioElements } from "./triagem/elements/redeApoioElements"; +import { TriagemActions } from "./triagem/actions/TriagemActions"; + +export class TriagemPage { + elements = { + common: commonElements, + seusDados: seusDadosElements, + laudoMedico: laudoMedicoElements, + redeApoio: redeApoioElements + }; + + actions = new TriagemActions(); + + clicarIniciartriagem() { + + this.elements.common.btnInicioTriagem().click(); + + }; + + clicarEmAvancar() { + + this.elements.common.btnSubmit().click(); + + }; + + clicarEmAvancarFinal() { + + this.elements.common.btnSubmitFinal().click(); + + }; + + clicarVoltar() { + + this.elements.common.btnVoltar().click(); + + }; + + clicarFinalizar() { + this.elements.common.btnFinalizar().click(); + }; + + clicarInicio() { + this.elements.common.btnInicio().click(); + }; + + mensagemDeConfirmacao() { + this.elements.common.mensagemConfirmacao(); + }; + + validarPaginaTriagemCarregada() { + + this.elements.seusDados.titulo().should("be.visible"); + this.elements.laudoMedico.titulo().should("be.visible"); + this.elements.redeApoio.titulo().should("be.visible"); + }; + + validarCamposObrigatorios() { + + cy.contains("Insira o nome completo").should("be.visible"); + cy.contains("Informe o gênero").should("be.visible"); + cy.contains("Informe uma data válida").should("be.visible"); + cy.contains("Informe o estado").should("be.visible"); + cy.contains("Informe a cidade").should("be.visible"); + cy.contains("Informe o telefone").should("be.visible"); + cy.contains("Informe o CPF").should("be.visible"); +}; + + validarCPFInvalido() { + const cpfInvalido = "1234567891"; + + this.elements.seusDados.inputCPF().type(cpfInvalido); + this.elements.common.btnSubmit().click(); + this.elements.seusDados.mensagemErroCPF().should("be.visible"); + } + + preencherEtapa1() { + const nome = "Maria de Souza"; + const anoNascimento = "1990"; + const mesNascimento = "Jul"; + const diaNascimento = "21"; + const tel = "11972401234"; + const cpf = "12345678922"; + + this.elements.seusDados.inputNome().type(nome); + + this.elements.seusDados.inputGenero().click(); + + this.elements.seusDados.opcaoGenero("Mulher (Cis)").click(); + + this.elements.seusDados.campoDataNascimento().click(); + + this.elements.seusDados.botaoSelecaoAno().click(); + this.elements.seusDados.cointainerListaAnos().contains(anoNascimento).scrollIntoView().click({ force: true }); + + this.elements.seusDados.botaoSelecaoMes().click(); + this.elements.seusDados.cointainerListaAnos().contains(mesNascimento).click(); + + this.elements.seusDados.calendarioContainer().find('button[type="button"]').contains(diaNascimento).click(); + + this.elements.seusDados.selectEstadoOculto().select("São Paulo", { force: true }); + this.elements.seusDados.inputEstado().should("contain", "São Paulo"); + + this.elements.seusDados.selectCidadeOculto().select("Osasco", { force: true }); + this.elements.seusDados.inputCidade().should("contain", "Osasco"); + + this.elements.seusDados.inputTelefone().type(tel); + this.elements.seusDados.inputCPF().type(cpf); + + } + + validarCamposObrigatorios2() { + + this.elements.common.btnSubmit().click(); + } + + preencherEtapa2() { + + this.elements.laudoMedico.possuiDeficiencia("Não").click(); + this.elements.laudoMedico.precisaAssistencia("Não").click(); + this.elements.laudoMedico.usaMedicamento("Não").click(); + this.elements.laudoMedico.possuiNmo("Sim").click(); + + } + + addRedeApoio() { + const nomeApoio = "José de Oliveira"; + const parentesco = "Marido"; + const contatoApoio = "(11) 97767-6542"; + + this.elements.redeApoio.inputNomeApoio().type(nomeApoio); + this.elements.redeApoio.inputParentesco().type(parentesco); + this.elements.redeApoio.inputTelefoneApoio().type(contatoApoio); + + this.elements.redeApoio.btnAdicionarContato().click(); + + this.elements.redeApoio.previewContato(nomeApoio).should("be.visible"); + this.elements.redeApoio.previewContato(parentesco).should("be.visible"); + this.elements.redeApoio.previewContato(contatoApoio).should("be.visible"); + } + + removerRedeApoio() { + const nomeApoio = "José de Oliveira"; + + this.elements.redeApoio.btnRemoverContato().click(); + this.elements.redeApoio.previewContato(nomeApoio).should("not.exist"); + }; + + validarPersistenciaEtapa1() { + + const nome = 'Maria de Souza'; + const dataNascimentoEsperada = '21/07/1990'; + const generoEsperado = 'Mulher (Cis)'; + const estadoEsperado = 'São Paulo'; + const cidadeEsperada = 'Osasco'; + + this.elements.seusDados.inputNome().should('have.value', nome); + this.elements.seusDados.campoDataNascimento().should('contain', dataNascimentoEsperada); + this.elements.seusDados.inputGenero().should('contain', generoEsperado); + this.elements.seusDados.inputEstado().should('contain', estadoEsperado); + this.elements.seusDados.inputCidade().should('contain', cidadeEsperada); + + }; + + validarPersistenciaEtapa2() { + const checkedState = "checked"; + + this.elements.laudoMedico.possuiDeficiencia("Não").should("have.attr", "data-state", checkedState); + this.elements.laudoMedico.precisaAssistencia("Não").should("have.attr", "data-state", checkedState); + this.elements.laudoMedico.usaMedicamento("Não").should("have.attr", "data-state", checkedState); + this.elements.laudoMedico.possuiNmo("Sim").should("have.attr", "data-state", checkedState); +}; + + persistirRededeApoio() { + + const nomeApoio = "José de Oliveira"; + const parentesco = "Marido"; + const contatoApoio = "(11) 97767-6542"; + + this.elements.redeApoio.previewContato(nomeApoio).should("be.visible"); + this.elements.redeApoio.previewContato(parentesco).should("be.visible"); + this.elements.redeApoio.previewContato(contatoApoio).should("be.visible"); + + } + + finalizarFormulario() { + this.elements.common.btnFinalizar().click(); + this.elements.common.mensagemConfirmacao().should("be.visible"); + cy.url().should("include", "/paciente"); + } +};