Files
2025-12-26 13:38:04 +01:00

168 lines
4.3 KiB
TypeScript

describe('Projects Management', () => {
beforeEach(() => {
// Mock authentication
cy.window().then((win) => {
win.localStorage.setItem('auth_token', 'mock-jwt-token')
})
cy.intercept('GET', '**/profile', {
statusCode: 200,
body: {
id: 1,
name: 'Test User',
email: 'test@example.com',
roles: ['CLIENT'],
createdAt: new Date().toISOString()
}
}).as('profile')
})
it('displays projects list', () => {
cy.intercept('GET', '**/projects', {
statusCode: 200,
body: [
{
id: 1,
name: 'Project Alpha',
description: 'First project',
status: 'ACTIVE',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString()
},
{
id: 2,
name: 'Project Beta',
description: 'Second project',
status: 'PLANNING',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString()
}
]
}).as('getProjects')
cy.visit('/projects')
cy.wait('@getProjects')
cy.contains('Project Alpha').should('be.visible')
cy.contains('Project Beta').should('be.visible')
})
it('can create a new project', () => {
cy.intercept('GET', '**/projects', {
statusCode: 200,
body: []
}).as('getProjects')
cy.intercept('POST', '**/projects', {
statusCode: 201,
body: {
id: 1,
name: 'New Project',
description: 'Test project description',
status: 'PLANNING',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString()
}
}).as('createProject')
cy.visit('/projects')
cy.wait('@getProjects')
cy.contains('button', 'New Project').click()
cy.get('input[placeholder*="Project name"]').type('New Project')
cy.get('textarea[placeholder*="description"]').type('Test project description')
cy.contains('button', 'Create').click()
cy.wait('@createProject')
cy.contains('New Project').should('be.visible')
})
it('navigates to project detail page', () => {
cy.intercept('GET', '**/projects', {
statusCode: 200,
body: [
{
id: 1,
name: 'Project Alpha',
description: 'First project',
status: 'ACTIVE',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString()
}
]
}).as('getProjects')
cy.intercept('GET', '**/projects/1', {
statusCode: 200,
body: {
id: 1,
name: 'Project Alpha',
description: 'First project',
status: 'ACTIVE',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString()
}
}).as('getProject')
cy.intercept('GET', '**/tasks?project_id=1', {
statusCode: 200,
body: []
}).as('getTasks')
cy.visit('/projects')
cy.wait('@getProjects')
cy.contains('Project Alpha').click()
cy.wait('@getProject')
cy.wait('@getTasks')
cy.url().should('include', '/projects/1')
cy.contains('h2', 'Project Alpha').should('be.visible')
})
it('can add tasks to a project', () => {
cy.intercept('GET', '**/projects/1', {
statusCode: 200,
body: {
id: 1,
name: 'Project Alpha',
description: 'First project',
status: 'ACTIVE',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString()
}
}).as('getProject')
cy.intercept('GET', '**/tasks?project_id=1', {
statusCode: 200,
body: []
}).as('getTasks')
cy.intercept('POST', '**/tasks', {
statusCode: 201,
body: {
id: 1,
projectId: 1,
title: 'New Task',
description: 'Task description',
status: 'TODO',
priority: 1,
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString()
}
}).as('createTask')
cy.visit('/projects/1')
cy.wait('@getProject')
cy.wait('@getTasks')
cy.contains('button', 'Add Task').click()
cy.get('input[placeholder*="Task title"]').type('New Task')
cy.get('textarea[placeholder*="description"]').type('Task description')
cy.contains('button', 'Create').click()
cy.wait('@createTask')
cy.contains('New Task').should('be.visible')
})
})