174 lines
6.4 KiB
TypeScript
174 lines
6.4 KiB
TypeScript
import { expect, test } from '../../core/fixtures/base.fixture'
|
|
import { createCustomerData, createTeamData } from './governance.data'
|
|
|
|
const createdTeams: string[] = []
|
|
const createdCustomers: string[] = []
|
|
|
|
test.describe('Governance - Teams', () => {
|
|
test.describe.configure({ mode: 'serial' })
|
|
test.beforeEach(async ({ governancePage }) => {
|
|
await governancePage.gotoTeams()
|
|
})
|
|
|
|
test.afterEach(async ({ governancePage }) => {
|
|
await governancePage.closeTeamDialog()
|
|
for (const name of [...createdTeams]) {
|
|
try {
|
|
const exists = await governancePage.teamExists(name)
|
|
if (exists) {
|
|
await governancePage.deleteTeam(name)
|
|
}
|
|
} catch (e) {
|
|
console.error(`[CLEANUP] Failed to delete team ${name}:`, e)
|
|
}
|
|
}
|
|
createdTeams.length = 0
|
|
for (const name of [...createdCustomers]) {
|
|
try {
|
|
await governancePage.gotoCustomers()
|
|
const exists = await governancePage.customerExists(name)
|
|
if (exists) {
|
|
await governancePage.deleteCustomer(name)
|
|
}
|
|
} catch (e) {
|
|
console.error(`[CLEANUP] Failed to delete customer ${name}:`, e)
|
|
}
|
|
}
|
|
createdCustomers.length = 0
|
|
})
|
|
|
|
test('should display create team button or empty state', async ({ governancePage }) => {
|
|
const createVisible = await governancePage.teamsCreateBtn.isVisible().catch(() => false)
|
|
const emptyAddVisible = await governancePage.page.getByTestId('team-button-add').isVisible().catch(() => false)
|
|
expect(createVisible || emptyAddVisible).toBe(true)
|
|
})
|
|
|
|
test('should create a team', async ({ governancePage }) => {
|
|
const teamData = createTeamData({ name: `E2E Test Team ${Date.now()}` })
|
|
createdTeams.push(teamData.name)
|
|
|
|
await governancePage.createTeam(teamData)
|
|
|
|
const exists = await governancePage.teamExists(teamData.name)
|
|
expect(exists).toBe(true)
|
|
})
|
|
|
|
test('should edit a team', async ({ governancePage }) => {
|
|
const teamData = createTeamData({ name: `E2E Edit Team ${Date.now()}` })
|
|
createdTeams.push(teamData.name)
|
|
await governancePage.createTeam(teamData)
|
|
|
|
await governancePage.editTeam(teamData.name, { budget: { maxLimit: 129 } })
|
|
|
|
const exists = await governancePage.teamExists(teamData.name)
|
|
expect(exists).toBe(true)
|
|
})
|
|
|
|
test('should create team with customer assignment', async ({ governancePage }) => {
|
|
// 1. Create a customer (UI)
|
|
const customerData = createCustomerData({ name: `E2E Customer For Team ${Date.now()}` })
|
|
createdCustomers.push(customerData.name)
|
|
await governancePage.gotoCustomers()
|
|
await governancePage.createCustomer(customerData)
|
|
|
|
// 2. Go to Teams and create a team, assign the customer from the create-team dropdown (UI)
|
|
await governancePage.gotoTeams()
|
|
const teamData = createTeamData({
|
|
name: `E2E Team With Customer ${Date.now()}`,
|
|
customerName: customerData.name,
|
|
})
|
|
createdTeams.push(teamData.name)
|
|
await governancePage.createTeam(teamData)
|
|
|
|
// 3. Validate in UI that the customer was assigned (via data-testid)
|
|
const exists = await governancePage.teamExists(teamData.name)
|
|
expect(exists).toBe(true)
|
|
const customerCell = governancePage.getTeamRowCustomerCell(teamData.name)
|
|
await expect(customerCell).toContainText(customerData.name)
|
|
})
|
|
|
|
test('should delete a team', async ({ governancePage }) => {
|
|
const teamData = createTeamData({ name: `E2E Delete Team ${Date.now()}` })
|
|
createdTeams.push(teamData.name)
|
|
await governancePage.createTeam(teamData)
|
|
|
|
let exists = await governancePage.teamExists(teamData.name)
|
|
expect(exists).toBe(true)
|
|
|
|
await governancePage.deleteTeam(teamData.name)
|
|
const idx = createdTeams.indexOf(teamData.name)
|
|
if (idx >= 0) createdTeams.splice(idx, 1)
|
|
|
|
exists = await governancePage.teamExists(teamData.name)
|
|
expect(exists).toBe(false)
|
|
})
|
|
})
|
|
|
|
test.describe('Governance - Customers', () => {
|
|
test.describe.configure({ mode: 'serial' })
|
|
test.beforeEach(async ({ governancePage }) => {
|
|
await governancePage.gotoCustomers()
|
|
})
|
|
|
|
test.afterEach(async ({ governancePage }) => {
|
|
for (const name of [...createdCustomers]) {
|
|
try {
|
|
const exists = await governancePage.customerExists(name)
|
|
if (exists) {
|
|
await governancePage.deleteCustomer(name)
|
|
}
|
|
} catch (e) {
|
|
console.error(`[CLEANUP] Failed to delete customer ${name}:`, e)
|
|
}
|
|
}
|
|
createdCustomers.length = 0
|
|
})
|
|
|
|
test('should display create customer button or empty state', async ({ governancePage }) => {
|
|
const createVisible = await governancePage.customersCreateBtn.isVisible().catch(() => false)
|
|
const emptyCreateVisible = await governancePage.page.getByTestId('customer-button-create').isVisible().catch(() => false)
|
|
expect(createVisible || emptyCreateVisible).toBe(true)
|
|
})
|
|
|
|
test('should create a customer', async ({ governancePage }) => {
|
|
const customerData = createCustomerData({ name: `E2E Test Customer ${Date.now()}` })
|
|
createdCustomers.push(customerData.name)
|
|
|
|
await governancePage.createCustomer(customerData)
|
|
|
|
const exists = await governancePage.customerExists(customerData.name)
|
|
expect(exists).toBe(true)
|
|
})
|
|
|
|
test('should edit a customer', async ({ governancePage }) => {
|
|
const customerData = createCustomerData({ name: `E2E Edit Customer ${Date.now()}` })
|
|
createdCustomers.push(customerData.name)
|
|
await governancePage.createCustomer(customerData)
|
|
|
|
const newName = `E2E Edited Customer ${Date.now()}`
|
|
createdCustomers[createdCustomers.length - 1] = newName
|
|
await governancePage.editCustomer(customerData.name, { name: newName })
|
|
|
|
const oldExists = await governancePage.customerExists(customerData.name)
|
|
const newExists = await governancePage.customerExists(newName)
|
|
expect(oldExists).toBe(false)
|
|
expect(newExists).toBe(true)
|
|
})
|
|
|
|
test('should delete a customer', async ({ governancePage }) => {
|
|
const customerData = createCustomerData({ name: `E2E Delete Customer ${Date.now()}` })
|
|
createdCustomers.push(customerData.name)
|
|
await governancePage.createCustomer(customerData)
|
|
|
|
let exists = await governancePage.customerExists(customerData.name)
|
|
expect(exists).toBe(true)
|
|
|
|
await governancePage.deleteCustomer(customerData.name)
|
|
const idx = createdCustomers.indexOf(customerData.name)
|
|
if (idx >= 0) createdCustomers.splice(idx, 1)
|
|
|
|
exists = await governancePage.customerExists(customerData.name)
|
|
expect(exists).toBe(false)
|
|
})
|
|
})
|