tududi/backend/tests/integration/task-edit-shared-project.test.js
Chris bfeffa069f
Fix an issue with task not completing in TaskDetails view (#620)
* Fix test issues

* Fix uid issue

* Fix id wrong param

* Fix test issues

* fixup! Fix test issues

* fixup! fixup! Fix test issues

* fixup! fixup! fixup! Fix test issues

* fixup! fixup! fixup! fixup! Fix test issues
2025-11-30 14:51:49 +02:00

141 lines
4.7 KiB
JavaScript

const request = require('supertest');
const app = require('../../app');
const { Project, Task, sequelize } = require('../../models');
const { createTestUser } = require('../helpers/testUtils');
describe('Task Editing in Shared Projects', () => {
let ownerUser, sharedUser, ownerAgent, sharedUserAgent, project;
beforeEach(async () => {
// Create test users
ownerUser = await createTestUser({
email: `owner_${Date.now()}@test.com`,
name: 'Owner',
timezone: 'UTC',
});
sharedUser = await createTestUser({
email: `shared_${Date.now()}@test.com`,
name: 'Shared User',
timezone: 'UTC',
});
// Create agents for both users
ownerAgent = request.agent(app);
sharedUserAgent = request.agent(app);
// Login as owner
await ownerAgent
.post('/api/login')
.send({ email: ownerUser.email, password: 'password123' });
// Login as shared user
await sharedUserAgent
.post('/api/login')
.send({ email: sharedUser.email, password: 'password123' });
// Create a project as owner
const projectResponse = await ownerAgent.post('/api/project').send({
name: 'Shared Test Project',
description: 'Project for sharing tests',
});
project = projectResponse.body;
// Share the project with read-write access
await ownerAgent.post('/api/shares').send({
resource_type: 'project',
resource_uid: project.uid,
target_user_email: sharedUser.email,
access_level: 'rw',
});
});
afterAll(async () => {
await sequelize.close();
});
test('shared user with RW access can edit task name in shared project', async () => {
// Owner creates a task in the shared project
const taskResponse = await ownerAgent.post('/api/task').send({
name: 'Original Task Name',
project_id: project.id,
priority: 1,
status: 0,
});
const task = taskResponse.body;
// Shared user should be able to edit the task name
const response = await sharedUserAgent
.patch(`/api/task/${task.uid}`)
.send({
name: 'Updated Task Name',
});
console.log('Response status:', response.status);
console.log('Response body:', response.body);
expect(response.status).toBe(200);
expect(response.body.name).toBe('Updated Task Name');
});
test('shared user with RW access can edit task priority in shared project', async () => {
// Owner creates a task in the shared project
const taskResponse = await ownerAgent.post('/api/task').send({
name: 'Test Task',
project_id: project.id,
priority: 1,
status: 0,
});
const task = taskResponse.body;
// Shared user should be able to edit the task priority
const response = await sharedUserAgent
.patch(`/api/task/${task.uid}`)
.send({
priority: 2,
});
expect(response.status).toBe(200);
expect(response.body.priority).toBe(2);
});
test('shared user with RW access can toggle task completion in shared project', async () => {
// Owner creates a task in the shared project
const taskResponse = await ownerAgent.post('/api/task').send({
name: 'Test Task',
project_id: project.id,
priority: 1,
status: 0,
});
const task = taskResponse.body;
// Shared user should be able to update task status
const response = await sharedUserAgent
.patch(`/api/task/${task.uid}`)
.send({ status: 2 });
expect(response.status).toBe(200);
expect(response.body.status).toBe(2);
});
test('shared user created task can be edited by them in shared project', async () => {
// Shared user creates a task in the shared project
const taskResponse = await sharedUserAgent.post('/api/task').send({
name: 'Task by Shared User',
project_id: project.id,
priority: 1,
status: 0,
});
const task = taskResponse.body;
// Shared user should be able to edit their own task
const response = await sharedUserAgent
.patch(`/api/task/${task.uid}`)
.send({
name: 'Updated by Shared User',
});
expect(response.status).toBe(200);
expect(response.body.name).toBe('Updated by Shared User');
});
});