foreman_rh_cloud 1.0.7 → 2.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (146) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -0
  3. data/app/controllers/foreman_inventory_upload/accounts_controller.rb +1 -0
  4. data/app/controllers/foreman_inventory_upload/uploads_controller.rb +22 -3
  5. data/app/controllers/foreman_rh_cloud/react_controller.rb +3 -0
  6. data/app/controllers/insights_cloud/tasks_controller.rb +8 -0
  7. data/app/helpers/foreman_inventory_upload_host_helper.rb +11 -0
  8. data/app/models/insights_facet.rb +3 -0
  9. data/app/models/insights_hit.rb +6 -0
  10. data/app/models/setting/rh_cloud.rb +1 -0
  11. data/app/overrides/hosts_list.rb +13 -0
  12. data/app/views/foreman_rh_cloud/react/insights_cloud.html.erb +1 -0
  13. data/config/routes.rb +7 -0
  14. data/db/migrate/20191215104806_create_insights_hits.foreman_inventory_upload.rb +14 -0
  15. data/db/migrate/20191216062008_create_insights_facets.foreman_inventory_upload.rb +7 -0
  16. data/lib/foreman_inventory_upload/async/upload_report_job.rb +1 -5
  17. data/lib/foreman_inventory_upload/generators/fact_helpers.rb +1 -1
  18. data/lib/foreman_inventory_upload/generators/slice.rb +1 -0
  19. data/lib/foreman_inventory_upload/notifications/manifest_import_success_notification_override.rb +19 -0
  20. data/lib/foreman_rh_cloud/engine.rb +22 -10
  21. data/lib/foreman_rh_cloud/version.rb +1 -1
  22. data/lib/insights_cloud.rb +15 -0
  23. data/lib/insights_cloud/async/insights_full_sync.rb +92 -0
  24. data/package.json +20 -100
  25. data/test/factories/inventory_upload_factories.rb +13 -13
  26. data/test/jobs/insights_full_sync_test.rb +62 -0
  27. data/test/unit/slice_generator_test.rb +10 -3
  28. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountList.fixtures.js +6 -0
  29. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountList.stories.js +5 -14
  30. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListActions.js +2 -1
  31. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListReducer.js +9 -1
  32. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListSelectors.js +7 -0
  33. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyResults/__tests__/EmptyResults.test.js +1 -1
  34. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyState/__tests__/EmptyState.test.js +1 -1
  35. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/ErrorState/__tests__/ErrorState.test.js +1 -1
  36. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/ListItem/__tests__/ListItem.test.js +1 -1
  37. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/ListItemStatus/__tests__/ListItemStatus.test.js +1 -1
  38. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountList.test.js +1 -1
  39. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListActions.test.js +9 -2
  40. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListIntegration.test.js +1 -1
  41. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListReducer.test.js +12 -1
  42. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListSelectors.test.js +8 -3
  43. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListActions.test.js.snap +20 -2
  44. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListReducer.test.js.snap +10 -0
  45. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListSelectors.test.js.snap +3 -0
  46. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcher.js +6 -6
  47. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/AutoUploadSwitcher.test.js +1 -1
  48. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/AutoUploadSwitcherActions.test.js +1 -1
  49. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/__snapshots__/AutoUploadSwitcher.test.js.snap +9 -9
  50. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/autoUploadSwitcher.scss +1 -1
  51. data/webpack/ForemanInventoryUpload/Components/Dashboard/Dashboard.fixtures.js +13 -9
  52. data/webpack/ForemanInventoryUpload/Components/Dashboard/Dashboard.stories.js +5 -15
  53. data/webpack/ForemanInventoryUpload/Components/Dashboard/__tests__/Dashboard.test.js +1 -2
  54. data/webpack/ForemanInventoryUpload/Components/Dashboard/__tests__/DashboardActions.test.js +17 -4
  55. data/webpack/ForemanInventoryUpload/Components/Dashboard/__tests__/DashboardIntegration.test.js +1 -1
  56. data/webpack/ForemanInventoryUpload/Components/Dashboard/__tests__/DashboardReducer.test.js +1 -1
  57. data/webpack/ForemanInventoryUpload/Components/Dashboard/__tests__/DashboardSelectors.test.js +3 -3
  58. data/webpack/ForemanInventoryUpload/Components/FileDownload/__tests__/FileDownload.test.js +1 -1
  59. data/webpack/ForemanInventoryUpload/Components/FullScreenModal/__tests__/FullScreenModal.test.js +1 -1
  60. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.fixtures.js +1 -0
  61. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.js +29 -0
  62. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherActions.js +30 -0
  63. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherConstants.js +3 -0
  64. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/HostObfuscationSwitcher.test.js +14 -0
  65. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/HostObfuscationSwitcherActions.test.js +14 -0
  66. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/__snapshots__/HostObfuscationSwitcher.test.js.snap +38 -0
  67. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/__snapshots__/HostObfuscationSwitcherActions.test.js.snap +14 -0
  68. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/hostObfuscationSwitcher.scss +0 -0
  69. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/index.js +20 -0
  70. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/InventoryFilter.test.js +1 -1
  71. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/InventoryFilterActions.test.js +1 -1
  72. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/InventoryFilterReducer.test.js +1 -1
  73. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/InventoryFilterSelectors.test.js +3 -3
  74. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/integration.test.js +1 -1
  75. data/webpack/ForemanInventoryUpload/Components/InventorySettings/InventorySettings.js +15 -0
  76. data/webpack/ForemanInventoryUpload/Components/InventorySettings/__tests__/InventorySettings.test.js +13 -0
  77. data/webpack/ForemanInventoryUpload/Components/InventorySettings/__tests__/__snapshots__/InventorySettings.test.js.snap +13 -0
  78. data/webpack/ForemanInventoryUpload/Components/InventorySettings/index.js +1 -0
  79. data/webpack/ForemanInventoryUpload/Components/InventorySettings/inventorySettings.scss +15 -0
  80. data/webpack/ForemanInventoryUpload/Components/NavContainer/NavContainer.fixtures.js +5 -2
  81. data/webpack/ForemanInventoryUpload/Components/NavContainer/__tests__/NavContainer.test.js +1 -2
  82. data/webpack/ForemanInventoryUpload/Components/NavContainer/__tests__/__snapshots__/NavContainer.test.js.snap +1 -1
  83. data/webpack/ForemanInventoryUpload/Components/PageHeader/PageHeader.js +14 -4
  84. data/webpack/ForemanInventoryUpload/Components/PageHeader/__tests__/PageHeader.test.js +1 -1
  85. data/webpack/ForemanInventoryUpload/Components/PageHeader/__tests__/__snapshots__/PageHeader.test.js.snap +22 -3
  86. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/DocsButton.js +17 -0
  87. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/__tests__/DocsButton.test.js +12 -0
  88. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/__tests__/__snapshots__/DocsButton.test.js.snap +20 -0
  89. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/index.js +1 -0
  90. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/HistoryButton.js +18 -0
  91. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/__tests__/HistoryButton.test.js +12 -0
  92. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/__tests__/__snapshots__/HistoryButton.test.js.snap +21 -0
  93. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/index.js +1 -0
  94. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/PageDescription.js +24 -0
  95. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/__tests__/PageDescription.test.js +11 -0
  96. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/__tests__/__snapshots__/PageDescription.test.js.snap +17 -0
  97. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/index.js +1 -0
  98. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/ToolbarButtons.js +13 -0
  99. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/__tests__/ToolbarButtons.test.js +12 -0
  100. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/__tests__/__snapshots__/ToolbarButtons.test.js.snap +10 -0
  101. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/index.js +1 -0
  102. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/toolbarButtons.scss +7 -0
  103. data/webpack/ForemanInventoryUpload/Components/ReportGenerate/__tests__/ReportGenerate.test.js +1 -1
  104. data/webpack/ForemanInventoryUpload/Components/ReportUpload/__tests__/ReportUpload.test.js +1 -1
  105. data/webpack/ForemanInventoryUpload/Components/ScheduledRun/__tests__/ScheduledRun.test.js +1 -1
  106. data/webpack/ForemanInventoryUpload/Components/StatusChart/__tests__/StatusChart.test.js +1 -1
  107. data/webpack/ForemanInventoryUpload/Components/TabBody/__tests__/TabBody.test.js +1 -1
  108. data/webpack/ForemanInventoryUpload/Components/TabContainer/__tests__/TabContainer.test.js +1 -1
  109. data/webpack/ForemanInventoryUpload/Components/TabFooter/__tests__/TabFooter.test.js +1 -1
  110. data/webpack/ForemanInventoryUpload/Components/TabHeader/__tests__/TabHeader.test.js +1 -1
  111. data/webpack/ForemanInventoryUpload/Components/Terminal/Terminal.js +1 -1
  112. data/webpack/ForemanInventoryUpload/Components/Terminal/__tests__/Terminal.test.js +1 -2
  113. data/webpack/ForemanInventoryUpload/ForemanInventoryConstants.js +4 -0
  114. data/webpack/ForemanInventoryUpload/ForemanInventoryHelpers.js +13 -0
  115. data/webpack/ForemanInventoryUpload/SubscriptionsPageExtension/SubscriptionsPageExtensionActions.js +34 -0
  116. data/webpack/ForemanInventoryUpload/__tests__/ForemanInventoryHelpers.test.js +3 -4
  117. data/webpack/ForemanInventoryUpload/__tests__/ForemanInventoryUpload.test.js +1 -1
  118. data/webpack/ForemanInventoryUpload/__tests__/__snapshots__/ForemanInventoryHelpers.test.js.snap +2 -0
  119. data/webpack/ForemanRhCloudReducers.js +2 -0
  120. data/webpack/ForemanRhCloudSelectors.js +2 -0
  121. data/webpack/ForemanRhCloudTestHelpers.js +2 -1
  122. data/webpack/InsightsCloudSync/InsightsCloudSync.js +26 -0
  123. data/webpack/InsightsCloudSync/InsightsCloudSync.test.js +13 -0
  124. data/webpack/InsightsCloudSync/InsightsCloudSyncActions.js +23 -0
  125. data/webpack/InsightsCloudSync/InsightsCloudSyncConstants.js +6 -0
  126. data/webpack/InsightsCloudSync/InsightsCloudSyncHelpers.js +3 -0
  127. data/webpack/InsightsCloudSync/InsightsCloudSyncReducers.js +3 -0
  128. data/webpack/InsightsCloudSync/__snapshots__/InsightsCloudSync.test.js.snap +25 -0
  129. data/webpack/InsightsCloudSync/__tests__/InsightsCloudSyncHelpers.test.js +9 -0
  130. data/webpack/InsightsCloudSync/__tests__/__snapshots__/InsightsCloudSyncHelpers.test.js.snap +3 -0
  131. data/webpack/InsightsCloudSync/index.js +17 -0
  132. data/webpack/__tests__/ForemanRhCloudHelpers.test.js +1 -1
  133. data/webpack/__tests__/ForemanRhCloudSelectors.test.js +5 -3
  134. data/webpack/__tests__/ForemanRhCloudTestHelpers.test.js +3 -3
  135. data/webpack/__tests__/__snapshots__/ForemanRhCloudSelectors.test.js.snap +9 -0
  136. data/webpack/__tests__/__snapshots__/ForemanRhCloudTestHelpers.test.js.snap +3 -0
  137. data/webpack/index.js +7 -0
  138. data/webpack/subscriptions_extension_index.js +8 -0
  139. metadata +59 -9
  140. data/webpack/stories/ForemanInventoryUploadReducers.js +0 -3
  141. data/webpack/stories/configureStore.js +0 -15
  142. data/webpack/stories/decorators/index.js +0 -1
  143. data/webpack/stories/decorators/withCardsDecorator.js +0 -14
  144. data/webpack/stories/index.js +0 -10
  145. data/webpack/stories/index.scss +0 -7
  146. data/webpack/test_setup.js +0 -6
@@ -1,16 +1,16 @@
1
1
  # redefine katello factories, as long as katello is not compatible with dynamic properties
2
2
  FactoryBot.define do
3
3
  factory :katello_organization, :class => "Organization" do
4
- type {"Organization"}
4
+ type { "Organization" }
5
5
  sequence(:name) { |n| "Organization#{n}" }
6
6
  sequence(:label) { |n| "org#{n}" }
7
7
  sequence(:id) { |n| n }
8
8
 
9
9
  trait :acme_corporation do
10
- name {"ACME_Corporation"}
11
- type {"Organization"}
12
- description {"This is the first Organization."}
13
- label {"acme_corporation_label"}
10
+ name { "ACME_Corporation" }
11
+ type { "Organization" }
12
+ description { "This is the first Organization." }
13
+ label { "acme_corporation_label" }
14
14
  end
15
15
 
16
16
  trait :with_library do
@@ -24,11 +24,11 @@ end
24
24
  FactoryBot.define do
25
25
  factory :katello_content_view, :class => Katello::ContentView do
26
26
  sequence(:name) { |n| "Database#{n}" }
27
- description {"This content view is for database content"}
27
+ description { "This content view is for database content" }
28
28
  association :organization, :factory => :katello_organization
29
29
 
30
30
  trait :composite do
31
- composite {true}
31
+ composite { true }
32
32
  end
33
33
  end
34
34
  end
@@ -50,23 +50,23 @@ end
50
50
  FactoryBot.define do
51
51
  factory :katello_subscription_facets, :aliases => [:subscription_facet], :class => ::Katello::Host::SubscriptionFacet do
52
52
  sequence(:uuid) { |n| "uuid-#{n}-#{rand(500)}" }
53
- facts { {'memory.memtotal' => "12 GB"} }
53
+ facts { { 'memory.memtotal' => "12 GB" } }
54
54
  end
55
55
  end
56
56
 
57
57
  FactoryBot.define do
58
58
  factory :katello_pool, :class => Katello::Pool do
59
- active {true}
60
- end_date {Date.today + 1.year}
59
+ active { true }
60
+ end_date { Date.today + 1.year }
61
61
  end
62
62
  end
63
63
 
64
64
  FactoryBot.modify do
65
65
  factory :host do
66
66
  transient do
67
- content_view {nil}
68
- lifecycle_environment {nil}
69
- content_source {nil}
67
+ content_view { nil }
68
+ lifecycle_environment { nil }
69
+ content_source { nil }
70
70
  end
71
71
 
72
72
  trait :with_content do
@@ -0,0 +1,62 @@
1
+ require 'test_helper'
2
+
3
+ class InsightsFullSyncTest < ActiveJob::TestCase
4
+ setup do
5
+ @host1 = FactoryBot.create(:host, :managed, name: 'host1')
6
+ @host2 = FactoryBot.create(:host, :managed, name: 'host2')
7
+
8
+ hits_json = <<-HITS_JSON
9
+ [
10
+ {
11
+ "hostname": "#{@host1.name}",
12
+ "rhel_version": "7.5",
13
+ "uuid": "accdf444-5628-451d-bf3e-cf909ad72756",
14
+ "last_seen": "2019-11-22T08:41:42.447244Z",
15
+ "title": "New Ansible Engine packages are inaccessible when dedicated Ansible repo is not enabled",
16
+ "solution_url": "",
17
+ "total_risk": 2,
18
+ "likelihood": 2,
19
+ "publish_date": "2018-04-16T10:03:16Z",
20
+ "results_url": "https://cloud.redhat.com/insights/overview/stability/ansible_deprecated_repo%7CANSIBLE_DEPRECATED_REPO/accdf444-5628-451d-bf3e-cf909ad72756/"
21
+ },
22
+ {
23
+ "hostname": "#{@host1.name}",
24
+ "rhel_version": "7.5",
25
+ "uuid": "accdf444-5628-451d-bf3e-cf909ad72756",
26
+ "last_seen": "2019-11-22T08:41:42.447244Z",
27
+ "title": "CPU vulnerable to side-channel attacks using Microarchitectural Data Sampling (CVE-2018-12130, CVE-2018-12126, CVE-2018-12127, CVE-2019-11091)",
28
+ "solution_url": "https://access.redhat.com/node/4134081",
29
+ "total_risk": 2,
30
+ "likelihood": 2,
31
+ "publish_date": "2019-05-14T17:00:00Z",
32
+ "results_url": "https://cloud.redhat.com/insights/overview/security/CVE_2018_12130_cpu_kernel%7CCVE_2018_12130_CPU_KERNEL_NEED_UPDATE/accdf444-5628-451d-bf3e-cf909ad72756/"
33
+ },
34
+ {
35
+ "hostname": "#{@host2.name}",
36
+ "rhel_version": "7.5",
37
+ "uuid": "accdf444-5628-451d-bf3e-cf909ad72757",
38
+ "last_seen": "2019-11-22T08:41:42.447244Z",
39
+ "title": "CPU vulnerable to side-channel attacks using L1 Terminal Fault (CVE-2018-3620)",
40
+ "solution_url": "https://access.redhat.com/node/3560291",
41
+ "total_risk": 2,
42
+ "likelihood": 2,
43
+ "publish_date": "2018-08-14T17:00:00Z",
44
+ "results_url": "https://cloud.redhat.com/insights/overview/security/CVE_2018_3620_cpu_kernel%7CCVE_2018_3620_CPU_KERNEL_NEED_UPDATE/accdf444-5628-451d-bf3e-cf909ad72756/"
45
+ }
46
+ ]
47
+ HITS_JSON
48
+ @hits = JSON.parse(hits_json)
49
+ end
50
+
51
+ test 'Hits data is replaced with data from cloud' do
52
+ InsightsCloud::Async::InsightsFullSync.any_instance.expects(:query_insights_hits).returns(@hits)
53
+
54
+ InsightsCloud::Async::InsightsFullSync.perform_now(@host1.organization)
55
+
56
+ @host1.reload
57
+ @host2.reload
58
+
59
+ assert_equal 2, @host1.insights.hits.count
60
+ assert_equal 1, @host2.insights.hits.count
61
+ end
62
+ end
@@ -82,6 +82,8 @@ class ReportGeneratorTest < ActiveSupport::TestCase
82
82
  assert_not_nil(actual_host = actual['hosts'].first)
83
83
  assert_equal 'obfuscated_name', actual_host['fqdn']
84
84
  assert_equal '1234', actual_host['account']
85
+ assert_not_nil(actual_facts = actual_host['facts'].first['facts'])
86
+ assert_equal true, actual_facts['is_hostname_obfuscated']
85
87
  assert_equal 1, generator.hosts_count
86
88
  end
87
89
 
@@ -94,12 +96,14 @@ class ReportGeneratorTest < ActiveSupport::TestCase
94
96
  json_str = generator.render
95
97
  actual = JSON.parse(json_str.join("\n"))
96
98
 
97
- obfuscated_fqdn = Base64.urlsafe_encode64(Digest::SHA1.digest(@host.fqdn), padding: false)
99
+ obfuscated_fqdn = Digest::SHA1.hexdigest(@host.fqdn)
98
100
 
99
101
  assert_equal 'slice_123', actual['report_slice_id']
100
102
  assert_not_nil(actual_host = actual['hosts'].first)
101
103
  assert_equal obfuscated_fqdn, actual_host['fqdn']
102
104
  assert_equal '1234', actual_host['account']
105
+ assert_not_nil(actual_facts = actual_host['facts'].first['facts'])
106
+ assert_equal true, actual_facts['is_hostname_obfuscated']
103
107
  assert_equal 1, generator.hosts_count
104
108
  end
105
109
 
@@ -117,6 +121,8 @@ class ReportGeneratorTest < ActiveSupport::TestCase
117
121
  assert_not_nil(actual_host = actual['hosts'].first)
118
122
  assert_equal @host.fqdn, actual_host['fqdn']
119
123
  assert_equal '1234', actual_host['account']
124
+ assert_not_nil(actual_facts = actual_host['facts'].first['facts'])
125
+ assert_equal false, actual_facts['is_hostname_obfuscated']
120
126
  assert_equal 1, generator.hosts_count
121
127
  end
122
128
 
@@ -134,13 +140,14 @@ class ReportGeneratorTest < ActiveSupport::TestCase
134
140
  assert_equal 'satellite-id', satellite_facts['satellite_instance_id']
135
141
  assert_equal @host.organization_id, satellite_facts['organization_id']
136
142
 
137
- instance_id_tag = actual['hosts'].first['tags'].find { |tag| tag['namespace'] == 'satellite' && tag['key'] == 'satellite_instance_id'}
143
+ instance_id_tag = actual['hosts'].first['tags'].find { |tag| tag['namespace'] == 'satellite' && tag['key'] == 'satellite_instance_id' }
138
144
  assert_not_nil instance_id_tag
139
145
  assert_equal 'satellite-id', instance_id_tag['value']
140
146
 
141
- org_id_tag = actual['hosts'].first['tags'].find { |tag| tag['namespace'] == 'satellite' && tag['key'] == 'organization_id'}
147
+ org_id_tag = actual['hosts'].first['tags'].find { |tag| tag['namespace'] == 'satellite' && tag['key'] == 'organization_id' }
142
148
  assert_not_nil org_id_tag
143
149
  assert_equal @host.organization_id.to_s, org_id_tag['value']
150
+ assert_equal false, satellite_facts['is_hostname_obfuscated']
144
151
 
145
152
  version = satellite_facts['satellite_version']
146
153
  if defined?(ForemanThemeSatellite)
@@ -32,6 +32,8 @@ export const processStatusName = 'upload_report_status';
32
32
 
33
33
  export const autoUploadEnabled = true;
34
34
 
35
+ export const hostObfuscationEnabled = true;
36
+
35
37
  export const filterTerm = 'some_filter';
36
38
 
37
39
  export const props = {
@@ -41,3 +43,7 @@ export const props = {
41
43
  stopAccountStatusPolling: noop,
42
44
  pollingProcessID,
43
45
  };
46
+
47
+ export const fetchAccountsStatusResponse = {
48
+ data: { accounts, autoUploadEnabled, hostObfuscationEnabled },
49
+ };
@@ -1,18 +1,9 @@
1
1
  import React from 'react';
2
- import { storiesOf } from '@storybook/react';
3
- import { withKnobs } from '@storybook/addon-knobs';
4
- import { Provider } from 'react-redux';
5
- import configureStore from '../../../stories/configureStore';
6
2
  import AccountList from './AccountList';
7
3
 
8
- const store = configureStore();
4
+ export default {
5
+ title: 'AccountList',
6
+ component: AccountList,
7
+ };
9
8
 
10
- storiesOf('Account list', module)
11
- .addDecorator(withKnobs)
12
- .add('Account list', () => (
13
- <div style={{ margin: '20px' }}>
14
- <Provider store={store}>
15
- <AccountList />
16
- </Provider>
17
- </div>
18
- ));
9
+ export const Basic = () => <AccountList />;
@@ -11,13 +11,14 @@ import {
11
11
  export const fetchAccountsStatus = () => async dispatch => {
12
12
  try {
13
13
  const {
14
- data: { accounts, autoUploadEnabled },
14
+ data: { accounts, autoUploadEnabled, hostObfuscationEnabled },
15
15
  } = await API.get(inventoryUrl('accounts'));
16
16
  dispatch({
17
17
  type: INVENTORY_ACCOUNT_STATUS_POLLING,
18
18
  payload: {
19
19
  accounts,
20
20
  autoUploadEnabled,
21
+ hostObfuscationEnabled,
21
22
  },
22
23
  });
23
24
  } catch (error) {
@@ -1,11 +1,12 @@
1
1
  import Immutable from 'seamless-immutable';
2
+ import { AUTO_UPLOAD_TOGGLE } from '../AutoUploadSwitcher/AutoUploadSwitcherConstants';
3
+ import { HOST_OBFUSCATION_TOGGLE } from '../HostObfuscationSwitcher/HostObfuscationSwitcherConstants';
2
4
  import {
3
5
  INVENTORY_ACCOUNT_STATUS_POLLING,
4
6
  INVENTORY_ACCOUNT_STATUS_POLLING_ERROR,
5
7
  INVENTORY_ACCOUNT_STATUS_POLLING_START,
6
8
  INVENTORY_PROCESS_RESTART,
7
9
  } from './AccountListConstants';
8
- import { AUTO_UPLOAD_TOGGLE } from '../AutoUploadSwitcher/AutoUploadSwitcherConstants';
9
10
 
10
11
  const initialState = Immutable({
11
12
  accounts: {},
@@ -22,6 +23,7 @@ export default (state = initialState, action) => {
22
23
  accountID,
23
24
  processStatusName,
24
25
  autoUploadEnabled,
26
+ hostObfuscationEnabled,
25
27
  } = {},
26
28
  } = action;
27
29
 
@@ -31,6 +33,7 @@ export default (state = initialState, action) => {
31
33
  ...state,
32
34
  accounts,
33
35
  autoUploadEnabled,
36
+ hostObfuscationEnabled,
34
37
  error: null,
35
38
  });
36
39
  case INVENTORY_ACCOUNT_STATUS_POLLING_ERROR:
@@ -57,6 +60,11 @@ export default (state = initialState, action) => {
57
60
  ...state,
58
61
  autoUploadEnabled,
59
62
  });
63
+ case HOST_OBFUSCATION_TOGGLE:
64
+ return state.merge({
65
+ ...state,
66
+ hostObfuscationEnabled,
67
+ });
60
68
  default:
61
69
  return state;
62
70
  }
@@ -2,9 +2,16 @@ import { selectForemanInventoryUpload } from '../../../ForemanRhCloudSelectors';
2
2
 
3
3
  export const selectAccountsList = state =>
4
4
  selectForemanInventoryUpload(state).accountsList;
5
+
5
6
  export const selectAccounts = state => selectAccountsList(state).accounts;
7
+
6
8
  export const selectPollingProcessID = state =>
7
9
  selectAccountsList(state).pollingProcessID;
10
+
8
11
  export const selectError = state => selectAccountsList(state).error;
12
+
9
13
  export const selectAutoUploadEnabled = state =>
10
14
  selectAccountsList(state).autoUploadEnabled;
15
+
16
+ export const selectHostObfuscationEnabled = state =>
17
+ selectAccountsList(state).hostObfuscationEnabled;
@@ -1,4 +1,4 @@
1
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import EmptyResults from '../EmptyResults';
4
4
 
@@ -1,4 +1,4 @@
1
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import EmptyState from '../EmptyState';
4
4
 
@@ -1,4 +1,4 @@
1
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import ErrorState from '../ErrorState';
4
4
 
@@ -1,4 +1,4 @@
1
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import ListItem from '../ListItem';
4
4
  import { props } from '../ListItem.fixtures';
@@ -1,4 +1,4 @@
1
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import ListItemStatus from '../ListItemStatus';
4
4
  import { props } from '../ListItemStatus.fixtures';
@@ -1,4 +1,4 @@
1
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import AccountList from '../AccountList';
4
4
  import { props } from '../AccountList.fixtures';
@@ -1,13 +1,20 @@
1
- import { testActionSnapshotWithFixtures } from 'react-redux-test-utils';
1
+ import { testActionSnapshotWithFixtures } from '@theforeman/test';
2
+ import API from 'foremanReact/API';
2
3
  import {
3
4
  fetchAccountsStatus,
4
5
  startAccountStatusPolling,
5
6
  stopAccountStatusPolling,
6
7
  restartProcess,
7
8
  } from '../AccountListActions';
8
- import { pollingProcessID } from '../AccountList.fixtures';
9
+ import {
10
+ pollingProcessID,
11
+ fetchAccountsStatusResponse,
12
+ } from '../AccountList.fixtures';
9
13
  import { accountID, activeTab } from '../../Dashboard/Dashboard.fixtures';
10
14
 
15
+ jest.mock('foremanReact/API');
16
+ API.get.mockImplementation(async () => fetchAccountsStatusResponse);
17
+
11
18
  const fixtures = {
12
19
  'should fetchAccountsStatus': () => fetchAccountsStatus(),
13
20
  'should startAccountStatusPolling': () =>
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { IntegrationTestHelper } from 'react-redux-test-utils';
2
+ import { IntegrationTestHelper } from '@theforeman/test';
3
3
 
4
4
  import AccountList from '../index';
5
5
  import reducers from '../../../../ForemanRhCloudReducers';
@@ -1,4 +1,4 @@
1
- import { testReducerSnapshotWithFixtures } from 'react-redux-test-utils';
1
+ import { testReducerSnapshotWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import {
4
4
  INVENTORY_ACCOUNT_STATUS_POLLING,
@@ -15,8 +15,10 @@ import {
15
15
  accountID,
16
16
  processStatusName,
17
17
  autoUploadEnabled,
18
+ hostObfuscationEnabled,
18
19
  } from '../AccountList.fixtures';
19
20
  import { AUTO_UPLOAD_TOGGLE } from '../../AutoUploadSwitcher/AutoUploadSwitcherConstants';
21
+ import { HOST_OBFUSCATION_TOGGLE } from '../../HostObfuscationSwitcher/HostObfuscationSwitcherConstants';
20
22
 
21
23
  const fixtures = {
22
24
  'should return the initial state': {},
@@ -26,6 +28,7 @@ const fixtures = {
26
28
  payload: {
27
29
  accounts,
28
30
  autoUploadEnabled,
31
+ hostObfuscationEnabled,
29
32
  },
30
33
  },
31
34
  },
@@ -65,6 +68,14 @@ const fixtures = {
65
68
  },
66
69
  },
67
70
  },
71
+ 'should handle HOST_OBFUSCATION_TOGGLE': {
72
+ action: {
73
+ type: HOST_OBFUSCATION_TOGGLE,
74
+ payload: {
75
+ hostObfuscationEnabled,
76
+ },
77
+ },
78
+ },
68
79
  };
69
80
 
70
81
  describe('AccountList reducer', () =>
@@ -1,22 +1,25 @@
1
- import { testSelectorsSnapshotWithFixtures } from 'react-redux-test-utils';
1
+ import { testSelectorsSnapshotWithFixtures } from '@theforeman/test';
2
2
  import {
3
3
  selectAccountsList,
4
4
  selectAccounts,
5
5
  selectPollingProcessID,
6
6
  selectAutoUploadEnabled,
7
+ selectHostObfuscationEnabled,
7
8
  } from '../AccountListSelectors';
8
9
  import {
9
10
  pollingProcessID,
10
11
  accounts,
11
12
  autoUploadEnabled,
13
+ hostObfuscationEnabled,
12
14
  } from '../AccountList.fixtures';
13
- import { inventoryStateWrapper } from '../../../../ForemanRhCloudTestHelpers';
15
+ import { rhCloudStateWrapper } from '../../../../ForemanRhCloudTestHelpers';
14
16
 
15
- const state = inventoryStateWrapper({
17
+ const state = rhCloudStateWrapper({
16
18
  accountsList: {
17
19
  accounts,
18
20
  pollingProcessID,
19
21
  autoUploadEnabled,
22
+ hostObfuscationEnabled,
20
23
  },
21
24
  });
22
25
 
@@ -27,6 +30,8 @@ const fixtures = {
27
30
  selectPollingProcessID(state),
28
31
  'should return AccountList autoUploadEnabled': () =>
29
32
  selectAutoUploadEnabled(state),
33
+ 'should return AccountList hostObfuscationEnabled': () =>
34
+ selectHostObfuscationEnabled(state),
30
35
  };
31
36
 
32
37
  describe('AccountList selectors', () =>
@@ -5,9 +5,27 @@ Array [
5
5
  Array [
6
6
  Object {
7
7
  "payload": Object {
8
- "error": "Cannot read property 'data' of undefined",
8
+ "accounts": Object {
9
+ "Account1": Object {
10
+ "generate_report_status": "running",
11
+ "label": "test_org1",
12
+ "upload_report_status": "running",
13
+ },
14
+ "Account2": Object {
15
+ "generate_report_status": "failure",
16
+ "label": "test_org2",
17
+ "upload_report_status": "unknown",
18
+ },
19
+ "Account3": Object {
20
+ "generate_report_status": "running",
21
+ "label": "test_org3",
22
+ "upload_report_status": "success",
23
+ },
24
+ },
25
+ "autoUploadEnabled": true,
26
+ "hostObfuscationEnabled": true,
9
27
  },
10
- "type": "INVENTORY_ACCOUNT_STATUS_POLLING_ERROR",
28
+ "type": "INVENTORY_ACCOUNT_STATUS_POLLING",
11
29
  },
12
30
  ],
13
31
  ]