Skip to content

Commit d636ee5

Browse files
committed
feat/novos-cenários-final
1 parent 40e4462 commit d636ee5

File tree

3 files changed

+36
-2
lines changed

3 files changed

+36
-2
lines changed

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@
1212
| **Postman** | Documentação e testes manuais de API. | 🟠 | [Acessar Doc](https://learning.postman.com/) |
1313
| **Zod** | Validação de schemas e contratos de API. | 🛡️ | [Acessar Doc](https://zod.dev/) |
1414

15+
### Ferramentas de Setup:
16+
* [ESLint](https://eslint.org/) - Análise estática do código.
17+
* [Prettier](https://prettier.io/) - Formatação automática de arquivos.
18+
* [Husky](https://typicode.github.io/husky/) - Git Hooks para automação de tarefas.
19+
* [lint-staged](https://github.com/lint-staged/lint-staged) - Verificação de arquivos modificados antes do commit.
20+
1521

1622

1723

@@ -75,5 +81,6 @@ Este projeto entrega um **framework de automação E2E robusto e escalável**, d
7581
* **Arquitetura Multicamadas**: Implementação rigorosa do padrão **Page Object Model (POM)**, garantindo a separação entre a lógica de teste e a interação com elementos da interface.
7682
* **Programação Orientada a Objetos (POO)**: Utilização de classes e métodos para encapsular comportamentos, facilitando a reutilização de código e a legibilidade dos cenários.
7783
* **Isolamento e Independência**: Testes desenhados para serem independentes, com setups e cleanups que garantem a confiabilidade da execução (evitando estados compartilhados).
78-
* **Qualidade Contínua (CI/CD)**: Pipeline totalmente integrada via GitHub Actions, validando o projeto em múltiplos motores de renderização (Chromium e Firefox) a cada nova alteração.
84+
* **Entrega Contínua (CI/CD)**: Pipeline totalmente integrada via GitHub Actions, validando o projeto em múltiplos motores de renderização (Chromium e Firefox) a cada nova alteração.
7985
* **Testes de API com Validação de Contrato**: Além da UI, o projeto integra validações de camada de serviço utilizando **Zod**, garantindo que a comunicação com o backend siga rigorosamente os schemas e status definidos.
86+
* **Qualidade de Código e Git Hooks**: Para garantir a consistência do código e evitar que erros simples subam para o repositório, este projeto utiliza **ESLint** e **Prettier**, que sçao ferramentas que analisam estaticamente e identifica os padrões de código problemáticos, e formatam para garantir que todos os arquivos sigam o mesmo estilo. O projeto, na etapa de pré-commit, também utiliza **Husky** na gerência dos Git Hooks garantindo que o código seja automaticamente formatado e verificado. Se houver algum erro de linting que não possa ser corrigido automaticamente, o commit será bloqueado, garantindo que apenas código limpo chegue ao GitHub a cada branch.

pages/CheckoutPage.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ export class CheckoutPage {
77
readonly zipCodeInput: Locator;
88
readonly continueBtn: Locator;
99
readonly subtotalLabel: Locator;
10+
readonly finishBtn: Locator;
11+
readonly successHeader: Locator;
1012

1113
constructor(page: Page) {
1214
this.page = page;
@@ -15,6 +17,8 @@ export class CheckoutPage {
1517
this.zipCodeInput = page.locator('[data-test="postalCode"]');
1618
this.continueBtn = page.locator('[data-test="continue"]');
1719
this.subtotalLabel = page.locator('[data-test="subtotal-label"]');
20+
this.finishBtn = page.locator('[data-test="finish"]');
21+
this.successHeader = page.locator('.complete-header');
1822
}
1923

2024
async preencherDadosEContinuar(first: string, last: string, zip: string) {
@@ -23,4 +27,8 @@ export class CheckoutPage {
2327
await this.zipCodeInput.fill(zip);
2428
await this.continueBtn.click();
2529
}
30+
31+
async finalizarCompra() {
32+
await this.finishBtn.click();
33+
}
2634
}

tests/e2e/checkout.spec.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import { test, expect } from '@playwright/test';
22
import { CartFlows } from '../../fluxos/cartilhaFluxos';
33
import { CheckoutPage } from '../../pages/CheckoutPage';
44
import { LoginPage } from '../../pages/LoginPage';
5+
import { ItensPage } from '../../pages/ItensPage';
56

67
test.describe('Cenários de Checkout', () => {
7-
// Setup de Login obrigatório para acessar o inventário
88
test.beforeEach(async ({ page }) => {
99
const loginPage = new LoginPage(page);
1010
await loginPage.acessarPagina();
@@ -22,4 +22,23 @@ test.describe('Cenários de Checkout', () => {
2222

2323
await expect(checkout.subtotalLabel).toContainText('55.97');
2424
});
25+
26+
test('Fluxo completo do checkout com sucesso após adicionar itens', async ({ page }) => {
27+
const itens = new ItensPage(page);
28+
const checkout = new CheckoutPage(page);
29+
30+
await itens.adicionarBackpackAoCarrinho();
31+
await itens.cartLink.click();
32+
await page.locator('[data-test="checkout"]').click();
33+
34+
await checkout.preencherDadosEContinuar('Marcus', 'Machado', '31030080');
35+
36+
await expect(checkout.subtotalLabel).toContainText('Item total: $');
37+
await expect(
38+
page.locator('.inventory_item_name').filter({ hasText: 'Sauce Labs Backpack' })
39+
).toBeVisible();
40+
41+
await checkout.finalizarCompra();
42+
await expect(checkout.successHeader).toHaveText('Thank you for your order!');
43+
});
2544
});

0 commit comments

Comments
 (0)