{"_id":"@agenciajogajunto/payload-e2e-core","_rev":"4-3b79f1e7f8422548a97f99c135a5b1d2","name":"@agenciajogajunto/payload-e2e-core","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@agenciajogajunto/payload-e2e-core","version":"0.1.0","keywords":["payload","payload-cms","e2e","playwright","testing","page-object","jogajunto"],"author":{"name":"JogaJunto"},"license":"MIT","_id":"@agenciajogajunto/payload-e2e-core@0.1.0","maintainers":[{"name":"agenciajogajunto","email":"contato+npm@jogajunto.com.br"}],"homepage":"https://github.com/jogajunto/payload-e2e-core#readme","bugs":{"url":"https://github.com/jogajunto/payload-e2e-core/issues"},"dist":{"shasum":"6453ef180b4b8ebd23717591c7484290f4730cd5","tarball":"https://registry.npmjs.org/@agenciajogajunto/payload-e2e-core/-/payload-e2e-core-0.1.0.tgz","fileCount":14,"integrity":"sha512-ZUGgriHJ0hLeafFSBxjImJyfYFz9sykSkQhDWrLJMpHSXmaZTld/YynpIk84cm2VB+5zXjW9km2xbO8L+1a+vA==","signatures":[{"sig":"MEUCIQDO//5gGMB8iiko8Fzk2VZdLz8xD0Jy4uPOKMFn6OVR5QIgBPuvxrbsUFCHpeayWnVAsZ4nZQprbhqXoJaUKfhCdTs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36087},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"1f7330eb1888878d21608e6d412709ec9067aaaa","scripts":{"build":"tsc","clean":"rm -rf dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"agenciajogajunto","email":"contato+npm@jogajunto.com.br"},"repository":{"url":"git+https://github.com/jogajunto/payload-e2e-core.git","type":"git"},"_npmVersion":"11.9.0","description":"Abstrações reutilizáveis de teste E2E (Playwright) para o Payload CMS, incluindo Page Object Model base e fixtures de autenticação injetáveis.","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^16.0.0","typescript":"^5.3.0","@types/node":"^20.0.0"},"peerDependencies":{"payload":"^3.0.0","@playwright/test":"^1.40.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-e2e-core_0.1.0_1779642854576_0.030010005061688716","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@agenciajogajunto/payload-e2e-core","version":"0.1.1","keywords":["payload","payload-cms","e2e","playwright","testing","page-object","jogajunto"],"author":{"name":"JogaJunto"},"license":"MIT","_id":"@agenciajogajunto/payload-e2e-core@0.1.1","maintainers":[{"name":"agenciajogajunto","email":"contato+npm@jogajunto.com.br"}],"homepage":"https://github.com/jogajunto/payload-e2e-core#readme","bugs":{"url":"https://github.com/jogajunto/payload-e2e-core/issues"},"dist":{"shasum":"915333c7a3fd8920c3e6dc32caba36735cc524f0","tarball":"https://registry.npmjs.org/@agenciajogajunto/payload-e2e-core/-/payload-e2e-core-0.1.1.tgz","fileCount":14,"integrity":"sha512-GSZXmsPufnqqNpXXRsQ61pu0uV6KKy10JFaA/mIr8PL2xBVNzTIAn8SfQZUmKCrDqwRp1MavRHmiG+y5peTqig==","signatures":[{"sig":"MEUCIQCpOfnSs5uY1vpCWDWaM6CgGAIHp6FWR0hMLjtbIrtAxgIgTmdBrMMO3zy2TLuvY4XIkDma+KNtfOpOUscOPtHwRr0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36073},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2b264da476ad4bc84eea49fd506bd1dea261feb0","scripts":{"build":"tsc","clean":"rm -rf dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"agenciajogajunto","email":"contato+npm@jogajunto.com.br"},"repository":{"url":"git+https://github.com/jogajunto/payload-e2e-core.git","type":"git"},"_npmVersion":"11.9.0","description":"Abstrações reutilizáveis de teste E2E (Playwright) para o Payload CMS, incluindo Page Object Model base e fixtures de autenticação injetáveis.","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^16.0.0","typescript":"^5.3.0","@types/node":"^20.0.0"},"peerDependencies":{"payload":"^3.0.0","@playwright/test":"^1.40.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-e2e-core_0.1.1_1779645781339_0.6608108259097236","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@agenciajogajunto/payload-e2e-core","version":"0.1.2","keywords":["payload","payload-cms","e2e","playwright","testing","page-object","jogajunto"],"author":{"name":"JogaJunto"},"license":"MIT","_id":"@agenciajogajunto/payload-e2e-core@0.1.2","maintainers":[{"name":"agenciajogajunto","email":"contato+npm@jogajunto.com.br"}],"homepage":"https://github.com/jogajunto/payload-e2e-core#readme","bugs":{"url":"https://github.com/jogajunto/payload-e2e-core/issues"},"dist":{"shasum":"ef17f6c99b193171d796b980702fd8d59ba7e267","tarball":"https://registry.npmjs.org/@agenciajogajunto/payload-e2e-core/-/payload-e2e-core-0.1.2.tgz","fileCount":14,"integrity":"sha512-mHkItC+khziFM7nvPo8AljZwQUGONyhtO5tXh65DLgdBTrmyzwZlDylCmenGOvxhtLU0M+aWv33IzcfRUkPsXg==","signatures":[{"sig":"MEYCIQCyyHQRcH9YR3px/2Y6AUGWNBk1zF89SrE/K9nA9HVpKAIhAML6pPVGCtanfVeQ19QrLeiEsV60r+FtK6MtHKHvfmSt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36608},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"5f625a83d13431aef62de26fcbdcf87ae516e2aa","scripts":{"build":"tsc","clean":"rm -rf dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"agenciajogajunto","email":"contato+npm@jogajunto.com.br"},"repository":{"url":"git+https://github.com/jogajunto/payload-e2e-core.git","type":"git"},"_npmVersion":"11.9.0","description":"Abstrações reutilizáveis de teste E2E (Playwright) para o Payload CMS, incluindo Page Object Model base e fixtures de autenticação injetáveis.","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^16.0.0","typescript":"^5.3.0","@types/node":"^20.0.0"},"peerDependencies":{"payload":"^3.0.0","@playwright/test":"^1.40.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-e2e-core_0.1.2_1779647888380_0.009336068529199881","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-05-24T17:14:14.417Z","modified":"2026-05-25T03:06:44.992Z","0.1.0":"2026-05-24T17:14:14.724Z","0.1.1":"2026-05-24T18:03:01.480Z","0.1.2":"2026-05-24T18:38:08.523Z"},"bugs":{"url":"https://github.com/jogajunto/payload-e2e-core/issues"},"author":{"name":"JogaJunto"},"license":"MIT","homepage":"https://github.com/jogajunto/payload-e2e-core#readme","keywords":["payload","payload-cms","e2e","playwright","testing","page-object","jogajunto"],"repository":{"url":"git+https://github.com/jogajunto/payload-e2e-core.git","type":"git"},"description":"Abstrações reutilizáveis de teste E2E (Playwright) para o Payload CMS, incluindo Page Object Model base e fixtures de autenticação injetáveis.","maintainers":[{"email":"contato+npm@jogajunto.com.br","name":"agenciajogajunto"},{"email":"rafaeldearaujop95@gmail.com","name":"rafaell1995"}],"readme":"# @agenciajogajunto/payload-e2e-core\n\nAbstrações reutilizáveis de teste E2E (Playwright) para o **Payload CMS**.\n\n## Problema\n\nProjetos que utilizam Payload CMS repetem o mesmo boilerplate de teste E2E:\ninicialização do Payload, criação/deleção de usuários, login via UI, navegação\npara collections, salvamento e exclusão de registros. Este pacote centraliza\nessas operações em uma arquitetura extensível baseada em **Page Object Model**\ne **Fixtures injetáveis**.\n\n## Instalação\n\n```bash\nnpm install --save-dev @agenciajogajunto/payload-e2e-core\n```\n\nCertifique-se de que as peer dependencies estão instaladas no projeto:\n\n```bash\nnpm install --save-dev @playwright/test payload\n```\n\n## Uso\n\n### 1. Criar um arquivo de fixtures\n\nCrie um arquivo compartilhado que exporta o `test` estendido com as fixtures\nde autenticação. A `configPromise` do Payload é injetada aqui, permitindo que\no pacote funcione em qualquer projeto.\n\n```ts\n// tests/e2e/fixtures.ts\nimport configPromise from \"@payload-config\";\nimport { createAuthFixture } from \"@agenciajogajunto/payload-e2e-core\";\n\n// Caso a collection `users` do projeto não tenha campos obrigatórios extras\nexport const test = createAuthFixture(configPromise);\nexport { expect } from \"@playwright/test\";\n```\n\nSe a collection `users` do seu projeto possui campos obrigatórios\nadicionais (ex.: `name`, `role`), passe-os no segundo parâmetro:\n\n```ts\n// tests/e2e/fixtures.ts\nimport configPromise from \"@payload-config\";\nimport { createAuthFixture } from \"@agenciajogajunto/payload-e2e-core\";\n\nexport const test = createAuthFixture(configPromise, {\n  userData: { name: \"Test User\", role: \"editor\" },\n});\nexport { expect } from \"@playwright/test\";\n```\n\n### 2. Criar uma Page Object específica\n\nEstenda a `BaseCollectionPage` para adicionar campos e operações da sua\ncollection.\n\n```ts\n// tests/e2e/pages/PratosPage.ts\nimport { BaseCollectionPage } from \"@agenciajogajunto/payload-e2e-core\";\nimport type { Page } from \"@playwright/test\";\n\nexport class PratosPage extends BaseCollectionPage {\n  constructor(page: Page) {\n    super(page, \"pratos\");\n  }\n\n  async fillNome(nome: string) {\n    await this.page.getByLabel(\"Nome\").fill(nome);\n  }\n\n  async fillDescricao(descricao: string) {\n    const editor = this.page.locator('div[data-lexical-editor=\"true\"]');\n    await editor.click();\n    await editor.pressSequentially(descricao);\n  }\n\n  async selectCategoria(categoria: string) {\n    await this.page.getByLabel(\"Categoria\").selectOption(categoria);\n  }\n}\n```\n\n### 3. Escrever um teste E2E\n\n```ts\n// tests/e2e/pratos.spec.ts\nimport { test, expect } from \"./fixtures\";\nimport { PratosPage } from \"./pages/PratosPage\";\n\ntest.describe(\"CRUD de Pratos\", () => {\n  test(\"deve criar, ler, atualizar e deletar um prato\", async ({\n    authenticatedPage,\n  }) => {\n    const pratosPage = new PratosPage(authenticatedPage);\n    const nomePrato = `Prato Teste - ${Date.now()}`;\n    const nomeAtualizado = `Prato Atualizado - ${Date.now()}`;\n\n    // ── CREATE ──────────────────────────────────────────────────────\n    await pratosPage.gotoCreate();\n    await pratosPage.fillNome(nomePrato);\n    await pratosPage.fillDescricao(\"Descrição do prato teste.\");\n    await pratosPage.save();\n    await pratosPage.verifyInList(nomePrato);\n\n    // ── READ ────────────────────────────────────────────────────────\n    await pratosPage.gotoList();\n    await pratosPage.verifyInList(nomePrato);\n\n    // ── UPDATE ──────────────────────────────────────────────────────\n    // Abre o registro para edição\n    await pratosPage.gotoList();\n    await authenticatedPage.locator(`text=\"${nomePrato}\"`).click();\n    await pratosPage.fillNome(nomeAtualizado);\n    await pratosPage.save();\n\n    // ── DELETE ──────────────────────────────────────────────────────\n    await pratosPage.gotoList();\n    await authenticatedPage.locator(`text=\"${nomeAtualizado}\"`).click();\n    await pratosPage.delete();\n\n    // Verifica que foi removido da listagem\n    await pratosPage.verifyNotInList(nomeAtualizado);\n  });\n});\n```\n\n### 4. Configurar o `playwright.config.ts`\n\n```ts\nimport { defineConfig } from \"@playwright/test\";\n\nexport default defineConfig({\n  testDir: \"./tests/e2e\",\n  timeout: 80000,\n  webServer: {\n    command: \"npm run dev\",\n    url: \"http://localhost:3000/admin\",\n    reuseExistingServer: true,\n  },\n  use: {\n    baseURL: \"http://localhost:3000\",\n    headless: true,\n  },\n});\n```\n\n## API\n\n### `BaseCollectionPage`\n\n| Método                   | Descrição                                      |\n| ------------------------ | ---------------------------------------------- |\n| `gotoList()`             | Navega para a listagem da collection.          |\n| `gotoCreate()`           | Navega para a página de criação.               |\n| `save()`                 | Salva e aguarda toast de sucesso.              |\n| `delete()`               | Executa fluxo completo de exclusão.            |\n| `verifyInList(title)`    | Verifica se o texto está visível na listagem.  |\n| `verifyNotInList(title)` | Verifica se o texto NÃO está na listagem.      |\n| `switchTab(tabName, exact?)` | Alterna para uma aba (ex.: \"SEO\", \"Conteúdo\"). `exact` (padrão `true`) controla correspondência exata do nome. |\n\n### `createAuthFixture(configPromise, options?)`\n\n| Parâmetro          | Tipo                      | Obrigatório | Descrição                                        |\n| ------------------ | ------------------------- | ----------- | ------------------------------------------------ |\n| `configPromise`    | `any`                     | sim         | `configPromise` do Payload (`@payload-config`).  |\n| `options.userData` | `Record<string, unknown>` | não         | Dados extras para mergear na criação do usuário. |\n\n| Fixture             | Escopo | Descrição                          |\n| ------------------- | ------ | ---------------------------------- |\n| `payload`           | worker | Instância da API Local do Payload. |\n| `authenticatedPage` | test   | Página Playwright já autenticada.  |\n","readmeFilename":"README.md"}