tududi/backend/tests/integration/project-notes-deletion.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

126 lines
4.5 KiB
JavaScript

const request = require('supertest');
const app = require('../../app');
const { Project, Task, Note } = require('../../models');
const { createTestUser } = require('../helpers/testUtils');
describe('Project Notes and Tasks Deletion', () => {
let user;
let agent;
let project;
let task;
let note;
beforeEach(async () => {
user = await createTestUser({
email: 'test@example.com',
});
// Create authenticated agent
agent = request.agent(app);
await agent.post('/api/login').send({
email: 'test@example.com',
password: 'password123',
});
// Create test project
project = await Project.create({
name: 'Test Project',
user_id: user.id,
});
// Create test task associated with project
task = await Task.create({
name: 'Test Task',
user_id: user.id,
project_id: project.id,
status: 0,
});
// Create test note associated with project
note = await Note.create({
title: 'Test Note',
content: 'Test content',
user_id: user.id,
project_id: project.id,
});
});
describe('Issue #392: Clearing project from task or note', () => {
it('should remove task from project when project_id is cleared', async () => {
// Verify task is initially associated with project
let projectData = await Project.findOne({
where: { id: project.id },
include: [{ model: Task }],
});
expect(projectData.Tasks).toHaveLength(1);
expect(projectData.Tasks[0].id).toBe(task.id);
// Clear project from task by setting project_id to null
const updateResponse = await agent
.patch(`/api/task/${task.uid}`)
.send({ project_id: null });
expect(updateResponse.status).toBe(200);
expect(updateResponse.body.project_id).toBeNull();
// Fetch project again and verify task is no longer associated
projectData = await Project.findOne({
where: { id: project.id },
include: [{ model: Task }],
});
expect(projectData.Tasks).toHaveLength(0);
// Verify task still exists but without project
const taskData = await Task.findOne({ where: { id: task.id } });
expect(taskData).not.toBeNull();
expect(taskData.project_id).toBeNull();
});
it('should remove note from project when project_uid is cleared', async () => {
// Verify note is initially associated with project
let projectData = await Project.findOne({
where: { id: project.id },
include: [{ model: Note }],
});
expect(projectData.Notes).toHaveLength(1);
expect(projectData.Notes[0].id).toBe(note.id);
// Clear project from note by setting project_uid to empty string
const updateResponse = await agent
.patch(`/api/note/${note.uid}`)
.send({ project_uid: '' });
expect(updateResponse.status).toBe(200);
expect(updateResponse.body.project_id).toBeNull();
// Fetch project again and verify note is no longer associated
projectData = await Project.findOne({
where: { id: project.id },
include: [{ model: Note }],
});
expect(projectData.Notes).toHaveLength(0);
// Verify note still exists but without project
const noteData = await Note.findOne({ where: { id: note.id } });
expect(noteData).not.toBeNull();
expect(noteData.project_id).toBeNull();
});
it('should remove task from project when project_id is set to empty string', async () => {
// Clear project from task by setting project_id to empty string
const updateResponse = await agent
.patch(`/api/task/${task.uid}`)
.send({ project_id: '' });
expect(updateResponse.status).toBe(200);
expect(updateResponse.body.project_id).toBeNull();
// Fetch project again and verify task is no longer associated
const projectData = await Project.findOne({
where: { id: project.id },
include: [{ model: Task }],
});
expect(projectData.Tasks).toHaveLength(0);
});
});
});