2_funtional-test.js file
const chaiHttp = require(‘chai-http’);
const chai = require(‘chai’);
const assert = chai.assert;
const server = require(‘../server’);
chai.use(chaiHttp);
suite(‘Functional Tests’, function() {
let testIssueId;
const project = ‘test-project’;
// 1. Crear un problema con cada campo
test(‘Create an issue with every field’, function(done) {
chai.request(server)
.post(/api/issues/${project})
.send({
issue_title: ‘Test issue’,
issue_text: ‘Testing all fields’,
created_by: ‘Tester’,
assigned_to: ‘Chai’,
status_text: ‘In QA’
})
.end(function(err, res) {
assert.equal(res.status, 200);
assert.property(res.body, ‘_id’);
assert.equal(res.body.issue_title, ‘Test issue’);
assert.equal(res.body.issue_text, ‘Testing all fields’);
assert.equal(res.body.created_by, ‘Tester’);
assert.equal(res.body.assigned_to, ‘Chai’);
assert.equal(res.body.status_text, ‘In QA’);
assert.property(res.body, ‘created_on’);
assert.property(res.body, ‘updated_on’);
assert.property(res.body, ‘open’);
testIssueId = res.body._id;
done();
});
});
// 2. Crear un problema solo con campos obligatorios
test(‘Create an issue with only required fields’, function(done) {
chai.request(server)
.post(/api/issues/${project})
.send({
issue_title: ‘Required fields issue’,
issue_text: ‘Only required fields’,
created_by: ‘Tester’
})
.end(function(err, res) {
assert.equal(res.status, 200);
assert.equal(res.body.issue_title, ‘Required fields issue’);
assert.equal(res.body.assigned_to, ‘’);
assert.equal(res.body.status_text, ‘’);
done();
});
});
// 3. Crear un problema con campos obligatorios faltantes
test(‘Create an issue with missing required fields’, function(done) {
chai.request(server)
.post(/api/issues/${project})
.send({ issue_title: ‘’, issue_text: ‘Missing title’, created_by: ‘’ })
.end(function(err, res) {
assert.equal(res.status, 200);
assert.deepEqual(res.body, { error: ‘required field(s) missing’ });
done();
});
});
// 4. Ver problemas en un proyecto
test(‘View issues on a project’, function(done) {
chai.request(server)
.get(/api/issues/${project})
.end(function(err, res) {
assert.equal(res.status, 200);
assert.isArray(res.body);
assert.property(res.body[0], ‘issue_title’);
done();
});
});
// 5. Ver problemas en un proyecto con un filtro
test(‘View issues on a project with one filter’, function(done) {
chai.request(server)
.get(/api/issues/${project})
.query({ open: ‘true’ })
.end(function(err, res) {
assert.equal(res.status, 200);
res.body.forEach(issue => assert.isTrue(issue.open));
done();
});
});
// 6. Ver problemas con múltiples filtros
test(‘View issues on a project with multiple filters’, function(done) {
chai.request(server)
.get(/api/issues/${project})
.query({ open: ‘true’, created_by: ‘Tester’ })
.end(function(err, res) {
assert.equal(res.status, 200);
res.body.forEach(issue => {
assert.isTrue(issue.open);
assert.equal(issue.created_by, ‘Tester’);
});
done();
});
});
// 7. Actualizar un campo
test(‘Update one field on an issue’, function(done) {
chai.request(server)
.put(/api/issues/${project})
.send({ _id: testIssueId, issue_text: ‘Updated text’ })
.end(function(err, res) {
assert.equal(res.status, 200);
assert.deepEqual(res.body, { result: ‘successfully updated’, _id: testIssueId });
done();
});
});
// 8. Actualizar varios campos
test(‘Update multiple fields on an issue’, function(done) {
chai.request(server)
.put(/api/issues/${project})
.send({ _id: testIssueId, issue_text: ‘Updated text again’, status_text: ‘Done’ })
.end(function(err, res) {
assert.equal(res.status, 200);
assert.deepEqual(res.body, { result: ‘successfully updated’, _id: testIssueId });
done();
});
});
// 9. Actualizar sin _id
test(‘Update an issue with missing _id’, function(done) {
chai.request(server)
.put(/api/issues/${project})
.send({ issue_text: ‘No ID’ })
.end(function(err, res) {
assert.equal(res.status, 200);
assert.deepEqual(res.body, { error: ‘missing _id’ });
done();
});
});
// 10. Actualizar sin campos
test(‘Update an issue with no fields to update’, function(done) {
chai.request(server)
.put(/api/issues/${project})
.send({ _id: testIssueId })
.end(function(err, res) {
assert.equal(res.status, 200);
assert.deepEqual(res.body, { error: ‘no update field(s) sent’, _id: testIssueId });
done();
});
});
// 11. Actualizar con _id inválido
test(‘Update an issue with invalid _id’, function(done) {
chai.request(server)
.put(/api/issues/${project})
.send({ _id: ‘invalidid’, issue_text: ‘Test’ })
.end(function(err, res) {
assert.equal(res.status, 200);
assert.deepEqual(res.body, { error: ‘could not update’, _id: ‘invalidid’ });
done();
});
});
// 12. Eliminar un issue
test(‘Delete an issue’, function(done) {
chai.request(server)
.delete(/api/issues/${project})
.send({ _id: testIssueId })
.end(function(err, res) {
assert.equal(res.status, 200);
assert.deepEqual(res.body, { result: ‘successfully deleted’, _id: testIssueId });
done();
});
});
// 13. Eliminar con _id inválido
test(‘Delete an issue with invalid _id’, function(done) {
chai.request(server)
.delete(/api/issues/${project})
.send({ _id: ‘invalidid’ })
.end(function(err, res) {
assert.equal(res.status, 200);
assert.deepEqual(res.body, { error: ‘could not delete’, _id: ‘invalidid’ });
done();
});
});
// 14. Eliminar sin _id
test(‘Delete an issue with missing _id’, function(done) {
chai.request(server)
.delete(/api/issues/${project})
.send({})
.end(function(err, res) {
assert.equal(res.status, 200);
assert.deepEqual(res.body, { error: ‘missing _id’ });
done();
});
});
});