Skip to content
This repository has been archived by the owner on Jan 24, 2023. It is now read-only.

TEAMFOUR-911 - Add Routes form migrated to Async Task Dialog #544

Merged
merged 2 commits into from
Aug 10, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,122 +1,86 @@
(function () {
'use strict';

describe('AddRouteController', function () {
var addRouteController, $httpBackend, modelManager, $uibModalInstance;
describe('Add-route controller test', function () {
var $httpBackend, addRoutesFactory;

var spaceGuid = 'testSpace';
var domainGuid = 'testDomain';
var cnsiGuid = 'testCnsi';
var applicationId = 'testApplicationId';
var path = 'testpath';
var mockAddRouteResponse = {
testCnsi: {
metadata: {
guid: 'testGuid'
}
}
};
var data = {
path: null,
port: null,
host: path,
space_guid: spaceGuid,
domain_guid: domainGuid
};

beforeEach(module('templates'));
beforeEach(module('green-box-console'));
beforeEach(module('cloud-foundry.view.applications.application.summary'));
beforeEach(module({
'helion.framework.widgets.asyncTaskDialog': function (content, context, actionTask) {
return {
content: content,
context: context,
actionTask: actionTask
};
}
}));

beforeEach(inject(function ($injector) {

var context = {
data: {
path: null,
port: null,
host: null,
space_guid: spaceGuid,
domain_guid: domainGuid
}
};
var content = {};

addRoutesFactory = $injector.get('cloud-foundry.view.applications.application.summary.addRoutes');
$httpBackend = $injector.get('$httpBackend');
var $stateParams = $injector.get('$stateParams');
modelManager = $injector.get('app.model.modelManager');
$uibModalInstance = {
close: angular.noop,
dismiss: angular.noop
};
var $controller = $injector.get('$controller');
addRouteController = $controller('addRouteController', {
$scope: {
$watch: angular.noop
},
context: context,
content: content,
$stateParams: $stateParams,
modelManager: modelManager,
$uibModalInstance: $uibModalInstance
});
var modelManager = $injector.get('app.model.modelManager');

addRouteController.cnsiGuid = cnsiGuid;
addRouteController.applicationId = applicationId;
spyOn($uibModalInstance, 'close').and.callThrough();
spyOn(addRouteController, 'onAddRouteError').and.callThrough();
// Initialise model data
var model = modelManager.retrieve('cloud-foundry.model.application');
var availableDomains = [{name: 'test.com', guid: domainGuid}];
_.set(model, 'application.summary.available_domains', availableDomains);
_.set(model, 'application.summary.space_guid', spaceGuid);
}));

it('should be defined', function () {
expect(addRouteController).toBeDefined();
expect(addRoutesFactory).toBeDefined();
});

it('should have `host` property initially set to null', function () {
expect(addRouteController.context.data.host).toBe(null);
it('should pass correct content spec to asyncTaskDialog', function () {
var modalObj = addRoutesFactory.add(cnsiGuid, applicationId);
expect(modalObj.content.title).toBeDefined();
expect(modalObj.content.templateUrl).toBeDefined();
expect(modalObj.content.buttonTitles.submit).toBeDefined();
});

it('should have `domain_guid`, `space_guid` set to appropriate values', function () {
expect(addRouteController.context.data.space_guid).toEqual(spaceGuid);
expect(addRouteController.context.data.domain_guid).toEqual(domainGuid);
var modalObj = addRoutesFactory.add(cnsiGuid, applicationId);
expect(modalObj.context.data.space_guid).toEqual(spaceGuid);
expect(modalObj.context.data.domain_guid).toEqual(domainGuid);
});

it('should successfully add a route', function () {

$httpBackend.when('POST', '/pp/v1/proxy/v2/routes').respond(200, mockAddRouteResponse);
$httpBackend.when('PUT', '/pp/v1/proxy/v2/routes/testGuid/apps/' + applicationId).respond(200, {});
$httpBackend.when('GET', '/pp/v1/proxy/v2/apps/' + applicationId + '/summary').respond(200, {});

addRouteController.addRoute();
$httpBackend.flush();

expect($uibModalInstance.close).toHaveBeenCalled();
expect(addRouteController.onAddRouteError).not.toHaveBeenCalled();
});

it('should invoke onAddRouteError when failing to associate a route', function () {
$httpBackend.when('POST', '/pp/v1/proxy/v2/routes').respond(200, mockAddRouteResponse);
$httpBackend.when('PUT', '/pp/v1/proxy/v2/routes/testGuid/apps/' + applicationId).respond(500, {});

addRouteController.addRoute();
$httpBackend.flush();

expect(addRouteController.onAddRouteError).toHaveBeenCalled();
expect($uibModalInstance.close).not.toHaveBeenCalled();
expect(addRouteController.addRouteError).toBe(true);
});

it('should invoke onAddRouteError when failing to add a route', function () {
$httpBackend.when('POST', '/pp/v1/proxy/v2/routes').respond(500, mockAddRouteResponse);
var expectedPostReq = {
domain_guid: domainGuid,
host: path,
space_guid: spaceGuid
};

addRouteController.addRoute();
$httpBackend.flush();
var modalObj = addRoutesFactory.add(cnsiGuid, applicationId);

expect(addRouteController.onAddRouteError).toHaveBeenCalled();
expect($uibModalInstance.close).not.toHaveBeenCalled();
expect(addRouteController.addRouteError).toBe(true);
});
$httpBackend.expectPOST('/pp/v1/proxy/v2/routes', expectedPostReq).respond(200, mockAddRouteResponse);
$httpBackend.expectPUT('/pp/v1/proxy/v2/routes/testGuid/apps/testApplicationId').respond(200, {});
$httpBackend.expectGET('/pp/v1/proxy/v2/apps/' + applicationId + '/summary').respond(200, {});

it('should invoke onAddRouteError when failing to update AppSummary', function () {
$httpBackend.when('POST', '/pp/v1/proxy/v2/routes').respond(200, mockAddRouteResponse);
$httpBackend.when('PUT', '/pp/v1/proxy/v2/routes/testGuid/apps/' + applicationId).respond(200, {});
$httpBackend.when('GET', '/pp/v1/proxy/v2/apps/' + applicationId + '/summary').respond(500, {});

addRouteController.addRoute();
modalObj.actionTask(data);
$httpBackend.flush();

expect(addRouteController.onAddRouteError).toHaveBeenCalled();
expect($uibModalInstance.close).not.toHaveBeenCalled();
expect(addRouteController.addRouteError).toBe(true);
});

});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
<div class="add-route">
<h4 translate>Add a Route</h4>
<form name="addRouteForm">
<div class="form-group " ng-class="{'has-error':addRouteCtrl.routeExists}" focusable-input>
<div class="form-group " ng-class="{'has-error':asyncTaskDialogCtrl.context.routeExists()}" focusable-input>
<label class="control-label" translate>Host</label>
<span class="control-message" translate>A route with this name already exists. Choose a new one</span>
<input type="text" name="host" class="form-control" ng-model="addRouteCtrl.context.data.host"
<input type="text" name="host" class="form-control" ng-model="asyncTaskDialogCtrl.context.data.host"
required
placeholder="{{'a unique identifier for this app' | translate}}"
/>
Expand All @@ -13,27 +12,11 @@ <h4 translate>Add a Route</h4>
<label class="control-label" translate>Domain</label>
<select-input
class="form-control"
ng-model="addRouteCtrl.context.data.domain_guid"
ng-model="asyncTaskDialogCtrl.context.data.domain_guid"
arrow-icon="helion-icon helion-icon-Up_tab helion-icon-r180"
input-options="addRouteCtrl.context.options.domains"
input-options="asyncTaskDialogCtrl.context.options.domains"
required
/>
</div>
<div ng-show="addRouteCtrl.addRouteError" class="alert alert-danger">
<p translate>
There was a problem adding or associating this route with your app. Please try again. If this error persists,
please contact the administrator.
</p>
</div>
<div class="modal-footer">
<button class="btn btn-default"
ng-click="addRouteCtrl.cancel()" translate>
Cancel
</button>
<button class="btn btn-primary"
ng-click="addRouteCtrl.addRoute()" translate>
Create Route
</button>
</div>
</form>
</div>

This file was deleted.

Loading