@truedat/cx 4.41.2 → 4.42.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 (108) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/package.json +4 -4
  3. package/src/jobs/components/Job.js +11 -11
  4. package/src/jobs/components/JobRoutes.js +2 -2
  5. package/src/jobs/components/JobRow.js +7 -3
  6. package/src/jobs/components/Jobs.js +16 -28
  7. package/src/jobs/components/JobsTable.js +80 -92
  8. package/src/jobs/components/JobsView.js +23 -0
  9. package/src/jobs/components/SourceJobs.js +29 -0
  10. package/src/jobs/components/__tests__/JobRow.spec.js +44 -23
  11. package/src/jobs/components/__tests__/Jobs.spec.js +33 -8
  12. package/src/jobs/components/__tests__/JobsTable.spec.js +50 -81
  13. package/src/jobs/components/__tests__/JobsView.spec.js +39 -0
  14. package/src/jobs/components/__tests__/SourceJobs.spec.js +38 -0
  15. package/src/jobs/components/__tests__/__snapshots__/Job.spec.js.snap +3 -4
  16. package/src/jobs/components/__tests__/__snapshots__/JobRow.spec.js.snap +40 -32
  17. package/src/jobs/components/__tests__/__snapshots__/Jobs.spec.js.snap +136 -35
  18. package/src/jobs/components/__tests__/__snapshots__/JobsTable.spec.js.snap +104 -227
  19. package/src/jobs/components/__tests__/__snapshots__/JobsView.spec.js.snap +167 -0
  20. package/src/jobs/components/__tests__/__snapshots__/SourceJobs.spec.js.snap +115 -0
  21. package/src/jobs/components/index.js +1 -3
  22. package/src/jobs/selectors/index.js +4 -2
  23. package/src/jobs/selectors/{getJobColumns.js → jobColumnsSelector.js} +11 -27
  24. package/src/jobs/selectors/jobRowsSelector.js +14 -0
  25. package/src/jobs/selectors/sourceJobColumnsSelector.js +35 -0
  26. package/src/messages/en.js +9 -1
  27. package/src/messages/es.js +9 -1
  28. package/src/reducers/cxMessage.js +15 -1
  29. package/src/sources/api/fragments.js +48 -0
  30. package/src/sources/api/mutations.js +51 -0
  31. package/src/sources/api/queries.js +52 -0
  32. package/src/sources/api.js +1 -2
  33. package/src/sources/components/EditSource.js +5 -29
  34. package/src/sources/components/JobForm.js +2 -2
  35. package/src/sources/components/NewJob.js +10 -23
  36. package/src/sources/components/Source.js +12 -76
  37. package/src/sources/components/SourceActions.js +13 -21
  38. package/src/sources/components/SourceBreadcrumbs.js +1 -1
  39. package/src/sources/components/SourceConfiguration.js +60 -0
  40. package/src/sources/components/SourceDetail.js +90 -0
  41. package/src/sources/components/SourceForm.js +50 -53
  42. package/src/sources/components/SourceHeader.js +29 -0
  43. package/src/sources/components/SourceRoutes.js +25 -89
  44. package/src/sources/components/SourceSelector.js +53 -44
  45. package/src/sources/components/SourceTabs.js +54 -0
  46. package/src/sources/components/Sources.js +7 -20
  47. package/src/sources/components/SourcesTable.js +3 -4
  48. package/src/sources/components/__tests__/EditSource.spec.js +1 -2
  49. package/src/sources/components/__tests__/Source.spec.js +1 -1
  50. package/src/sources/components/__tests__/SourceActions.spec.js +3 -1
  51. package/src/sources/components/__tests__/SourceDetail.spec.js +45 -0
  52. package/src/sources/components/__tests__/SourceForm.spec.js +16 -31
  53. package/src/sources/components/__tests__/SourceHeader.spec.js +16 -0
  54. package/src/sources/components/__tests__/SourceSelector.spec.js +44 -0
  55. package/src/sources/components/__tests__/SourceTabs.spec.js +21 -0
  56. package/src/sources/components/__tests__/Sources.spec.js +5 -2
  57. package/src/sources/components/__tests__/__snapshots__/EditSource.spec.js.snap +12 -35
  58. package/src/sources/components/__tests__/__snapshots__/NewSource.spec.js.snap +1 -1
  59. package/src/sources/components/__tests__/__snapshots__/Source.spec.js.snap +23 -65
  60. package/src/sources/components/__tests__/__snapshots__/SourceActions.spec.js.snap +1 -1
  61. package/src/sources/components/__tests__/__snapshots__/SourceDetail.spec.js.snap +154 -0
  62. package/src/sources/components/__tests__/__snapshots__/SourceForm.spec.js.snap +37 -14
  63. package/src/sources/components/__tests__/__snapshots__/SourceHeader.spec.js.snap +85 -0
  64. package/src/sources/components/__tests__/__snapshots__/SourceSelector.spec.js.snap +68 -0
  65. package/src/sources/components/__tests__/__snapshots__/SourceTabs.spec.js.snap +22 -0
  66. package/src/sources/components/__tests__/__snapshots__/Sources.spec.js.snap +2 -2
  67. package/src/sources/components/__tests__/__snapshots__/SourcesTable.spec.js.snap +5 -5
  68. package/src/sources/components/index.js +1 -4
  69. package/src/sources/reducers/__tests__/sourceRedirect.spec.js +26 -21
  70. package/src/sources/reducers/__tests__/sourceUpdateStatus.spec.js +9 -9
  71. package/src/sources/reducers/index.js +1 -12
  72. package/src/sources/reducers/sourceRedirect.js +20 -10
  73. package/src/sources/reducers/sourceUpdateStatus.js +5 -5
  74. package/src/sources/routines.js +0 -3
  75. package/src/sources/sagas/__tests__/createSource.spec.js +35 -20
  76. package/src/sources/sagas/__tests__/deleteSource.spec.js +29 -14
  77. package/src/sources/sagas/__tests__/disableSource.spec.js +2 -8
  78. package/src/sources/sagas/__tests__/enableSource.spec.js +2 -8
  79. package/src/sources/sagas/__tests__/updateSource.spec.js +33 -15
  80. package/src/sources/sagas/createSource.js +24 -14
  81. package/src/sources/sagas/deleteSource.js +14 -15
  82. package/src/sources/sagas/disableSource.js +1 -17
  83. package/src/sources/sagas/enableSource.js +1 -17
  84. package/src/sources/sagas/index.js +0 -9
  85. package/src/sources/sagas/updateSource.js +18 -15
  86. package/src/sources/components/DynamicSourceForm.js +0 -60
  87. package/src/sources/components/SourceLoader.js +0 -59
  88. package/src/sources/components/SourcesLoader.js +0 -39
  89. package/src/sources/components/__tests__/DynamicSourceForm.spec.js +0 -89
  90. package/src/sources/components/__tests__/SourceLoader.spec.js +0 -54
  91. package/src/sources/components/__tests__/SourcesLoader.spec.js +0 -53
  92. package/src/sources/components/__tests__/__snapshots__/DynamicSourceForm.spec.js.snap +0 -8
  93. package/src/sources/components/__tests__/__snapshots__/SourceLoader.spec.js.snap +0 -3
  94. package/src/sources/components/__tests__/__snapshots__/SourcesLoader.spec.js.snap +0 -3
  95. package/src/sources/reducers/__tests__/source.spec.js +0 -44
  96. package/src/sources/reducers/__tests__/sourceLoading.spec.js +0 -30
  97. package/src/sources/reducers/__tests__/sources.spec.js +0 -37
  98. package/src/sources/reducers/__tests__/sourcesLoading.spec.js +0 -30
  99. package/src/sources/reducers/source.js +0 -35
  100. package/src/sources/reducers/sourceLoading.js +0 -16
  101. package/src/sources/reducers/sources.js +0 -28
  102. package/src/sources/reducers/sourcesLoading.js +0 -16
  103. package/src/sources/sagas/__tests__/fetchSource.spec.js +0 -71
  104. package/src/sources/sagas/__tests__/fetchSources.spec.js +0 -69
  105. package/src/sources/sagas/__tests__/updateSourceConfig.spec.js +0 -73
  106. package/src/sources/sagas/fetchSource.js +0 -30
  107. package/src/sources/sagas/fetchSources.js +0 -26
  108. package/src/sources/sagas/updateSourceConfig.js +0 -29
@@ -1,95 +1,64 @@
1
+ import _ from "lodash/fp";
1
2
  import React from "react";
2
- import { shallow } from "enzyme";
3
- import { JobsTable } from "../JobsTable";
4
- import { getJobColumns } from "../../selectors";
3
+ import userEvent from "@testing-library/user-event";
4
+ import { render } from "@truedat/test/render";
5
+ import en from "../../../messages/en";
6
+ import { initialState as jobQuery } from "../../reducers/jobQuery";
7
+ import JobsTable from "../JobsTable";
5
8
 
6
- describe("<JobsTable />", () => {
7
- const jobs = [
8
- {
9
- external_id: "external_id",
10
- source: {
11
- external_id: "source external_id",
12
- type: "source_type"
13
- }
9
+ const jobs = [
10
+ {
11
+ external_id: "external_id",
12
+ source: {
13
+ external_id: "source external_id",
14
+ type: "source_type",
15
+ },
16
+ },
17
+ {
18
+ external_id: "external_id_2",
19
+ source: {
20
+ external_id: "source external_id_2",
21
+ type: "source_type_2",
14
22
  },
15
- {
16
- external_id: "external_id_2",
17
- source: {
18
- external_id: "source external_id_2",
19
- type: "source_type_2"
20
- }
21
- }
22
- ];
23
- const columns = getJobColumns({}, { locale: "es" });
24
- const jobsSorting = [{ "source.type.sort": "desc" }];
25
- const sortJobs = jest.fn();
23
+ },
24
+ ];
25
+ const state = { jobs, jobQuery };
26
+ const renderOpts = {
27
+ messages: { en },
28
+ state,
29
+ };
26
30
 
31
+ describe("<JobsTable />", () => {
27
32
  it("matches the latest snapshot", () => {
28
- const props = { jobs, columns };
29
- const wrapper = shallow(<JobsTable {...props} />);
30
- expect(wrapper).toMatchSnapshot();
33
+ const { container } = render(<JobsTable />, renderOpts);
34
+ expect(container).toMatchSnapshot();
31
35
  });
32
36
 
33
37
  it("matches the latest snapshot (no jobs)", () => {
34
- const props = { jobs: [], columns };
35
- const wrapper = shallow(<JobsTable {...props} />);
36
- expect(wrapper).toMatchSnapshot();
37
- });
38
-
39
- it("sorts column in the direction set", () => {
40
- const props = { jobs, columns, jobsSorting };
41
- const wrapper = shallow(<JobsTable {...props} />);
42
-
43
- expect(
44
- wrapper
45
- .find("TableHeaderCell")
46
- .at(0)
47
- .props().sorted
48
- ).toEqual(null);
49
-
50
- expect(
51
- wrapper
52
- .find("TableHeaderCell")
53
- .at(1)
54
- .props().sorted
55
- ).toEqual("descending");
38
+ const opts = _.set("state.jobs", [])(renderOpts);
39
+ const { container } = render(<JobsTable />, opts);
40
+ expect(container).toMatchSnapshot();
56
41
  });
57
42
 
58
- it("handles sort when column header is clicked", () => {
59
- const props = { jobs, columns, sortJobs };
60
- const wrapper = shallow(<JobsTable {...props} />);
61
- wrapper
62
- .find("TableHeaderCell")
63
- .at(1)
64
- .simulate("click");
65
- expect(
66
- wrapper
67
- .find("TableHeaderCell")
68
- .at(1)
69
- .props().sorted
70
- ).toEqual("ascending");
71
-
72
- wrapper
73
- .find("TableHeaderCell")
74
- .at(1)
75
- .simulate("click");
76
- expect(
77
- wrapper
78
- .find("TableHeaderCell")
79
- .at(1)
80
- .props().sorted
81
- ).toEqual("descending");
43
+ it("sorts by most recent initially", () => {
44
+ const { getByRole } = render(<JobsTable />, renderOpts);
45
+ expect(getByRole("columnheader", { name: /Updated At/ })).toHaveClass(
46
+ "sorted descending"
47
+ );
82
48
  });
83
49
 
84
- it("updates sort if jobsSorting is changed", () => {
85
- const props = { jobs, columns, jobsSorting, sortJobs };
86
- const wrapper = shallow(<JobsTable {...props} />);
87
- wrapper.setProps({ jobsSorting: [{ "source.external_id.sort": "asc" }] });
88
- expect(
89
- wrapper
90
- .find("TableHeaderCell")
91
- .at(0)
92
- .props().sorted
93
- ).toEqual("ascending");
50
+ it("toggles sort direction when a column header is clicked", () => {
51
+ const { getByText, getByRole } = render(<JobsTable />, renderOpts);
52
+ expect(getByRole("columnheader", { name: /Source Type/ })).not.toHaveClass(
53
+ "sorted"
54
+ );
55
+ userEvent.click(getByText(/Source Type/));
56
+ expect(getByRole("columnheader", { name: /Source Type/ })).toHaveClass(
57
+ "sorted ascending"
58
+ );
59
+ userEvent.click(getByText(/Source Type/));
60
+ expect(getByRole("columnheader", { name: /Source Type/ })).toHaveClass(
61
+ "sorted descending"
62
+ );
94
63
  });
95
64
  });
@@ -0,0 +1,39 @@
1
+ import React, { Suspense } from "react";
2
+ import { render } from "@truedat/test/render";
3
+ import en from "../../../messages/en";
4
+ import { initialState as jobQuery } from "../../reducers/jobQuery";
5
+ import JobsView from "../JobsView";
6
+
7
+ const jobs = [
8
+ {
9
+ external_id: "external_id",
10
+ source: {
11
+ external_id: "source external_id",
12
+ type: "source_type",
13
+ },
14
+ },
15
+ {
16
+ external_id: "external_id_2",
17
+ source: {
18
+ external_id: "source external_id_2",
19
+ type: "source_type_2",
20
+ },
21
+ },
22
+ ];
23
+ const state = { jobs, jobQuery };
24
+ const renderOpts = {
25
+ messages: { en },
26
+ state,
27
+ };
28
+
29
+ describe("<JobsView />", () => {
30
+ it("matches the latest snapshot", () => {
31
+ const { container } = render(
32
+ <Suspense fallback={null}>
33
+ <JobsView />
34
+ </Suspense>,
35
+ renderOpts
36
+ );
37
+ expect(container).toMatchSnapshot();
38
+ });
39
+ });
@@ -0,0 +1,38 @@
1
+ import React, { Suspense } from "react";
2
+ import { render } from "@truedat/test/render";
3
+ import en from "../../../messages/en";
4
+ import SourceJobs from "../SourceJobs";
5
+
6
+ const jobs = [
7
+ {
8
+ external_id: "external_id",
9
+ source: {
10
+ external_id: "source external_id",
11
+ type: "source_type",
12
+ },
13
+ },
14
+ {
15
+ external_id: "external_id_2",
16
+ source: {
17
+ external_id: "source external_id_2",
18
+ type: "source_type_2",
19
+ },
20
+ },
21
+ ];
22
+ const state = { jobs, jobCount: 42 };
23
+ const renderOpts = {
24
+ messages: { en },
25
+ state,
26
+ };
27
+
28
+ describe("<SourceJobs />", () => {
29
+ it("matches the latest snapshot", () => {
30
+ const { container } = render(
31
+ <Suspense fallback={null}>
32
+ <SourceJobs />
33
+ </Suspense>,
34
+ renderOpts
35
+ );
36
+ expect(container).toMatchSnapshot();
37
+ });
38
+ });
@@ -19,10 +19,9 @@ exports[`<EventFeed /> matches the latest snapshot 1`] = `
19
19
  `;
20
20
 
21
21
  exports[`<Job /> matches the latest snapshot 1`] = `
22
- <Segment>
22
+ <Fragment>
23
23
  <Header
24
- as="h2"
25
- content="Some source"
24
+ as="h4"
26
25
  subheader="jobType.catalog.label"
27
26
  />
28
27
  <EventFeed
@@ -40,5 +39,5 @@ exports[`<Job /> matches the latest snapshot 1`] = `
40
39
  ]
41
40
  }
42
41
  />
43
- </Segment>
42
+ </Fragment>
44
43
  `;
@@ -1,36 +1,44 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`<JobRow /> matches the latest snapshot 1`] = `
4
- <TableRow
5
- as="tr"
6
- cellAs="td"
7
- key="foo"
8
- onClick={[Function]}
9
- >
10
- <TableCell
11
- as="td"
12
- content="source external_id_2"
13
- key="0"
14
- />
15
- <TableCell
16
- as="td"
17
- content="source_type_2"
18
- key="1"
19
- />
20
- <TableCell
21
- as="td"
22
- content="init"
23
- key="2"
24
- />
25
- <TableCell
26
- as="td"
27
- content="Job started"
28
- key="3"
29
- />
30
- <TableCell
31
- as="td"
32
- content="2020-01-21 16:31"
33
- key="4"
34
- />
35
- </TableRow>
4
+ <div>
5
+ <table>
6
+ <tbody>
7
+ <tr
8
+ class=""
9
+ >
10
+ <td
11
+ class=""
12
+ />
13
+ <td
14
+ class=""
15
+ >
16
+ source_type_2
17
+ </td>
18
+ <td
19
+ class=""
20
+ />
21
+ <td
22
+ class=""
23
+ >
24
+ init
25
+ </td>
26
+ <td
27
+ class=""
28
+ >
29
+ Job started
30
+ </td>
31
+ <td
32
+ class="center aligned"
33
+ >
34
+ <time
35
+ datetime="1579624260000"
36
+ >
37
+ 2020-01-21 16:31
38
+ </time>
39
+ </td>
40
+ </tr>
41
+ </tbody>
42
+ </table>
43
+ </div>
36
44
  `;
@@ -1,44 +1,145 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`<Jobs /> matches the latest snapshot 1`] = `
4
- <Segment>
5
- <Header
6
- as="h2"
4
+ <div>
5
+ <div
6
+ class="ui action left icon input"
7
+ style="display: none;"
7
8
  >
8
- <Icon
9
- as="i"
10
- circular={true}
11
- name="cogs"
9
+ <input
10
+ placeholder="Search jobs..."
11
+ type="text"
12
+ value=""
12
13
  />
13
- <HeaderContent>
14
- <MemoizedFormattedMessage
15
- id="jobs.header"
16
- />
17
- <HeaderSubheader>
18
- <MemoizedFormattedMessage
19
- id="jobs.subheader"
20
- />
21
- </HeaderSubheader>
22
- </HeaderContent>
23
- </Header>
24
- <Segment
25
- attached="bottom"
14
+ <i
15
+ aria-hidden="true"
16
+ class="search link icon"
17
+ />
18
+ </div>
19
+ <div
20
+ class="selectedFilters"
21
+ style="display: none;"
22
+ />
23
+ <div
24
+ class="dimmable"
25
+ style="display: none;"
26
26
  >
27
- <Connect(JobsSearch) />
28
- <Connect(SelectedFilters) />
29
- <DimmerDimmable
30
- dimmed={false}
27
+ <div
28
+ class="ui inverted dimmer"
31
29
  >
32
- <Dimmer
33
- active={false}
34
- inverted={true}
30
+ <div
31
+ class="content"
35
32
  >
36
- <Loader />
37
- </Dimmer>
38
- </DimmerDimmable>
39
- <Connect(JobsLabelResults) />
40
- <Connect(JobsTable) />
41
- <Connect(Pagination) />
42
- </Segment>
43
- </Segment>
33
+ <div
34
+ class="ui loader"
35
+ />
36
+ </div>
37
+ </div>
38
+ </div>
39
+ <div
40
+ class="ui label jobs-label-results"
41
+ style="display: none;"
42
+ >
43
+ 42 jobs found
44
+ </div>
45
+ <table
46
+ class="ui selectable sortable table"
47
+ style="display: none;"
48
+ >
49
+ <thead
50
+ class=""
51
+ >
52
+ <tr
53
+ class=""
54
+ >
55
+ <th
56
+ class="two wide"
57
+ >
58
+ Source
59
+ </th>
60
+ <th
61
+ class="two wide"
62
+ >
63
+ Source Type
64
+ </th>
65
+ <th
66
+ class="two wide"
67
+ >
68
+ Type
69
+ </th>
70
+ <th
71
+ class="two wide"
72
+ >
73
+ Status
74
+ </th>
75
+ <th
76
+ class="two wide ascending sorted disabled"
77
+ >
78
+ Message
79
+ </th>
80
+ <th
81
+ class="two wide"
82
+ >
83
+ Updated At
84
+ </th>
85
+ </tr>
86
+ </thead>
87
+ <tbody
88
+ class=""
89
+ >
90
+ <tr
91
+ class=""
92
+ >
93
+ <td
94
+ class=""
95
+ >
96
+ source external_id
97
+ </td>
98
+ <td
99
+ class=""
100
+ >
101
+ source_type
102
+ </td>
103
+ <td
104
+ class=""
105
+ />
106
+ <td
107
+ class=""
108
+ />
109
+ <td
110
+ class=""
111
+ />
112
+ <td
113
+ class="center aligned"
114
+ />
115
+ </tr>
116
+ <tr
117
+ class=""
118
+ >
119
+ <td
120
+ class=""
121
+ >
122
+ source external_id_2
123
+ </td>
124
+ <td
125
+ class=""
126
+ >
127
+ source_type_2
128
+ </td>
129
+ <td
130
+ class=""
131
+ />
132
+ <td
133
+ class=""
134
+ />
135
+ <td
136
+ class=""
137
+ />
138
+ <td
139
+ class="center aligned"
140
+ />
141
+ </tr>
142
+ </tbody>
143
+ </table>
144
+ </div>
44
145
  `;