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

<head>
  <meta charset="UTF-8" />
  <title>Example - example-componentRouter-production</title>
  <script data-require="jquery@*" data-semver="3.0.0" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.js"></script>
  <link data-require="bootstrap@*" data-semver="4.0.0-alpha.2" rel="stylesheet" href="https://cdn.rawgit.com/twbs/bootstrap/v4-dev/dist/css/bootstrap.css" />
  <script data-require="bootstrap@*" data-semver="4.0.0-alpha.2" src="https://cdn.rawgit.com/twbs/bootstrap/v4-dev/dist/js/bootstrap.js"></script>
  <link data-require="bootstrap-css@3.3.6" data-semver="3.3.6" rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css" />
  <link data-require="jasmine@2.4.1" data-semver="2.4.1" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.4.1/jasmine.css" />
  <script data-require="jasmine@2.4.1" data-semver="2.4.1" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.4.1/jasmine.js"></script>
  <script data-require="jasmine@2.4.1" data-semver="2.4.1" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.4.1/jasmine-html.js"></script>
  <script data-require="jasmine@2.4.1" data-semver="2.4.1" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.4.1/boot.js"></script>
  <script data-require="angularjs@1.5.8" data-semver="1.5.8" src="https://opensource.keycdn.com/angularjs/1.5.8/angular.min.js"></script>
  <script data-require="angular-mocks@1.5.5" data-semver="1.5.5" src="https://code.angularjs.org/1.5.5/angular-mocks.js"></script>
  <script data-require="angular.js@1.5.8" data-semver="1.5.8" src="https://code.angularjs.org/1.5.8/angular.js"></script>
  <script data-require="angular-animate@1.5.*" data-semver="1.5.8" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular-animate.js"></script>
  <script data-require="angular-touch@1.5.*" data-semver="1.5.8" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular-touch.js"></script>
  <script data-require="ui-bootstrap@*" data-semver="2.1.3" src="https://cdn.rawgit.com/angular-ui/bootstrap/gh-pages/ui-bootstrap-tpls-2.1.3.js"></script>
  <link href="styles.css" rel="stylesheet" type="text/css" />
  <script src="script.js"></script>
  <script src="DialogController.js"></script>
  <script src="ModalDialogService.js"></script>
  <script src="DialogController.spec.js"></script>
  <script src="ModalDialogService.spec.js"></script>
  <script type="text/javascript">
    angular.element(document.getElementsByTagName('head')).append(angular.element('<base href="' + window.location.pathname + '" />'));
  </script>
</head>

<body>
  <div ng-controller="mainController as vm">
    <div class="container" style="margin:50px;">
      <div class="row">
        <div class="col-sm-6">
          <button type="submit" class="btn btn-primary" ng-click="vm.openCancelDialog()">Open Cancel Dialog</button>
          <button type="submit" class="btn btn-primary" ng-click="vm.openErrorDialog()">Open Error Dialog</button>
          
        </div>
      </div>
    </div>
  </div>
</body>

</html>
// create angular app
var validationApp = angular.module('validationApp', ['ui.bootstrap']);

// create angular controller
validationApp.controller('mainController', function(ModalService) {

  var vm = this;


  vm.openCancelDialog = function() {
    
    ModalService.openModal('Analysis Cancel', 'I am Cancel Type', 'Cancel');

  }


  vm.openErrorDialog = function() {
    
    ModalService.openModal('Analysis Error', 'I am Error Type', 'Error');
  }

});
fdescribe('ErrorDialogCtrl', function () {

    var $controller;
    var DialogController;

    // inject the module of your controller
    beforeEach(module('validationApp', function ($controllerProvider) {
        DialogController = jasmine.createSpy('controller');

        DialogController.$inject = ["message", "title", "callback"];

        $controllerProvider.register('DialogController', DialogController);
    }));

    beforeEach(inject(function (_$controller_) {
        $controller = _$controller_;
    }));

    it('tests that resolve returns correct values', function () {
        var message = {};
        var title = {};
        var callback = {};

        $controller('DialogController', {
            message: message,
            title: title,
            callback: callback
        });

        expect(DialogController).toHaveBeenCalledWith(message, title, callback);
    });
});
<div>
    <div class="modal-header">
        <h3 class="modal-title">{{vm.title}}</h3>
    </div>
    <div class="modal-body">
        <p ng-bind-html="vm.message"></p>
    </div>
    <div class="modal-footer">
        <button class="btn btn-primary" ng-click="vm.onContinue()" id="continue">Continue</button>
        <button class="btn btn-primary" ng-click="vm.onDiscard()" id="discard">Discard</button>
    </div>
</div>
<div>
    <div class="modal-header">
        <h3 class="modal-title">{{vm.title}}</h3>
    </div>
    <div class="modal-body">
        <p ng-bind-html="vm.message"></p>
    </div>
    <div class="modal-footer">
        <button class="btn btn-primary" ng-click="vm.onOk()">ok</button>
    </div>
</div>
//controller fot dialog
validationApp.controller('DialogController',
  function($uibModalInstance, message, title, callback) {
    
    var vm = this;
    vm.message = message;
    vm.onOk = onOk;
    vm.onContinue = onContinue;
    vm.onDiscard = onDiscard;
    vm.callback = callback;
    vm.title = title;

    function onOk() {
      $uibModalInstance.close();
    }

    function onContinue() {
      $uibModalInstance.close();
    }

    function onDiscard() {
      vm.callback();
      $uibModalInstance.close();
    }
  });
// common modal service
validationApp.service('ModalService',
  function($uibModal) {

    return {
      openModal: openModal
    };

    function openErrorModal(title, message, callback) {
      $uibModal.open({
        templateUrl: 'ErrorDialog.html',
        controller: 'DialogController',
        controllerAs: 'vm',
        backdrop: 'static',
        size: 'md',
        resolve: {
          message: function() {
            return message;
          },
          title: function() {
            return title;
          },
          callback: function() {
            return callback;
          }
        }
      });
    }

    function openCancelModal(title, message, callback) {
      $uibModal.open({
        templateUrl: 'CancelDialog.html',
        controller: 'DialogController',
        controllerAs: 'vm',
        backdrop: 'static',
        size: 'md',
        resolve: {
          message: function() {
            return message;
          },
          title: function() {
            return title;
          },
          callback: function() {
            return callback;
          }
        }
      });
    }

    function openModal(title, message, modalType, callback) {
      if (modalType === "Error") {
        openErrorModal(title, message, callback);
      } else {
        openCancelModal(title, message, callback);
      }
    }
  }
);
describe('ModalService', function() {

  var $injector;
  var $uibModal;

  // inject the module of your controller
  beforeEach(module('validationApp', function($provide) {
    $uibModal = {
      open: jasmine.createSpy('open')
    };

    $provide.value('$uibModal', $uibModal);
  }));

  beforeEach(inject(function(_$injector_) {
    $injector = _$injector_;
  }));

  it('tests that openErrorModal is called', function() {
    var modalService = $injector.get('ModalService');
    modalService.openModal(null, null, "Error");

    expect($uibModal.open).toHaveBeenCalledWith(jasmine.objectContaining({
      controller: "DialogController",
      templateUrl: 'ErrorDialog.html',
      resolve: {
        message: function() {
          return message;
        },
        title: function() {
          return title;
        },
        callback: function() {
          return callback;
        }
      }
    }));
  });


  it('tests that openCancelModal is called', function() {
    var modalService = $injector.get('ModalService');
    modalService.openModal(null, null, "Cancel");

    expect($uibModal.open).toHaveBeenCalledWith(jasmine.objectContaining({
      controller: "DialogController",
      templateUrl: 'CancelDialog.html'
    }));
  });

});