foreman_puppet 0.0.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +61 -7
  3. data/app/controllers/concerns/foreman_puppet/environments_import.rb +1 -1
  4. data/app/controllers/concerns/foreman_puppet/extensions/api_base_controller.rb +28 -0
  5. data/app/controllers/concerns/foreman_puppet/extensions/api_template_combinations_controller.rb +1 -1
  6. data/app/controllers/concerns/foreman_puppet/extensions/hostgroups_controller_extensions.rb +1 -1
  7. data/app/controllers/concerns/foreman_puppet/extensions/hosts_controller_extensions.rb +1 -1
  8. data/app/controllers/concerns/foreman_puppet/extensions/parameters_host.rb +3 -10
  9. data/app/controllers/concerns/foreman_puppet/parameters/puppetclass_lookup_key.rb +2 -2
  10. data/app/controllers/foreman_puppet/api/v2/config_groups_controller.rb +9 -1
  11. data/app/controllers/foreman_puppet/api/v2/environments_controller.rb +5 -2
  12. data/app/controllers/foreman_puppet/api/v2/host_classes_controller.rb +9 -1
  13. data/app/controllers/foreman_puppet/api/v2/hostgroup_classes_controller.rb +9 -1
  14. data/app/controllers/foreman_puppet/api/v2/override_values_controller.rb +1 -2
  15. data/app/controllers/foreman_puppet/api/v2/{base_controller.rb → puppet_base_controller.rb} +3 -4
  16. data/app/controllers/foreman_puppet/api/v2/{lookups_common_controller.rb → puppet_lookups_common_controller.rb} +6 -2
  17. data/app/controllers/foreman_puppet/api/v2/puppetclasses_controller.rb +5 -1
  18. data/app/controllers/foreman_puppet/api/v2/smart_class_parameters_controller.rb +1 -2
  19. data/app/controllers/foreman_puppet/config_groups_controller.rb +4 -0
  20. data/app/controllers/foreman_puppet/puppet_smart_proxies_controller.rb +4 -0
  21. data/app/controllers/foreman_puppet/puppetclass_lookup_keys_controller.rb +2 -2
  22. data/app/controllers/foreman_puppet/puppetclasses_controller.rb +12 -4
  23. data/app/graphgl/concerns/foreman_puppet/mutations/hosts/create_extensions.rb +29 -0
  24. data/app/graphgl/concerns/foreman_puppet/types/host_extensions.rb +13 -0
  25. data/app/graphgl/concerns/foreman_puppet/types/hostgroup_extensions.rb +13 -0
  26. data/app/graphgl/concerns/foreman_puppet/types/interface_attributes_input_extensions.rb +9 -0
  27. data/app/graphgl/concerns/foreman_puppet/types/location_extensions.rb +14 -0
  28. data/app/graphgl/concerns/foreman_puppet/types/organization_extensions.rb +14 -0
  29. data/app/graphgl/foreman_puppet/types/environment.rb +20 -0
  30. data/app/graphgl/foreman_puppet/types/puppetclass.rb +20 -0
  31. data/app/helpers/foreman_puppet/environments_helper.rb +1 -1
  32. data/app/helpers/foreman_puppet/hosts_helper.rb +15 -0
  33. data/app/helpers/foreman_puppet/puppetclass_lookup_keys_helper.rb +2 -2
  34. data/app/helpers/foreman_puppet/puppetclasses_and_environments_helper.rb +1 -1
  35. data/app/helpers/foreman_puppet/puppetclasses_helper.rb +2 -2
  36. data/app/models/concerns/foreman_puppet/extensions/host.rb +24 -9
  37. data/app/models/concerns/foreman_puppet/extensions/host_common.rb +17 -0
  38. data/app/models/concerns/foreman_puppet/extensions/hostgroup.rb +13 -7
  39. data/app/models/concerns/foreman_puppet/extensions/operatingsystem.rb +1 -1
  40. data/app/models/concerns/foreman_puppet/extensions/provisioning_template.rb +19 -13
  41. data/app/models/concerns/foreman_puppet/extensions/report.rb +18 -0
  42. data/app/models/concerns/foreman_puppet/extensions/taxonomy.rb +1 -1
  43. data/app/models/concerns/foreman_puppet/extensions/template_combination.rb +1 -1
  44. data/app/models/concerns/foreman_puppet/extensions/user.rb +19 -12
  45. data/app/models/foreman_puppet/environment.rb +2 -0
  46. data/app/models/foreman_puppet/environment_class.rb +1 -1
  47. data/app/models/foreman_puppet/host_class.rb +1 -1
  48. data/app/models/foreman_puppet/host_puppet_facet.rb +6 -5
  49. data/app/models/foreman_puppet/hostgroup_puppet_facet.rb +1 -1
  50. data/app/models/{concerns/foreman_puppet/host_common.rb → foreman_puppet/puppet_facet_common.rb} +1 -1
  51. data/app/models/foreman_puppet/puppetclass.rb +15 -1
  52. data/app/{views/api/v2/template_combinations/base.json.erb → prepend_views/api/v2/template_combinations/base.json.rabl} +0 -0
  53. data/app/services/foreman_puppet/host_info_providers/config_groups_info.rb +2 -0
  54. data/app/services/foreman_puppet/puppet_class_importer.rb +17 -18
  55. data/app/views/foreman_puppet/common/_puppetclasses_or_envs_changed.html.erb +62 -0
  56. data/app/views/foreman_puppet/config_groups/index.html.erb +2 -2
  57. data/app/views/foreman_puppet/config_groups/welcome.html.erb +12 -11
  58. data/app/views/foreman_puppet/environments/index.html.erb +1 -1
  59. data/app/views/foreman_puppet/environments/welcome.html.erb +3 -15
  60. data/app/views/foreman_puppet/puppetclass_lookup_keys/welcome.html.erb +10 -8
  61. data/app/views/foreman_puppet/puppetclasses/_classes.html.erb +1 -1
  62. data/app/views/foreman_puppet/puppetclasses/_selected_classes.html.erb +1 -1
  63. data/app/views/foreman_puppet/puppetclasses/index.html.erb +1 -1
  64. data/app/views/hosts/_form_puppet_enc_tab.html.erb +1 -1
  65. data/app/views/hosts/select_multiple_environment.html.erb +1 -1
  66. data/app/views/smart_proxies/plugins/_puppet_ca.html.erb +44 -0
  67. data/config/initializers/api_reroute.rb +13 -0
  68. data/db/migrate/20200803113903_migrate_host_type_in_host_config_groups.foreman_puppet.rb +37 -12
  69. data/db/migrate/20201125113903_migrate_puppetclasses_to_facets.foreman_puppet.rb +13 -1
  70. data/lib/foreman_puppet/engine.rb +68 -20
  71. data/lib/foreman_puppet/register.rb +7 -2
  72. data/lib/foreman_puppet/version.rb +1 -1
  73. data/lib/foreman_puppet.rb +3 -3
  74. data/locale/Makefile +1 -1
  75. data/locale/en/LC_MESSAGES/foreman_puppet.mo +0 -0
  76. data/locale/en/foreman_puppet.edit.po +19 -3
  77. data/locale/en/foreman_puppet.po +18 -6
  78. data/locale/en/foreman_puppet.pox +0 -0
  79. data/locale/foreman_puppet.pot +19 -3
  80. data/locale/messages.mo +0 -0
  81. data/test/controllers/foreman_puppet/api/v2/config_groups_controller_test.rb +7 -3
  82. data/test/controllers/foreman_puppet/api/v2/environments_controller_test.rb +18 -16
  83. data/test/controllers/foreman_puppet/api/v2/hosts_controller_test.rb +3 -2
  84. data/test/controllers/foreman_puppet/api/v2/lookups_common_controller_test.rb +1 -1
  85. data/test/controllers/foreman_puppet/api/v2/provisioning_templates_controller_test.rb +32 -0
  86. data/test/controllers/foreman_puppet/api/v2/puppetclasses_controller_test.rb +3 -0
  87. data/test/controllers/foreman_puppet/api/v2/smart_class_parameters_controller_test.rb +7 -1
  88. data/test/controllers/foreman_puppet/api/v2/template_combinations_controller_test.rb +2 -2
  89. data/test/controllers/foreman_puppet/config_groups_controller_test.rb +7 -3
  90. data/test/controllers/foreman_puppet/environments_controller_test.rb +2 -2
  91. data/test/controllers/foreman_puppet/puppetclass_lookup_keys_controller_test.rb +2 -2
  92. data/test/controllers/foreman_puppet/puppetclasses_controller_test.rb +5 -6
  93. data/test/factories/foreman_puppet_factories.rb +3 -0
  94. data/test/factories/host_puppet_enhancements.rb +6 -6
  95. data/test/graphql/mutations/hosts/create_mutation_test.rb +87 -0
  96. data/test/graphql/queries/environment_query_test.rb +54 -0
  97. data/test/graphql/queries/environments_query_test.rb +43 -0
  98. data/test/{qraphql → graphql}/queries/host_puppet_query_test.rb +3 -8
  99. data/test/{qraphql → graphql}/queries/hostgroup_puppet_query_test.rb +1 -6
  100. data/test/graphql/queries/location_query_test.rb +52 -0
  101. data/test/graphql/queries/organization_query_test.rb +52 -0
  102. data/test/graphql/queries/puppetclass_query_test.rb +68 -0
  103. data/test/graphql/queries/puppetclasses_query_test.rb +43 -0
  104. data/test/integration/foreman_puppet/environment_js_test.rb +4 -1
  105. data/test/integration/foreman_puppet/host_js_test.rb +1 -1
  106. data/test/integration/foreman_puppet/puppetclass_js_test.rb +4 -0
  107. data/test/models/foreman_puppet/config_group_class_test.rb +3 -1
  108. data/test/models/foreman_puppet/environment_test.rb +2 -0
  109. data/test/models/foreman_puppet/host_puppet_facet_test.rb +34 -1
  110. data/test/models/foreman_puppet/host_test.rb +4 -3
  111. data/test/models/foreman_puppet/hostgroup_puppet_facet_test.rb +2 -3
  112. data/test/models/foreman_puppet/provisioning_template_test.rb +14 -7
  113. data/test/models/foreman_puppet/report_test.rb +21 -0
  114. data/test/models/foreman_puppet/smart_proxy_test.rb +1 -1
  115. data/test/models/foreman_puppet/user_test.rb +37 -0
  116. data/test/services/foreman_puppet/host_info_providers/config_groups_info_test.rb +35 -0
  117. data/test/services/foreman_puppet/host_info_providers/puppet_info_test.rb +159 -197
  118. data/test/unit/foreman_puppet/puppet_class_importer_test.rb +16 -2
  119. data/webpack/index.js +3 -4
  120. data/webpack/src/Components/Environments/Welcome.js +37 -0
  121. metadata +51 -12
@@ -0,0 +1,54 @@
1
+ require 'test_puppet_helper'
2
+
3
+ module Queries
4
+ class EnvironmentQueryTest < GraphQLQueryTestCase
5
+ let(:query) do
6
+ <<-GRAPHQL
7
+ query (
8
+ $id: String!
9
+ ) {
10
+ environment(id: $id) {
11
+ id
12
+ createdAt
13
+ updatedAt
14
+ name
15
+ locations {
16
+ totalCount
17
+ edges {
18
+ node {
19
+ id
20
+ }
21
+ }
22
+ }
23
+ organizations {
24
+ totalCount
25
+ edges {
26
+ node {
27
+ id
28
+ }
29
+ }
30
+ }
31
+ }
32
+ }
33
+ GRAPHQL
34
+ end
35
+
36
+ let(:environment) { FactoryBot.create(:environment) }
37
+
38
+ let(:global_id) { Foreman::GlobalId.for(environment) }
39
+ let(:variables) { { id: global_id } }
40
+ let(:data) { result['data']['environment'] }
41
+
42
+ test 'fetching environment attributes' do
43
+ assert_empty result['errors']
44
+
45
+ assert_equal global_id, data['id']
46
+ assert_equal environment.created_at.utc.iso8601, data['createdAt']
47
+ assert_equal environment.updated_at.utc.iso8601, data['updatedAt']
48
+ assert_equal environment.name, data['name']
49
+
50
+ assert_collection environment.locations, data['locations']
51
+ assert_collection environment.organizations, data['organizations']
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,43 @@
1
+ require 'test_helper'
2
+
3
+ module Queries
4
+ class EnvironmentsQueryTest < GraphQLQueryTestCase
5
+ let(:query) do
6
+ <<-GRAPHQL
7
+ query {
8
+ environments {
9
+ totalCount
10
+ pageInfo {
11
+ startCursor
12
+ endCursor
13
+ hasNextPage
14
+ hasPreviousPage
15
+ }
16
+ edges {
17
+ cursor
18
+ node {
19
+ id
20
+ }
21
+ }
22
+ }
23
+ }
24
+ GRAPHQL
25
+ end
26
+
27
+ let(:data) { result['data']['environments'] }
28
+
29
+ setup do
30
+ FactoryBot.create_list(:environment, 2)
31
+ end
32
+
33
+ test 'fetching environments attributes' do
34
+ assert_empty result['errors']
35
+
36
+ expected_count = ForemanPuppet::Environment.count
37
+
38
+ assert_not_equal 0, expected_count
39
+ assert_equal expected_count, data['totalCount']
40
+ assert_equal expected_count, data['edges'].count
41
+ end
42
+ end
43
+ end
@@ -12,9 +12,6 @@ module Queries
12
12
  environment {
13
13
  id
14
14
  }
15
- puppetProxy {
16
- id
17
- }
18
15
  }
19
16
  }
20
17
  GRAPHQL
@@ -23,14 +20,12 @@ module Queries
23
20
  let(:host) { FactoryBot.create(:host, :with_puppet_enc) }
24
21
  let(:global_id) { Foreman::GlobalId.encode('Host', host.id) }
25
22
  let(:variables) { { id: global_id } }
23
+ let(:data) { result['data']['host'] }
26
24
 
27
25
  test 'fetching host attributes' do
28
- skip 'GraphQL is TODO'
29
- host_data = result['data']['host']
30
26
  assert_empty result['errors']
31
- assert_equal global_id, host_data['id']
32
- assert_record host.environment, host_data['environment']
33
- assert_record host.puppet_proxy, host_data['puppetProxy']
27
+ assert_equal global_id, data['id']
28
+ assert_record host.environment, data['environment']
34
29
  end
35
30
  end
36
31
  end
@@ -12,25 +12,20 @@ module Queries
12
12
  environment {
13
13
  id
14
14
  }
15
- puppetProxy {
16
- id
17
- }
18
15
  }
19
16
  }
20
17
  GRAPHQL
21
18
  end
22
19
 
23
- let(:hostgroup) { FactoryBot.create(:hostgroup, :with_puppet_enc) }
20
+ let(:hostgroup) { FactoryBot.create(:hostgroup, :with_puppet_enc, :with_puppetclass) }
24
21
  let(:global_id) { Foreman::GlobalId.encode('Hostgroup', hostgroup.id) }
25
22
  let(:variables) { { id: global_id } }
26
23
 
27
24
  test 'fetching host attributes' do
28
- skip 'GraphQL is TODO'
29
25
  hostgroup_data = result['data']['hostgroup']
30
26
  assert_empty result['errors']
31
27
  assert_equal global_id, hostgroup_data['id']
32
28
  assert_record hostgroup.puppet.environment, hostgroup_data['environment']
33
- assert_record hostgroup.puppet_proxy, hostgroup_data['puppetProxy']
34
29
  end
35
30
  end
36
31
  end
@@ -0,0 +1,52 @@
1
+ require 'test_puppet_helper'
2
+
3
+ module Queries
4
+ class LocationQueryTest < GraphQLQueryTestCase
5
+ let(:query) do
6
+ <<-GRAPHQL
7
+ query (
8
+ $id: String!
9
+ ) {
10
+ location(id: $id) {
11
+ id
12
+ environments {
13
+ totalCount
14
+ edges {
15
+ node {
16
+ id
17
+ }
18
+ }
19
+ }
20
+ puppetclasses {
21
+ totalCount
22
+ edges {
23
+ node {
24
+ id
25
+ }
26
+ }
27
+ }
28
+ }
29
+ }
30
+ GRAPHQL
31
+ end
32
+
33
+ let(:environment) { FactoryBot.create(:environment) }
34
+ let(:location_object) { FactoryBot.create(:location, environments: [environment]) }
35
+
36
+ let(:global_id) { Foreman::GlobalId.for(location_object) }
37
+ let(:variables) { { id: global_id } }
38
+ let(:data) { result['data']['location'] }
39
+
40
+ setup do
41
+ FactoryBot.create(:puppetclass, environments: [environment])
42
+ end
43
+
44
+ test 'fetching location attributes' do
45
+ assert_empty result['errors']
46
+
47
+ assert_equal global_id, data['id']
48
+ assert_collection location_object.environments, data['environments']
49
+ assert_collection location_object.puppetclasses, data['puppetclasses']
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,52 @@
1
+ require 'test_puppet_helper'
2
+
3
+ module Queries
4
+ class OrganizationQueryTest < GraphQLQueryTestCase
5
+ let(:query) do
6
+ <<-GRAPHQL
7
+ query (
8
+ $id: String!
9
+ ) {
10
+ organization(id: $id) {
11
+ id
12
+ environments {
13
+ totalCount
14
+ edges {
15
+ node {
16
+ id
17
+ }
18
+ }
19
+ }
20
+ puppetclasses {
21
+ totalCount
22
+ edges {
23
+ node {
24
+ id
25
+ }
26
+ }
27
+ }
28
+ }
29
+ }
30
+ GRAPHQL
31
+ end
32
+
33
+ let(:environment) { FactoryBot.create(:environment) }
34
+ let(:organization_object) { FactoryBot.create(:organization, environments: [environment]) }
35
+
36
+ let(:global_id) { Foreman::GlobalId.for(organization_object) }
37
+ let(:variables) { { id: global_id } }
38
+ let(:data) { result['data']['organization'] }
39
+
40
+ setup do
41
+ FactoryBot.create(:puppetclass, environments: [environment])
42
+ end
43
+
44
+ test 'fetching organization attributes' do
45
+ assert_empty result['errors']
46
+
47
+ assert_equal global_id, data['id']
48
+ assert_collection organization_object.environments, data['environments']
49
+ assert_collection organization_object.puppetclasses, data['puppetclasses']
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,68 @@
1
+ require 'test_puppet_helper'
2
+
3
+ module Queries
4
+ class PuppetclassQueryTest < GraphQLQueryTestCase
5
+ let(:query) do
6
+ <<-GRAPHQL
7
+ query (
8
+ $id: String!
9
+ ) {
10
+ puppetclass(id: $id) {
11
+ id
12
+ createdAt
13
+ updatedAt
14
+ name
15
+ environments {
16
+ totalCount
17
+ edges {
18
+ node {
19
+ id
20
+ }
21
+ }
22
+ }
23
+ locations {
24
+ totalCount
25
+ edges {
26
+ node {
27
+ id
28
+ }
29
+ }
30
+ }
31
+ organizations {
32
+ totalCount
33
+ edges {
34
+ node {
35
+ id
36
+ }
37
+ }
38
+ }
39
+ }
40
+ }
41
+ GRAPHQL
42
+ end
43
+
44
+ let(:environment) { FactoryBot.create(:environment) }
45
+ let(:puppetclass) { FactoryBot.create(:puppetclass) }
46
+
47
+ let(:global_id) { Foreman::GlobalId.for(puppetclass) }
48
+ let(:variables) { { id: global_id } }
49
+ let(:data) { result['data']['puppetclass'] }
50
+
51
+ setup do
52
+ FactoryBot.create(:environment_class, puppetclass: puppetclass, environment: environment)
53
+ end
54
+
55
+ test 'fetching puppetclass attributes' do
56
+ assert_empty result['errors']
57
+
58
+ assert_equal global_id, data['id']
59
+ assert_equal puppetclass.created_at.utc.iso8601, data['createdAt']
60
+ assert_equal puppetclass.updated_at.utc.iso8601, data['updatedAt']
61
+ assert_equal puppetclass.name, data['name']
62
+
63
+ assert_collection puppetclass.environments, data['environments']
64
+ assert_collection puppetclass.locations, data['locations']
65
+ assert_collection puppetclass.organizations, data['organizations']
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,43 @@
1
+ require 'test_puppet_helper'
2
+
3
+ module Queries
4
+ class PuppetclassesQueryTest < GraphQLQueryTestCase
5
+ let(:query) do
6
+ <<-GRAPHQL
7
+ query {
8
+ puppetclasses {
9
+ totalCount
10
+ pageInfo {
11
+ startCursor
12
+ endCursor
13
+ hasNextPage
14
+ hasPreviousPage
15
+ }
16
+ edges {
17
+ cursor
18
+ node {
19
+ id
20
+ }
21
+ }
22
+ }
23
+ }
24
+ GRAPHQL
25
+ end
26
+
27
+ let(:data) { result['data']['puppetclasses'] }
28
+
29
+ setup do
30
+ FactoryBot.create_list(:puppetclass, 2)
31
+ end
32
+
33
+ test 'fetching puppetclasses attributes' do
34
+ assert_empty result['errors']
35
+
36
+ expected_count = ForemanPuppet::Puppetclass.count
37
+
38
+ assert_not_equal 0, expected_count
39
+ assert_equal expected_count, data['totalCount']
40
+ assert_equal expected_count, data['edges'].count
41
+ end
42
+ end
43
+ end
@@ -5,6 +5,9 @@ module ForemanPuppet
5
5
  class EnvironmentJSTest < IntegrationTestWithJavascript
6
6
  include ForemanPuppet::Engine.routes.url_helpers
7
7
 
8
+ let(:environment) { FactoryBot.create(:environment) }
9
+ setup { environment }
10
+
8
11
  test 'index page' do
9
12
  assert_index_page(environments_path, 'Environments', 'Create Puppet Environment')
10
13
  end
@@ -18,7 +21,7 @@ module ForemanPuppet
18
21
 
19
22
  test 'edit page' do
20
23
  visit environments_path
21
- click_link 'production'
24
+ click_link environment.name
22
25
  fill_in 'environment_name', with: 'production222'
23
26
  assert_submit_button(environments_path)
24
27
  assert page.has_link? 'production222'
@@ -141,7 +141,7 @@ module ForemanPuppet
141
141
  click_on_inherit('puppet_proxy')
142
142
  select2(overridden_hostgroup.name, from: 'host_hostgroup_id')
143
143
 
144
- assert find('#s2id_host_puppet_attributes_environment_id .select2-chosen').has_text? original_hostgroup.environment.name
144
+ assert find('#s2id_host_puppet_attributes_environment_id .select2-chosen').has_text? original_hostgroup.puppet.environment.name
145
145
 
146
146
  # On host group change, the disabled select will be reset to an empty value - disabled select2 is invisible on chrome
147
147
  assert find('#s2id_host_puppet_proxy_id .select2-chosen', visible: :all).has_text? ''
@@ -11,9 +11,11 @@ module ForemanPuppet
11
11
  let(:puppetclass) { FactoryBot.create(:puppetclass, environments: [environment]) }
12
12
 
13
13
  test 'edit page' do
14
+ FactoryBot.create(:puppetclass, name: 'vim', environments: [environment]) if ForemanPuppet.extracted_from_core?
14
15
  visit puppetclasses_path
15
16
  click_link 'vim'
16
17
  assert page.has_no_link? 'Common'
18
+ find(:xpath, "//a[@title='Select All']").hover
17
19
  find(:xpath, "//a[@data-original-title='Select All']").click
18
20
  assert_submit_button(puppetclasses_path)
19
21
  assert page.has_link? 'vim'
@@ -24,6 +26,7 @@ module ForemanPuppet
24
26
  smart_class_parameter_long = FactoryBot.create(:puppetclass_lookup_key, puppetclass: puppetclass, variable: 'a' * 50)
25
27
  visit edit_puppetclass_path(puppetclass)
26
28
  click_link 'Smart Class Parameter'
29
+ page.find("#pill_#{smart_class_parameter_long.id}-#{smart_class_parameter_long.key}").hover
27
30
  assert_equal smart_class_parameter_long.key, page.find("#pill_#{smart_class_parameter_long.id}-#{smart_class_parameter_long.key}")['data-original-title']
28
31
  end
29
32
 
@@ -31,6 +34,7 @@ module ForemanPuppet
31
34
  smart_class_parameter_short = FactoryBot.create(:puppetclass_lookup_key, puppetclass: puppetclass, variable: 'a' * 40)
32
35
  visit edit_puppetclass_path(puppetclass)
33
36
  click_link 'Smart Class Parameter'
37
+ page.find("#pill_#{smart_class_parameter_short.id}-#{smart_class_parameter_short.key}").hover
34
38
  assert_empty page.find("#pill_#{smart_class_parameter_short.id}-#{smart_class_parameter_short.key}")['data-original-title']
35
39
  end
36
40
  end
@@ -4,6 +4,8 @@ module ForemanPuppet
4
4
  class ConfigGroupClassTest < ActiveSupport::TestCase
5
5
  should validate_presence_of(:config_group)
6
6
  should validate_presence_of(:puppetclass)
7
- should validate_uniqueness_of(:config_group).scoped_to(:puppetclass_id)
7
+ # can not validate_uniqueness_of associations
8
+ # https://github.com/thoughtbot/shoulda-matchers/issues/814
9
+ # should validate_uniqueness_of(:config_group).scoped_to(:puppetclass_id)
8
10
  end
9
11
  end