mirror of
				https://github.com/mmumshad/ansible-playable.git
				synced 2025-03-09 23:38:54 +00:00 
			
		
		
		
	Update server side test cases and disable client side tests for now. Integrate later.
This commit is contained in:
		
							parent
							
								
									ab295a073a
								
							
						
					
					
						commit
						9c880c0bba
					
				
					 13 changed files with 588 additions and 318 deletions
				
			
		|  | @ -86,7 +86,11 @@ export function command(req, res) { | |||
|   ) | ||||
| } | ||||
| 
 | ||||
| // Creates a new Ansible in the DB
 | ||||
| /** | ||||
|  * List Ansible Modules | ||||
|  * @param req | ||||
|  * @param res | ||||
|  */ | ||||
| export function modules(req, res) { | ||||
| 
 | ||||
|   var ansibleEngine = req.body.ansibleEngine; | ||||
|  | @ -108,6 +112,7 @@ export function modules(req, res) { | |||
| 
 | ||||
| // Gets a single Deploy from the DB
 | ||||
| export function getLogs(req, res) { | ||||
|   console.log("Param ID " + req.params.id); | ||||
|   return Ansible.findById(req.params.id).exec() | ||||
|     .then(handleEntityNotFound(res)) | ||||
|     .then(function(entity){ | ||||
|  | @ -169,6 +174,7 @@ export function execute(req, res) { | |||
| 
 | ||||
|   var resultSent = false; | ||||
| 
 | ||||
|   // Execute Ansible Playbook and return immediately with a new Job (Ansible) object
 | ||||
|   ansibleTool.executeAnsible(logfilename, project_folder, playbook_name, inventory_file_name, tags_joined, limit_to_hosts_joined, verbose,check_mode, | ||||
|     function(data){ | ||||
|       //res.write(data)
 | ||||
|  | @ -244,6 +250,7 @@ export function playbook_create(req, res) { | |||
|     function(data){ | ||||
|       //res.write(data);
 | ||||
|       //res.end()
 | ||||
|       console.log("data = " + data); | ||||
|       if(!resultSent){ | ||||
|         resultSent = true; | ||||
|         res.send(data) | ||||
|  | @ -251,6 +258,7 @@ export function playbook_create(req, res) { | |||
|     }, | ||||
|     function(data){ | ||||
|       //res.write(data)
 | ||||
|       console.log("data = " + data); | ||||
|       if(!resultSent){ | ||||
|         resultSent = true; | ||||
|         res.status(500).send(data) | ||||
|  |  | |||
|  | @ -4,187 +4,318 @@ | |||
| 
 | ||||
| var app = require('../..'); | ||||
| import request from 'supertest'; | ||||
| import User from '../user/user.model'; | ||||
| 
 | ||||
| var newAnsible; | ||||
| 
 | ||||
| describe('Ansible API:', function() { | ||||
|   describe('GET /api/ansible', function() { | ||||
|     var ansibles; | ||||
|   var token; | ||||
|   var user; | ||||
|   var ansible_job; | ||||
| 
 | ||||
|     beforeEach(function(done) { | ||||
|   // Clear users before testing
 | ||||
|   before(function() { | ||||
|     return User.remove().then(function() { | ||||
|       user = new User({ | ||||
|         name: 'Fake User', | ||||
|         email: 'test@example.com', | ||||
|         password: 'password' | ||||
|       }); | ||||
| 
 | ||||
|       return user.save(); | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   // Clear users after testing
 | ||||
|   after(function() { | ||||
|     return User.remove(); | ||||
|   }); | ||||
| 
 | ||||
|   describe('GET /api/users/me', function() { | ||||
| 
 | ||||
|     before(function(done) { | ||||
|       request(app) | ||||
|         .get('/api/ansible') | ||||
|         .post('/auth/local') | ||||
|         .send({ | ||||
|           email: 'test@example.com', | ||||
|           password: 'password' | ||||
|         }) | ||||
|         .expect(200) | ||||
|         .expect('Content-Type', /json/) | ||||
|         .end((err, res) => { | ||||
|           if(err) { | ||||
|             return done(err); | ||||
|           } | ||||
|           ansibles = res.body; | ||||
|           token = res.body.token; | ||||
|           done(); | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
|     it('should respond with JSON array', function() { | ||||
|       expect(ansibles).to.be.instanceOf(Array); | ||||
|     it('should respond with a user profile when authenticated', function(done) { | ||||
|       request(app) | ||||
|         .get('/api/users/me') | ||||
|         .set('authorization', `Bearer ${token}`) | ||||
|         .expect(200) | ||||
|         .expect('Content-Type', /json/) | ||||
|         .end((err, res) => { | ||||
|           expect(res.body._id.toString()).to.equal(user._id.toString()); | ||||
|           done(); | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
|     it('should respond with a 401 when not authenticated', function(done) { | ||||
|       request(app) | ||||
|         .get('/api/users/me') | ||||
|         .expect(401) | ||||
|         .end(done); | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('POST /api/ansible', function() { | ||||
|   describe('POST /modules/list', function() { | ||||
|     var modules; | ||||
| 
 | ||||
|     beforeEach(function(done) { | ||||
|       request(app) | ||||
|         .post('/api/ansible') | ||||
|         .post('/api/ansible/modules/list') | ||||
|         .timeout(10000) | ||||
|         .set('authorization', `Bearer ${token}`) | ||||
|         .send({ | ||||
|           name: 'New Ansible', | ||||
|           info: 'This is the brand new ansible!!!' | ||||
|           ansibleEngine: { | ||||
|             'host' : '' | ||||
|           } | ||||
|         }) | ||||
|         .expect(200) | ||||
|         //.expect('Content-Type', /json/)
 | ||||
|         .end((err, res) => { | ||||
|           if(err) { | ||||
|             return done(err); | ||||
|           } | ||||
|           modules = res.text; | ||||
|           done(); | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
| 
 | ||||
|     it('should respond with list of Ansible Modules (containing ping module)', function() { | ||||
|       expect(modules).to.contain('ping'); | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
| 
 | ||||
|   describe('POST /command to execute a sample command - echo "Hello World"', function() { | ||||
|     var modules; | ||||
| 
 | ||||
|     beforeEach(function(done) { | ||||
|       request(app) | ||||
|         .post('/api/ansible/command') | ||||
|         .set('authorization', `Bearer ${token}`) | ||||
|         .send({ | ||||
|           command: 'echo "Hello World"' | ||||
|         }) | ||||
|         .expect(200) | ||||
|         //.expect('Content-Type', /json/)
 | ||||
|         .end((err, res) => { | ||||
|           if(err) { | ||||
|             return done(err); | ||||
|           } | ||||
|           modules = res.text; | ||||
|           done(); | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
| 
 | ||||
|     it('should respond with the result of command', function() { | ||||
|       expect(modules).to.contain('Hello World'); | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
| 
 | ||||
|   describe('POST /inventory/create', function() { | ||||
|     var result; | ||||
| 
 | ||||
|     beforeEach(function(done) { | ||||
|       request(app) | ||||
|         .post('/api/ansible/inventory/create') | ||||
|         .set('authorization', `Bearer ${token}`) | ||||
|         .send({ | ||||
|           ansibleEngine: { | ||||
|             host : '', | ||||
|             projectFolder: '/tmp' | ||||
|           }, | ||||
|           inventoryName: 'inventory.txt', | ||||
|           inventoryFileContents: 'localhost ansible_connection=local' | ||||
|         }) | ||||
|         .expect(200) | ||||
|         //.expect('Content-Type', /json/)
 | ||||
|         .end((err, res) => { | ||||
|           if(err) { | ||||
|             return done(err); | ||||
|           } | ||||
|           result = res.text; | ||||
|           done(); | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
| 
 | ||||
|     it('should respond with "file written"', function() { | ||||
|       expect(result).to.contain('file written'); | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
| 
 | ||||
|   describe('POST /playbook/create', function() { | ||||
|     var result; | ||||
| 
 | ||||
|     beforeEach(function(done) { | ||||
|       request(app) | ||||
|         .post('/api/ansible/playbook/create') | ||||
|         .set('authorization', `Bearer ${token}`) | ||||
|         .send({ | ||||
|           ansibleEngine: { | ||||
|             host : '', | ||||
|             projectFolder: '/tmp' | ||||
|           }, | ||||
|           playbookName: 'test_playbook.yml', | ||||
|           playbookFileContents: '-\n' + | ||||
|           ' name: "Test Play1"\n' + | ||||
|           ' hosts: localhost\n' + | ||||
|           ' tasks:\n' + | ||||
|           '  -       name: "Test Task1"\n' + | ||||
|           '          ping:\n' | ||||
|         }) | ||||
|         .expect(200) | ||||
|         //.expect('Content-Type', /json/)
 | ||||
|         .end((err, res) => { | ||||
|           if(err) { | ||||
|             return done(err); | ||||
|           } | ||||
|           result = res.text; | ||||
|           done(); | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
| 
 | ||||
|     it('should respond with "file written"', function() { | ||||
|       expect(result).to.contain('file written'); | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
| 
 | ||||
|   describe('POST /execute', function() { | ||||
| 
 | ||||
|     beforeEach(function(done) { | ||||
|       request(app) | ||||
|         .post('/api/ansible/execute') | ||||
|         .set('authorization', `Bearer ${token}`) | ||||
|         .send({ | ||||
|           ansibleEngine: { | ||||
|             host : '', | ||||
|             projectFolder: '/tmp/' | ||||
|           }, | ||||
|           selectedPlaybook: 'test_playbook.yml', | ||||
|           inventory_file_name: 'inventory.txt', | ||||
|         }) | ||||
|         .expect(201) | ||||
|         .expect('Content-Type', /json/) | ||||
|         //.expect('Content-Type', /json/)
 | ||||
|         .end((err, res) => { | ||||
|           if(err) { | ||||
|             return done(err); | ||||
|           } | ||||
|           newAnsible = res.body; | ||||
|           ansible_job = res.body; | ||||
|           done(); | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
|     it('should respond with the newly created ansible', function() { | ||||
|       expect(newAnsible.name).to.equal('New Ansible'); | ||||
|       expect(newAnsible.info).to.equal('This is the brand new ansible!!!'); | ||||
| 
 | ||||
|     it('should respond with an Ansible Job object', function() { | ||||
|       expect(ansible_job.selectedPlaybook).to.equal('test_playbook.yml'); | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('GET /api/ansible/:id', function() { | ||||
|     var ansible; | ||||
|   describe('GET /:id', function() { | ||||
| 
 | ||||
|     beforeEach(function(done) { | ||||
|       request(app) | ||||
|         .get(`/api/ansible/${newAnsible._id}`) | ||||
|         .get('/api/ansible/' + ansible_job._id) | ||||
|         .set('authorization', `Bearer ${token}`) | ||||
|         .expect(200) | ||||
|         .expect('Content-Type', /json/) | ||||
|         //.expect('Content-Type', /json/)
 | ||||
|         .end((err, res) => { | ||||
|           if(err) { | ||||
|             return done(err); | ||||
|           } | ||||
|           ansible = res.body; | ||||
|           ansible_job = res.body; | ||||
|           console.log("ansible_job " + JSON.stringify(ansible_job)); | ||||
|           done(); | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
|     afterEach(function() { | ||||
|       ansible = {}; | ||||
|     }); | ||||
| 
 | ||||
|     it('should respond with the requested ansible', function() { | ||||
|       expect(ansible.name).to.equal('New Ansible'); | ||||
|       expect(ansible.info).to.equal('This is the brand new ansible!!!'); | ||||
|     it('should respond with an Ansible Job object', function() { | ||||
|       expect(ansible_job.selectedPlaybook).to.equal('test_playbook.yml'); | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('PUT /api/ansible/:id', function() { | ||||
|     var updatedAnsible; | ||||
|   describe('POST /playbook/delete', function() { | ||||
|     var result; | ||||
| 
 | ||||
|     beforeEach(function(done) { | ||||
|       request(app) | ||||
|         .put(`/api/ansible/${newAnsible._id}`) | ||||
|         .post('/api/ansible/playbook/delete') | ||||
|         .set('authorization', `Bearer ${token}`) | ||||
|         .send({ | ||||
|           name: 'Updated Ansible', | ||||
|           info: 'This is the updated ansible!!!' | ||||
|           ansibleEngine: { | ||||
|             host : '', | ||||
|             projectFolder: '/tmp' | ||||
|           }, | ||||
|           playbookName: 'test_playbook.yml', | ||||
|         }) | ||||
|         .expect(200) | ||||
|         .expect('Content-Type', /json/) | ||||
|         .end(function(err, res) { | ||||
|           if(err) { | ||||
|             return done(err); | ||||
|           } | ||||
|           updatedAnsible = res.body; | ||||
|           done(); | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
|     afterEach(function() { | ||||
|       updatedAnsible = {}; | ||||
|     }); | ||||
| 
 | ||||
|     it('should respond with the updated ansible', function() { | ||||
|       expect(updatedAnsible.name).to.equal('Updated Ansible'); | ||||
|       expect(updatedAnsible.info).to.equal('This is the updated ansible!!!'); | ||||
|     }); | ||||
| 
 | ||||
|     it('should respond with the updated ansible on a subsequent GET', function(done) { | ||||
|       request(app) | ||||
|         .get(`/api/ansible/${newAnsible._id}`) | ||||
|         .expect(200) | ||||
|         .expect('Content-Type', /json/) | ||||
|         //.expect('Content-Type', /json/)
 | ||||
|         .end((err, res) => { | ||||
|           if(err) { | ||||
|             return done(err); | ||||
|           } | ||||
|           let ansible = res.body; | ||||
| 
 | ||||
|           expect(ansible.name).to.equal('Updated Ansible'); | ||||
|           expect(ansible.info).to.equal('This is the updated ansible!!!'); | ||||
| 
 | ||||
|           result = res; | ||||
|           done(); | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
| 
 | ||||
|     it('should respond with status code 200', function() { | ||||
|       expect(result.status).to.equal(200); | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('PATCH /api/ansible/:id', function() { | ||||
|     var patchedAnsible; | ||||
| 
 | ||||
|   describe('POST /inventory/delete', function() { | ||||
|     var result; | ||||
| 
 | ||||
|     beforeEach(function(done) { | ||||
|       request(app) | ||||
|         .patch(`/api/ansible/${newAnsible._id}`) | ||||
|         .send([ | ||||
|           { op: 'replace', path: '/name', value: 'Patched Ansible' }, | ||||
|           { op: 'replace', path: '/info', value: 'This is the patched ansible!!!' } | ||||
|         ]) | ||||
|         .post('/api/ansible/inventory/delete') | ||||
|         .set('authorization', `Bearer ${token}`) | ||||
|         .send({ | ||||
|           ansibleEngine: { | ||||
|             host : '', | ||||
|             projectFolder: '/tmp' | ||||
|           }, | ||||
|           inventoryName: 'inventory.txt', | ||||
|         }) | ||||
|         .expect(200) | ||||
|         .expect('Content-Type', /json/) | ||||
|         .end(function(err, res) { | ||||
|         //.expect('Content-Type', /json/)
 | ||||
|         .end((err, res) => { | ||||
|           if(err) { | ||||
|             return done(err); | ||||
|           } | ||||
|           patchedAnsible = res.body; | ||||
|           result = res; | ||||
|           done(); | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
|     afterEach(function() { | ||||
|       patchedAnsible = {}; | ||||
|     }); | ||||
| 
 | ||||
|     it('should respond with the patched ansible', function() { | ||||
|       expect(patchedAnsible.name).to.equal('Patched Ansible'); | ||||
|       expect(patchedAnsible.info).to.equal('This is the patched ansible!!!'); | ||||
|     it('should respond with status code 200', function() { | ||||
|       expect(result.status).to.equal(200); | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('DELETE /api/ansible/:id', function() { | ||||
|     it('should respond with 204 on successful removal', function(done) { | ||||
|       request(app) | ||||
|         .delete(`/api/ansible/${newAnsible._id}`) | ||||
|         .expect(204) | ||||
|         .end(err => { | ||||
|           if(err) { | ||||
|             return done(err); | ||||
|           } | ||||
|           done(); | ||||
|         }); | ||||
|     }); | ||||
|   //TODO: Add more Ansible test cases here
 | ||||
| 
 | ||||
|     it('should respond with 404 when ansible does not exist', function(done) { | ||||
|       request(app) | ||||
|         .delete(`/api/ansible/${newAnsible._id}`) | ||||
|         .expect(404) | ||||
|         .end(err => { | ||||
|           if(err) { | ||||
|             return done(err); | ||||
|           } | ||||
|           done(); | ||||
|         }); | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
|  |  | |||
|  | @ -5,9 +5,22 @@ var controller = require('./ansible.controller'); | |||
| 
 | ||||
| var router = express.Router(); | ||||
| 
 | ||||
| router.get('/', controller.index); | ||||
| // List, create and get Ansible Jobs
 | ||||
| router.get('/runs', controller.index); | ||||
| router.get('/:id', controller.show); | ||||
| router.post('/', controller.create); | ||||
| router.put('/:id', controller.upsert); | ||||
| router.patch('/:id', controller.patch); | ||||
| router.delete('/:id', controller.destroy); | ||||
| 
 | ||||
| router.post('/modules', controller.modules); | ||||
| // Ansible Command line APIs
 | ||||
| // - Create and modify inventory files
 | ||||
| // - Create and modify playbooks
 | ||||
| // - Create and modify roles
 | ||||
| // - List tags
 | ||||
| // - Create and modify files
 | ||||
| // - Create and modify Var files
 | ||||
| router.post('/modules/list', controller.modules); | ||||
| router.post('/command', controller.command); | ||||
| router.post('/execute', controller.execute); | ||||
| 
 | ||||
|  | @ -50,10 +63,5 @@ router.post('/vars/roles/get', controller.get_roles_vars); | |||
| 
 | ||||
| router.get('/logs/:id', controller.getLogs); | ||||
| 
 | ||||
| router.get('/:id', controller.show); | ||||
| router.post('/', controller.create); | ||||
| router.put('/:id', controller.upsert); | ||||
| router.patch('/:id', controller.patch); | ||||
| router.delete('/:id', controller.destroy); | ||||
| 
 | ||||
| module.exports = router; | ||||
|  |  | |||
|  | @ -10,7 +10,15 @@ var ansibleCtrlStub = { | |||
|   create: 'ansibleCtrl.create', | ||||
|   upsert: 'ansibleCtrl.upsert', | ||||
|   patch: 'ansibleCtrl.patch', | ||||
|   destroy: 'ansibleCtrl.destroy' | ||||
|   destroy: 'ansibleCtrl.destroy', | ||||
|   modules: 'ansibleCtrl.modules', | ||||
|   command: 'ansibleCtrl.command', | ||||
|   execute: 'ansibleCtrl.execute', | ||||
|   project_files: 'ansibleCtrl.project_files', | ||||
|   playbook_get: 'ansibleCtrl.playbook_get', | ||||
|   playbook_create: 'ansibleCtrl.playbook_create', | ||||
|   playbook_delete: 'ansibleCtrl.playbook_delete', | ||||
|   playbook_list: 'ansibleCtrl.playbook_list', | ||||
| }; | ||||
| 
 | ||||
| var routerStub = { | ||||
|  | @ -18,7 +26,15 @@ var routerStub = { | |||
|   put: sinon.spy(), | ||||
|   patch: sinon.spy(), | ||||
|   post: sinon.spy(), | ||||
|   delete: sinon.spy() | ||||
|   delete: sinon.spy(), | ||||
|   modules: sinon.spy(), | ||||
|   command: sinon.spy(), | ||||
|   execute: sinon.spy(), | ||||
|   project_files: sinon.spy(), | ||||
|   playbook_get: sinon.spy(), | ||||
|   playbook_create: sinon.spy(), | ||||
|   playbook_delete: sinon.spy(), | ||||
|   playbook_list: sinon.spy() | ||||
| }; | ||||
| 
 | ||||
| // require the index with our stubbed out modules
 | ||||
|  | @ -36,51 +52,70 @@ describe('Ansible API Router:', function() { | |||
|     expect(ansibleIndex).to.equal(routerStub); | ||||
|   }); | ||||
| 
 | ||||
|   describe('GET /api/ansible', function() { | ||||
|     it('should route to ansible.controller.index', function() { | ||||
|       expect(routerStub.get | ||||
|         .withArgs('/', 'ansibleCtrl.index') | ||||
|         ).to.have.been.calledOnce; | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('GET /api/ansible/:id', function() { | ||||
|     it('should route to ansible.controller.show', function() { | ||||
|       expect(routerStub.get | ||||
|         .withArgs('/:id', 'ansibleCtrl.show') | ||||
|         ).to.have.been.calledOnce; | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('POST /api/ansible', function() { | ||||
|     it('should route to ansible.controller.create', function() { | ||||
|   describe('POST /api/ansible/modules/list', function() { | ||||
|     it('should route to ansible.controller.modules', function() { | ||||
|       expect(routerStub.post | ||||
|         .withArgs('/', 'ansibleCtrl.create') | ||||
|         .withArgs('/modules/list', 'ansibleCtrl.modules') | ||||
|         ).to.have.been.calledOnce; | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('PUT /api/ansible/:id', function() { | ||||
|     it('should route to ansible.controller.upsert', function() { | ||||
|       expect(routerStub.put | ||||
|         .withArgs('/:id', 'ansibleCtrl.upsert') | ||||
|         ).to.have.been.calledOnce; | ||||
|   describe('POST /api/ansible/command', function() { | ||||
|     it('should route to ansible.controller.command', function() { | ||||
|       expect(routerStub.post | ||||
|         .withArgs('/command', 'ansibleCtrl.command') | ||||
|       ).to.have.been.calledOnce; | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('PATCH /api/ansible/:id', function() { | ||||
|     it('should route to ansible.controller.patch', function() { | ||||
|       expect(routerStub.patch | ||||
|         .withArgs('/:id', 'ansibleCtrl.patch') | ||||
|         ).to.have.been.calledOnce; | ||||
|   describe('POST /api/ansible/execute', function() { | ||||
|     it('should route to ansible.controller.execute', function() { | ||||
|       expect(routerStub.post | ||||
|         .withArgs('/execute', 'ansibleCtrl.execute') | ||||
|       ).to.have.been.calledOnce; | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('DELETE /api/ansible/:id', function() { | ||||
|     it('should route to ansible.controller.destroy', function() { | ||||
|       expect(routerStub.delete | ||||
|         .withArgs('/:id', 'ansibleCtrl.destroy') | ||||
|         ).to.have.been.calledOnce; | ||||
|   describe('POST /api/ansible/project/files', function() { | ||||
|     it('should route to ansible.controller.project_files', function() { | ||||
|       expect(routerStub.post | ||||
|         .withArgs('/project/files', 'ansibleCtrl.project_files') | ||||
|       ).to.have.been.calledOnce; | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('POST /api/ansible/playbook/get', function() { | ||||
|     it('should route to ansible.controller.playbook_get', function() { | ||||
|       expect(routerStub.post | ||||
|         .withArgs('/playbook/get', 'ansibleCtrl.playbook_get') | ||||
|       ).to.have.been.calledOnce; | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('POST /api/ansible/playbook/create', function() { | ||||
|     it('should route to ansible.controller.playbook_create', function() { | ||||
|       expect(routerStub.post | ||||
|         .withArgs('/playbook/create', 'ansibleCtrl.playbook_create') | ||||
|       ).to.have.been.calledOnce; | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('POST /api/ansible/playbook/delete', function() { | ||||
|     it('should route to ansible.controller.playbook_delete', function() { | ||||
|       expect(routerStub.post | ||||
|         .withArgs('/playbook/delete', 'ansibleCtrl.playbook_delete') | ||||
|       ).to.have.been.calledOnce; | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('POST /api/ansible/playbook/list', function() { | ||||
|     it('should route to ansible.controller.playbook_list', function() { | ||||
|       expect(routerStub.post | ||||
|         .withArgs('/playbook/list', 'ansibleCtrl.playbook_list') | ||||
|       ).to.have.been.calledOnce; | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   //TODO: Add the remaining test cases here
 | ||||
| 
 | ||||
| }); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue