{"action":"created","comment":{"url":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/comments/73480524","id":73480524,"diff_hunk":"@@ -0,0 +1,1120 @@\n+# -*- encoding: utf-8 -*-\n+\"\"\"Test class for Puppet Smart Variables\n+\n+@Requirement: Variables\n+\n+@CaseAutomation: Automated\n+\n+@CaseLevel: Acceptance\n+\n+@CaseComponent: CLI\n+\n+@TestType: Functional\n+\n+@CaseImportance: High\n+\n+@Upstream: No\n+\"\"\"\n+\n+from robottelo.decorators import (\n+    run_only_on,\n+    skip_if_bug_open,\n+    stubbed,\n+    tier1,\n+    tier2,\n+    tier3\n+)\n+from robottelo.test import CLITestCase\n+\n+\n+class SmartVariablesTestCase(CLITestCase):\n+    \"\"\"Implements Smart Variables tests in CLI\"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier2\n+    def test_positive_list_variables_by_host_name(self):\n+        \"\"\"List all smart variables associated to host by hostname.\n+\n+        @id: ee958cba-d5e2-4daf-a54a-8b9cd4749d8c\n+\n+        @steps: List all the smart variables associated to specific host by\n+        hostname.\n+\n+        @assert: Smart Variables listed for specific Host by hostname.\n+\n+        @CaseLevel: Integration\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier2\n+    def test_positive_list_variables_by_host_id(self):\n+        \"\"\"List all smart variables associated to host by host id.\n+\n+        @id: caa71ff5-09c7-44f2-92fe-8618536e84de\n+\n+        @steps: List all the smart variables associated to specific host by\n+        host id.\n+\n+        @assert: Smart Variables listed for specific Host by host id.\n+\n+        @CaseLevel: Integration\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier2\n+    def test_positive_list_variables_by_hostgroup_name(self):\n+        \"\"\"List all smart variables associated to hostgroup by hostgroup name\n+\n+        @id: 9d6ae8e7-0da5-423e-bef4-df65a138c02f\n+\n+        @steps: List all smart variables associated to hostgroup by hostgroup\n+        name.\n+\n+        @assert: Smart Variables listed for specific HostGroup by hostgroup\n+        name.\n+\n+        @CaseLevel: Integration\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier2\n+    def test_positive_list_variables_by_hostgroup_id(self):\n+        \"\"\"List all smart variables associated to hostgroup by hostgroup id\n+\n+        @id: 3477b073-4a63-42df-af55-5c47b835ae24\n+\n+        @steps: List all smart variables associated to hostgroup by hostgroup\n+        id.\n+\n+        @assert: Smart Variables listed for specific HostGroup by hostgroup id.\n+\n+        @CaseLevel: Integration\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_list_variables_by_puppetclass_name(self):\n+        \"\"\"List all smart variables associated to puppet class by puppet class\n+        name.\n+\n+        @id: 5df71b8d-ab85-43cd-83f2-a0afe9e467a0\n+\n+        @steps: List all smart variables associated to puppet class by puppet\n+        class name.\n+\n+        @assert: Smart Variables listed for specific puppet class by puppet\n+        class name.\n+\n+        @CaseLevel: Integration\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_list_variables_by_puppetclass_id(self):\n+        \"\"\"List all smart variables associated to puppet class by puppet class\n+        id.\n+\n+        @id: ba261c80-699c-4b75-9e07-b80cb0a80c55\n+\n+        @steps: List all smart variables associated to puppet class by puppet\n+        class id.\n+\n+        @assert: Smart Variables listed for specific puppet class by puppet\n+        class id.\n+\n+        @CaseLevel: Integration\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_create(self):\n+        \"\"\"Create a Smart Variable.\n+\n+        @id: 4a8589bf-7b11-48e8-a25d-984bea2ba676\n+\n+        @steps:\n+\n+        1. Create a smart Variable with Valid name and default value.\n+\n+        @assert: The smart Variable is created successfully.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_create(self):\n+        \"\"\"Create Smart Variable with invalid name.\n+\n+        @id: 09a67cb6-5de0-41b3-90f4-593323936c6c\n+\n+        @steps:\n+\n+        1. Create a smart Variable with Invalid name and valid default value.\n+\n+        @assert: The smart Variable is not created.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_delete_smart_variable_by_id(self):\n+        \"\"\"Delete a Smart Variable by id.\n+\n+        @id: 19fedbdf-48a1-46a7-b184-615a0efd7b4e\n+\n+        @steps:\n+\n+        1. Delete a smart Variable by id.\n+\n+        @assert: The smart Variable is deleted successfully.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_delete_smart_variable_by_name(self):\n+        \"\"\"Delete a Smart Variable by name.\n+\n+        @id: 19fedbdf-48a1-46a7-b184-615a0efd7b4e\n+\n+        @steps:\n+\n+        1. Delete a smart Variable by name.\n+\n+        @assert: The smart Variable is deleted successfully.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_update_variable_puppet_class(self):\n+        \"\"\"Update Smart Variable's puppet class.\n+\n+        @id: 6c3e2da9-420c-4e39-8b71-e5be6b605bd7\n+\n+        @steps:\n+\n+        1. Create a smart variable with valid name and default value.\n+        2. Add this variable to some host/hostgroup.\n+        3. Update the puppet class associated to the smart variable created in\n+        step1.\n+\n+        @assert:\n+\n+        1. The variable is updated with new puppet class.\n+        2. In Host/HostGroup -> variables tab, the smart variable is updated\n+        with its newly updated puppet class.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_negative_globality(self):\n+        \"\"\"Create Smart Variable with an existing name.\n+\n+        @id: 7f37194d-4a12-437b-a284-3350cf048eea\n+\n+        @steps:\n+\n+        1. Create a smart Variable with Valid name and default value.\n+        2. Attempt to create a variable with same name from same/other class.\n+\n+        @assert: The variable with same name are not allowed to create from\n+        any class.\n+\n+        @caseautomation: notautomated\n+\n+        @CaseLevel: System\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_create_type(self):\n+        \"\"\"Create smart variable with all valid key types and values.\n+\n+        Types - string, boolean, integer, real, array, hash, yaml, json\n+\n+        @id: d89cdd32-dd2b-46fe-bcc2-8c66d92cc6f8\n+\n+        @steps:\n+\n+        1.  Create a variable with valid key type and default value.\n+\n+        @assert: Variable is created with a new type successfully.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_update_type(self):\n+        \"\"\"Create smart variable with all valid key types but invalid values.\n+\n+        Types - string, boolean, integer, real, array, hash, yaml, json\n+\n+        @id: d64d1b6d-028a-4782-a6d4-e3029d7118b6\n+\n+        @steps:\n+\n+        1.  Create a variable with valid key type and invalid default value.\n+\n+        @assert: Variable is not created with new type for invalid value.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_validate_default_value_required_flag(self):\n+        \"\"\"Test required flag works for empty default value.\n+\n+        @id: cdbe5feb-daf1-49c4-98c0-5bbbd436c3e8\n+\n+        @steps:\n+\n+        1.  Create a variable with valid default value and required flag to\n+        True.\n+        2. Attempt to override the variable with empty value from associated\n+        host.\n+\n+        @assert: The variable value is not overridden with empty value.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_validate_default_value_required_flag(self):\n+        \"\"\"Test required flag works for non empty default value.\n+\n+        @id: 09e42df9-2fe1-444f-a603-6f7b6b3f127e\n+\n+        @steps:\n+\n+        1.  Create a variable with some default value and required flag set to\n+        True.\n+        2. Attempt to override the variable with valid value from associated\n+        host.\n+\n+        @assert: The variable value is overridden with empty value.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_validate_matcher_value_required_flag(self):\n+        \"\"\"Test required flag works for empty matcher value.\n+\n+        @id: 7e02efb6-e1a2-4872-877a-78075b2de182\n+\n+        @steps:\n+\n+        1.  Create a matcher for variable for some attribute with blank value.\n+        2.  Set required flag to true.\n+\n+        @assert: Matcher is not created for blank value.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_validate_matcher_value_required_flag(self):\n+        \"\"\"Test required flag works for non empty matcher value.\n+\n+        @id: 6c742180-ddb1-4cd0-a04c-911b2a8f4ea4\n+\n+        @steps:\n+\n+        1.  Create a matcher for variable for some attribute with some Value.\n+        2.  Set required flag to true.\n+\n+        @assert: Matcher is created.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_validate_default_value_with_regex(self):\n+        \"\"\"Test variable is not created for unmatched validator type regex.\n+\n+        @id: 5285b784-e02c-4f3b-a053-93b36bf9fbfc\n+\n+        @steps:\n+\n+        1.  Create a variable with value that doesn't match the regex of step 2\n+        2.  Validate this value with regex validator type and valid rule.\n+\n+        @assert: Variable is not created for unmatched validator rule.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_validate_default_value_with_regex(self):\n+        \"\"\"Test variable is created for matched validator type regex.\n+\n+        @id: 7a329b05-7efd-42d2-b472-1a36d0ee6464\n+\n+        @steps:\n+\n+        1.  Create a variable with some default value that matches the regex of\n+        step 2\n+        2.  Validate this value with regex validator type and rule.\n+\n+        @assert: Variable is created for matched validator rule.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_validate_matcher_value_with_regex(self):\n+        \"\"\"Test matcher is not created for unmatched validator type regex.\n+\n+        @id: b8e039b3-2491-4dba-a91b-a4aa3fc7f544\n+\n+        @steps:\n+\n+        1.  Create a matcher with value that doesn't match the regex of step 2.\n+        2.  Validate this value with regex validator type and rule.\n+\n+        @assert: Matcher is not created for unmatched validator rule.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_validate_matcher_value_with_regex(self):\n+        \"\"\"Test matcher is created for matched validator type regex.\n+\n+        @id: 04a8f849-6323-4e54-9f07-fb750b911a4c\n+\n+        @steps:\n+\n+        1.  Create a matcher with value that matches the regex of step 2.\n+        2.  Validate this value with regex validator type and rule.\n+\n+        @assert: Matcher is created for matched validator rule.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_validate_default_value_with_list(self):\n+        \"\"\"Test variable is not created for unmatched validator type list.\n+\n+        @id: d1aa9149-9025-4492-95d0-e72aec8eadc3\n+\n+        @steps:\n+\n+        1.  Create variable with some default value that doesn't match the list\n+        of step 2.\n+        2.  Validate this value with list validator type and rule.\n+\n+        @assert: Variable is not created for unmatched validator rule.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_validate_default_value_with_list(self):\n+        \"\"\"Test variable is created for matched validator type list.\n+\n+        @id: 5ea443f2-ec91-4986-b97c-1c28fb862e1c\n+\n+        @steps:\n+\n+        1.  Create a variable with some default value that matches the list of\n+        step 2.\n+        2.  Validate this value with list validator type and rule.\n+\n+        @assert: Variable is created for matched validator rule.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_validate_matcher_value_with_list(self):\n+        \"\"\"Test matcher is not created for unmatched validator type list.\n+\n+        @id: 87d128b9-c7f7-4396-b162-60021b0ef682\n+\n+        @steps:\n+\n+        1.  Create a matcher with value that doesn't match the list of step 2.\n+        2.  Validate this value with list validator type and rule.\n+\n+        @assert: Matcher is not created for unmatched validator rule.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_validate_matcher_value_with_list(self):\n+        \"\"\"Test matcher is created for matched validator type list.\n+\n+        @id: ac91eaf5-2a15-4d54-b078-a37b60074287\n+\n+        @steps:\n+\n+        1.  Create a matcher with value that matches the list of step 2.\n+        2.  Validate this value with list validator type and rule.\n+\n+        @assert: Matcher is created for matched validator rule.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_validate_matcher_value_with_default_type(self):\n+        \"\"\"Matcher is not created for value not of default type.\n+\n+        @id: 466197ea-44f0-46d0-b111-686b72183fe5\n+\n+        @steps:\n+\n+        1.  Create variable with valid default value.\n+        2.  Create matcher with value that doesn't match the default type.\n+\n+        @assert: Matcher is not created for unmatched type.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_positive_validate_matcher_value_with_default_type(self):\n+        \"\"\"Matcher is created for default type value.\n+\n+        @id: 033bf7d8-a488-49c1-b900-9e7169e945e0\n+\n+        @steps:\n+\n+        1.  Create variable default type with valid value.\n+        2.  Create a matcher with value that matches the default type.\n+\n+        @assert: Matcher is created for matched type.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_validate_matcher_non_existing_attribute(self):\n+        \"\"\"Test matcher creation for non-existing attribute.\n+\n+        @id: 27ef1ef0-1c89-47eb-89e0-3da161154513\n+\n+        @steps:\n+\n+        1.  Attempt to create a matcher with non existing attribute.\n+\n+        @assert: Matcher is not created for non-existing attribute.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @skip_if_bug_open('bugzilla', 1259174)\n+    @stubbed()\n+    @tier1\n+    def test_positive_create_matcher(self):\n+        \"\"\"Create a Smart Variable with matcher.\n+\n+        @id: 42113584-d2db-4b91-8775-06bffee36be4\n+\n+        @steps:\n+\n+        1. Create a smart variable with valid name and default value.\n+        2. Create a matcher for Host with valid value.\n+\n+        @assert:\n+\n+        1. The smart Variable with matcher is created successfully.\n+        2. The variable is associated with host with match.\n+\n+        @caseautomation: notautomated\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+        @id: 65144295-f0ca-4bd0-ae01-96c50ca829fe\n+\n+        @steps:\n+\n+        1.  Create variable with some default value.\n+        2.  Set fqdn as top priority attribute.\n+        3.  Create first matcher for fqdn with valid details.\n+        4.  Create second matcher for some attribute with valid details.\n+        Note - The fqdn/host should have this attribute.\n+        5.  Go to YAML output of associated host.\n+\n+        @assert: The YAML output has the value only for fqdn matcher.\n+\n+        @caseautomation: notautomated\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+        @id: 7e52b054-4fcb-4c58-ae49-0d3348d14570\n+\n+        @steps:\n+\n+        1.  Create variable with some default value.\n+        2.  Set some attribute(other than fqdn) as top priority attribute.\n+        Note - The fqdn/host should have this attribute.\n+        3.  Create first matcher for fqdn with valid details.\n+        4.  Create second matcher for attribute of step 3 with valid details.\n+        5.  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+        @caseautomation: notautomated\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+        @id: b9c9b1c7-ff9a-4080-aeee-3b61b5414332\n+\n+        @steps:\n+\n+        1.  Create variable with some default value.\n+        2.  Create first matcher for attribute fqdn with valid details.\n+        3.  Create second matcher for other attribute with valid details.\n+        Note - The fqdn/host should have this attribute.\n+        4.  Create more matchers for some more attributes if any.\n+        Note - The fqdn/host should have this attributes.\n+        5.  Set --merge-overrides to true.\n+        6.  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 variable.\n+        3.  Duplicate values in YAML output if any are displayed.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_create_matcher_merge_override(self):\n+        \"\"\"Test merge the values from non associated matchers.\n+\n+        @id: 3cc2a7b3-7b46-4c8c-b719-79c004ae04c6\n+\n+        @steps:\n+\n+        1.  Create variable with 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.  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 variable.\n+        4.  Duplicate values in YAML output if any are displayed.\n+\n+        @caseautomation: notautomated\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+        @id: 21d8fde8-0844-4384-b86a-30547c82b221\n+\n+        @steps:\n+\n+        1. Create variable with some default value.\n+        2. Create first matcher for attribute fqdn with valid details.\n+        3. Create second matcher for other attribute with valid details.\n+        Note - The fqdn/host should have this attribute.\n+        4. Create more matchers for some more attributes if any.\n+        Note - The fqdn/host should have this attributes.\n+        5. Set --merge-overrides to true.\n+        6. Set --merge-default to true.\n+        7. 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 variable.\n+        3. Duplicate values in YAML output if any are displayed.\n+\n+        @caseautomation: notautomated\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier1\n+    def test_negative_create_matcher_merge_default(self):\n+        \"\"\"Test empty default value in merged values.\n+\n+        @id: 98f8fe63-d125-4d27-a15a-2550c9e5f0ff\n+\n+        @steps:\n+\n+        1. Create variable with some default value.\n+        2. Create first matcher for attribute fqdn with valid details.\n+        3. Create second matcher for other attribute with valid details.\n+        Note - The fqdn/host should have this attribute.\n+        4. Create more matchers for some more attributes if any.\n+        Note - The fqdn/host should have this attributes.\n+        5. Set --merge-overrides to true.\n+        6. Set --merge-default to true.\n+        7. 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 variable.\n+        3.  Duplicate values in YAML output if any are displayed.\n+\n+        @caseautomation: notautomated\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+        @id: 75fc514f-70dd-4cc1-8069-221e9edda89a\n+\n+        @steps:\n+\n+        1.  Create variable with type array and value.\n+        2.  Create first matcher for attribute fqdn with some value.\n+        3.  Create second matcher for other attribute with\n+        same value as fqdn matcher.\n+        Note - The fqdn/host should have this attribute.\n+        4.  Set --merge-overrides to true.\n+        5.  Set --merge-default to true.\n+        6.  Set --avoid -duplicates' to true.\n+        8.  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 variable.\n+        3.  Duplicate values in YAML output are removed / not displayed.\n+\n+        @caseautomation: notautomated\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+        @id: 050c7cef-eed6-4a61-b567-371f398647a2\n+\n+        @steps:\n+\n+        1.  Create variable with type array and value.\n+        2.  Create first matcher for attribute fqdn with some value.\n+        3.  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+        4.  Set --merge-overrides to true.\n+        5.  Set --merge-default to true.\n+        6.  Set --avoid -duplicates' to true.\n+        7.  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 variable.\n+        3.  No value removed as duplicate value.\n+\n+        @caseautomation: notautomated\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+        @id: a86b3f97-f491-444b-ab7f-85218689e97f\n+\n+        @steps:\n+\n+        1.  Set variable type to array/hash.\n+\n+        @assert: The Merge Overrides, Merge Default checkbox are allowed to set\n+        true.\n+\n+        @caseautomation: notautomated\n+\n+        @CaseLevel: System\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_negative_enable_merge_overrides_default_checkboxes(self):\n+        \"\"\"Disable Merge Overrides, Merge Default checkboxes for non supported types.\n+\n+        @id: 834af938-e056-4a40-8831-91f6400aedd3\n+\n+        @steps:\n+\n+        1.  Set variable type other than array/hash.\n+\n+        @assert: The Merge Overrides, Merge Default checkboxes are not allowed\n+        to set to true.\n+\n+        @caseautomation: notautomated\n+\n+        @CaseLevel: System\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_positive_enable_avoid_duplicates_checkbox(self):\n+        \"\"\"Enable Avoid duplicates checkbox for supported type- array.\n+\n+        @id: 8856afbf-67cd-4470-9527-34bb0b2962e3\n+\n+        @steps:\n+\n+        1. Set variable type to array.\n+        2. Set '--merge-overrides' to true.\n+\n+        @assert: The '--avoid-duplicates' is allowed to set true.\n+\n+        @caseautomation: notautomated\n+\n+        @CaseLevel: System\n+        \"\"\"\n+\n+    @run_only_on('sat')\n+    @stubbed()\n+    @tier3\n+    def test_negative_enable_avaoid_duplicates_checkbox(self):\n+        \"\"\"Disable Avoid duplicates checkbox for non supported types.","path":"tests/foreman/cli/test_variables.py","position":872,"original_position":872,"commit_id":"2f132020d95aa89b143c3913bd3ce8adf688eb39","original_commit_id":"2f132020d95aa89b143c3913bd3ce8adf688eb39","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":"We don't have checkboxes in CLI, please transform stub for CLI language","created_at":"2016-08-04T08:20:36Z","updated_at":"2016-08-04T08:20:36Z","html_url":"https://github.com/SatelliteQE/robottelo/pull/3679#discussion_r73480524","pull_request_url":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/3679","_links":{"self":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/comments/73480524"},"html":{"href":"https://github.com/SatelliteQE/robottelo/pull/3679#discussion_r73480524"},"pull_request":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/3679"}}},"pull_request":{"url":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/3679","id":79702747,"html_url":"https://github.com/SatelliteQE/robottelo/pull/3679","diff_url":"https://github.com/SatelliteQE/robottelo/pull/3679.diff","patch_url":"https://github.com/SatelliteQE/robottelo/pull/3679.patch","issue_url":"https://api.github.com/repos/SatelliteQE/robottelo/issues/3679","number":3679,"state":"open","locked":false,"title":"Stubs for Smart Variables CLI closes #3678","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":"Write stubs for Smart Variables CLI in robotello.","created_at":"2016-08-02T09:27:44Z","updated_at":"2016-08-04T08:20:36Z","closed_at":null,"merged_at":null,"merge_commit_sha":"125e8e60bc43e01a444aa284d77693a1cfd9f2da","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/3679/commits","review_comments_url":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/3679/comments","review_comment_url":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SatelliteQE/robottelo/issues/3679/comments","statuses_url":"https://api.github.com/repos/SatelliteQE/robottelo/statuses/2f132020d95aa89b143c3913bd3ce8adf688eb39","head":{"label":"jyejare:smart_vars_cli_stubs","ref":"smart_vars_cli_stubs","sha":"2f132020d95aa89b143c3913bd3ce8adf688eb39","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-08-03T12:38:24Z","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":12828,"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":"aedb695c75224c2733fc45e985efb692a2e4e401","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-06-01T16:21:06Z","pushed_at":"2016-08-04T06:06:25Z","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":14018,"stargazers_count":24,"watchers_count":24,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":45,"mirror_url":null,"open_issues_count":153,"forks":45,"open_issues":153,"watchers":24,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/3679"},"html":{"href":"https://github.com/SatelliteQE/robottelo/pull/3679"},"issue":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/issues/3679"},"comments":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/issues/3679/comments"},"review_comments":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/3679/comments"},"review_comment":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/pulls/3679/commits"},"statuses":{"href":"https://api.github.com/repos/SatelliteQE/robottelo/statuses/2f132020d95aa89b143c3913bd3ce8adf688eb39"}}}}
{"actor":{"display_login":"oshtaier"}}