UNPKG

scriptremote

Version:

Message server providing secure remote access to scripted applications from a browser UI

325 lines (299 loc) 12.4 kB
'use strict'; var should = require('should'), request = require('supertest'), initUsers = require('../../../app/tests/utils.js').initUsers, removeUsers = require('../../../app/tests/utils.js').removeUsers, getAPICredentials = require('../../../app/tests/utils.js').getAPICredentials; /** * Globals */ var credentials = null; var apiCredentials = null; var project1 = null; var project2 = null; var projectShare = null; var statusOK = 'OK'; var typeJSON = 'application/json'; /** * Testing project routes * Test credentials are defined in config/env/test.js and .env */ describe('Project API tests', function() { var agent; before(function(done) { if (!global.myapp) { // Start the app require('../../../server_mod.js')() .then( function(app1) { agent = request.agent(app1); global.myapp = app1; credentials = global.myapp.locals.credentials; initUsers(agent, credentials, done); }) } else { agent = request.agent(global.myapp); credentials = global.myapp.locals.credentials; initUsers(agent, credentials, done); } }); it('get user1 API credentials', function(done) { getAPICredentials(agent, credentials.user1.email, credentials.user1.password, function(apicred) { apiCredentials = apicred; done(); }, function(err) { done(err); } ) }); it('should not be able to create project without valid credentials', function(done) { var timestamp1 = ((new Date()).getTime()).toString(); project1 = { project_name: credentials.user1.project1, timestamp: timestamp1, project_name_form: 'project_name=' + credentials.user1.project1, timestamp_form: 'timestamp=' + timestamp1, encrypted_form: 'is_encrypted=0', description: 'Some description' }; agent.post('/api/projects') .auth(apiCredentials.uid, 'dummy') .set('Content-Type', 'application/x-www-form-urlencoded') .send(project1.project_name_form) .send(project1.timestamp_form) .send(project1.encrypted_form) .expect(401) .end(function(projectPostErr, projectPostRes) { if (projectPostErr) { done(projectPostErr); return; } // Get the list of projects agent.get('/api/projects') .auth(apiCredentials.uid, apiCredentials.token) .expect(function(projectGetRes) { (projectGetRes.type).should.equal(typeJSON); (projectGetRes.status).should.equal(200); (projectGetRes.body['SR_status']).should.equal(statusOK) }) .end(function(projectsGetErr, projectsGetRes) { if (projectsGetErr) { done(projectsGetErr); return; } var projects = projectsGetRes.body.projects; // Check no projects (projects.length).should.equal(0); done(); }); }); }); it('should be able to create project using form', function(done) { // Create project var timestamp1 = ((new Date()).getTime()).toString(); project1 = { project_name: credentials.user1.project1, timestamp: timestamp1, project_name_form: 'project_name=' + credentials.user1.project1, timestamp_form: 'timestamp=' + timestamp1, encrypted_form: 'is_encrypted=0', description: 'Some description' }; agent.post('/api/projects') .auth(apiCredentials.uid, apiCredentials.token) .set('Content-Type', 'application/x-www-form-urlencoded') .send(project1.project_name_form) .send(project1.timestamp_form) .send(project1.encrypted_form) .expect(200, {SR_status: statusOK}) .end(function(projectPostErr, projectPostRes) { if (projectPostErr) { done(projectPostErr); return; } // Get the list of projects agent.get('/api/projects') .auth(apiCredentials.uid, apiCredentials.token) .expect(function(projectGetRes) { (projectGetRes.type).should.equal(typeJSON); (projectGetRes.status).should.equal(200); (projectGetRes.body['SR_status']).should.equal(statusOK) }) .end(function(projectsGetErr, projectsGetRes) { if (projectsGetErr) { done(projectsGetErr); return; } var projects = projectsGetRes.body.projects; // Check project is in list (projects).should.containEql([project1.project_name, false, '']); done(); }); }); }); it('should be able to create project using json', function(done) { // Create project var timestamp2 = ((new Date()).getTime() + 1).toString(); project2 = { project_name: credentials.user1.project2, timestamp: timestamp2, is_encrypted: false, description: 'Some description' }; agent.post('/api/projects') .auth(apiCredentials.uid, apiCredentials.token) .set('Content-Type', 'application/json') .send(project2) .expect(200, {SR_status: statusOK}) .end(function(projectPostErr, projectPostRes) { if (projectPostErr) { done(projectPostErr); return; } // Get the list of projects agent.get('/api/projects') .auth(apiCredentials.uid, apiCredentials.token) .expect(function(projectGetRes) { (projectGetRes.type).should.equal(typeJSON); (projectGetRes.status).should.equal(200); (projectGetRes.body.SR_status).should.equal(statusOK) }) .end(function(projectsGetErr, projectsGetRes) { if (projectsGetErr) { done(projectsGetErr); return; } var projects = projectsGetRes.body.projects; // Check project is in list (projects).should.containEql([project2.project_name, false, '']); done(); }); }); }); it('should not able to create project with duplicate name', function(done) { // Create project agent.post('/api/projects') .auth(apiCredentials.uid, apiCredentials.token) .set('Content-Type', 'application/json') .send(project2) .expect(400) .end(function(projectPostErr, projectPostRes) { done(projectPostErr); }) }); it('should be able to set project parameters using form', function(done) { // Add sharing user projectShare = { email: credentials.user2.email, access: 'write', action: 'add' } agent.put('/api/projects/' + project1.project_name + '/share') .auth(apiCredentials.uid, apiCredentials.token) .set('Content-Type', 'application/x-www-form-urlencoded') .send('email=' + projectShare.email) .send('access=' + projectShare.access) .send('action=' + projectShare.action) .expect(200, {SR_status: statusOK}) .end(function(projectPutErr, projectPutRes) { if (projectPutErr) { done(projectPutErr); return; } // Set description agent.put('/api/projects/' + project1.project_name + '/description') .auth(apiCredentials.uid, apiCredentials.token) .set('Content-Type', 'application/x-www-form-urlencoded') .send('description=' + project1.description) .expect(200, {SR_status: statusOK}) .end(function(projectPutErr, projectPutRes) { if (projectPutErr) { done(projectPutErr); return; } done(); }); }); }); it('should be able to set project parameters using json', function(done) { // Add sharing user agent.put('/api/projects/' + project2.project_name + '/share') .auth(apiCredentials.uid, apiCredentials.token) .set('Content-Type', 'application/json') .send(projectShare) .expect(200, {SR_status: statusOK}) .end(function(projectPutErr, projectPutRes) { if (projectPutErr) { done(projectPutErr); return; } // Set description agent.put('/api/projects/' + project2.project_name + '/description') .auth(apiCredentials.uid, apiCredentials.token) .set('Content-Type', 'application/json') .send({description: project2.description}) .expect(200, {SR_status: statusOK}) .end(function(projectPutErr, projectPutRes) { if (projectPutErr) { done(projectPutErr); return; } done(); }); }); }); it('should be able to get project parameters', function(done) { agent.get('/api/projects/' + project1.project_name) .auth(apiCredentials.uid, apiCredentials.token) .expect(function(projectGetRes) { (projectGetRes.type).should.equal(typeJSON); (projectGetRes.status).should.equal(200); (projectGetRes.body.SR_status).should.equal(statusOK) }) .end(function(projectGetErr, projectGetRes) { if (projectGetErr) { done(projectGetErr); return; } var params = projectGetRes.body; // Check project params (params.authUsers[0]).should.eql({email: projectShare.email, access: projectShare.access}); (params.timestamp).should.equal(project1.timestamp); (params.description).should.equal(project1.description); done(); }); }); it('should be able to delete project', function(done) { debugger; agent.del('/api/projects/' + project1.project_name) .auth(apiCredentials.uid, apiCredentials.token) .expect(function(projectDelRes) { (projectDelRes.status).should.equal(200); (projectDelRes.body.SR_status).should.equal(statusOK) }) .end(function(projectDelErr, projectDelRes) { if (projectDelErr) { done(projectDelErr); return; } agent.del('/api/projects/' + project2.project_name) .auth(apiCredentials.uid, apiCredentials.token) .expect(function(projectDelRes) { (projectDelRes.status).should.equal(200); (projectDelRes.body.SR_status).should.equal(statusOK) }) .end(function(projectDelErr, projectDelRes) { if (projectDelErr) { done(projectDelErr); return; } done(); }); }); }); after(function(done) { removeUsers(agent, credentials, done); }); });