test(e2e): add test for read-only checkbox on overview page

Verifies that tasks from read-only shared projects have disabled
checkboxes on the overview page, while tasks from owned projects
remain interactive.

Refs #2399
This commit is contained in:
kolaente 2026-04-03 19:55:16 +02:00 committed by kolaente
parent 063155a46b
commit c5bce07a25
1 changed files with 86 additions and 0 deletions

View File

@ -0,0 +1,86 @@
import {test, expect} from '../../support/fixtures'
import {ProjectFactory} from '../../factories/project'
import {TaskFactory} from '../../factories/task'
import {UserProjectFactory} from '../../factories/users_project'
import {UserFactory} from '../../factories/user'
import {BucketFactory} from '../../factories/bucket'
import {createDefaultViews} from '../project/prepareProjects'
test.describe('Read-only checkbox on Overview', () => {
test('Should disable checkboxes for tasks from read-only shared projects', async ({authenticatedPage: page, apiContext, currentUser}) => {
// Create a second user who will own the shared project
const [otherUser] = await UserFactory.create(1, {
id: 2,
}, false)
// Create the own project (owned by test user, id=1)
const [ownProject] = await ProjectFactory.create(1, {
id: 1,
title: 'Own Project',
owner_id: currentUser.id,
})
const ownViews = await createDefaultViews(ownProject.id, 1)
await BucketFactory.create(1, {
project_view_id: ownViews[3].id,
})
// Create the shared project (owned by user 2)
const [sharedProject] = await ProjectFactory.create(1, {
id: 2,
title: 'Shared Read-Only Project',
owner_id: otherUser.id,
}, false)
const sharedViews = await createDefaultViews(sharedProject.id, 5, false)
await BucketFactory.create(1, {
id: 2,
project_view_id: sharedViews[3].id,
}, false)
// Share the project read-only (permission=0) with the test user
await UserProjectFactory.create(1, {
id: 1,
project_id: sharedProject.id,
user_id: currentUser.id,
permission: 0,
})
const now = new Date()
const soon = new Date(now.getTime() + 24 * 60 * 60 * 1000) // tomorrow
// Create a task in the own project
await TaskFactory.create(1, {
id: 1,
title: 'Own Task',
project_id: ownProject.id,
created_by_id: currentUser.id,
due_date: soon.toISOString(),
})
// Create a task in the shared read-only project
await TaskFactory.create(1, {
id: 2,
title: 'Read Only Task',
project_id: sharedProject.id,
created_by_id: otherUser.id,
due_date: soon.toISOString(),
}, false)
await page.goto('/')
await page.waitForLoadState('networkidle')
// Wait for both tasks to appear on the overview
const ownTaskRow = page.locator('.single-task', {hasText: 'Own Task'})
const readOnlyTaskRow = page.locator('.single-task', {hasText: 'Read Only Task'})
await expect(ownTaskRow).toBeVisible({timeout: 10000})
await expect(readOnlyTaskRow).toBeVisible({timeout: 10000})
// The checkbox for the own task should be enabled
const ownCheckbox = ownTaskRow.locator('input[type="checkbox"]')
await expect(ownCheckbox).toBeEnabled()
// The checkbox for the read-only task should be disabled
const readOnlyCheckbox = readOnlyTaskRow.locator('input[type="checkbox"]')
await expect(readOnlyCheckbox).toBeDisabled()
})
})