process.env.NODE_ENV = 'test';
|
|
|
|
const { assert } = require('chai');
|
|
const chai=require('chai');
|
|
const chaiHttp=require('chai-http');
|
|
const { disconnectFromDatabase } = require('../../controller/MongoController');
|
|
const server=require("../../index");
|
|
const should = chai.should();
|
|
chai.use(chaiHttp);
|
|
|
|
const Task=require("../../model/Task");
|
|
const config=require("config");
|
|
let baseURL=config.express.baseUrl+"/task";
|
|
|
|
describe('Task', () => {
|
|
beforeEach((done) => {
|
|
Task.deleteMany({}, (err) => {
|
|
if(err){
|
|
console.error(err);
|
|
}else{
|
|
done();
|
|
}
|
|
});
|
|
});
|
|
afterEach((done) => {
|
|
Task.deleteMany({}, (err) => {
|
|
if(err){
|
|
console.error(err);
|
|
}else{
|
|
done();
|
|
}
|
|
});
|
|
});
|
|
after(()=>{
|
|
disconnectFromDatabase();
|
|
})
|
|
|
|
describe("/ GET", () => {
|
|
it("Should get empty", (done)=>{
|
|
chai.request(server)
|
|
.get(baseURL)
|
|
.end((err,res)=>{
|
|
res.should.have.status(200);
|
|
res.body.should.not.have.property('errors');
|
|
res.body.should.be.a('array');
|
|
res.body.length.should.be.eql(0);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("/:id GET", () => {
|
|
it("Should return empty object if id not found", (done)=>{
|
|
chai.request(server)
|
|
.get(baseURL+"/5e99ac68604ea9031e8545c8")
|
|
.end((err,res)=>{
|
|
res.should.have.status(200);
|
|
assert.isObject(res.body);
|
|
assert.isEmpty(res.body);
|
|
done();
|
|
});
|
|
});
|
|
it("Should return existing object", (done)=>{
|
|
let task=new Task({name:"Parent", _id:"5e99ac68604ea9031e8545c8"});
|
|
task.save((err,parent)=> {
|
|
chai.request(server)
|
|
.get(baseURL+"/5e99ac68604ea9031e8545c8")
|
|
.end((err,res)=>{
|
|
res.should.have.status(200);
|
|
res.body.should.be.a('object');
|
|
res.body.should.not.have.property('errors');
|
|
res.body.should.have.property('name');
|
|
res.body.name.should.equal(task.name);
|
|
res.body.should.have.property('description');
|
|
res.body.description.should.equal(task.description);
|
|
res.body.should.have.property('_id');
|
|
res.body._id.should.be.not.empty;
|
|
res.body._id.should.equal(task.id.toString());
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("/ POST", () => {
|
|
it("Should not accept empty name", (done)=>{
|
|
let task={
|
|
}
|
|
chai.request(server)
|
|
.post(baseURL)
|
|
.send(task)
|
|
.end((err,res)=>{
|
|
res.should.have.status(500);
|
|
res.body.should.be.a('object');
|
|
res.body.should.have.property('errors');
|
|
res.body.errors.should.have.property('name');
|
|
res.body.errors.name.should.have.property('name').eql('ValidatorError');
|
|
res.body.errors.name.should.have.property('path').eql('name');
|
|
res.body.errors.name.should.have.property('kind').eql('required');
|
|
done();
|
|
});
|
|
});
|
|
it("Should add non empty task", (done)=>{
|
|
let task={
|
|
name: "Non empty name",
|
|
description: "description"
|
|
}
|
|
chai.request(server)
|
|
.post(baseURL+"/")
|
|
.send(task)
|
|
.end((err,res)=>{
|
|
res.should.have.status(200);
|
|
res.body.should.be.a('object');
|
|
res.body.should.not.have.property('errors');
|
|
res.body.should.have.property('name');
|
|
res.body.name.should.equal(task.name);
|
|
res.body.should.have.property('description');
|
|
res.body.description.should.equal(task.description);
|
|
res.body.should.have.property('_id');
|
|
res.body._id.should.be.not.empty;
|
|
done();
|
|
});
|
|
});
|
|
it("Should not create task with invalid parent id", (done)=>{
|
|
let task={
|
|
name: "TaskName",
|
|
description: "TaskDescription",
|
|
parent: "5e99ac36a60d08030772df30"
|
|
}
|
|
chai.request(server)
|
|
.post(baseURL+"/")
|
|
.send(task)
|
|
.end((err,res)=>{
|
|
res.should.have.status(500);
|
|
res.body.should.be.a('object');
|
|
res.body.should.have.property('errors');
|
|
res.body.errors.should.have.property('parent');
|
|
res.body.errors.parent.should.have.property('name').eql('ValidatorError');
|
|
res.body.errors.parent.should.have.property('path').eql('parent');
|
|
res.body.errors.parent.should.have.property('kind').eql('user defined');
|
|
done();
|
|
});
|
|
});
|
|
it("Should create task with valid parent id", (done)=>{
|
|
let task={
|
|
name: "TaskName",
|
|
description: "description",
|
|
parent: "5e99acf261eea30341340560"
|
|
}
|
|
let parentTask=new Task({name:"Parent", _id:"5e99acf261eea30341340560"});
|
|
parentTask.save((err,parent)=> {
|
|
chai.request(server)
|
|
.post(baseURL+"/")
|
|
.send(task)
|
|
.end((err,res)=>{
|
|
res.should.have.status(200);
|
|
res.body.should.be.a('object');
|
|
res.body.should.not.have.property('errors');
|
|
res.body.should.have.property('name');
|
|
res.body.name.should.equal(task.name);
|
|
res.body.should.have.property('description');
|
|
res.body.description.should.equal(task.description);
|
|
res.body.should.have.property('_id');
|
|
res.body._id.should.be.not.empty;
|
|
res.body.should.have.property("parent");
|
|
res.body.parent.should.equal(task.parent);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
it("Should create task with no parent if parent=\"\"", (done)=>{
|
|
let task={
|
|
name: "TaskName",
|
|
description: "description",
|
|
parent: ""
|
|
}
|
|
chai.request(server)
|
|
.post(baseURL+"/")
|
|
.send(task)
|
|
.end((err,res)=>{
|
|
res.should.have.status(200);
|
|
res.body.should.be.a('object');
|
|
res.body.should.not.have.property('errors');
|
|
res.body.should.have.property('name');
|
|
res.body.name.should.equal(task.name);
|
|
res.body.should.have.property('description');
|
|
res.body.description.should.equal(task.description);
|
|
res.body.should.have.property('_id');
|
|
res.body._id.should.be.not.empty;
|
|
res.body.should.not.have.property("parent");
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("/:id PUT", () => {
|
|
it("Should not change invalid id", (done)=>{
|
|
chai.request(server)
|
|
.put(baseURL+"/5e99ac36a60d08030772df30")
|
|
.send({description:"New description"})
|
|
.end((err,res)=>{
|
|
res.should.have.status(500);
|
|
assert.isNotEmpty(res.error.text);
|
|
done();
|
|
});
|
|
});
|
|
it("Should change Task", (done)=>{
|
|
let task=new Task({
|
|
name: "TaskName",
|
|
description: "description",
|
|
_id: "5e99acf261eea30341340560"
|
|
});
|
|
let updateValue={"description":"New description"}
|
|
task.save((err,doc)=> {
|
|
chai.request(server)
|
|
.put(baseURL+"/"+task._id)
|
|
.send(updateValue)
|
|
.end((err,res)=>{
|
|
res.should.have.status(200);
|
|
res.body.should.be.a('object');
|
|
res.body.should.not.have.property('errors');
|
|
res.body.should.have.property('name');
|
|
res.body.name.should.equal(task.name);
|
|
res.body.should.have.property('description');
|
|
res.body.description.should.equal(updateValue.description);
|
|
res.body.should.have.property('_id');
|
|
res.body._id.should.equal(task.id.toString());
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
it("Should not change name empty", (done)=>{
|
|
let task=new Task({
|
|
name: "TaskName",
|
|
description: "description",
|
|
_id: "5e99acf261eea30341340560"
|
|
});
|
|
task.save((err,doc)=> {
|
|
chai.request(server)
|
|
.put(baseURL+"/"+task._id)
|
|
.send({title:""})
|
|
.end((err,res)=>{
|
|
res.should.have.status(200);
|
|
res.body.should.be.a('object');
|
|
res.body.should.not.have.property('errors');
|
|
res.body.should.have.property('name');
|
|
res.body.name.should.equal(task.name);
|
|
res.body.should.have.property('description');
|
|
res.body.description.should.equal(task.description);
|
|
res.body.should.have.property('_id');
|
|
res.body._id.should.equal(task.id.toString());
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
it("Should not change parent to invalid", (done)=>{
|
|
let task=new Task({
|
|
name: "TaskName",
|
|
description: "description",
|
|
_id: "5e99acf261eea30341340560"
|
|
});
|
|
task.save((err,doc)=> {
|
|
chai.request(server)
|
|
.put(baseURL+"/"+task._id)
|
|
.send({parent:"56"})
|
|
.end((err,res)=>{
|
|
res.should.have.status(500);
|
|
res.body.should.be.a('object');
|
|
Task.findById(task._id).then((value)=>{
|
|
value.parent.should.be(task.parent);
|
|
}).catch((reason)=>{assert.fail(reason)});
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
it("Should not change parent to itself", (done)=>{
|
|
let task=new Task({
|
|
name: "TaskName",
|
|
description: "description",
|
|
_id: "5e99acf261eea30341340560"
|
|
});
|
|
task.save((err,doc)=> {
|
|
chai.request(server)
|
|
.put(baseURL+"/"+task._id)
|
|
.send({"parent":task._id})
|
|
.end((err,res)=>{
|
|
res.should.have.status(500);
|
|
res.body.should.be.a('object');
|
|
Task.findById(task._id).then((value)=>{
|
|
value.parent.should.be(task.parent);
|
|
}).catch((reason)=>{assert.fail(reason)});
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
it("Should not change non specified property", (done)=>{
|
|
let task=new Task({
|
|
name: "TaskName",
|
|
description: "description",
|
|
parent: "5e99ac36a60d08030772df30",
|
|
_id: "5e99acf261eea30341340560"
|
|
});
|
|
let parentTask=new Task({name:"Parent", _id:"5e99ac36a60d08030772df30"});
|
|
parentTask.save((perr,pdoc)=>{
|
|
task.save((err,doc)=> {
|
|
chai.request(server)
|
|
.put(baseURL+"/"+task._id)
|
|
.send({})
|
|
.end((err,res)=>{
|
|
res.should.have.status(200);
|
|
res.body.should.be.a('object');
|
|
res.body.should.not.have.property('errors');
|
|
res.body.should.have.property('name');
|
|
res.body.name.should.equal(task.name);
|
|
res.body.should.have.property('description');
|
|
res.body.description.should.equal(task.description);
|
|
res.body.should.have.property('parent');
|
|
res.body.parent.should.equal(task.parent.toString());
|
|
res.body.should.have.property('_id');
|
|
res.body._id.should.equal(task.id.toString());
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
it("Should remove parent on empty string", (done)=>{
|
|
let childTask=new Task({
|
|
name: "TaskName",
|
|
description: "description",
|
|
parent: "5e99ac36a60d08030772df30",
|
|
_id: "5e99acf261eea30341340560"
|
|
});
|
|
let parentTask=new Task({name:"Parent", _id:"5e99ac36a60d08030772df30"});
|
|
parentTask.save((perr,pdoc)=>{
|
|
childTask.save((err,doc)=> {
|
|
chai.request(server)
|
|
.put(baseURL+"/"+childTask._id)
|
|
.send({parent:""})
|
|
.end((err,res)=>{
|
|
res.should.have.status(200);
|
|
res.body.should.be.a('object');
|
|
res.body.should.not.have.property('errors');
|
|
res.body.should.have.property('name');
|
|
res.body.name.should.equal(childTask.name);
|
|
res.body.should.have.property('description');
|
|
res.body.description.should.equal(childTask.description);
|
|
res.body.should.not.have.property('parent');
|
|
res.body.should.have.property('_id');
|
|
res.body._id.should.equal(childTask.id.toString());
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("/:id DELETE", () => {
|
|
it("Should not delete invalid id", (done)=>{
|
|
chai.request(server)
|
|
.delete(baseURL+"/5e99ac36a60d08030772df99")
|
|
.end((err,res)=>{
|
|
res.should.have.status(500);
|
|
assert.isNotEmpty(res.error.text);
|
|
done();
|
|
});
|
|
});
|
|
it("Should delete", (done)=>{
|
|
let task=new Task({
|
|
name: "TaskName",
|
|
description: "description",
|
|
_id: "5e99ac36a60d08030772df99"
|
|
});
|
|
task.save((err,doc)=> {
|
|
chai.request(server)
|
|
.delete(baseURL+"/"+task._id)
|
|
.end((err,res)=>{
|
|
res.should.have.status(200);
|
|
res.body.should.be.an('object');
|
|
res.body._id.should.equal(task._id.toString());
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|