mirror of
https://github.com/go-vikunja/vikunja.git
synced 2026-03-25 16:01:22 -05:00
74 lines
2.5 KiB
TypeScript
74 lines
2.5 KiB
TypeScript
import {test, expect} from '../../support/fixtures'
|
|
import {ProjectFactory} from '../../factories/project'
|
|
import {TaskFactory} from '../../factories/task'
|
|
import {ProjectViewFactory} from '../../factories/project_view'
|
|
import {TaskRelationFactory} from '../../factories/task_relation'
|
|
|
|
async function createViews(projectId: number, projectViewId: number) {
|
|
return (await ProjectViewFactory.create(1, {
|
|
id: projectViewId,
|
|
project_id: projectId,
|
|
view_kind: 0,
|
|
}, false))[0]
|
|
}
|
|
|
|
test.describe('Subtask duplicate handling', () => {
|
|
let projectA
|
|
let projectB
|
|
let parentA
|
|
let parentB
|
|
let subtask
|
|
|
|
test.beforeEach(async ({authenticatedPage: page, apiContext}) => {
|
|
await Promise.all([
|
|
ProjectFactory.truncate(),
|
|
ProjectViewFactory.truncate(),
|
|
TaskFactory.truncate(),
|
|
TaskRelationFactory.truncate(),
|
|
])
|
|
|
|
projectA = (await ProjectFactory.create(1, {id: 1, title: 'Project A'}))[0]
|
|
await createViews(projectA.id, 1)
|
|
projectB = (await ProjectFactory.create(1, {id: 2, title: 'Project B'}, false))[0]
|
|
await createViews(projectB.id, 2)
|
|
|
|
parentA = (await TaskFactory.create(1, {id: 10, title: 'Parent A', project_id: projectA.id}, false))[0]
|
|
parentB = (await TaskFactory.create(1, {id: 11, title: 'Parent B', project_id: projectB.id}, false))[0]
|
|
subtask = (await TaskFactory.create(1, {id: 12, title: 'Shared subtask', project_id: projectA.id}, false))[0]
|
|
|
|
// Navigate to a page first to establish context for localStorage access
|
|
await page.goto('/')
|
|
const token = await page.evaluate(() => localStorage.getItem('token'))
|
|
|
|
await apiContext.put(`tasks/${parentA.id}/relations`, {
|
|
headers: {
|
|
'Authorization': `Bearer ${token}`,
|
|
},
|
|
data: {
|
|
other_task_id: subtask.id,
|
|
relation_kind: 'subtask',
|
|
},
|
|
})
|
|
|
|
await apiContext.put(`tasks/${parentB.id}/relations`, {
|
|
headers: {
|
|
'Authorization': `Bearer ${token}`,
|
|
},
|
|
data: {
|
|
other_task_id: subtask.id,
|
|
relation_kind: 'subtask',
|
|
},
|
|
})
|
|
})
|
|
|
|
test('shows subtask only once in each project list', async ({authenticatedPage: page}) => {
|
|
await page.goto(`/projects/${projectA.id}/1`)
|
|
await expect(page.locator('.subtask-nested .task-link').filter({hasText: subtask.title})).toBeVisible()
|
|
await expect(page.locator('.tasks .task-link').filter({hasText: subtask.title})).toHaveCount(1)
|
|
|
|
await page.goto(`/projects/${projectB.id}/1`)
|
|
await expect(page.locator('.subtask-nested .task-link').filter({hasText: subtask.title})).toBeVisible()
|
|
await expect(page.locator('.tasks .task-link').filter({hasText: subtask.title})).toHaveCount(1)
|
|
})
|
|
})
|