168 lines
4.3 KiB
TypeScript
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')
|
|
})
|
|
})
|