2017-09-20 11:30:07 +02:00
|
|
|
/**
|
|
|
|
* Copyright JS Foundation and other contributors, http://js.foundation
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
**/
|
|
|
|
|
2018-04-28 16:57:32 +02:00
|
|
|
var should = require("should");
|
|
|
|
var sinon = require("sinon");
|
|
|
|
|
|
|
|
var projects = require("../../../red/runtime-api/projects")
|
|
|
|
|
|
|
|
var mockLog = () => ({
|
|
|
|
log: sinon.stub(),
|
|
|
|
debug: sinon.stub(),
|
|
|
|
trace: sinon.stub(),
|
|
|
|
warn: sinon.stub(),
|
|
|
|
info: sinon.stub(),
|
|
|
|
metric: sinon.stub(),
|
|
|
|
audit: sinon.stub(),
|
|
|
|
_: function() { return "abc"}
|
|
|
|
})
|
|
|
|
|
|
|
|
describe("runtime-api/settings", function() {
|
|
|
|
describe("available", function() {
|
|
|
|
it("resolves true if projects available", function(done) {
|
|
|
|
projects.init({
|
|
|
|
storage: {
|
|
|
|
projects: {}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
projects.available().then(function(result) {
|
|
|
|
result.should.be.true();
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
})
|
|
|
|
it("resolves false if projects unavailable", function(done) {
|
|
|
|
projects.init({
|
|
|
|
storage: {
|
|
|
|
}
|
|
|
|
});
|
|
|
|
projects.available().then(function(result) {
|
|
|
|
result.should.be.false();
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
})
|
|
|
|
|
|
|
|
});
|
|
|
|
describe("listProjects", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
listProjects: sinon.spy(function(user) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve([1,2,3]);
|
|
|
|
}
|
|
|
|
}),
|
|
|
|
getActiveProject: function(user) {
|
|
|
|
if (user === "noActive") {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
return {name:"aProject"};
|
|
|
|
}
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("lists the projects, without an active project", function(done) {
|
|
|
|
projects.listProjects({user:"noActive"}).then(function(result) {
|
|
|
|
result.should.have.property('projects',[1,2,3]);
|
|
|
|
result.should.not.have.property('active');
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("lists the projects, with an active project", function(done) {
|
|
|
|
projects.listProjects({user:"foo"}).then(function(result) {
|
|
|
|
result.should.have.property('projects',[1,2,3]);
|
|
|
|
result.should.have.property('active','aProject');
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.listProjects({user:"error"}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
describe("createProject", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
createProject: sinon.spy(function(user,project) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve(project);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("create project", function(done) {
|
|
|
|
projects.createProject({user:"known",project:{a:1}}).then(function(result) {
|
|
|
|
result.should.eql({a:1});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.createProject({user:"error"}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe("initialiseProject", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
initialiseProject: sinon.spy(function(user,id,project) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({id,project});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("intialise project", function(done) {
|
|
|
|
projects.initialiseProject({user:"known",id:123, project:{a:1}}).then(function(result) {
|
|
|
|
result.should.eql({id:123, project:{a:1}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.initialiseProject({user:"error"}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("getActiveProject", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
getActiveProject: sinon.spy(function(user) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve("123");
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("returns active project", function(done) {
|
|
|
|
projects.getActiveProject({user:"known"}).then(function(result) {
|
|
|
|
result.should.eql("123");
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.getActiveProject({user:"error"}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("setActiveProject", function() {
|
|
|
|
var activeProject;
|
|
|
|
var runtime;
|
|
|
|
beforeEach(function() {
|
|
|
|
runtime = {storage: {projects: {
|
|
|
|
getActiveProject: sinon.spy(function() { return activeProject;}),
|
|
|
|
setActiveProject: sinon.spy(function(user,id) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("sets project if current project is unset", function(done) {
|
|
|
|
activeProject = null;
|
|
|
|
projects.setActiveProject({user:"known",id:123}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("sets project if current project is different", function(done) {
|
|
|
|
activeProject = {name:456};
|
|
|
|
projects.setActiveProject({user:"known",id:123}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("no-ops if current project is same", function(done) {
|
|
|
|
activeProject = {name:123};
|
|
|
|
projects.setActiveProject({user:"known",id:123}).then(function(result) {
|
|
|
|
(result === undefined).should.be.true();
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.setActiveProject({user:"error"}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("getProject", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
getProject: sinon.spy(function(user,id) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("returns project", function(done) {
|
|
|
|
projects.getProject({user:"known",id:123}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.getProject({user:"error"}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe("updateProject", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
updateProject: sinon.spy(function(user,id,project) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,project});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("updates project", function(done) {
|
|
|
|
projects.updateProject({user:"known",id:123,project:{a:1}}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,project:{a:1}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.updateProject({user:"error",id:123,project:{a:1}}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("deleteProject", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
deleteProject: sinon.spy(function(user,id) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("deletes project", function(done) {
|
|
|
|
projects.deleteProject({user:"known",id:123}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.deleteProject({user:"error",id:123}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("getStatus", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
getStatus: sinon.spy(function(user,id,remote) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,remote});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("gets status", function(done) {
|
|
|
|
projects.getStatus({user:"known",id:123,remote:{a:1}}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,remote:{a:1}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.getStatus({user:"error",id:123,project:{a:1}}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe("getBranches", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
getBranches: sinon.spy(function(user,id,remote) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,remote});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("gets branches", function(done) {
|
|
|
|
projects.getBranches({user:"known",id:123,remote:{a:1}}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,remote:{a:1}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.getBranches({user:"error",id:123,remote:{a:1}}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe("getBranchStatus", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
getBranchStatus: sinon.spy(function(user,id,branch) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,branch});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("gets branch status", function(done) {
|
|
|
|
projects.getBranchStatus({user:"known",id:123,branch:{a:1}}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,branch:{a:1}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.getBranchStatus({user:"error",id:123,branch:{a:1}}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("setBranch", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
setBranch: sinon.spy(function(user,id,branch,create) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,branch,create});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("commits", function(done) {
|
|
|
|
projects.setBranch({user:"known",id:123,branch:{a:1},create:true}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,branch:{a:1},create:true});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.setBranch({user:"error",id:123,branch:{a:1},create:true}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("deleteBranch", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
deleteBranch: sinon.spy(function(user,id,branch,something,force) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,branch,force});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("commits", function(done) {
|
|
|
|
projects.deleteBranch({user:"known",id:123,branch:{a:1},force:true}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,branch:{a:1},force:true});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.deleteBranch({user:"error",id:123,branch:{a:1},force:true}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("commit", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
commit: sinon.spy(function(user,id,message) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,message});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("commits", function(done) {
|
|
|
|
projects.commit({user:"known",id:123,message:{a:1}}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,message:{message:{a:1}}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.commit({user:"error",id:123,message:{a:1}}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe("getCommit", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
getCommit: sinon.spy(function(user,id,sha) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,sha});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("gets commit", function(done) {
|
|
|
|
projects.getCommit({user:"known",id:123,sha:{a:1}}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,sha:{a:1}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.getCommit({user:"error",id:123,sha:{a:1}}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("getCommits", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
getCommits: sinon.spy(function(user,id,options) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,options});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("gets commits with default limit/before", function(done) {
|
|
|
|
projects.getCommits({user:"known",id:123}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,options:{limit:20,before:undefined}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("gets commits with provided limit/before", function(done) {
|
|
|
|
projects.getCommits({user:"known",id:123,limit:10,before:456}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,options:{limit:10,before:456}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.getCommits({user:"error"}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("abortMerge", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
abortMerge: sinon.spy(function(user,id) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("aborts merge", function(done) {
|
|
|
|
projects.abortMerge({user:"known",id:123}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.abortMerge({user:"error"}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("resolveMerge", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
resolveMerge: sinon.spy(function(user,id,path,resolution) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,path,resolution});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("resolves merge", function(done) {
|
|
|
|
projects.resolveMerge({user:"known",id:123,path:"/abc",resolution:{a:1}}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,path:"/abc",resolution:{a:1}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.resolveMerge({user:"error",id:123,path:"/abc",resolution:{a:1}}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("getFiles", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
getFiles: sinon.spy(function(user,id) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("gets files", function(done) {
|
|
|
|
projects.getFiles({user:"known",id:123}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.getFiles({user:"error"}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("getFile", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
getFile: sinon.spy(function(user,id,path,tree) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,path,tree});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("gets file", function(done) {
|
|
|
|
projects.getFile({user:"known",id:123,path:"/abc",tree:{a:1}}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,path:"/abc",tree:{a:1}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.getFile({user:"error",id:123,path:"/abc",tree:{a:1}}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("stageFile", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
stageFile: sinon.spy(function(user,id,path) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,path});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("stages a file", function(done) {
|
|
|
|
projects.stageFile({user:"known",id:123,path:{a:1}}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,path:{a:1}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.stageFile({user:"error",id:123,path:{a:1}}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe("unstageFile", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
unstageFile: sinon.spy(function(user,id,path) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,path});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("unstages a file", function(done) {
|
|
|
|
projects.unstageFile({user:"known",id:123,path:{a:1}}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,path:{a:1}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.unstageFile({user:"error",id:123,path:{a:1}}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("revertFile", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
revertFile: sinon.spy(function(user,id,path) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,path});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("reverts a file", function(done) {
|
|
|
|
projects.revertFile({user:"known",id:123,path:{a:1}}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,path:{a:1}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.revertFile({user:"error",id:123,path:{a:1}}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("getFileDiff", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
getFileDiff: sinon.spy(function(user,id,path,type) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,path,type});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("gets file diff", function(done) {
|
|
|
|
projects.getFileDiff({user:"known",id:123,path:{a:1},type:"abc"}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,path:{a:1},type:"abc"});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.getFileDiff({user:"error",id:123,path:{a:1},type:"abc"}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("getRemotes", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
getRemotes: sinon.spy(function(user,id) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("gets remotes", function(done) {
|
|
|
|
projects.getRemotes({user:"known",id:123}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.getRemotes({user:"error"}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("addRemote", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
addRemote: sinon.spy(function(user,id,remote) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,remote});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("adds a remote", function(done) {
|
|
|
|
projects.addRemote({user:"known",id:123,remote:{a:1}}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,remote:{a:1}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.addRemote({user:"error",id:123,remote:{a:1}}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("removeRemote", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
removeRemote: sinon.spy(function(user,id,remote) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,remote});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("removes a remote", function(done) {
|
|
|
|
projects.removeRemote({user:"known",id:123,remote:{a:1}}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,remote:{a:1}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.removeRemote({user:"error",id:123,remote:{a:1}}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("updateRemote", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
updateRemote: sinon.spy(function(user,id,name,remote) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,name,remote});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("updates a remote", function(done) {
|
|
|
|
projects.updateRemote({user:"known",id:123,remote:{name:"abc",a:1}}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,name:"abc",remote:{name:"abc",a:1}});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.updateRemote({user:"error",id:123,remote:{name:"abc",a:1}}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe("pull", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
pull: sinon.spy(function(user,id,remote,track,allowUnrelatedHistories) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,remote,track,allowUnrelatedHistories});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("pulls", function(done) {
|
|
|
|
projects.pull({user:"known",id:123,remote:"abc",track:false,allowUnrelatedHistories:true}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,remote:"abc",track:false,allowUnrelatedHistories:true});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.pull({user:"error",id:123,remote:"abc",track:false,allowUnrelatedHistories:true}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe("push", function() {
|
|
|
|
var runtime = {storage: {projects: {
|
|
|
|
push: sinon.spy(function(user,id,remote,track) {
|
|
|
|
if (user === "error") {
|
|
|
|
var err = new Error("error");
|
|
|
|
err.code = "error";
|
|
|
|
var p = Promise.reject(err);
|
|
|
|
p.catch(()=>{});
|
|
|
|
return p;
|
|
|
|
} else {
|
|
|
|
return Promise.resolve({user,id,remote,track});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}}};
|
|
|
|
before(function() {
|
|
|
|
projects.init(runtime);
|
|
|
|
})
|
|
|
|
it("pulls", function(done) {
|
|
|
|
projects.push({user:"known",id:123,remote:"abc",track:false}).then(function(result) {
|
|
|
|
result.should.eql({user:"known",id:123,remote:"abc",track:false});
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
it("rejects with internal error", function(done) {
|
|
|
|
projects.push({user:"error",id:123,remote:"abc",track:false}).then(function(result) {
|
|
|
|
done(new Error("Did not reject internal error"));
|
|
|
|
}).catch(function(err) {
|
|
|
|
err.should.have.property('code','error');
|
|
|
|
// err.should.have.property('status',400);
|
|
|
|
done();
|
|
|
|
}).catch(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
2017-09-20 11:30:07 +02:00
|
|
|
});
|