vikunja/frontend/tests/e2e/project/project-history.spec.ts

48 lines
2.0 KiB
TypeScript

import {test, expect} from '../../support/fixtures'
import {ProjectFactory} from '../../factories/project'
import {ProjectViewFactory} from '../../factories/project_view'
test.describe('Project History', () => {
test('should show a project history on the home page', async ({authenticatedPage: page}) => {
test.setTimeout(60000)
const projects = await ProjectFactory.create(7)
await ProjectViewFactory.truncate()
await Promise.all(projects.map(p => ProjectViewFactory.create(1, {
id: p.id,
project_id: p.id,
}, false)))
const loadProjectArrayPromise = page.waitForResponse('**/api/v1/projects*')
await page.goto('/')
await loadProjectArrayPromise
await expect(page.locator('body')).not.toContainText('Last viewed')
for (let i = 0; i < projects.length; i++) {
const loadProjectPromise = page.waitForResponse(response =>
response.url().includes(`/projects/${projects[i].id}`) && response.request().method() === 'GET',
)
await page.goto(`/projects/${projects[i].id}/${projects[i].id}`)
await loadProjectPromise
// Wait for history to be saved to localStorage
await page.waitForFunction(
(projectId) => {
const history = JSON.parse(localStorage.getItem('projectHistory') || '[]')
return history.some((h: any) => h.id === projectId)
},
projects[i].id,
)
}
await page.locator('nav.menu.top-menu a').filter({hasText: 'Overview'}).click()
await expect(page.locator('body')).toContainText('Last viewed')
await expect(page.locator('.project-grid')).not.toContainText(projects[0].title)
await expect(page.locator('.project-grid')).toContainText(projects[1].title)
await expect(page.locator('.project-grid')).toContainText(projects[2].title)
await expect(page.locator('.project-grid')).toContainText(projects[3].title)
await expect(page.locator('.project-grid')).toContainText(projects[4].title)
await expect(page.locator('.project-grid')).toContainText(projects[5].title)
await expect(page.locator('.project-grid')).toContainText(projects[6].title)
})
})