Repository: ambari
Updated Branches:
  refs/heads/trunk 4fbab311d -> ac4d262f4


AMBARI-12372 Utils config small refactor. (ababiichuk)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/ac4d262f
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/ac4d262f
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/ac4d262f

Branch: refs/heads/trunk
Commit: ac4d262f4a0d15351f1eeaa6abdb8c8c2b8b81db
Parents: 4fbab31
Author: aBabiichuk <ababiic...@cybervisiontech.com>
Authored: Fri Jul 10 17:44:16 2015 +0300
Committer: aBabiichuk <ababiic...@cybervisiontech.com>
Committed: Fri Jul 10 18:19:22 2015 +0300

----------------------------------------------------------------------
 .../main/admin/serviceAccounts_controller.js    |   4 +-
 .../configs/stack_config_properties_mapper.js   |   8 +-
 ambari-web/app/utils/config.js                  | 321 +++++-------------
 ambari-web/test/utils/config_test.js            | 325 ++++++++++---------
 4 files changed, 254 insertions(+), 404 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/ac4d262f/ambari-web/app/controllers/main/admin/serviceAccounts_controller.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/app/controllers/main/admin/serviceAccounts_controller.js 
b/ambari-web/app/controllers/main/admin/serviceAccounts_controller.js
index 3fcb1df..1d72d0c 100644
--- a/ambari-web/app/controllers/main/admin/serviceAccounts_controller.js
+++ b/ambari-web/app/controllers/main/admin/serviceAccounts_controller.js
@@ -114,8 +114,8 @@ App.MainAdminServiceAccountsController = 
App.MainServiceInfoConfigsController.ex
    * @param {Object[]} advancedConfigs
    */
   createConfigObject: function(serverConfigs, advancedConfigs) {
-    var configSet = App.config.mergePreDefinedWithLoaded(serverConfigs, 
advancedConfigs, this.get('serviceConfigTags'), this.get('selectedService'));
-    var miscConfigs = configSet.configs.filterProperty('serviceName', 
this.get('selectedService')).filterProperty('category', 'Users and 
Groups').filterProperty('isVisible', true).rejectProperty('displayType', 
'password').rejectProperty('displayType', 'checkbox');
+    var configs = App.config.mergePredefinedWithSaved(serverConfigs, 
advancedConfigs, this.get('selectedService'));
+    var miscConfigs = configs.filterProperty('serviceName', 
this.get('selectedService')).filterProperty('category', 'Users and 
Groups').filterProperty('isVisible', true).rejectProperty('displayType', 
'password').rejectProperty('displayType', 'checkbox');
 
     miscConfigs = App.config.miscConfigVisibleProperty(miscConfigs, 
App.Service.find().mapProperty('serviceName').concat('MISC'));
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/ac4d262f/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/configs/stack_config_properties_mapper.js 
b/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
index 5913943..8315565 100644
--- a/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
+++ b/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
@@ -83,7 +83,7 @@ App.stackConfigPropertiesMapper = App.QuickDataMapper.create({
     console.timeEnd('stackConfigMapper execution time');
   },
 
-  /******************* METHODS TO MERGE STACK PROPERTIES WITH STORED ON UI 
(NOT USED FOR NOW)*********************************/
+  /******************* METHODS TO MERGE STACK PROPERTIES WITH STORED ON UI 
*********************************/
 
   /**
    * find UI config with current name and fileName
@@ -98,7 +98,11 @@ App.stackConfigPropertiesMapper = 
App.QuickDataMapper.create({
       config.StackConfigurations.property_display_name = uiConfigProperty && 
uiConfigProperty.displayName ? uiConfigProperty.displayName : 
config.StackConfigurations.property_name;
     }
     config.category = uiConfigProperty ? uiConfigProperty.category : 'Advanced 
' + App.config.getConfigTagFromFileName(config.StackConfigurations.type);
-    config.display_type = uiConfigProperty ? uiConfigProperty.displayType || 
displayType : displayType;
+    if (App.config.isContentProperty(config.StackConfigurations.property_name, 
config.StackConfigurations.type)) {
+      config.display_type = 'content';
+    } else {
+      config.display_type = uiConfigProperty ? uiConfigProperty.displayType || 
displayType : displayType;
+    }
   },
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/ac4d262f/ambari-web/app/utils/config.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/config.js b/ambari-web/app/utils/config.js
index 7bb9670..b209526 100644
--- a/ambari-web/app/utils/config.js
+++ b/ambari-web/app/utils/config.js
@@ -185,24 +185,6 @@ App.config = Em.Object.create({
   customFileNames: ['flume-conf.xml'],
 
   /**
-   * Function should be used post-install as precondition check should not be 
done only after installer wizard
-   * @param siteNames {String|Array}
-   * @returns {Array}
-   */
-  getBySiteName: function (siteNames) {
-    var computedConfigs = this.get('configMapping').computed();
-    var siteProperties = [];
-    if (typeof siteNames === "string") {
-      siteProperties = computedConfigs.filterProperty('filename', siteNames);
-    } else if (siteNames instanceof Array) {
-      siteNames.forEach(function (_siteName) {
-        siteProperties = 
siteProperties.concat(computedConfigs.filterProperty('filename', _siteName));
-      }, this);
-    }
-    return siteProperties;
-  },
-
-  /**
    * identify category by filename of config
    * @param config
    * @return {object|null}
@@ -290,12 +272,10 @@ App.config = Em.Object.create({
    */
   mergePredefinedWithSaved: function (configCategories, advancedConfigs, 
serviceName, selectedConfigGroup, canEdit) {
     var configs = [];
-    var contentProperties = this.createContentProperties(advancedConfigs);
-    var preDefinedConfigs = 
this.get('preDefinedSiteProperties').concat(contentProperties);
 
     configCategories.forEach(function (siteConfig) {
       var service = this.getServiceByConfigType(siteConfig.type);
-      if (service) {
+      if (service && serviceName != 'MISC') {
         serviceName = service.get('serviceName');
       }
       var filename = App.config.getOriginalFileName(siteConfig.type);
@@ -304,17 +284,18 @@ App.config = Em.Object.create({
       var properties = siteConfig.properties || {};
 
       for (var index in properties) {
-        var configsPropertyDef = preDefinedConfigs.filterProperty('name', 
index).findProperty('filename', filename);
+        var configsPropertyDef = 
this.get('preDefinedSiteProperties').filterProperty('name', 
index).findProperty('filename', filename);
         var advancedConfig = advancedConfigs.filterProperty('name', 
index).findProperty('filename', filename);
-
-        var serviceConfigObj = this.mergeStackConfigsWithUI(index, filename, 
properties[index], finalAttributes[index] === "true", service, advancedConfig, 
configsPropertyDef);
+        var template = this.createDefaultConfig(index, filename, 
properties[index], finalAttributes[index] === "true", serviceName, 
!!advancedConfig, configsPropertyDef && configsPropertyDef.id === 'puppet var');
+        var serviceConfigObj = this.mergeStackConfigsWithUI(template, 
advancedConfig, configsPropertyDef);
 
         if (serviceConfigObj.get('isRequiredByAgent') !== false) {
           var formattedValue = this.formatPropertyValue(serviceConfigObj);
           serviceConfigObj.setProperties({
             'value': formattedValue,
             'savedValue': formattedValue,
-            'isEditable': this.getIsEditable(serviceConfigObj, 
selectedConfigGroup, canEdit)
+            'isEditable': this.getIsEditable(serviceConfigObj, 
selectedConfigGroup, canEdit),
+            'isVisible': serviceName === 'MISC' ? true : 
serviceConfigObj.get('displayType') !== 'user'
           });
         }
 
@@ -327,18 +308,20 @@ App.config = Em.Object.create({
   },
 
   /**
-   * This method merge properties form <code>stackConfigProperty<code> which 
are taken from stack
-   * with <code>UIConfigProperty<code> which are hardcoded on UI
-   * @param name
-   * @param fileName
-   * @param value
-   * @param isFinal
-   * @param service
-   * @param stackConfigProperty
-   * @param UIConfigProperty
+   * This method sets default values for config property
+   * These property values has the lowest priority and can be overriden be 
stack/UI
+   * config property but is used when such properties are absent in stack/UI 
configs
+   * @param {string} name
+   * @param {string} fileName
+   * @param {string} value
+   * @param {boolean} isFinal
+   * @param {string} serviceName
+   * @param {boolean} definedInStack
+   * @param {boolean} [isPuppetVar=false];
+   * @returns {Object}
    */
-  mergeStackConfigsWithUI: function(name, fileName, value, isFinal, service, 
stackConfigProperty, UIConfigProperty) {
-    return Em.Object.create({
+  createDefaultConfig: function(name, fileName, value, isFinal, serviceName, 
definedInStack, isPuppetVar) {
+    return {
       /** core properties **/
       name: name,
       filename: fileName,
@@ -347,32 +330,48 @@ App.config = Em.Object.create({
       isFinal: isFinal,
       savedIsFinal: isFinal,
       /** UI and Stack properties **/
-      recommendedValue: this.getPropertyIfExists('recommendedValue', null, 
stackConfigProperty, UIConfigProperty),
-      recommendedIsFinal: this.getPropertyIfExists('recommendedIsFinal', null, 
stackConfigProperty, UIConfigProperty),
-      displayName: this.getPropertyIfExists('displayName', name, 
stackConfigProperty, UIConfigProperty),
-      description: this.getPropertyIfExists('description', null, 
stackConfigProperty, UIConfigProperty),
-      supportsFinal: this.getPropertyIfExists('supportsFinal', false, 
stackConfigProperty, UIConfigProperty),
-      /** properties with calculations **/
-      displayType: this.getPropertyIfExists('displayType', 
this.getDefaultDisplayType(value), UIConfigProperty, stackConfigProperty),
-      category: this.getPropertyIfExists('category', 
this.getDefaultCategory(stackConfigProperty, fileName), UIConfigProperty),
-      isSecureConfig: this.getPropertyIfExists('isSecureConfig', 
this.getIsSecure(name), UIConfigProperty),
-      serviceName: this.getPropertyIfExists('serviceName', service ? 
service.get('serviceName') : 'MISC', stackConfigProperty, UIConfigProperty),
-      isVisible: this.getPropertyIfExists('isVisible', !!service, 
UIConfigProperty),
-      isUserProperty: this.getPropertyIfExists('isUserProperty', 
!stackConfigProperty, UIConfigProperty),
-      isRequired: this.getPropertyIfExists('isRequired', 
!!stackConfigProperty, UIConfigProperty),
-      /** UI properties **/
-      id: this.getPropertyIfExists('id', 'site property', UIConfigProperty),
-      isRequiredByAgent: this.getPropertyIfExists('isRequiredByAgent', true, 
UIConfigProperty),
-      isReconfigurable: this.getPropertyIfExists('isReconfigurable', true, 
UIConfigProperty),
-      unit: this.getPropertyIfExists('unit', null, UIConfigProperty),
-      isOverridable: this.getPropertyIfExists('isOverridable', true, 
UIConfigProperty),
-      index: this.getPropertyIfExists('index', null, UIConfigProperty),
-      showLabel: this.getPropertyIfExists('showLabel', true, UIConfigProperty),
-      dependentConfigPattern: 
this.getPropertyIfExists('dependentConfigPattern', null, UIConfigProperty),
-      options: this.getPropertyIfExists('options', null, UIConfigProperty),
-      radioName: this.getPropertyIfExists('radioName', null, UIConfigProperty),
-      belongsToService: this.getPropertyIfExists('belongsToService', [], 
UIConfigProperty)
-    });
+      recommendedValue: null,
+      recommendedIsFinal: null,
+      supportsFinal: false,
+      serviceName: serviceName,
+      displayName: this.getDefaultDisplayName(name, fileName),
+      displayType: this.getDefaultDisplayType(value),
+      description: null,
+      category: this.getDefaultCategory(definedInStack, fileName),
+      isSecureConfig: this.getIsSecure(name),
+      showLabel: !this.isContentProperty(name, fileName, ['-log4j']),
+      isVisible: true,
+      isUserProperty: !definedInStack,
+      isRequired: definedInStack,
+      id: isPuppetVar ? 'puppet var' : 'site property',
+      isRequiredByAgent:  true,
+      isReconfigurable: true,
+      unit: null,
+      isOverridable: true,
+      index: null,
+      dependentConfigPattern: null,
+      options: null,
+      radioName: null,
+      belongsToService: []
+    }
+  },
+
+  /**
+   * This method merge properties form <code>stackConfigProperty<code> which 
are taken from stack
+   * with <code>UIConfigProperty<code> which are hardcoded on UI
+   * @param template
+   * @param stackConfigProperty
+   * @param UIConfigProperty
+   */
+  mergeStackConfigsWithUI: function(template, stackConfigProperty, 
UIConfigProperty) {
+    var doNotOverride = ['name', 'filename', 'value', 'savedValue', 'isFinal', 
'savedIsFinal', 'id'];
+    var configProperty = Em.Object.create(template);
+    for (var key in template) {
+      if (!doNotOverride.contains(key)) {
+        configProperty.set(key, this.getPropertyIfExists(key, template[key], 
stackConfigProperty, UIConfigProperty));
+      }
+    }
+    return configProperty;
   },
 
   /**
@@ -406,6 +405,16 @@ App.config = Em.Object.create({
   },
 
   /**
+   * Get the default value of displayName
+   * @param name
+   * @param fileName
+   * @returns {*}
+   */
+  getDefaultDisplayName: function(name, fileName) {
+    return this.isContentProperty(name, fileName, ['-env']) ? 
this.getConfigTagFromFileName(fileName) + ' template' : name
+  },
+
+  /**
    * Get category for properties that has not defined value
    * @param stackConfigProperty
    * @param fileName
@@ -478,184 +487,18 @@ App.config = Em.Object.create({
   },
 
   /**
-   * return:
-   *   configs,
-   *   mappingConfigs
-   *
-   * @param configCategories
-   * @param advancedConfigs
-   * @param tags
-   * @param serviceName
-   * @return {object}
-   */
-  mergePreDefinedWithLoaded: function (configCategories, advancedConfigs, 
tags, serviceName) {
-    var configs = [];
-    var contentProperties = this.createContentProperties(advancedConfigs);
-    var preDefinedConfigs = 
this.get('preDefinedSiteProperties').concat(contentProperties);
-    var mappingConfigs = [];
-    var filenameExceptions = this.get('filenameExceptions');
-    tags.forEach(function (_tag) {
-      var service = this.getServiceByConfigType(_tag.siteName);
-      if (service) {
-        serviceName = service.get('serviceName');
-      }
-
-      var filename = App.config.getOriginalFileName(_tag.siteName);
-      var siteConfig = configCategories.filter(function 
(serviceConfigProperties) {
-        return _tag.tagName === serviceConfigProperties.tag && _tag.siteName 
=== serviceConfigProperties.type;
-      });
-      siteConfig = siteConfig[0] || {};
-
-      var attributes = siteConfig['properties_attributes'] || {};
-      var finalAttributes = attributes.final || {};
-      var properties = siteConfig.properties || {};
-      for (var index in properties) {
-        var configsPropertyDef = preDefinedConfigs.filterProperty('name', 
index).findProperty('filename', filename);
-        var advancedConfig = advancedConfigs.filterProperty('name', 
index).findProperty('filename', filename);
-        var isAdvanced = Boolean(advancedConfig);
-        if (!configsPropertyDef) {
-          configsPropertyDef = advancedConfig;
-        }
-        var value = this.parseValue(properties[index], configsPropertyDef, 
advancedConfig);
-        var serviceConfigObj = App.ServiceConfig.create({
-          name: index,
-          value: value,
-          savedValue: value,
-          recommendedValue: advancedConfig ? Em.get(advancedConfig, 
'recommendedValue') : null,
-          filename: filename,
-          isUserProperty: !advancedConfig,
-          isVisible: !!service,
-          isOverridable: true,
-          isReconfigurable: true,
-          isRequired: isAdvanced,
-          isFinal: finalAttributes[index] === "true",
-          savedIsFinal: finalAttributes[index] === "true",
-          recommendedIsFinal: advancedConfig ? Em.get(advancedConfig, 
'recommendedIsFinal') : null,
-          showLabel: true,
-          serviceName: serviceName,
-          belongsToService: [],
-          supportsFinal: advancedConfig ? Em.get(advancedConfig, 
'supportsFinal') : this.shouldSupportFinal(serviceName, _tag.siteName)
-
-        });
-        if (configsPropertyDef) {
-          this.setServiceConfigUiAttributes(serviceConfigObj, 
configsPropertyDef);
-          // check if defined UI config present in config list obtained from 
server.
-          // in case when config is absent on server and defined UI config is 
required
-          // by server, this config should be ignored
-          var serverProperty = properties[serviceConfigObj.get('name')];
-          if (Em.isNone(serverProperty) && 
serviceConfigObj.get('isRequiredByAgent')) {
-            continue;
-          }
-        }
-
-        this.tweakConfigVisibility(serviceConfigObj, properties);
-        if 
(!this.getBySiteName(serviceConfigObj.get('filename')).someProperty('name', 
index)) {
-          if (configsPropertyDef) {
-            if (Em.get(configsPropertyDef, 'isRequiredByAgent') === false) {
-              configs.push(serviceConfigObj);
-              continue;
-            }
-            this.handleSpecialProperties(serviceConfigObj);
-          } else {
-            serviceConfigObj.set('displayType', 
stringUtils.isSingleLine(serviceConfigObj.get('value')) ? 'advanced' : 
'multiLine');
-          }
-          serviceConfigObj.setProperties({
-            'id': 'site property',
-            'displayName': configsPropertyDef && Em.get(configsPropertyDef, 
'displayName') ? Em.get(configsPropertyDef, 'displayName') : index,
-            'options': configsPropertyDef ? Em.get(configsPropertyDef, 
'options') : null,
-            'radioName': configsPropertyDef ? Em.get(configsPropertyDef, 
'radioName') : null,
-            'serviceName': configsPropertyDef && Em.get(configsPropertyDef, 
'serviceName') ? Em.get(configsPropertyDef, 'serviceName') : serviceName,
-            'belongsToService': configsPropertyDef && 
Em.get(configsPropertyDef, 'belongsToService') ? Em.get(configsPropertyDef, 
'belongsToService') : []
-          });
-          this.calculateConfigProperties(serviceConfigObj, isAdvanced, 
advancedConfig);
-          this.setValueByDisplayType(serviceConfigObj);
-          configs.push(serviceConfigObj);
-        } else {
-          mappingConfigs.push(serviceConfigObj);
-        }
-      }
-    }, this);
-    return {
-      configs: configs,
-      mappingConfigs: mappingConfigs
-    }
-  },
-
-  /**
-   * additional parsing when value is int of float
-   * ex: if value is "0.40" result will be "0.4"
-   * @param value
-   * @param predefinedConfig
-   * @param advancedConfig
-   * @returns {String}
-   */
-  parseValue: function(value, predefinedConfig, advancedConfig) {
-    var type = predefinedConfig ? Em.get(predefinedConfig, 'displayType') :
-      advancedConfig && Em.get(advancedConfig, 'valueAttributes.type');
-    switch (type) {
-      case 'int':
-        var res = parseInt(value);
-        return isNaN(res) ? "" : res.toString();
-      case 'float':
-        var res = parseFloat(value);
-        return isNaN(res) ? "" : res.toString();
-      default:
-        return value;
-    }
-  },
-
-
-  tweakConfigVisibility: function (config, allSiteConfigs) {
-    var kdcType = allSiteConfigs['kdc_type'];
-    if (kdcType === 'active-directory' && ['container_dn', 
'ldap_url'].contains(Em.get(config, 'name'))) {
-      Em.set(config, 'isVisible', true);
-    }
-  },
-
-  setValueByDisplayType: function (serviceConfigObj) {
-    if (serviceConfigObj.get('displayType') == 'directories' && 
(serviceConfigObj.get('category') == 'DataNode' || 
serviceConfigObj.get('category') == 'NameNode')) {
-      var dirs = serviceConfigObj.get('value').split(',').sort();
-      serviceConfigObj.set('value', dirs.join(','));
-      serviceConfigObj.set('savedValue', dirs.join(','));
-    }
-
-    if (serviceConfigObj.get('displayType') == 'directory' && 
serviceConfigObj.get('category') == 'SNameNode') {
-      var dirs = serviceConfigObj.get('value').split(',').sort();
-      serviceConfigObj.set('value', dirs[0]);
-      serviceConfigObj.set('savedValue', dirs[0]);
-    }
-
-    if (serviceConfigObj.get('displayType') == 'masterHosts') {
-      if (typeof(serviceConfigObj.get('value')) == 'string') {
-        var value = serviceConfigObj.get('value').replace(/\[|]|'|&apos;/g, 
"").split(',');
-        serviceConfigObj.set('value', value);
-        serviceConfigObj.set('savedValue', value);
-      }
-    }
-  },
-
-  /**
-   * @param serviceConfigObj : Object
-   * @param configsPropertyDef : Object
+   * defines if property with <code>name<code> and <code>fileName<code>
+   * are special content property. By default result will be true if property 
name is 'content'
+   * and tag ends on '-env' or '-log4j', but some other tag endings can be 
passed in <code>tagEnds<code>
+   * @param {string} name
+   * @param {string} fileName
+   * @param {string[]} [tagEnds]
+   * @returns {boolean}
    */
-  setServiceConfigUiAttributes: function (serviceConfigObj, 
configsPropertyDef) {
-    serviceConfigObj.setProperties({
-      'displayType': Em.get(configsPropertyDef, 'displayType'),
-      'isRequired': (Em.get(configsPropertyDef, 'isRequired') !== undefined) ? 
Em.get(configsPropertyDef, 'isRequired') : true,
-      'isRequiredByAgent': (Em.get(configsPropertyDef, 'isRequiredByAgent') 
!== undefined) ? Em.get(configsPropertyDef, 'isRequiredByAgent') : true,
-      'isReconfigurable': (Em.get(configsPropertyDef, 'isReconfigurable') !== 
undefined) ? Em.get(configsPropertyDef, 'isReconfigurable') : true,
-      'isVisible': (Em.get(configsPropertyDef, 'isVisible') !== undefined) ? 
Em.get(configsPropertyDef, 'isVisible') : true,
-      'unit': Em.get(configsPropertyDef, 'unit'),
-      'description': Em.get(configsPropertyDef, 'description'),
-      'isOverridable': Em.get(configsPropertyDef, 'isOverridable') === 
undefined ? true : Em.get(configsPropertyDef, 'isOverridable'),
-      'serviceName': configsPropertyDef ? Em.get(configsPropertyDef, 
'serviceName') : serviceConfigObj.get('serviceName'),
-      'index': Em.get(configsPropertyDef, 'index'),
-      'isSecureConfig': Em.get(configsPropertyDef, 'isSecureConfig') === 
undefined ? false : Em.get(configsPropertyDef, 'isSecureConfig'),
-      'belongsToService': Em.get(configsPropertyDef, 'belongsToService'),
-      'category': Em.get(configsPropertyDef, 'category'),
-      'showLabel': Em.get(configsPropertyDef, 'showLabel') !== false,
-      'dependentConfigPattern': Em.get(configsPropertyDef, 
'dependentConfigPattern')
-    });
+  isContentProperty: function(name, fileName, tagEnds) {
+    tagEnds = tagEnds || ['-env', '-log4j'];
+    var  type = this.getConfigTagFromFileName(fileName);
+    return name == 'content' && tagEnds.some(function(tagEnd) { return 
type.endsWith(tagEnd)});
   },
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/ac4d262f/ambari-web/test/utils/config_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/utils/config_test.js 
b/ambari-web/test/utils/config_test.js
index 00cb096..970060f 100644
--- a/ambari-web/test/utils/config_test.js
+++ b/ambari-web/test/utils/config_test.js
@@ -619,74 +619,6 @@ describe('App.config', function () {
     });
   });
 
-  describe('#mergePreDefinedWithLoaded', function() {
-    var result;
-
-    before(function() {
-      sinon.stub(App.config, 'parseValue', function(value) {return value});
-      sinon.stub(App.config, 'getConfigTypesInfoFromService').returns({
-        supportsFinal: ['hdfs-site']
-      });
-      setups.setupStackVersion(this, 'HDP-2.2');
-      loadServiceModelsData(['HDFS', 'STORM']);
-      App.config.loadAdvancedConfigSuccess(modelSetup.advancedConfigs, { url: 
'/serviceName/configurations'}, {
-        callback: function(advancedConfigs) {
-          
App.config.loadClusterConfigSuccess(modelSetup.advancedClusterConfigs, { url: 
'/cluster/configurations'}, {
-            callback: function(clusterConfigs) {
-              var configCategories = modelSetup.setupConfigGroupsObject();
-              var tags = [
-                {newTagName: null, tagName: 'version1', siteName: 
'hadoop-env'},
-                {newTagName: null, tagName: 'version1', siteName: 'hdfs-site'},
-                {newTagName: null, tagName: 'version1', siteName: 
'cluster-env'},
-                {newTagName: null, tagName: 'version1', siteName: 'storm-env'}
-              ];
-              var serviceName = 'STORM';
-              result = App.config.mergePreDefinedWithLoaded(configCategories, 
advancedConfigs.concat(clusterConfigs), tags, serviceName);
-            }
-          });
-        }
-      });
-    });
-
-    after(function() {
-      App.config.parseValue.restore();
-      App.config.getConfigTypesInfoFromService.restore();
-      setups.restoreStackVersion(this);
-      removeServiceModelData(['HDFS', 'STORM']);
-    });
-    
-    var propertyTests = [
-      {
-        name: 'hdfs_user',
-        cases: [
-          {
-            key: 'displayType',
-            e: 'user'
-          },
-          {
-            key: 'isVisible',
-            e: true
-          },
-          {
-            key: 'serviceName',
-            e: 'MISC'
-          },
-          {
-            key: 'category',
-            e: 'Users and Groups'
-          }
-        ]
-      }
-    ];
-    propertyTests.forEach(function(test) {
-      test.cases.forEach(function(testCase) {
-        it('config property `{0}` `{1}` key should be`{2}`'.format(test.name, 
testCase.key, testCase.e), function() {
-          var property = result.configs.findProperty('name', test.name);
-          expect(Em.get(property, testCase.key)).to.equal(testCase.e);
-        });
-      });
-    });
-  });
 
   describe('#replaceConfigValues', function () {
 
@@ -1442,14 +1374,77 @@ describe('App.config', function () {
   });
 
   describe('#getDefaultDisplayType', function() {
-    it('returns singleLine displayTyepe', function() {
+    it('returns singleLine displayType', function() {
       expect(App.config.getDefaultDisplayType('v1')).to.equal('advanced');
     });
-    it('returns multiline displayTyepe', function() {
+    it('returns multiLine displayType', function() {
       expect(App.config.getDefaultDisplayType('v1\nv2')).to.equal('multiLine');
     });
   });
 
+  describe('#getDefaultDisplayName', function() {
+    beforeEach(function() {
+      sinon.stub(App.config, 'getConfigTagFromFileName', function(fName) 
{return fName} );
+    });
+    afterEach(function() {
+      App.config.getConfigTagFromFileName.restore();
+    });
+
+    it('returns name', function() {
+      sinon.stub(App.config, 'isContentProperty', function() {return false} );
+      expect(App.config.getDefaultDisplayName('name')).to.equal('name');
+      App.config.isContentProperty.restore();
+    });
+    it('returns name for env content', function() {
+      sinon.stub(App.config, 'isContentProperty', function() {return true} );
+      expect(App.config.getDefaultDisplayName('name', 
'fileName')).to.equal('fileName template');
+      App.config.isContentProperty.restore();
+    });
+  });
+
+  describe('#isContentProperty', function() {
+    beforeEach(function() {
+      sinon.stub(App.config, 'getConfigTagFromFileName', function(fName) 
{return fName} );
+    });
+    afterEach(function() {
+      App.config.getConfigTagFromFileName.restore();
+    });
+    var tests = [
+      {
+        name: 'content',
+        fileName: 'something-env',
+        tagEnds: null,
+        res: true,
+        m: 'returns true as it\'s content property'
+      },
+      {
+        name: 'content',
+        fileName: 'something-any-end',
+        tagEnds: ['-any-end'],
+        res: true,
+        m: 'returns true as it\'s content property with specific fileName 
ending'
+      },
+      {
+        name: 'notContent',
+        fileName: 'something-env',
+        tagEnds: ['-env'],
+        res: false,
+        m: 'returns false as name is not content'
+      },
+      {
+        name: 'content',
+        fileName: 'something-env1',
+        tagEnds: ['-env'],
+        res: false,
+        m: 'returns false as fileName is not correct'
+      }
+    ].forEach(function(t) {
+        it(t.m, function() {
+          expect(App.config.isContentProperty(t.name, t.fileName, 
t.tagEnds)).to.equal(t.res);
+        });
+      });
+  });
+
   describe('#formatValue', function() {
     it('formatValue for masterHosts', function () {
       var serviceConfigProperty = Em.Object.create({'displayType': 
'masterHosts', value: "['h1','h2']"});
@@ -1545,109 +1540,117 @@ describe('App.config', function () {
       });
   });
 
-  describe('#mergeStackConfigsWithUI', function() {
-    beforeEach(function() {
-      sinon.stub(App.config, 'getPropertyIfExists', function(propertyName, 
defaultValue) {return defaultValue});
-      sinon.stub(App.config, 'getDefaultCategory', 
function(stackConfigProperty, filename) {return 'Advanced ' + filename});
-      sinon.stub(App.config, 'getIsSecure', function() {return false});
-      sinon.stub(App.config, 'getDefaultDisplayType', function() {return 
'string'});
+  describe('#createDefaultConfig', function() {
+    before(function() {
+      sinon.stub(App.config, 'getDefaultDisplayName', function() {
+        return 'pDisplayName';
+      });
+      sinon.stub(App.config, 'getDefaultDisplayType', function() {
+        return 'pDisplayType';
+      });
+      sinon.stub(App.config, 'getDefaultCategory', function() {
+        return 'pCategory';
+      });
+      sinon.stub(App.config, 'getIsSecure', function() {
+        return false;
+      });
+      sinon.stub(App.config, 'isContentProperty', function() {
+        return false;
+      });
     });
 
-    afterEach(function() {
-      App.config.getPropertyIfExists.restore();
+    after(function() {
+      App.config.getDefaultDisplayName.restore();
+      App.config.getDefaultDisplayType.restore();
       App.config.getDefaultCategory.restore();
       App.config.getIsSecure.restore();
-      App.config.getDefaultDisplayType.restore();
+      App.config.isContentProperty.restore();
     });
-    var service = Em.Object.create({ serviceName:'sName' });
-    var template =  {
-        name: 'pName',
-        filename: 'pFileName',
-        value: 'v',
-        savedValue: 'v',
-        isFinal: true,
-        savedIsFinal: true,
-        recommendedValue: null,
-        recommendedIsFinal: null,
-        displayName: 'pName',
-        description: null,
-        displayType: 'string',
-        category: 'Advanced pFileName',
-        isSecureConfig: false,
-        serviceName: 'sName',
-        isVisible: true,
-        isUserProperty: false,
-        isRequired: true,
-        id: 'site property',
-        supportsFinal: false,
-        isRequiredByAgent: true,
-        isReconfigurable: true,
-        unit: null,
-        isOverridable: true,
-        index: null,
-        showLabel: true,
-        dependentConfigPattern: null,
-        options: null,
-        radioName: null,
-        belongsToService: []
+
+    var res = {
+      name: 'pName',
+      filename: 'pFileName',
+      value: 'pValue',
+      savedValue: 'pValue',
+      isFinal: true,
+      savedIsFinal: true,
+      recommendedValue: null,
+      recommendedIsFinal: null,
+      supportsFinal: false,
+      serviceName: 'pServiceName',
+      displayName: 'pDisplayName',
+      displayType: 'pDisplayType',
+      description: null,
+      category: 'pCategory',
+      isSecureConfig: false,
+      showLabel: true,
+      isVisible: true,
+      isUserProperty: false,
+      isRequired: true,
+      id: 'site property',
+      isRequiredByAgent:  true,
+      isReconfigurable: true,
+      unit: null,
+      isOverridable: true,
+      index: null,
+      dependentConfigPattern: null,
+      options: null,
+      radioName: null,
+      belongsToService: []
     };
-    it('performs merge UI and Stack properties', function() {
-      for (var key in template){
-        expect(App.config.mergeStackConfigsWithUI('pName', 'pFileName', 'v', 
true, service, Em.Object.create({}), 
Em.Object.create({}))[key]).to.eql(template[key]);
-      }
+    it('create default config object', function() {
+      
expect(App.config.createDefaultConfig('pName','pFileName','pValue',true,'pServiceName',true,
 false)).to.eql(res);
+    });
+    it('runs proper methods', function() {
+      
expect(App.config.getDefaultDisplayName.calledWith('pName','pFileName')).to.be.true;
+      expect(App.config.getDefaultDisplayType.calledWith('pValue')).to.be.true;
+      expect(App.config.getDefaultCategory.calledWith(true, 
'pFileName')).to.be.true;
+      expect(App.config.getIsSecure.calledWith('pName')).to.be.true;
+      expect(App.config.isContentProperty.calledWith('pName', 'pFileName', 
['-log4j'])).to.be.true;
     });
+  });
 
-    it('performs merge UI and Stack properties (without stackProperty)', 
function() {
-      template.isUserProperty = true;
-      template.isRequired = false;
-      for (var key in template){
-        expect(App.config.mergeStackConfigsWithUI('pName', 'pFileName', 'v', 
true, service, null, Em.Object.create({}))[key]).to.eql(template[key]);
-      }
+  describe('#mergeStackConfigsWithUI', function() {
+    beforeEach(function() {
+      sinon.stub(App.config, 'getPropertyIfExists', function(key, value) 
{return 'res_' + value});
     });
 
-    it('performs merge UI and Stack properties (unknown service)', function () 
{
-      template.serviceName = 'MISC';
-      template.isUserProperty = false;
-      template.isRequired = true;
-      template.isVisible = false;
-      for (var key in template) {
-        expect(App.config.mergeStackConfigsWithUI('pName', 'pFileName', 'v', 
true, null, Em.Object.create({}), 
Em.Object.create({}))[key]).to.eql(template[key]);
-      }
+    afterEach(function() {
+      App.config.getPropertyIfExists.restore();
     });
 
-    it('called getPropertyIfExists couple of times', function () {
-      App.config.mergeStackConfigsWithUI('pName', 'pFileName', 'v', true, 
null, Em.Object.create({}), Em.Object.create({}));
-      expect(App.config.getPropertyIfExists.callCount).to.equal(23);
-    });
-
-    it('called getPropertyIfExists with args', function () {
-      var stackConfigProperty = Em.Object.create({stackProperty: true});
-      var UIConfigProperty = Em.Object.create({UIProperty: true});
-      App.config.mergeStackConfigsWithUI('pName', 'pFileName', 'v', true, 
service, stackConfigProperty, UIConfigProperty);
-
-      expect(App.config.getPropertyIfExists.calledWith('recommendedValue', 
null, stackConfigProperty, UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('recommendedIsFinal', 
null, stackConfigProperty, UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('displayName', 'pName', 
stackConfigProperty, UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('description', null, 
stackConfigProperty, UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('supportsFinal', false, 
stackConfigProperty, UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('id', 'site property', 
UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('isRequiredByAgent', 
true, UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('isReconfigurable', 
true, UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('unit', null, 
UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('isOverridable', true, 
UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('index', null, 
UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('showLabel', true, 
UIConfigProperty)).to.be.true;
-      
expect(App.config.getPropertyIfExists.calledWith('dependentConfigPattern', 
null, UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('options', null, 
UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('belongsToService', [], 
UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('radioName', null, 
UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('displayType', 
'string', UIConfigProperty, stackConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('category', 'Advanced 
pFileName', UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('isSecureConfig', 
false, UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('serviceName', 'sName', 
stackConfigProperty, UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('isVisible', true, 
UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('isUserProperty', 
false, UIConfigProperty)).to.be.true;
-      expect(App.config.getPropertyIfExists.calledWith('isRequired', true, 
UIConfigProperty)).to.be.true;
+    var template = {
+      name: 'pName',
+      filename: 'pFileName',
+      value: 'pValue',
+      savedValue: 'pValue',
+      isFinal: true,
+      savedIsFinal: true,
+      id: 'site property',
+
+      serviceName: 'pServiceName',
+      displayName: 'pDisplayName',
+      displayType: 'pDisplayType',
+      category: 'pCategory'
+    };
+
+    var result = {
+      name: 'pName',
+      filename: 'pFileName',
+      value: 'pValue',
+      savedValue: 'pValue',
+      isFinal: true,
+      savedIsFinal: true,
+      id: 'site property',
+
+      serviceName: 'res_pServiceName',
+      displayName: 'res_pDisplayName',
+      displayType: 'res_pDisplayType',
+      category: 'res_pCategory'
+    };
+
+    it('called generate property object', function () {
+      expect(App.config.mergeStackConfigsWithUI(template, {}, 
{})).to.eql(Em.Object.create(result));
     });
   });
 

Reply via email to