Ctrl K
ComunidadGuías…

e2e/organization-workspace.spec.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { expect, test } from '@playwright/test'
import { resetAndBootstrap, signIn } from './helpers/real-app'

test.describe('Organization Workspace', () => {
  test.beforeEach(async () => {
    await resetAndBootstrap()
  })

  test('[spec: account-center/account-organization-management] workspace navigation, switching, nested details, and responsive drawer', async ({
    page,
  }) => {
    await signIn(page)
    await page.goto('/console/organizations')

    await createOrganization(page, 'Alpha Organization', 'alpha-organization')
    await createOrganization(page, 'Beta Organization', 'beta-organization')

    await page.goto('/organizations')
    await expect(page.getByRole('button', { name: 'Switch', exact: true })).toHaveCount(0)
    await expect(page.getByText('Current', { exact: true })).toHaveCount(0)
    await page
      .locator('section.accountOrganizationCard')
      .filter({ hasText: 'Alpha Organization' })
      .getByRole('link', { name: 'Manage' })
      .click()
    await expect(page).toHaveURL(/\/organizations\/[^/]+\/overview$/)
    await expect(page.getByRole('heading', { name: 'Alpha Organization' })).toBeVisible()
    await expect(page.getByRole('link', { name: 'Developer Center home' })).toContainText('Developer Center')
    await expect(page.getByRole('navigation', { name: 'Organization workspace' })).toBeVisible()
    await expect(page.getByRole('link', { name: 'Overview' })).toHaveAttribute('aria-current', 'page')
    const alphaOrganizationId = new URL(page.url()).pathname.split('/')[2]
    const organizationContext = await page.request.get('/api/account/organization-context')
    expect(await organizationContext.json()).toEqual({ activeOrganizationId: alphaOrganizationId })

    await page.getByRole('button', { name: 'Switch organization' }).click()
    await page.getByRole('menuitem', { name: /Beta Organization/ }).click()
    await expect(page).toHaveURL(/\/organizations\/[^/]+\/overview$/)
    await expect(page.getByRole('heading', { name: 'Beta Organization' })).toBeVisible()

    await page.getByRole('link', { name: 'Applications' }).click()
    await expect(page.getByRole('heading', { name: 'Applications', exact: true })).toBeVisible()
    await page.getByRole('button', { name: 'New application' }).click()
    const dialog = page.getByRole('dialog')
    await dialog.getByLabel('Name').fill('Workspace Application')
    await dialog.getByLabel('Slug').fill('workspace-application')
    await dialog.getByRole('button', { name: /Traditional web app/ }).click()
    await dialog.getByLabel('Redirect URIs').fill('https://workspace.example.com/callback')
    await dialog.getByRole('button', { name: 'Save' }).click()
    await expect(dialog.getByText('Client ID', { exact: true })).toBeVisible()
    await dialog.getByRole('button', { name: 'Done' }).click()

    await page.getByRole('link', { name: 'Workspace Application', exact: true }).click()
    await expect(page).toHaveURL(/\/organizations\/[^/]+\/applications\/[^/]+\/overview$/)
    await expect(page.getByRole('heading', { name: 'Workspace Application' })).toBeVisible()
    await expect(page.getByRole('navigation', { name: 'Organization workspace' })).toBeVisible()
    await expect(page.getByRole('link', { name: 'Applications' })).toHaveAttribute('aria-current', 'page')

    await page.getByRole('link', { name: 'Roles' }).click()
    await page.getByRole('button', { name: 'New role' }).click()
    const roleDialog = page.getByRole('dialog')
    await expect(roleDialog.getByLabel('Scopes')).toHaveCount(0)
    await roleDialog.getByLabel('Key').fill('workspace-reviewer')
    await roleDialog.getByLabel('Display name').fill('Workspace Reviewer')
    await roleDialog.getByLabel('Description').fill('Reviews Workspace resources.')
    await roleDialog.getByRole('button', { name: 'Save' }).click()
    await expect(roleDialog).toBeHidden()
    await page.getByRole('link', { name: 'Workspace Reviewer', exact: true }).click()
    await expect(page).toHaveURL(/\/organizations\/[^/]+\/roles\/workspace-reviewer\/overview$/)
    const roleHeading = page.getByRole('heading', { name: 'Workspace Reviewer' })
    await expect(roleHeading).toBeVisible()
    await expect(roleHeading.locator('xpath=ancestor::header')).toHaveClass(/consoleDetailHeader/)
    await expect(page.getByRole('tablist', { name: 'Role detail sections' })).toHaveClass(/w-full/)
    await page.getByRole('tab', { name: 'Permissions' }).click()
    await expect(page).toHaveURL(/\/organizations\/[^/]+\/roles\/workspace-reviewer\/permissions$/)
    await expect(page.getByRole('link', { name: 'Roles' })).toHaveAttribute('aria-current', 'page')

    await page.setViewportSize({ width: 390, height: 844 })
    const navigationTrigger = page.getByRole('button', { name: 'Open Developer Center navigation' })
    await expect(navigationTrigger).toBeVisible()
    await navigationTrigger.click()
    const navigationDrawer = page.getByRole('dialog', { name: 'Developer Center' })
    await expect(navigationDrawer.getByRole('link', { name: 'Members' })).toBeVisible()
    await page.keyboard.press('Escape')
    await expect(navigationDrawer).toBeHidden()
    await expect(navigationTrigger).toBeFocused()
    await expect(page.locator('a.consoleBackLink')).toBeVisible()
    expect(await page.evaluate(() => document.documentElement.scrollWidth <= window.innerWidth)).toBe(true)
  })
})

async function createOrganization(page: import('@playwright/test').Page, name: string, slug: string) {
  await page.getByRole('button', { name: 'Provision organization' }).click()
  const dialog = page.getByRole('dialog')
  await dialog.getByLabel('Slug').fill(slug)
  await dialog.getByLabel('Name').fill(name)
  await dialog.getByRole('button', { name: 'Save' }).click()
  await expect(dialog).toBeHidden()
  await expect(page.getByRole('link', { name, exact: true })).toBeVisible()
}