Show project name at launch instance dialog

It is easy enough to create instances in the wrong project.
This patch displays project name at launch instance dialog.

Closes-Bug: #1895588

Change-Id: Ied681bc3d1b4213bd6bacb3042b377ec2ac10855
This commit is contained in:
Tatiana Ovchinnikova 2020-09-14 15:57:51 -05:00
parent f0bd09e69d
commit b65700a865
4 changed files with 31 additions and 3 deletions

View File

@ -33,13 +33,15 @@
'$scope', '$scope',
'horizon.framework.widgets.charts.donutChartSettings', 'horizon.framework.widgets.charts.donutChartSettings',
'horizon.framework.widgets.charts.quotaChartDefaults', 'horizon.framework.widgets.charts.quotaChartDefaults',
'horizon.app.core.openstack-service-api.nova' 'horizon.app.core.openstack-service-api.nova',
'horizon.app.core.openstack-service-api.userSession'
]; ];
function LaunchInstanceDetailsController($scope, function LaunchInstanceDetailsController($scope,
donutChartSettings, donutChartSettings,
quotaChartDefaults, quotaChartDefaults,
novaAPI novaAPI,
userSession
) { ) {
var ctrl = this; var ctrl = this;
@ -106,6 +108,11 @@
//////////////////// ////////////////////
userSession.get().then(setProject);
function setProject(session) {
ctrl.projectName = session.project_name;
}
function isDescriptionSupported(data) { function isDescriptionSupported(data) {
ctrl.isDescriptionSupported = data.data; ctrl.isDescriptionSupported = data.data;
} }

View File

@ -24,6 +24,7 @@
describe('LaunchInstanceDetailsController', function() { describe('LaunchInstanceDetailsController', function() {
var $q, scope, ctrl, deferred; var $q, scope, ctrl, deferred;
var sessionObj = {project_name: 'alt_demo'};
var novaAPI = { var novaAPI = {
isFeatureSupported: function() { isFeatureSupported: function() {
var deferred = $q.defer(); var deferred = $q.defer();
@ -43,6 +44,10 @@
$q = _$q_; $q = _$q_;
deferred = $q.defer(); deferred = $q.defer();
scope.initPromise = deferred.promise; scope.initPromise = deferred.promise;
var session = $injector.get('horizon.app.core.openstack-service-api.userSession');
var sessionDeferred = $q.defer();
sessionDeferred.resolve(sessionObj);
spyOn(session, 'get').and.returnValue(sessionDeferred.promise);
scope.model = { scope.model = {
newInstanceSpec: { source: [], source_type: '' }, newInstanceSpec: { source: [], source_type: '' },
@ -62,6 +67,11 @@
scope.$apply(); scope.$apply();
})); }));
it('sets ctrl.projectName', inject(function($timeout) {
$timeout.flush();
expect(ctrl.projectName).toBe(sessionObj.project_name);
}));
it('should have isDescriptionSupported defined', function() { it('should have isDescriptionSupported defined', function() {
spyOn(novaAPI, 'isFeatureSupported').and.callFake(function () { spyOn(novaAPI, 'isFeatureSupported').and.callFake(function () {
var deferred = $q.defer(); var deferred = $q.defer();

View File

@ -4,6 +4,12 @@
<div class="row"> <div class="row">
<div class="col-xs-12 col-sm-8"> <div class="col-xs-12 col-sm-8">
<div class="form-group">
<label class="control-label" translate for="project_name">Project Name</label>
<input id="project_name" name="project_name" type="text" class="form-control themable-disabled"
disabled="disabled" value="{$ ctrl.projectName $}">
</div>
<div class="form-group" <div class="form-group"
ng-class="{ 'has-error': launchInstanceDetailsForm.name.$invalid && launchInstanceDetailsForm.name.$dirty }"> ng-class="{ 'has-error': launchInstanceDetailsForm.name.$invalid && launchInstanceDetailsForm.name.$dirty }">
<label for="name" class="control-label"> <label for="name" class="control-label">

View File

@ -20,5 +20,10 @@
.themable-checkbox { .themable-checkbox {
padding-top: $padding-base-vertical; padding-top: $padding-base-vertical;
} }
}
.form-control {
&.themable-disabled {
background-color: $input-bg;
}
} }