{"action":"created","comment":{"url":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/comments/53602444","id":53602444,"diff_hunk":"@@ -0,0 +1,1035 @@\n+# -*- encoding: utf-8 -*-\n+\"\"\"Test class for Smart/Puppet Class Parameter\"\"\"\n+\n+from robottelo.decorators import run_only_on, stubbed, tier1, tier2, tier3\n+from robottelo.test import APITestCase\n+\n+\n+class SmartClassParametersTestCase(APITestCase):\n+    \"\"\"Implements Smart Class Parameter tests in API\"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_positive_list_parameters_by_host_id(self):\n+        \"\"\"List all the parameters included in specific Host by its id.\n+\n+        @feature: Class Parameters - List\n+\n+        @assert: Parameters listed for specific Host.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_positive_list_parameters_by_hostgroup_id(self):\n+        \"\"\"List all the parameters included in specific HostGroup by id.\n+\n+        @feature: Class Parameters - List\n+\n+        @assert: Parameters listed for specific HostGroup.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_positive_list_parameters_by_puppetclass_id(self):\n+        \"\"\"List all the parameters for specific puppet class by id.\n+\n+        @feature: Class Parameters - List\n+\n+        @assert: Parameters listed for specific Puppet class.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_positive_list_parameters_by_environment_id(self):\n+        \"\"\"List all the parameters for specific environment by id.\n+\n+        @feature: Class Parameters - List\n+\n+        @assert: Parameters listed for specific environment.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_positive_override_checkbox(self):\n+        \"\"\"Override the Default Parameter value.\n+\n+        @feature: Class Parameters - Override\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set the new valid Default Value.\n+\n+        @assert: Parameter Value overridden with new value.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_negative_override_checkbox(self):\n+        \"\"\"Override the Default Parameter value - override Unchecked.\n+\n+        @feature: Class Parameters - Override\n+\n+        @steps:\n+\n+        1.  Set override to False.\n+        2.  Set the new valid Default Value.\n+\n+        @assert: Parameter value not allowed/disabled to override.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_positive_puppet_default(self):\n+        \"\"\"On Override, Set Puppet Default Value.\n+\n+        @feature: Class Parameters - Puppet Default\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set 'Use Puppet Default' to True.\n+\n+        @assert: Puppet Default Value applied on parameter.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_update_parameter_type(self):\n+        \"\"\"Positive Parameter Update for parameter types - Valid Value.\n+\n+        Types - string, boolean, integer, real, array, hash, yaml, json\n+\n+        @feature: Class Parameters - Parameter Type\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Update the Key Type to any of available.\n+        3.  Set a 'valid' default Value.\n+\n+        @assert: Parameter Updated with a new type successfully.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_update_parameter_type(self):\n+        \"\"\"Negative Parameter Update for parameter types - Invalid Value.\n+\n+        Types - string, boolean, integer, real, array, hash, yaml, json\n+\n+        @feature: Class Parameters - Parameter Type\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Update the Key Type.\n+        3.  Attempt to set an 'Invalid' default Value.\n+\n+        @assert:\n+\n+        1.  Parameter not updated with string type for invalid value.\n+        2.  Error raised for invalid default value.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_positive_validate_puppet_default_value(self):\n+        \"\"\"Validation doesn't works on puppet default value.\n+\n+        @feature: Class Parameters - Optional Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set puppet default value to 'Use Puppet Default'.\n+        3.  Set Validator Type and Rule to validate this value.\n+\n+        @assert: Validation shouldn't work with puppet default value.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_negative_validate_default_value_required_checkbox(self):\n+        \"\"\"Error raised for blank default Value - Required check.\n+\n+        @feature: Class Parameters - Optional Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set empty default value.\n+        3.  Set 'required' to True.\n+\n+        @assert: Error raised for blank default value.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_positive_validate_default_value_required_checkbox(self):\n+        \"\"\"No error raised for non-empty default Value - Required check.\n+\n+        @feature: Class Parameters - Optional Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set some default value, Not empty.\n+        3.  Set 'required' to true.\n+\n+        @assert: No error raised for non-empty default value\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_negative_validate_matcher_value_required_checkbox(self):\n+        \"\"\"Error raised for blank matcher Value - Required check.\n+\n+        @feature: Class Parameters - Optional Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Create a matcher for Parameter for some attribute.\n+        3.  Set no value for matcher. Keep blank.\n+        4.  Set 'required' to true.\n+\n+        @assert: Error raised for blank matcher value.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_positive_validate_matcher_value_required_checkbox(self):\n+        \"\"\"Error not raised for matcher Value - Required checkbox.\n+\n+        @feature: Class Parameters - Optional Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Create a matcher for Parameter for some attribute.\n+        3.  Set some Value for matcher.\n+        4.  Set 'required' to true.\n+\n+        @assert: Error not raised for matcher value.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_negative_validate_default_value_with_regex(self):\n+        \"\"\"Error raised for default value not matching with regex.\n+\n+        @feature: Class Parameters - Optional Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set default value that doesn't matches the regex of step 3.\n+        3.  Validate this value with regex validator type and rule.\n+\n+        @assert: Error raised for default value not matching with regex.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_positive_validate_default_value_with_regex(self):\n+        \"\"\"Error not raised for default value matching with regex.\n+\n+        @feature: Class Parameters - Optional Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set default value that matches the regex of step 3.\n+        3.  Validate this value with regex validator type and rule.\n+\n+        @assert: Error not raised for default value matching with regex.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_negative_validate_matcher_value_with_regex(self):\n+        \"\"\"Error raised for matcher value not matching with regex.\n+\n+        @feature: Class Parameters - Optional Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Create a matcher with value that doesn't matches\n+        the regex of step 3.\n+        3.  Validate this value with regex validator type and rule.\n+\n+        @assert: Error raised for matcher value not matching with regex.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_positive_validate_matcher_value_with_regex(self):\n+        \"\"\"Error not raised for matcher value matching with regex.\n+\n+        @feature: Class Parameters - Optional Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Create a matcher with value that matches the regex of step 3.\n+        3.  Validate this value with regex validator type and rule.\n+\n+        @assert: Error not raised for matcher value matching with regex.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_negative_validate_default_value_with_list(self):\n+        \"\"\"Error raised for default value not in list.\n+\n+        @feature: Class Parameters - Optional Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set default value that doesn't matches the list of step 3.\n+        3.  Validate this value with list validator type and rule.\n+\n+        @assert: Error raised for default value not in list.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_positive_validate_default_value_with_list(self):\n+        \"\"\"Error not raised for default value in list.\n+\n+        @feature: Class Parameters - Optional Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set default value that matches the list of step 3.\n+        3.  Validate this value with list validator type and rule.\n+\n+        @assert: Error not raised for default value in list.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_negative_validate_matcher_value_with_list(self):\n+        \"\"\"Error raised for matcher value not in list.\n+\n+        @feature: Class Parameters - Optional Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Create a matcher with value that doesn't matches\n+        the list of step 3.\n+        3.  Validate this value with list validator type and rule.\n+\n+        @assert: Error raised for matcher value not in list.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_positive_validate_matcher_value_with_list(self):\n+        \"\"\"Error not raised for matcher value in list.\n+\n+        @feature: Class Parameters - Optional Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Create a matcher with value that matches the list of step 3.\n+        3.  Validate this value with list validator type and rule.\n+\n+        @assert: Error not raised for matcher value in list.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_negative_validate_matcher_value_with_default_type(self):\n+        \"\"\"Error raised for matcher value not of default type.\n+\n+        @feature: Class Parameters - Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Update parameter default type with valid value.\n+        3.  Create a matcher with value that doesn't matches the default type.\n+\n+        @assert: Error raised for matcher value not of default type.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_positive_validate_matcher_value_with_default_type(self):\n+        \"\"\"No error for matcher value of default type.\n+\n+        @feature: Class Parameters - Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Update parameter default type with valid value.\n+        3.  Create a matcher with value that matches the default type.\n+\n+        @assert: Error not raised for matcher value of default type.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_negative_validate_matcher_and_default_value(self):\n+        \"\"\"Error for invalid default and matcher value both at a time.\n+\n+        @feature: Class Parameters - Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Update parameter default type with Invalid value.\n+        3.  Create a matcher with value that doesn't matches the default type.\n+\n+        @assert: Error raised for invalid default and matcher value both.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_negative_validate_matcher_non_existing_attribute(self):\n+        \"\"\"Error while creating matcher for Non Existing Attribute.\n+\n+        @feature: Class Parameters - Validation\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Create a matcher with non existing attribute in org.\n+\n+        @assert: Error raised for non existing attribute.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_create_matcher(self):\n+        \"\"\"Create matcher for attribute in parameter.\n+\n+        @feature: Class Parameters - Matcher\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set some default Value.\n+        3.  Create a matcher with all valid values.\n+\n+        @assert: The matcher has been created successfully.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_create_matcher_puppet_default_value(self):\n+        \"\"\"Create matcher for attribute in parameter,\n+        Where Value is puppet default value.\n+\n+        @feature: Class Parameters - Matcher\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set some default Value.\n+        3.  Create matcher with valid attribute type, name and\n+        puppet default value.\n+\n+        @assert: The matcher has been created successfully.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_create_matcher_attribute_priority(self):\n+        \"\"\"Matcher Value set on Attribute Priority for Host.\n+\n+        @feature: Class Parameters - Matcher\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set some default Value.\n+        3.  Set fqdn as top priority attribute.\n+        4.  Create first matcher for fqdn with valid details.\n+        5.  Create second matcher for some attribute with valid details.\n+        Note - The fqdn/host should have this attribute.\n+        6.  Update the parameter with above steps.\n+        7.  Go to YAML output of associated host.\n+\n+        @assert: The YAML output has the value only for fqdn matcher.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_create_matcher_attribute_priority(self):\n+        \"\"\"Matcher Value set on Attribute Priority for Host - alternate priority.\n+\n+        @feature: Class Parameters - Matcher\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set some default Value.\n+        3.  Set some attribute(other than fqdn) as top priority attribute.\n+        Note - The fqdn/host should have this attribute.\n+        4.  Create first matcher for fqdn with valid details.\n+        5.  Create second matcher for attribute of step 3 with valid details.\n+        6.  Update the parameter with above steps.\n+        7.  Go to YAML output of associated host.\n+\n+        @assert:\n+\n+        1.  The YAML output has the value only for step 5 matcher.\n+        2.  The YAML output doesn't have value for fqdn/host matcher.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_create_matcher_merge_override(self):\n+        \"\"\"Merge the values of all the associated matchers.\n+\n+        @feature: Class Parameters - Matcher\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set some default Value.\n+        3.  Create first matcher for attribute fqdn with valid details.\n+        4.  Create second matcher for other attribute with valid details.\n+        Note - The fqdn/host should have this attribute.\n+        5.  Create more matchers for some more attributes if any.\n+        Note - The fqdn/host should have this attributes.\n+        6.  Set 'merge overrides' to True.\n+        7.  Update the parameter with above steps.\n+        8.  Go to YAML output of associated host.\n+\n+        @assert:\n+\n+        1.  The YAML output has the values merged from all the associated\n+        matchers.\n+        2.  The YAML output doesn't have the default value of parameter.\n+        3.  Duplicate values in YAML output if any are displayed.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_create_matcher_merge_override(self):\n+        \"\"\"Attempt to merge the values from non associated matchers.\n+\n+        @feature: Class Parameters - Matcher\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set some default Value.\n+        3.  Create first matcher for attribute fqdn with valid details.\n+        4.  Create second matcher for other attribute with valid details.\n+        Note - The fqdn/host should not have this attribute.\n+        5.  Create more matchers for some more attributes if any.\n+        Note - The fqdn/host should not have this attributes.\n+        6.  Set 'merge overrides' to True.\n+        7.  Update the parameter with above steps.\n+        8.  Go to YAML output of associated host.\n+\n+        @assert:\n+\n+        1.  The YAML output has the values only for fqdn.\n+        2.  The YAML output doesn't have the values for attribute\n+        which are not associated to host.\n+        3.  The YAML output doesn't have the default value of parameter.\n+        4.  Duplicate values in YAML output if any are displayed.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_create_matcher_merge_override_puppet_value(self):\n+        \"\"\"Merge the values of all the associated matchers + puppet default value.\n+\n+        @feature: Class Parameters - Matcher\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set some default Value.\n+        3.  Create first matcher for attribute fqdn with valid details.\n+        4.  Create second matcher for other attribute with value\n+        as puppet default.\n+        Note - The fqdn/host should have this attribute.\n+        5.  Create more matchers for some more attributes with value\n+        as puppet default.\n+        Note - The fqdn/host should have this attributes.\n+        6.  Set 'merge overrides' to True.\n+        7.  Set 'merge default' to True.\n+        8.  Update the parameter with above steps.\n+        9.  Go to YAML output of associated host.\n+\n+        @assert:\n+\n+        1.  The YAML output has the value only for fqdn.\n+        2.  The YAML output doesn't have the puppet default values of matchers.\n+        3.  Duplicate values in YAML output if any are displayed.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_create_matcher_merge_default(self):\n+        \"\"\"Merge the values of all the associated matchers + default value.\n+\n+        @feature: Class Parameters - Matcher\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set some default Value.\n+        3.  Create first matcher for attribute fqdn with valid details.\n+        4.  Create second matcher for other attribute with valid details.\n+        Note - The fqdn/host should have this attribute.\n+        5.  Create more matchers for some more attributes if any.\n+        Note - The fqdn/host should have this attributes.\n+        6.  Set 'merge overrides' to True.\n+        7.  Set 'merge default' to True.\n+        8.  Update the parameter with above steps.\n+        9.  Go to YAML output of associated host.\n+\n+        @assert:\n+\n+        1.  The YAML output has the values merged from all\n+        the associated matchers.\n+        2.  The YAML output has the default value of parameter.\n+        3.  Duplicate values in YAML output if any are displayed.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_create_matcher_merge_default(self):\n+        \"\"\"Empty default value is not shown in merged values.\n+\n+        @feature: Class Parameters - Matcher\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set empty default Value.\n+        3.  Create first matcher for attribute fqdn with valid details.\n+        4.  Create second matcher for other attribute with valid details.\n+        Note - The fqdn/host should have this attribute.\n+        5.  Create more matchers for some more attributes if any.\n+        Note - The fqdn/host should have this attributes.\n+        6.  Set 'merge overrides' to True.\n+        7.  Set 'merge default' to True.\n+        8.  Update the parameter with above steps.\n+        9.  Go to YAML output of associated host.\n+\n+        @assert:\n+\n+        1.  The YAML output has the values merged from all\n+        the associated matchers.\n+        2.  The YAML output doesn't have the empty default value of parameter.\n+        3.  Duplicate values in YAML output if any are displayed.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_create_matcher_merge_puppet_default(self):\n+        \"\"\"Merge the values of all the associated matchers + puppet default value.\n+\n+        @feature: Class Parameters - Matcher\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set default Value as puppet default value.\n+        3.  Create first matcher for attribute fqdn with valid details.\n+        4.  Create second matcher for other attribute with valid details.\n+        Note - The fqdn/host should have this attribute.\n+        5.  Create more matchers for some more attributes if any.\n+        Note - The fqdn/host should have this attributes.\n+        6.  Set 'merge overrides' to True.\n+        7.  Set 'merge default' to True.\n+        8.  Update the parameter with above steps.\n+        9.  Go to YAML output of associated host.\n+\n+        @assert:\n+\n+        1.  The YAML output has the values merged from all\n+        the associated matchers.\n+        2.  The YAML output doesn't have the puppet default value.\n+        3.  Duplicate values in YAML output if any are displayed.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_create_matcher_avoid_duplicate(self):\n+        \"\"\"Merge the values of all the associated matchers, remove duplicates.\n+\n+        @feature: Class Parameters - Matcher\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set some default Value of array type.\n+        3.  Create first matcher for attribute fqdn with some value.\n+        4.  Create second matcher for other attribute with\n+        same value as fqdn matcher.\n+        Note - The fqdn/host should have this attribute.\n+        5.  Set 'merge overrides' to True.\n+        6.  Set 'merge default' to True.\n+        7.  Set 'avoid duplicate' to True.\n+        8.  Update the parameter with above steps.\n+        9.  Go to YAML output of associated host.\n+\n+        @assert:\n+\n+        1.  The YAML output has the values merged from all\n+        the associated matchers.\n+        2.  The YAML output has the default value of parameter.\n+        3.  Duplicate values in YAML output are removed / not displayed.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_create_matcher_avoid_duplicate(self):\n+        \"\"\"Duplicates not removed as they were not really present.\n+\n+        @feature: Class Parameters - Matcher\n+\n+        @steps:\n+\n+        1.  Set override to True.\n+        2.  Set some default Value of array type.\n+        3.  Create first matcher for attribute fqdn with some value.\n+        4.  Create second matcher for other attribute with other value\n+        than fqdn matcher and default value.\n+        Note - The fqdn/host should have this attribute.\n+        5.  Set 'merge overrides' to True.\n+        6.  Set 'merge default' to True.\n+        7.  Set 'merge avoid duplicates' to True.\n+        8.  Update the parameter with above steps.\n+        9.  Go to YAML output of associated host.\n+\n+        @assert:\n+\n+        1.  The YAML output has the values merged from all matchers.\n+        2.  The YAML output has the default value of parameter.\n+        3.  No value removed as duplicate value.\n+\n+        @status: Manual\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_positive_enable_merge_overrides_default_checkboxes(self):\n+        \"\"\"Enable Merge Overrides, Merge Default checkbox for supported types.\n+\n+        @feature: Class Parameters - Matcher\n+\n+        @steps:\n+\n+        1.  Set parameter type to array/hash.\n+\n+        @assert: The Merge Overrides, Merge Default checks are","path":"tests/foreman/api/test_classparameters.py","position":846,"original_position":846,"commit_id":"a193121a8558224f3b1265d436c6c874a59c80a9","original_commit_id":"a193121a8558224f3b1265d436c6c874a59c80a9","user":{"login":"oshtaier","id":10895065,"avatar_url":"https://avatars.githubusercontent.com/u/10895065?v=3","gravatar_id":"","url":"https://api.github.com/users/oshtaier","html_url":"https://github.com/oshtaier","followers_url":"https://api.github.com/users/oshtaier/followers","following_url":"https://api.github.com/users/oshtaier/following{/other_user}","gists_url":"https://api.github.com/users/oshtaier/gists{/gist_id}","starred_url":"https://api.github.com/users/oshtaier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oshtaier/subscriptions","organizations_url":"https://api.github.com/users/oshtaier/orgs","repos_url":"https://api.github.com/users/oshtaier/repos","events_url":"https://api.github.com/users/oshtaier/events{/privacy}","received_events_url":"https://api.github.com/users/oshtaier/received_events","type":"User","site_admin":false},"body":"Please, use proper formatting here","created_at":"2016-02-22T09:37:29Z","updated_at":"2016-02-22T09:37:29Z","html_url":"https://github.com/SatelliteQE/robottelo/pull/3305#discussion_r53602444","pull_request_url":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/3305","_links":{"self":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/comments/53602444"},"html":{"href":"https://github.com/SatelliteQE/robottelo/pull/3305#discussion_r53602444"},"pull_request":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/3305"}}},"pull_request":{"url":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/3305","id":59934947,"html_url":"https://github.com/SatelliteQE/robottelo/pull/3305","diff_url":"https://github.com/SatelliteQE/robottelo/pull/3305.diff","patch_url":"https://github.com/SatelliteQE/robottelo/pull/3305.patch","issue_url":"https://api.github.com/repos/SatelliteQE/robottelo/issues/3305","number":3305,"state":"open","locked":false,"title":"All API stubs for Smart Class Parameter Feature","user":{"login":"jyejare","id":11752425,"avatar_url":"https://avatars.githubusercontent.com/u/11752425?v=3","gravatar_id":"","url":"https://api.github.com/users/jyejare","html_url":"https://github.com/jyejare","followers_url":"https://api.github.com/users/jyejare/followers","following_url":"https://api.github.com/users/jyejare/following{/other_user}","gists_url":"https://api.github.com/users/jyejare/gists{/gist_id}","starred_url":"https://api.github.com/users/jyejare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jyejare/subscriptions","organizations_url":"https://api.github.com/users/jyejare/orgs","repos_url":"https://api.github.com/users/jyejare/repos","events_url":"https://api.github.com/users/jyejare/events{/privacy}","received_events_url":"https://api.github.com/users/jyejare/received_events","type":"User","site_admin":false},"body":"All and Final set of API stubs for Smart Class Parameter Feature.\r\nIncludes below sub-components :\r\n1. List\r\n2. Override\r\n3. Puppet Default\r\n4.  Parameter Type\r\n5. Optional Validation\r\n6. Validation\r\n7. Matcher\r\n8.  Outside Impact\r\n9. Value Hiding\r\n\r\nThanks !","created_at":"2016-02-19T11:06:49Z","updated_at":"2016-02-22T09:37:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a9877e6b658f798c10fee26fb5e1675898b9eb98","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/3305/commits","review_comments_url":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/3305/comments","review_comment_url":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SatelliteQE/robottelo/issues/3305/comments","statuses_url":"https://api.github.com/repos/SatelliteQE/robottelo/statuses/a193121a8558224f3b1265d436c6c874a59c80a9","head":{"label":"jyejare:api_stubs_scp","ref":"api_stubs_scp","sha":"a193121a8558224f3b1265d436c6c874a59c80a9","user":{"login":"jyejare","id":11752425,"avatar_url":"https://avatars.githubusercontent.com/u/11752425?v=3","gravatar_id":"","url":"https://api.github.com/users/jyejare","html_url":"https://github.com/jyejare","followers_url":"https://api.github.com/users/jyejare/followers","following_url":"https://api.github.com/users/jyejare/following{/other_user}","gists_url":"https://api.github.com/users/jyejare/gists{/gist_id}","starred_url":"https://api.github.com/users/jyejare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jyejare/subscriptions","organizations_url":"https://api.github.com/users/jyejare/orgs","repos_url":"https://api.github.com/users/jyejare/repos","events_url":"https://api.github.com/users/jyejare/events{/privacy}","received_events_url":"https://api.github.com/users/jyejare/received_events","type":"User","site_admin":false},"repo":{"id":34853367,"name":"robottelo","full_name":"jyejare/robottelo","owner":{"login":"jyejare","id":11752425,"avatar_url":"https://avatars.githubusercontent.com/u/11752425?v=3","gravatar_id":"","url":"https://api.github.com/users/jyejare","html_url":"https://github.com/jyejare","followers_url":"https://api.github.com/users/jyejare/followers","following_url":"https://api.github.com/users/jyejare/following{/other_user}","gists_url":"https://api.github.com/users/jyejare/gists{/gist_id}","starred_url":"https://api.github.com/users/jyejare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jyejare/subscriptions","organizations_url":"https://api.github.com/users/jyejare/orgs","repos_url":"https://api.github.com/users/jyejare/repos","events_url":"https://api.github.com/users/jyejare/events{/privacy}","received_events_url":"https://api.github.com/users/jyejare/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jyejare/robottelo","description":"Robottelo is a test suite which exercises The Foreman.","fork":true,"url":"https://api.github.com/repos/jyejare/robottelo","forks_url":"https://api.github.com/repos/jyejare/robottelo/forks","keys_url":"https://api.github.com/repos/jyejare/robottelo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jyejare/robottelo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jyejare/robottelo/teams","hooks_url":"https://api.github.com/repos/jyejare/robottelo/hooks","issue_events_url":"https://api.github.com/repos/jyejare/robottelo/issues/events{/number}","events_url":"https://api.github.com/repos/jyejare/robottelo/events","assignees_url":"https://api.github.com/repos/jyejare/robottelo/assignees{/user}","branches_url":"https://api.github.com/repos/jyejare/robottelo/branches{/branch}","tags_url":"https://api.github.com/repos/jyejare/robottelo/tags","blobs_url":"https://api.github.com/repos/jyejare/robottelo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jyejare/robottelo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jyejare/robottelo/git/refs{/sha}","trees_url":"https://api.github.com/repos/jyejare/robottelo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jyejare/robottelo/statuses/{sha}","languages_url":"https://api.github.com/repos/jyejare/robottelo/languages","stargazers_url":"https://api.github.com/repos/jyejare/robottelo/stargazers","contributors_url":"https://api.github.com/repos/jyejare/robottelo/contributors","subscribers_url":"https://api.github.com/repos/jyejare/robottelo/subscribers","subscription_url":"https://api.github.com/repos/jyejare/robottelo/subscription","commits_url":"https://api.github.com/repos/jyejare/robottelo/commits{/sha}","git_commits_url":"https://api.github.com/repos/jyejare/robottelo/git/commits{/sha}","comments_url":"https://api.github.com/repos/jyejare/robottelo/comments{/number}","issue_comment_url":"https://api.github.com/repos/jyejare/robottelo/issues/comments{/number}","contents_url":"https://api.github.com/repos/jyejare/robottelo/contents/{+path}","compare_url":"https://api.github.com/repos/jyejare/robottelo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jyejare/robottelo/merges","archive_url":"https://api.github.com/repos/jyejare/robottelo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jyejare/robottelo/downloads","issues_url":"https://api.github.com/repos/jyejare/robottelo/issues{/number}","pulls_url":"https://api.github.com/repos/jyejare/robottelo/pulls{/number}","milestones_url":"https://api.github.com/repos/jyejare/robottelo/milestones{/number}","notifications_url":"https://api.github.com/repos/jyejare/robottelo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jyejare/robottelo/labels{/name}","releases_url":"https://api.github.com/repos/jyejare/robottelo/releases{/id}","deployments_url":"https://api.github.com/repos/jyejare/robottelo/deployments","created_at":"2015-04-30T12:32:04Z","updated_at":"2015-04-30T12:32:05Z","pushed_at":"2016-02-19T11:02:52Z","git_url":"git://github.com/jyejare/robottelo.git","ssh_url":"git@github.com:jyejare/robottelo.git","clone_url":"https://github.com/jyejare/robottelo.git","svn_url":"https://github.com/jyejare/robottelo","homepage":"","size":11021,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"SatelliteQE:master","ref":"master","sha":"f8fd429198aa8ce831a0435b4fb8cdb53e2af5e4","user":{"login":"SatelliteQE","id":8754276,"avatar_url":"https://avatars.githubusercontent.com/u/8754276?v=3","gravatar_id":"","url":"https://api.github.com/users/SatelliteQE","html_url":"https://github.com/SatelliteQE","followers_url":"https://api.github.com/users/SatelliteQE/followers","following_url":"https://api.github.com/users/SatelliteQE/following{/other_user}","gists_url":"https://api.github.com/users/SatelliteQE/gists{/gist_id}","starred_url":"https://api.github.com/users/SatelliteQE/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SatelliteQE/subscriptions","organizations_url":"https://api.github.com/users/SatelliteQE/orgs","repos_url":"https://api.github.com/users/SatelliteQE/repos","events_url":"https://api.github.com/users/SatelliteQE/events{/privacy}","received_events_url":"https://api.github.com/users/SatelliteQE/received_events","type":"Organization","site_admin":false},"repo":{"id":4000279,"name":"robottelo","full_name":"SatelliteQE/robottelo","owner":{"login":"SatelliteQE","id":8754276,"avatar_url":"https://avatars.githubusercontent.com/u/8754276?v=3","gravatar_id":"","url":"https://api.github.com/users/SatelliteQE","html_url":"https://github.com/SatelliteQE","followers_url":"https://api.github.com/users/SatelliteQE/followers","following_url":"https://api.github.com/users/SatelliteQE/following{/other_user}","gists_url":"https://api.github.com/users/SatelliteQE/gists{/gist_id}","starred_url":"https://api.github.com/users/SatelliteQE/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SatelliteQE/subscriptions","organizations_url":"https://api.github.com/users/SatelliteQE/orgs","repos_url":"https://api.github.com/users/SatelliteQE/repos","events_url":"https://api.github.com/users/SatelliteQE/events{/privacy}","received_events_url":"https://api.github.com/users/SatelliteQE/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SatelliteQE/robottelo","description":"Robottelo is a test suite which exercises The Foreman.","fork":false,"url":"https://api.github.com/repos/SatelliteQE/robottelo","forks_url":"https://api.github.com/repos/SatelliteQE/robottelo/forks","keys_url":"https://api.github.com/repos/SatelliteQE/robottelo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SatelliteQE/robottelo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SatelliteQE/robottelo/teams","hooks_url":"https://api.github.com/repos/SatelliteQE/robottelo/hooks","issue_events_url":"https://api.github.com/repos/SatelliteQE/robottelo/issues/events{/number}","events_url":"https://api.github.com/repos/SatelliteQE/robottelo/events","assignees_url":"https://api.github.com/repos/SatelliteQE/robottelo/assignees{/user}","branches_url":"https://api.github.com/repos/SatelliteQE/robottelo/branches{/branch}","tags_url":"https://api.github.com/repos/SatelliteQE/robottelo/tags","blobs_url":"https://api.github.com/repos/SatelliteQE/robottelo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SatelliteQE/robottelo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SatelliteQE/robottelo/git/refs{/sha}","trees_url":"https://api.github.com/repos/SatelliteQE/robottelo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SatelliteQE/robottelo/statuses/{sha}","languages_url":"https://api.github.com/repos/SatelliteQE/robottelo/languages","stargazers_url":"https://api.github.com/repos/SatelliteQE/robottelo/stargazers","contributors_url":"https://api.github.com/repos/SatelliteQE/robottelo/contributors","subscribers_url":"https://api.github.com/repos/SatelliteQE/robottelo/subscribers","subscription_url":"https://api.github.com/repos/SatelliteQE/robottelo/subscription","commits_url":"https://api.github.com/repos/SatelliteQE/robottelo/commits{/sha}","git_commits_url":"https://api.github.com/repos/SatelliteQE/robottelo/git/commits{/sha}","comments_url":"https://api.github.com/repos/SatelliteQE/robottelo/comments{/number}","issue_comment_url":"https://api.github.com/repos/SatelliteQE/robottelo/issues/comments{/number}","contents_url":"https://api.github.com/repos/SatelliteQE/robottelo/contents/{+path}","compare_url":"https://api.github.com/repos/SatelliteQE/robottelo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SatelliteQE/robottelo/merges","archive_url":"https://api.github.com/repos/SatelliteQE/robottelo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SatelliteQE/robottelo/downloads","issues_url":"https://api.github.com/repos/SatelliteQE/robottelo/issues{/number}","pulls_url":"https://api.github.com/repos/SatelliteQE/robottelo/pulls{/number}","milestones_url":"https://api.github.com/repos/SatelliteQE/robottelo/milestones{/number}","notifications_url":"https://api.github.com/repos/SatelliteQE/robottelo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SatelliteQE/robottelo/labels{/name}","releases_url":"https://api.github.com/repos/SatelliteQE/robottelo/releases{/id}","deployments_url":"https://api.github.com/repos/SatelliteQE/robottelo/deployments","created_at":"2012-04-12T01:36:39Z","updated_at":"2016-01-08T15:06:33Z","pushed_at":"2016-02-22T08:58:57Z","git_url":"git://github.com/SatelliteQE/robottelo.git","ssh_url":"git@github.com:SatelliteQE/robottelo.git","clone_url":"https://github.com/SatelliteQE/robottelo.git","svn_url":"https://github.com/SatelliteQE/robottelo","homepage":"","size":12071,"stargazers_count":23,"watchers_count":23,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":36,"mirror_url":null,"open_issues_count":140,"forks":36,"open_issues":140,"watchers":23,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/3305"},"html":{"href":"https://github.com/SatelliteQE/robottelo/pull/3305"},"issue":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/issues/3305"},"comments":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/issues/3305/comments"},"review_comments":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/3305/comments"},"review_comment":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/3305/commits"},"statuses":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/statuses/a193121a8558224f3b1265d436c6c874a59c80a9"}}}}