foreman_leapp 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -20
  3. data/app/controllers/api/v2/concerns/api_authorizer.rb +27 -0
  4. data/app/controllers/api/v2/preupgrade_reports_controller.rb +21 -2
  5. data/app/controllers/preupgrade_reports_controller.rb +11 -1
  6. data/app/lib/actions/preupgrade_job.rb +2 -1
  7. data/app/models/preupgrade_report.rb +1 -0
  8. data/app/models/preupgrade_report_entry.rb +1 -0
  9. data/app/views/api/v2/preupgrade_report_entries/base.json.rabl +1 -1
  10. data/app/views/api/v2/preupgrade_reports/job_invocation.json.rabl +3 -0
  11. data/app/views/foreman_leapp/job_templates/check.erb +14 -0
  12. data/app/views/foreman_leapp/job_templates/preupgrade.erb +3 -1
  13. data/app/views/foreman_leapp/job_templates/remediation.erb +11 -0
  14. data/app/views/foreman_leapp/job_templates/upgrade.erb +6 -5
  15. data/config/routes.rb +2 -1
  16. data/db/migrate/20200429080939_report_entries_flags.rb +5 -0
  17. data/lib/foreman_leapp/engine.rb +4 -1
  18. data/lib/foreman_leapp/version.rb +1 -1
  19. data/package.json +3 -2
  20. data/test/functional/api/v2/preupgrade_reports_controller_test.rb +89 -6
  21. data/test/functional/preupgrade_reports_controller_test.rb +27 -4
  22. data/webpack/__mocks__/foremanReact/common/I18n.js +1 -1
  23. data/webpack/__mocks__/foremanReact/components/common/EmptyState.js +1 -0
  24. data/webpack/components/PreupgradeReports/PreupgradeReports.js +104 -21
  25. data/webpack/components/PreupgradeReports/PreupgradeReportsActions.js +1 -1
  26. data/webpack/components/PreupgradeReports/PreupgradeReportsHelpers.js +132 -15
  27. data/webpack/components/PreupgradeReports/PreupgradeReportsReducer.js +2 -0
  28. data/webpack/components/PreupgradeReports/PreupgradeReportsSelectors.js +10 -0
  29. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.fixtures.js +45 -7
  30. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.test.js +17 -1
  31. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsHelpers.test.js +43 -3
  32. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReports.test.js.snap +82 -134
  33. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsHelpers.test.js.snap +409 -2
  34. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsReducer.test.js.snap +21 -1
  35. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsSelectors.test.js.snap +17 -1
  36. data/webpack/components/PreupgradeReports/components/EntriesFilter.js +121 -0
  37. data/webpack/components/PreupgradeReports/components/EntriesFilter.scss +3 -0
  38. data/webpack/components/PreupgradeReports/components/EntriesFilter.test.js +30 -0
  39. data/webpack/components/PreupgradeReports/components/{FixAllButton.js → FixSelectedButton.js} +6 -8
  40. data/webpack/components/PreupgradeReports/components/FixSelectedButton.test.js +15 -0
  41. data/webpack/components/PreupgradeReports/components/NoReports.js +35 -0
  42. data/webpack/components/PreupgradeReports/components/NoReports.test.js +15 -0
  43. data/webpack/components/PreupgradeReports/components/UpgradeAllButton.js +29 -0
  44. data/webpack/components/PreupgradeReports/components/{FixAllButton.test.js → UpgradeAllButton.test.js} +3 -4
  45. data/webpack/components/PreupgradeReports/components/__snapshots__/EntriesFilter.test.js.snap +330 -0
  46. data/webpack/components/PreupgradeReports/components/__snapshots__/{FixAllButton.test.js.snap → FixSelectedButton.test.js.snap} +9 -3
  47. data/webpack/components/PreupgradeReports/components/__snapshots__/NoReports.test.js.snap +19 -0
  48. data/webpack/components/PreupgradeReports/components/__snapshots__/UpgradeAllButton.test.js.snap +29 -0
  49. data/webpack/components/PreupgradeReports/index.js +22 -4
  50. data/webpack/components/PreupgradeReportsList/PreupgradeReportList.scss +37 -0
  51. data/webpack/components/PreupgradeReportsList/__tests__/PreupgradeReportsList.test.js +16 -0
  52. data/webpack/components/PreupgradeReportsList/__tests__/__snapshots__/PreupgradeReportsList.test.js.snap +38 -0
  53. data/webpack/components/PreupgradeReportsList/components/InfoItem.js +1 -1
  54. data/webpack/components/PreupgradeReportsList/components/InhibitorInfoItem.js +33 -0
  55. data/webpack/components/PreupgradeReportsList/components/PreupgradeReportEntry.js +19 -9
  56. data/webpack/components/PreupgradeReportsList/components/PreupgradeReportsListHeader.js +56 -0
  57. data/webpack/components/PreupgradeReportsList/components/SortableHeaderItem.js +50 -0
  58. data/webpack/components/PreupgradeReportsList/components/__tests__/InhibitorInfoItem.test.js +27 -0
  59. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.test.js +2 -0
  60. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportsListHeader.test.js +14 -0
  61. data/webpack/components/PreupgradeReportsList/components/__tests__/SortableHeaderItem.test.js +29 -0
  62. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/InhibitorInfoItem.test.js.snap +32 -0
  63. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportEntry.test.js.snap +23 -17
  64. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportsListHeader.test.js.snap +113 -0
  65. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/SortableHeaderItem.test.js.snap +36 -0
  66. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/helpers.test.js.snap +4 -10
  67. data/webpack/components/PreupgradeReportsList/components/__tests__/helpers.test.js +0 -2
  68. data/webpack/components/PreupgradeReportsList/components/foreman_leapp.scss +7 -1
  69. data/webpack/components/PreupgradeReportsList/components/helpers.js +47 -19
  70. data/webpack/components/PreupgradeReportsList/components/images/i_severity-critical.svg +61 -0
  71. data/webpack/components/PreupgradeReportsList/components/images/i_severity-high.svg +61 -0
  72. data/webpack/components/PreupgradeReportsList/components/images/i_severity-low.svg +62 -0
  73. data/webpack/components/PreupgradeReportsList/components/images/i_severity-med.svg +62 -0
  74. data/webpack/components/PreupgradeReportsList/index.js +28 -3
  75. metadata +34 -5
@@ -1,35 +1,152 @@
1
+ import Immutable from 'seamless-immutable';
2
+
1
3
  export const flattenEntries = reports =>
2
4
  reports.reduce((memo, report) => [...memo, ...report.entries], []);
3
5
 
4
- export const entryFixable = entry =>
6
+ const entryWithFixKind = kind => entry =>
5
7
  entry.detail &&
6
8
  entry.detail.remediations &&
7
- entry.detail.remediations.some(remediation => remediation.type === 'command');
9
+ entry.detail.remediations.some(remediation => remediation.type === kind);
10
+
11
+ export const entryFixable = entryWithFixKind('command');
12
+
13
+ export const isInhibitor = entry =>
14
+ entry.flags && entry.flags.some(flag => flag === 'inhibitor');
15
+
16
+ export const filterByInhibitor = value => entry => {
17
+ const inhibitsUpgrade = isInhibitor(entry);
18
+
19
+ if (value === 'yes') {
20
+ return inhibitsUpgrade;
21
+ }
22
+
23
+ if (value === 'no') {
24
+ return !inhibitsUpgrade;
25
+ }
26
+
27
+ return true;
28
+ };
8
29
 
9
30
  export const isEmpty = obj => Object.keys(obj).length === 0;
10
31
 
11
32
  export const anyEntriesFixable = reports =>
12
- flattenEntries(reports).some(entryFixable);
13
-
14
- export const idsForInvocation = reports =>
15
- reports.reduce(
16
- (memo, report) => {
17
- report.entries.forEach(entry => {
18
- if (entryFixable(entry)) {
19
- memo.entryIds = [...memo.entryIds, entry.id];
20
-
21
- if (!memo.hostIds.includes(report.hostId)) {
22
- memo.hostIds = [...memo.hostIds, report.hostId];
23
- }
33
+ reportsToEntries(reports, Array.prototype.some, entryFixable);
34
+
35
+ export const fixableEntries = reports =>
36
+ reportsToEntries(reports, Array.prototype.filter, entryFixable);
37
+
38
+ const reportsToEntries = (reports, iterator, predicate) =>
39
+ iterator.call(flattenEntries(reports), predicate);
40
+
41
+ export const idsForInvocationFromEntries = entries =>
42
+ entries.reduce(
43
+ (memo, entry) => {
44
+ if (entryFixable(entry)) {
45
+ memo.entryIds = [...memo.entryIds, entry.id];
46
+
47
+ if (!memo.hostIds.includes(entry.hostId)) {
48
+ memo.hostIds = [...memo.hostIds, entry.hostId];
24
49
  }
25
- });
50
+ }
26
51
  return memo;
27
52
  },
28
53
  { hostIds: [], entryIds: [] }
29
54
  );
30
55
 
56
+ export const idsForInvocationFromReports = reports =>
57
+ idsForInvocationFromEntries(flattenEntries(reports));
58
+
31
59
  export const entriesPage = (entries, pagination) => {
32
60
  const offset = (pagination.page - 1) * pagination.perPage;
33
61
 
34
62
  return entries.slice(offset, offset + pagination.perPage);
35
63
  };
64
+
65
+ export const filterEntries = (attribute, value, entries) => {
66
+ if (!value) {
67
+ return entries;
68
+ }
69
+
70
+ if (attribute === 'fix') {
71
+ return entries.filter(entryWithFixKind(value));
72
+ }
73
+
74
+ if (attribute === 'inhibitor') {
75
+ return entries.filter(filterByInhibitor(value));
76
+ }
77
+
78
+ return entries.filter(entry =>
79
+ entry[attribute].toLowerCase().includes(value.toLowerCase())
80
+ );
81
+ };
82
+
83
+ export const byText = attribute => (first, second) => {
84
+ const firstAttr = first[attribute].toLowerCase();
85
+ const secondAttr = second[attribute].toLowerCase();
86
+
87
+ if (firstAttr < secondAttr) {
88
+ return -1;
89
+ }
90
+
91
+ if (firstAttr > secondAttr) {
92
+ return 1;
93
+ }
94
+ return 0;
95
+ };
96
+
97
+ export const bySeverity = attribute => (first, second) => {
98
+ const sevList = ['info', 'low', 'medium', 'high'];
99
+
100
+ const firstAttr = first[attribute].toLowerCase();
101
+ const secondAttr = second[attribute].toLowerCase();
102
+
103
+ return sevList.indexOf(firstAttr) - sevList.indexOf(secondAttr);
104
+ };
105
+
106
+ export const byFix = (first, second) => {
107
+ const firstAttr = !!(first.detail && first.detail.remediations);
108
+ const secondAttr = !!(second.detail && second.detail.remediations);
109
+ return byBoolComparison(firstAttr, secondAttr);
110
+ };
111
+
112
+ export const byInhibitor = (first, second) =>
113
+ byBoolComparison(isInhibitor(first), isInhibitor(second));
114
+
115
+ const byBoolComparison = (first, second) => {
116
+ if (first === second) {
117
+ return 0;
118
+ }
119
+
120
+ if (first) {
121
+ return -1;
122
+ }
123
+ return 1;
124
+ };
125
+
126
+ export const sortEntries = (entries, sort) => {
127
+ const entriesCopy = Immutable.asMutable(entries);
128
+
129
+ if (!sort.attribute) {
130
+ return entriesCopy;
131
+ }
132
+
133
+ let sorted;
134
+
135
+ if (['title', 'hostname'].includes(sort.attribute)) {
136
+ sorted = entriesCopy.sort(byText(sort.attribute));
137
+ }
138
+
139
+ if (sort.attribute === 'severity') {
140
+ sorted = entriesCopy.sort(bySeverity(sort.attribute));
141
+ }
142
+
143
+ if (sort.attribute === 'fix') {
144
+ sorted = entriesCopy.sort(byFix);
145
+ }
146
+
147
+ if (sort.attribute === 'inhibitor') {
148
+ sorted = entriesCopy.sort(byInhibitor);
149
+ }
150
+
151
+ return sort.order === 'asc' ? sorted : sorted.reverse();
152
+ };
@@ -8,6 +8,7 @@ import {
8
8
 
9
9
  export const initialState = Immutable({
10
10
  loadingPreupgradeReports: false,
11
+ reportsExpected: false,
11
12
  preupgradeReports: [],
12
13
  error: {},
13
14
  });
@@ -21,6 +22,7 @@ const reducer = (state = initialState, action) => {
21
22
  return state.merge({
22
23
  loadingPreupgradeReports: false,
23
24
  preupgradeReports: payload.results,
25
+ reportsExpected: true,
24
26
  });
25
27
  case PREUPGRADE_REPORTS_FAILURE:
26
28
  return state.merge({
@@ -6,3 +6,13 @@ export const selectPreupgradeReports = state =>
6
6
  export const selectLoadingPreupgradeReports = state =>
7
7
  selectPreupgrade(state).loadingPreupgradeReports;
8
8
  export const selectError = state => selectPreupgrade(state).error;
9
+
10
+ export const selectReportsExpected = state =>
11
+ selectPreupgrade(state).reportsExpected;
12
+
13
+ export const selectRexState = state => state.foremanRemoteExecutionReducers;
14
+
15
+ export const selectJobInvocations = state =>
16
+ selectRexState(state).jobInvocations;
17
+ export const selectJobInvocationsPolling = state =>
18
+ selectJobInvocations(state).isPolling;
@@ -2,21 +2,59 @@ export const preupgradeReports = [
2
2
  {
3
3
  hostId: 5,
4
4
  entries: [
5
- { title: 'Fix me!', severity: 'Too severe to talk about', id: 42 },
6
- { title: 'I am broken too', severity: 'medium', id: 43 },
5
+ {
6
+ title: 'Fix me!',
7
+ severity: 'info',
8
+ id: 42,
9
+ hostname: 'host.example.com',
10
+ flags: [],
11
+ },
12
+ {
13
+ title: 'I am broken too',
14
+ severity: 'medium',
15
+ id: 43,
16
+ hostname: 'host.example.com',
17
+ flags: [],
18
+ },
7
19
  ],
8
20
  },
9
21
  {
10
22
  hostId: 6,
11
23
  entries: [
12
- { title: 'Octocat is not happy', severity: 'high', id: 44 },
13
- { title: 'Not enough credits', severity: 'low', id: 45 },
14
- { title: 'SELinux is turned off', severity: 'medium', id: 46 },
15
- { title: 'Root password is too short', severity: 'medium', id: 47 },
24
+ {
25
+ title: 'Octocat is not happy',
26
+ severity: 'high',
27
+ id: 44,
28
+ hostname: 'foo.example.com',
29
+ flags: ['inhibitor'],
30
+ },
31
+ {
32
+ title: 'Not enough credits',
33
+ severity: 'low',
34
+ id: 45,
35
+ hostname: 'foo.example.com',
36
+ flags: [],
37
+ },
38
+ {
39
+ title: 'SELinux is turned off',
40
+ severity: 'medium',
41
+ id: 46,
42
+ hostname: 'foo.example.com',
43
+ flags: [],
44
+ },
45
+ {
46
+ title: 'Root password is too short',
47
+ severity: 'medium',
48
+ id: 47,
49
+ hostname: 'foo.example.com',
50
+ flags: [],
51
+ },
16
52
  {
17
53
  title: 'No chocolate chip cookies in cookie jar',
18
54
  severity: 'high',
19
55
  id: 49,
56
+ hostname: 'foo.example.com',
57
+ flags: [],
20
58
  },
21
59
  ],
22
60
  },
@@ -28,7 +66,7 @@ export const reportsWithRemediations = [
28
66
  entries: [
29
67
  {
30
68
  title: 'Fix me!',
31
- severity: 'Too severe to talk about',
69
+ severity: 'info',
32
70
  detail: { remediations: [{ type: 'hint' }] },
33
71
  },
34
72
  { title: 'I am broken too', severity: 'medium' },
@@ -6,14 +6,26 @@ import { preupgradeReports } from './PreupgradeReports.fixtures';
6
6
 
7
7
  const csrfToken = 'xyz';
8
8
  const newJobInvocationUrl = '/job_invocations/new';
9
+ const getPreupgradeReports = () => {};
9
10
 
10
11
  const fixtures = {
11
- 'should render when loaded': {
12
+ 'should render when loaded with reports': {
12
13
  loading: false,
13
14
  error: {},
14
15
  preupgradeReports,
15
16
  csrfToken,
16
17
  newJobInvocationUrl,
18
+ getPreupgradeReports,
19
+ reportsExpected: true,
20
+ },
21
+ 'should render when loaded without reports': {
22
+ loading: false,
23
+ error: {},
24
+ preupgradeReports: [],
25
+ csrfToken,
26
+ newJobInvocationUrl,
27
+ getPreupgradeReports,
28
+ reportsExpected: true,
17
29
  },
18
30
  'should render when loading': {
19
31
  loading: true,
@@ -21,6 +33,8 @@ const fixtures = {
21
33
  preupgradeReports: [],
22
34
  csrfToken,
23
35
  newJobInvocationUrl,
36
+ getPreupgradeReports,
37
+ reportsExpected: false,
24
38
  },
25
39
  'should render error': {
26
40
  loading: false,
@@ -31,6 +45,8 @@ const fixtures = {
31
45
  preupgradeReports: [],
32
46
  csrfToken,
33
47
  newJobInvocationUrl,
48
+ getPreupgradeReports,
49
+ reportsExpected: false,
34
50
  },
35
51
  };
36
52
 
@@ -10,8 +10,11 @@ import {
10
10
  isEmpty,
11
11
  entryFixable,
12
12
  anyEntriesFixable,
13
- idsForInvocation,
13
+ idsForInvocationFromReports,
14
14
  entriesPage,
15
+ filterEntries,
16
+ fixableEntries,
17
+ sortEntries,
15
18
  } from '../PreupgradeReportsHelpers';
16
19
 
17
20
  const fixtures = {
@@ -28,10 +31,47 @@ const fixtures = {
28
31
  anyEntriesFixable(preupgradeReports),
29
32
  'should detect a fixable entry in reports': () =>
30
33
  anyEntriesFixable(reportsWithRemediations),
31
- 'should collect ids for job invocation': () =>
32
- idsForInvocation(preupgradeReports),
34
+ 'should collect ids for job invocation from reports': () =>
35
+ idsForInvocationFromReports(preupgradeReports),
33
36
  'should return entries page': () =>
34
37
  entriesPage(flattenEntries(preupgradeReports), { page: 2, perPage: 3 }),
38
+ 'should filter entries by title': () =>
39
+ filterEntries('title', 'broken', flattenEntries(preupgradeReports)),
40
+ 'should filter entries by severity': () =>
41
+ filterEntries('severity', 'medium', flattenEntries(preupgradeReports)),
42
+ 'should filter entries by host': () =>
43
+ filterEntries('hostname', 'foo', flattenEntries(preupgradeReports)),
44
+ 'should filter entries by remediations': () =>
45
+ filterEntries('fix', 'command', flattenEntries(reportsWithRemediations)),
46
+ 'should filter entries by inhibitor': () =>
47
+ filterEntries('inhibitor', 'yes', flattenEntries(preupgradeReports)),
48
+ 'should return fixable entries': () =>
49
+ fixableEntries(reportsWithRemediations),
50
+ 'should sort entries by title in ascending order': () =>
51
+ sortEntries(flattenEntries(preupgradeReports), {
52
+ attribute: 'title',
53
+ order: 'asc',
54
+ }),
55
+ 'should sort entries by title in descending order': () =>
56
+ sortEntries(flattenEntries(preupgradeReports), {
57
+ attribute: 'title',
58
+ order: 'desc',
59
+ }),
60
+ 'should sort entries by hostname': () =>
61
+ sortEntries(flattenEntries(preupgradeReports), {
62
+ attribute: 'hostname',
63
+ order: 'asc',
64
+ }),
65
+ 'should sort entries by severity': () =>
66
+ sortEntries(flattenEntries(preupgradeReports), {
67
+ attribute: 'severity',
68
+ order: 'asc',
69
+ }),
70
+ 'should sort entries by remediations': () =>
71
+ sortEntries(flattenEntries(reportsWithRemediations), {
72
+ attribute: 'fix',
73
+ order: 'asc',
74
+ }),
35
75
  };
36
76
 
37
77
  describe('PreupgradeReportsHelpers', () =>
@@ -8,7 +8,7 @@ exports[`PreupgradeReports should render error 1`] = `
8
8
  />
9
9
  `;
10
10
 
11
- exports[`PreupgradeReports should render when loaded 1`] = `
11
+ exports[`PreupgradeReports should render when loaded with reports 1`] = `
12
12
  <LoadingState
13
13
  additionalClasses=""
14
14
  loading={false}
@@ -16,119 +16,92 @@ exports[`PreupgradeReports should render when loaded 1`] = `
16
16
  size="lg"
17
17
  timeout={300}
18
18
  >
19
- <Row
20
- bsClass="row"
21
- componentClass="div"
22
- >
23
- <div
24
- className="title-filter col-md-4"
25
- >
26
-  
27
- </div>
28
- <div
29
- className="col-md-8"
30
- id="title_action"
31
- >
32
- <div
33
- className="btn-toolbar pull-right"
34
- >
35
- <FixAllButton
36
- csrfToken="xyz"
37
- disabled={true}
38
- postUrl="/job_invocations/new"
39
- preupgradeReports={
40
- Array [
41
- Object {
42
- "entries": Array [
43
- Object {
44
- "id": 42,
45
- "severity": "Too severe to talk about",
46
- "title": "Fix me!",
47
- },
48
- Object {
49
- "id": 43,
50
- "severity": "medium",
51
- "title": "I am broken too",
52
- },
53
- ],
54
- "hostId": 5,
55
- },
56
- Object {
57
- "entries": Array [
58
- Object {
59
- "id": 44,
60
- "severity": "high",
61
- "title": "Octocat is not happy",
62
- },
63
- Object {
64
- "id": 45,
65
- "severity": "low",
66
- "title": "Not enough credits",
67
- },
68
- Object {
69
- "id": 46,
70
- "severity": "medium",
71
- "title": "SELinux is turned off",
72
- },
73
- Object {
74
- "id": 47,
75
- "severity": "medium",
76
- "title": "Root password is too short",
77
- },
78
- Object {
79
- "id": 49,
80
- "severity": "high",
81
- "title": "No chocolate chip cookies in cookie jar",
82
- },
83
- ],
84
- "hostId": 6,
85
- },
86
- ]
87
- }
88
- />
89
- </div>
90
- </div>
91
- </Row>
92
- <PreupgradeReportsList
93
- allEntries={
19
+ <PreupgradeReports
20
+ csrfToken="xyz"
21
+ error={Object {}}
22
+ getPreupgradeReports={[Function]}
23
+ loading={false}
24
+ newJobInvocationUrl="/job_invocations/new"
25
+ preupgradeReports={
94
26
  Array [
95
27
  Object {
96
- "id": 42,
97
- "severity": "Too severe to talk about",
98
- "title": "Fix me!",
28
+ "entries": Array [
29
+ Object {
30
+ "flags": Array [],
31
+ "hostname": "host.example.com",
32
+ "id": 42,
33
+ "severity": "info",
34
+ "title": "Fix me!",
35
+ },
36
+ Object {
37
+ "flags": Array [],
38
+ "hostname": "host.example.com",
39
+ "id": 43,
40
+ "severity": "medium",
41
+ "title": "I am broken too",
42
+ },
43
+ ],
44
+ "hostId": 5,
99
45
  },
100
46
  Object {
101
- "id": 43,
102
- "severity": "medium",
103
- "title": "I am broken too",
104
- },
105
- Object {
106
- "id": 44,
107
- "severity": "high",
108
- "title": "Octocat is not happy",
109
- },
110
- Object {
111
- "id": 45,
112
- "severity": "low",
113
- "title": "Not enough credits",
114
- },
115
- Object {
116
- "id": 46,
117
- "severity": "medium",
118
- "title": "SELinux is turned off",
119
- },
120
- Object {
121
- "id": 47,
122
- "severity": "medium",
123
- "title": "Root password is too short",
124
- },
125
- Object {
126
- "id": 49,
127
- "severity": "high",
128
- "title": "No chocolate chip cookies in cookie jar",
47
+ "entries": Array [
48
+ Object {
49
+ "flags": Array [
50
+ "inhibitor",
51
+ ],
52
+ "hostname": "foo.example.com",
53
+ "id": 44,
54
+ "severity": "high",
55
+ "title": "Octocat is not happy",
56
+ },
57
+ Object {
58
+ "flags": Array [],
59
+ "hostname": "foo.example.com",
60
+ "id": 45,
61
+ "severity": "low",
62
+ "title": "Not enough credits",
63
+ },
64
+ Object {
65
+ "flags": Array [],
66
+ "hostname": "foo.example.com",
67
+ "id": 46,
68
+ "severity": "medium",
69
+ "title": "SELinux is turned off",
70
+ },
71
+ Object {
72
+ "flags": Array [],
73
+ "hostname": "foo.example.com",
74
+ "id": 47,
75
+ "severity": "medium",
76
+ "title": "Root password is too short",
77
+ },
78
+ Object {
79
+ "flags": Array [],
80
+ "hostname": "foo.example.com",
81
+ "id": 49,
82
+ "severity": "high",
83
+ "title": "No chocolate chip cookies in cookie jar",
84
+ },
85
+ ],
86
+ "hostId": 6,
129
87
  },
130
88
  ]
131
89
  }
90
+ reportsExpected={true}
91
+ />
92
+ </LoadingState>
93
+ `;
94
+
95
+ exports[`PreupgradeReports should render when loaded without reports 1`] = `
96
+ <LoadingState
97
+ additionalClasses=""
98
+ loading={false}
99
+ loadingText="Loading"
100
+ size="lg"
101
+ timeout={300}
102
+ >
103
+ <NoReports
104
+ reportsExpected={true}
132
105
  />
133
106
  </LoadingState>
134
107
  `;
@@ -141,33 +114,8 @@ exports[`PreupgradeReports should render when loading 1`] = `
141
114
  size="lg"
142
115
  timeout={300}
143
116
  >
144
- <Row
145
- bsClass="row"
146
- componentClass="div"
147
- >
148
- <div
149
- className="title-filter col-md-4"
150
- >
151
-  
152
- </div>
153
- <div
154
- className="col-md-8"
155
- id="title_action"
156
- >
157
- <div
158
- className="btn-toolbar pull-right"
159
- >
160
- <FixAllButton
161
- csrfToken="xyz"
162
- disabled={true}
163
- postUrl="/job_invocations/new"
164
- preupgradeReports={Array []}
165
- />
166
- </div>
167
- </div>
168
- </Row>
169
- <PreupgradeReportsList
170
- allEntries={Array []}
117
+ <NoReports
118
+ reportsExpected={false}
171
119
  />
172
120
  </LoadingState>
173
121
  `;