foreman_rh_cloud 1.0.7 → 2.0.8

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 (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
  ]