<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <link data-require="jasmine@*" data-semver="2.4.1" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.4.1/jasmine.css" />
    <script data-require="jasmine@*" data-semver="2.4.1" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.4.1/jasmine.js"></script>
    <script data-require="jasmine@*" data-semver="2.4.1" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.4.1/jasmine-html.js"></script>
    <script data-require="jasmine@*" data-semver="2.4.1" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.4.1/boot.js"></script>
    <script data-require="angular.js@1.6.6" data-semver="1.6.6" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.6/angular.min.js"></script>
    <script data-require="angular-mocks@*" data-semver="1.5.8" src="https://code.angularjs.org/1.5.8/angular-mocks.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body>
    <h1>Hello Plunker!</h1>
  </body>

</html>
var app = angular.module("plunker", ["ngMockE2E"]);

app.run(['$httpBackend', function ($httpBackend){


		$httpBackend.whenPOST(/\/data\/employee\/(\d+)/, undefined, undefined, ['id']).respond(function(method, url, data, headers, params){

		  console.log('Received these data:', method, url, data, headers, params);

			return [200, {eid:params.id}, {}];
		});
}])


app.service("employeeService", ["$http", "$q", function($http, $q){

	this.get = function(id){

		var deferred = $q.defer();

		$http.post("/data/employee/".concat(id)).then(function(response){

			deferred.resolve(response.data)
		},
		function(err){

			deferred.reject("An error occured!")
		})

		return deferred.promise;
	}
}])

describe("Unit testing", function(){
    
    beforeEach(module('plunker'));    
    
    describe('employee service', function() {
      
      var employeeService, $httpBackend;
      
      beforeEach(inject(function(_employeeService_, _$httpBackend_){
        
        employeeService = _employeeService_;
        $httpBackend = _$httpBackend_;
      }));
  
      it('should be defined', function(){
  
        expect(employeeService).toBeDefined();
      });
  
      it('should return employee record', function(/*done*/){
    
        var employeeId = 1;
        var employee = {e_id: employeeId}
  
        //Works
        //$httpBackend.expectPOST("/data/employee/".concat(employeeId)).respond(employee);
        
        //Works
        //$httpBackend.expectPOST(/\/data\/employee\/(\d+)/).respond(employee);
        
        //Works
        //$httpBackend.expect("POST", /\/data\/employee\/(\d+)/).respond(employee);
        
        //Works
        $httpBackend.expect("POST", /\/data\/employee\/(\d+)/, undefined, undefined, ['id']).respond(function(method, url, data, headers, params){
    
    		   console.log('Received these data:', method, url, data, headers, params);
    
    		   return [200, {e_id:parseInt(params.id)}, {}];
    		});
        
        employeeService.get(employeeId).then(function(data){
  
          expect(data).toEqual(employee);
        })
  
        $httpBackend.flush()
      });
    });
});
/* Styles go here */