@truedat/dd 4.44.3 → 4.44.4

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 (67) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/package.json +6 -6
  3. package/src/api/mutations.js +27 -0
  4. package/src/api/queries.js +24 -0
  5. package/src/api.js +2 -0
  6. package/src/components/DictionaryRoutes.js +7 -5
  7. package/src/components/FilteredNav.js +9 -9
  8. package/src/components/GrantRequestApprovalPopup.js +0 -1
  9. package/src/components/ReferenceDataset.js +23 -0
  10. package/src/components/ReferenceDatasetActions.js +88 -0
  11. package/src/components/ReferenceDatasetBreadcrumbs.js +22 -0
  12. package/src/components/ReferenceDatasetCreate.js +36 -0
  13. package/src/components/ReferenceDatasetDetail.js +42 -0
  14. package/src/components/ReferenceDatasetForm.js +109 -0
  15. package/src/components/ReferenceDatasetHeader.js +32 -0
  16. package/src/components/ReferenceDatasetRoutes.js +56 -0
  17. package/src/components/ReferenceDatasetTable.js +42 -0
  18. package/src/components/ReferenceDatasets.js +61 -0
  19. package/src/components/ReferenceDatasetsTable.js +105 -0
  20. package/src/components/StructureTagsRoutes.js +0 -1
  21. package/src/components/StructureTypesCrumbs.js +0 -1
  22. package/src/components/StructureView.js +1 -3
  23. package/src/components/SystemForm.js +1 -1
  24. package/src/components/__tests__/ReferenceDataset.spec.js +64 -0
  25. package/src/components/__tests__/ReferenceDatasetActions.spec.js +17 -0
  26. package/src/components/__tests__/ReferenceDatasetBreadcrumbs.spec.js +12 -0
  27. package/src/components/__tests__/ReferenceDatasetCreate.spec.js +12 -0
  28. package/src/components/__tests__/ReferenceDatasetDetail.spec.js +37 -0
  29. package/src/components/__tests__/ReferenceDatasetForm.spec.js +51 -0
  30. package/src/components/__tests__/ReferenceDatasetHeader.spec.js +17 -0
  31. package/src/components/__tests__/ReferenceDatasetRoutes.spec.js +74 -0
  32. package/src/components/__tests__/ReferenceDatasetTable.spec.js +18 -0
  33. package/src/components/__tests__/ReferenceDatasets.spec.js +32 -0
  34. package/src/components/__tests__/ReferenceDatasetsTable.spec.js +22 -0
  35. package/src/components/__tests__/__snapshots__/DictionaryRoutes.spec.js.snap +4 -0
  36. package/src/components/__tests__/__snapshots__/ReferenceDataset.spec.js.snap +365 -0
  37. package/src/components/__tests__/__snapshots__/ReferenceDatasetActions.spec.js.snap +65 -0
  38. package/src/components/__tests__/__snapshots__/ReferenceDatasetBreadcrumbs.spec.js.snap +25 -0
  39. package/src/components/__tests__/__snapshots__/ReferenceDatasetCreate.spec.js.snap +98 -0
  40. package/src/components/__tests__/__snapshots__/ReferenceDatasetDetail.spec.js.snap +135 -0
  41. package/src/components/__tests__/__snapshots__/ReferenceDatasetForm.spec.js.snap +61 -0
  42. package/src/components/__tests__/__snapshots__/ReferenceDatasetHeader.spec.js.snap +95 -0
  43. package/src/components/__tests__/__snapshots__/ReferenceDatasetRoutes.spec.js.snap +414 -0
  44. package/src/components/__tests__/__snapshots__/ReferenceDatasetTable.spec.js.snap +75 -0
  45. package/src/components/__tests__/__snapshots__/ReferenceDatasets.spec.js.snap +128 -0
  46. package/src/components/__tests__/__snapshots__/ReferenceDatasetsTable.spec.js.snap +86 -0
  47. package/src/messages/en.js +18 -0
  48. package/src/messages/es.js +20 -0
  49. package/src/reducers/__tests__/ddMessage.spec.js +26 -5
  50. package/src/reducers/__tests__/graph.spec.js +1 -6
  51. package/src/reducers/__tests__/referenceDatasetSaving.spec.js +44 -0
  52. package/src/reducers/__tests__/structureRedirect.spec.js +37 -13
  53. package/src/reducers/ddMessage.js +26 -1
  54. package/src/reducers/index.js +2 -0
  55. package/src/reducers/referenceDatasetSaving.js +16 -0
  56. package/src/reducers/structureRedirect.js +36 -15
  57. package/src/reducers/structuresUploadEvents.js +0 -1
  58. package/src/routines.js +35 -74
  59. package/src/sagas/__tests__/createReferenceDataset.spec.js +90 -0
  60. package/src/sagas/__tests__/deleteReferenceDataset.spec.js +81 -0
  61. package/src/sagas/__tests__/updateReferenceDataset.spec.js +116 -0
  62. package/src/sagas/createReferenceDataset.js +34 -0
  63. package/src/sagas/deleteReferenceDataset.js +29 -0
  64. package/src/sagas/downloadReferenceDataset.js +44 -0
  65. package/src/sagas/index.js +31 -22
  66. package/src/sagas/updateReferenceDataset.js +35 -0
  67. package/src/selectors/getRelationSortingCriteria.js +3 -5
@@ -0,0 +1,61 @@
1
+ import _ from "lodash/fp";
2
+ import React, { useState } from "react";
3
+ import { matchSorter } from "match-sorter";
4
+ import { useIntl, FormattedMessage } from "react-intl";
5
+ import { Link } from "react-router-dom";
6
+ import { Button, Header, Icon, Input, Segment } from "semantic-ui-react";
7
+ import { useQuery } from "@apollo/client";
8
+ import { Loading } from "@truedat/core/components";
9
+ import { REFERENCE_DATASET_NEW } from "@truedat/core/routes";
10
+ import { lowerDeburrTrim } from "@truedat/core/services/sort";
11
+ import { REFERENCE_DATASETS_QUERY } from "../api/queries";
12
+ import ReferenceDatasetsTable from "./ReferenceDatasetsTable";
13
+
14
+ const sortByName = _.sortBy([({ name }) => lowerDeburrTrim(name), "name"]);
15
+
16
+ export const ReferenceDatasets = () => {
17
+ const [searchTerm, setSearchTerm] = useState("");
18
+ const { formatMessage } = useIntl();
19
+ const { loading, error, data } = useQuery(REFERENCE_DATASETS_QUERY);
20
+ if (error) return null;
21
+ if (loading) return <Loading />;
22
+ const items = data?.referenceDatasets;
23
+ const datasets =
24
+ searchTerm === ""
25
+ ? sortByName(items)
26
+ : matchSorter(items, searchTerm, {
27
+ keys: ["name", "headers", "rowCount", "updatedAt"],
28
+ threshold: matchSorter.rankings.CONTAINS,
29
+ });
30
+ return (
31
+ <Segment>
32
+ <Header as="h2">
33
+ <Button
34
+ floated="right"
35
+ primary
36
+ as={Link}
37
+ to={REFERENCE_DATASET_NEW}
38
+ content={formatMessage({ id: "referenceDatasets.actions.create" })}
39
+ />
40
+ <Icon name="list ol" circular />
41
+ <Header.Content>
42
+ <FormattedMessage id="referenceDatasets.header" />
43
+ <Header.Subheader>
44
+ <FormattedMessage id="referenceDatasets.subheader" />
45
+ </Header.Subheader>
46
+ </Header.Content>
47
+ </Header>
48
+ <Input
49
+ onChange={(_e, { value }) => setSearchTerm(value)}
50
+ value={searchTerm}
51
+ icon={{ name: "search", link: true }}
52
+ placeholder={formatMessage({
53
+ id: "referenceDatasets.search.placeholder",
54
+ })}
55
+ />
56
+ <ReferenceDatasetsTable datasets={datasets} />
57
+ </Segment>
58
+ );
59
+ };
60
+
61
+ export default ReferenceDatasets;
@@ -0,0 +1,105 @@
1
+ import _ from "lodash/fp";
2
+ import React, { useState } from "react";
3
+ import PropTypes from "prop-types";
4
+ import { Icon, Table } from "semantic-ui-react";
5
+ import { Link } from "react-router-dom";
6
+ import { useIntl } from "react-intl";
7
+ import Moment from "react-moment";
8
+ import { DateTime } from "@truedat/core/components";
9
+ import { linkTo } from "@truedat/core/routes";
10
+
11
+ export const HeaderRow = ({ onDateClick, relative }) => {
12
+ const { formatMessage } = useIntl();
13
+ return (
14
+ <Table.Row>
15
+ <Table.HeaderCell
16
+ content={formatMessage({ id: "referenceDataset.name" })}
17
+ />
18
+ <Table.HeaderCell
19
+ content={formatMessage({ id: "referenceDataset.headers" })}
20
+ />
21
+ <Table.HeaderCell
22
+ content={formatMessage({ id: "referenceDataset.rowCount" })}
23
+ textAlign="right"
24
+ />
25
+ <Table.HeaderCell textAlign="right">
26
+ {formatMessage({ id: "referenceDataset.updatedAt" })}{" "}
27
+ <a onClick={onDateClick}>
28
+ <Icon name={relative ? "calendar outline" : "clock outline"} />
29
+ </a>
30
+ </Table.HeaderCell>
31
+ </Table.Row>
32
+ );
33
+ };
34
+
35
+ HeaderRow.propTypes = {
36
+ relative: PropTypes.bool,
37
+ onDateClick: PropTypes.func,
38
+ };
39
+
40
+ export const DatasetRow = ({
41
+ name,
42
+ id,
43
+ relative,
44
+ rowCount,
45
+ headers,
46
+ updatedAt,
47
+ }) => {
48
+ const { locale } = useIntl();
49
+ return (
50
+ <Table.Row>
51
+ <Table.Cell>
52
+ <Link to={linkTo.REFERENCE_DATASET({ id })}>{name}</Link>
53
+ </Table.Cell>
54
+ <Table.Cell content={_.truncate({ length: 90 })(_.join(", ")(headers))} />
55
+ <Table.Cell textAlign="right" width={1} content={rowCount} />
56
+ <Table.Cell textAlign="right" width={3}>
57
+ {relative ? (
58
+ <Moment locale={locale} fromNow date={updatedAt} />
59
+ ) : (
60
+ <DateTime value={updatedAt} locale={locale} />
61
+ )}
62
+ </Table.Cell>
63
+ </Table.Row>
64
+ );
65
+ };
66
+
67
+ DatasetRow.propTypes = {
68
+ headers: PropTypes.arrayOf(PropTypes.string),
69
+ id: PropTypes.string,
70
+ name: PropTypes.string,
71
+ relative: PropTypes.bool,
72
+ rowCount: PropTypes.number,
73
+ updatedAt: PropTypes.string,
74
+ };
75
+
76
+ export const ReferenceDatasetsTable = ({ datasets }) => {
77
+ const { formatMessage } = useIntl();
78
+ const [relative, setRelative] = useState(true);
79
+
80
+ return (
81
+ <Table>
82
+ <caption className="text-right">
83
+ {formatMessage(
84
+ { id: "referenceDatasets.count" },
85
+ { count: _.size(datasets) }
86
+ )}
87
+ </caption>
88
+ <Table.Header>
89
+ <HeaderRow
90
+ relative={relative}
91
+ onDateClick={() => setRelative((value) => !value)}
92
+ />
93
+ </Table.Header>
94
+ <Table.Body>
95
+ {datasets.map((props, key) => (
96
+ <DatasetRow key={key} relative={relative} {...props} />
97
+ ))}
98
+ </Table.Body>
99
+ </Table>
100
+ );
101
+ };
102
+
103
+ ReferenceDatasetsTable.propTypes = { datasets: PropTypes.array };
104
+
105
+ export default ReferenceDatasetsTable;
@@ -1,4 +1,3 @@
1
- import _ from "lodash/fp";
2
1
  import React from "react";
3
2
  import { Route, Switch, useParams } from "react-router-dom";
4
3
  import { useQuery } from "@apollo/client";
@@ -1,4 +1,3 @@
1
- import _ from "lodash/fp";
2
1
  import React from "react";
3
2
  import PropTypes from "prop-types";
4
3
  import { Breadcrumb } from "semantic-ui-react";
@@ -1,10 +1,8 @@
1
1
  import _ from "lodash/fp";
2
- import { linkTo } from "@truedat/core/routes";
3
- import { Link } from "react-router-dom";
4
2
  import React from "react";
5
3
  import PropTypes from "prop-types";
6
4
  import { connect } from "react-redux";
7
- import { Grid, Segment, Button } from "semantic-ui-react";
5
+ import { Grid, Segment } from "semantic-ui-react";
8
6
  import FilteredNav from "./FilteredNav";
9
7
  import StructureCrumbs from "./StructureCrumbs";
10
8
  import StructureGrantCart from "./StructureGrantCart";
@@ -1,5 +1,5 @@
1
1
  import _ from "lodash/fp";
2
- import React, { useEffect, useState } from "react";
2
+ import React, { useState } from "react";
3
3
  import PropTypes from "prop-types";
4
4
  import { FormattedMessage, useIntl } from "react-intl";
5
5
  import { connect } from "react-redux";
@@ -0,0 +1,64 @@
1
+ import React from "react";
2
+ import { waitFor } from "@testing-library/react";
3
+ import userEvent from "@testing-library/user-event";
4
+ import { render } from "@truedat/test/render";
5
+ import ReferenceDataset from "../ReferenceDataset";
6
+
7
+ const dataset = {
8
+ id: "123",
9
+ name: "foo",
10
+ headers: ["foo", "bar", "baz"],
11
+ rows: [
12
+ ["foo1", "bar1", "baz1"],
13
+ ["foo2", "bar2", "baz2"],
14
+ ],
15
+ };
16
+
17
+ describe("<ReferenceDataset /> show dataset view", () => {
18
+ const renderOpts = { routes: ["/referenceDatasets/123"] };
19
+ const props = { dataset };
20
+
21
+ it("matches the latest snapshot", () => {
22
+ const { container } = render(<ReferenceDataset {...props} />, renderOpts);
23
+ expect(container).toMatchSnapshot();
24
+ });
25
+
26
+ it("contains the right number of rows", () => {
27
+ const { queryAllByRole } = render(
28
+ <ReferenceDataset {...props} />,
29
+ renderOpts
30
+ );
31
+ expect(queryAllByRole("row")).toHaveLength(3);
32
+ });
33
+ });
34
+
35
+ describe("<ReferenceDataset /> edit dataset view", () => {
36
+ const renderOpts = { routes: ["/referenceDatasets/123/edit"] };
37
+ const props = { dataset };
38
+
39
+ it("matches the latest snapshot", async () => {
40
+ const { container, findByText } = render(
41
+ <ReferenceDataset {...props} />,
42
+ renderOpts
43
+ );
44
+ await findByText("Save");
45
+ expect(container).toMatchSnapshot();
46
+ });
47
+
48
+ it("form is disabled until modified", async () => {
49
+ const { findByText, findByRole, getByRole, queryByRole } = render(
50
+ <ReferenceDataset {...props} />,
51
+ renderOpts
52
+ );
53
+ await findByText("Save");
54
+
55
+ // Form is disabled until modified
56
+ expect(queryByRole("button", { name: /Save/ })).toBeDisabled();
57
+ userEvent.type(await findByRole("textbox"), "bar");
58
+
59
+ // Form is now enabled
60
+ await waitFor(() =>
61
+ expect(getByRole("button", { name: /Save/ })).not.toBeDisabled()
62
+ );
63
+ });
64
+ });
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ import { render } from "@truedat/test/render";
3
+ import ReferenceDatasetActions from "../ReferenceDatasetActions";
4
+
5
+ const dataset = {
6
+ id: "123",
7
+ name: "foo",
8
+ };
9
+
10
+ describe("<ReferenceDatasetActions />", () => {
11
+ const props = { dataset };
12
+
13
+ it("matches the latest snapshot", () => {
14
+ const { container } = render(<ReferenceDatasetActions {...props} />);
15
+ expect(container).toMatchSnapshot();
16
+ });
17
+ });
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import { render } from "@truedat/test/render";
3
+ import ReferenceDatasetBreadcrumbs from "../ReferenceDatasetBreadcrumbs";
4
+
5
+ describe("<ReferenceDatasetBreadcrumbs />", () => {
6
+ const props = { text: "foo" };
7
+
8
+ it("matches the latest snapshot", () => {
9
+ const { container } = render(<ReferenceDatasetBreadcrumbs {...props} />);
10
+ expect(container).toMatchSnapshot();
11
+ });
12
+ });
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import { render } from "@truedat/test/render";
3
+ import ReferenceDatasetCreate from "../ReferenceDatasetCreate";
4
+
5
+ describe("<ReferenceDatasetCreate />", () => {
6
+ const props = { createReferenceDataset: jest.fn() };
7
+
8
+ it("matches the latest snapshot", () => {
9
+ const { container } = render(<ReferenceDatasetCreate {...props} />);
10
+ expect(container).toMatchSnapshot();
11
+ });
12
+ });
@@ -0,0 +1,37 @@
1
+ import React from "react";
2
+ import { render } from "@truedat/test/render";
3
+ import ReferenceDatasetDetail from "../ReferenceDatasetDetail";
4
+
5
+ const dataset = {
6
+ id: "123",
7
+ name: "foo",
8
+ headers: ["foo", "bar", "baz"],
9
+ rows: [
10
+ ["foo1", "bar1", "baz1"],
11
+ ["foo2", "bar2", "baz2"],
12
+ ],
13
+ };
14
+
15
+ describe("<ReferenceDatasetDetail />", () => {
16
+ const props = { dataset };
17
+
18
+ it("matches the latest snapshot (edit route)", async () => {
19
+ const renderOpts = { routes: ["/referenceDatasets/123/edit"] };
20
+ const { container, findByRole } = render(
21
+ <ReferenceDatasetDetail {...props} />,
22
+ renderOpts
23
+ );
24
+ await findByRole("button", { name: "Save" });
25
+ expect(container).toMatchSnapshot();
26
+ });
27
+
28
+ it("matches the latest snapshot (view route)", async () => {
29
+ const renderOpts = { routes: ["/referenceDatasets/123"] };
30
+ const { container, findByText } = render(
31
+ <ReferenceDatasetDetail {...props} />,
32
+ renderOpts
33
+ );
34
+ await findByText("foo");
35
+ expect(container).toMatchSnapshot();
36
+ });
37
+ });
@@ -0,0 +1,51 @@
1
+ import React from "react";
2
+ import { waitFor } from "@testing-library/react";
3
+ import userEvent from "@testing-library/user-event";
4
+ import { render } from "@truedat/test/render";
5
+ import ReferenceDatasetForm from "../ReferenceDatasetForm";
6
+
7
+ const dataset = {
8
+ id: "123",
9
+ name: "foo",
10
+ headers: ["foo", "bar", "baz"],
11
+ rows: [
12
+ ["foo1", "bar1", "baz1"],
13
+ ["foo2", "bar2", "baz2"],
14
+ ],
15
+ };
16
+
17
+ describe("<ReferenceDatasetForm />", () => {
18
+ const onSubmit = jest.fn();
19
+ const props = { dataset, onSubmit };
20
+
21
+ it("matches the latest snapshot", async () => {
22
+ const { container, findByText } = render(
23
+ <ReferenceDatasetForm {...props} />
24
+ );
25
+ await findByText("Save");
26
+ expect(container).toMatchSnapshot();
27
+ });
28
+
29
+ it("form is disabled until modified", async () => {
30
+ const { findByText, findByRole, getByRole, queryByRole } = render(
31
+ <ReferenceDatasetForm {...props} />
32
+ );
33
+ await findByText("Save");
34
+
35
+ // Form is disabled until modified
36
+ expect(queryByRole("button", { name: /Save/ })).toBeDisabled();
37
+ userEvent.type(await findByRole("textbox"), "bar");
38
+
39
+ // Form is now enabled
40
+ await waitFor(() =>
41
+ expect(getByRole("button", { name: /Save/ })).not.toBeDisabled()
42
+ );
43
+
44
+ // Submit
45
+ await waitFor(() => {
46
+ userEvent.click(getByRole("button", { name: /Save/ }));
47
+ });
48
+
49
+ expect(onSubmit).toHaveBeenCalled();
50
+ });
51
+ });
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ import { render } from "@truedat/test/render";
3
+ import ReferenceDatasetHeader from "../ReferenceDatasetHeader";
4
+
5
+ const dataset = {
6
+ id: "123",
7
+ name: "foo",
8
+ };
9
+
10
+ describe("<ReferenceDatasetHeader />", () => {
11
+ const props = { dataset };
12
+
13
+ it("matches the latest snapshot", () => {
14
+ const { container } = render(<ReferenceDatasetHeader {...props} />);
15
+ expect(container).toMatchSnapshot();
16
+ });
17
+ });
@@ -0,0 +1,74 @@
1
+ import React from "react";
2
+ import { render } from "@truedat/test/render";
3
+ import ReferenceDatasetRoutes from "../ReferenceDatasetRoutes";
4
+ import {
5
+ REFERENCE_DATASET_QUERY,
6
+ REFERENCE_DATASETS_QUERY,
7
+ } from "../../api/queries";
8
+
9
+ jest.mock("@truedat/core/hooks", () => ({
10
+ useAuthorized: jest.fn(() => true),
11
+ }));
12
+
13
+ const dataset = {
14
+ __typename: "ReferenceDataset",
15
+ id: "123",
16
+ name: "foo",
17
+ headers: ["foo", "bar", "baz"],
18
+ rowCount: 2,
19
+ rows: [
20
+ ["foo1", "bar1", "baz1"],
21
+ ["foo2", "bar2", "baz2"],
22
+ ],
23
+ updatedAt: "2020-01-01T00:00:00.000Z",
24
+ };
25
+
26
+ const datasetsMock = {
27
+ request: { query: REFERENCE_DATASETS_QUERY },
28
+ result: { data: { referenceDatasets: [dataset] } },
29
+ };
30
+
31
+ const datasetMock = {
32
+ request: { query: REFERENCE_DATASET_QUERY, variables: { id: "123" } },
33
+ result: { data: { referenceDataset: dataset } },
34
+ };
35
+
36
+ describe("<ReferenceDatasetRoutes />", () => {
37
+ const props = { dataset };
38
+
39
+ it("matches the latest snapshot (list route)", async () => {
40
+ const renderOpts = {
41
+ routes: ["/referenceDatasets"],
42
+ mocks: [datasetsMock],
43
+ };
44
+ const { container, findByText } = render(
45
+ <ReferenceDatasetRoutes {...props} />,
46
+ renderOpts
47
+ );
48
+ await findByText("foo");
49
+ expect(container).toMatchSnapshot();
50
+ });
51
+
52
+ it("matches the latest snapshot (create route)", async () => {
53
+ const renderOpts = { routes: ["/referenceDatasets/new"] };
54
+ const { container, findByRole } = render(
55
+ <ReferenceDatasetRoutes {...props} />,
56
+ renderOpts
57
+ );
58
+ await findByRole("button", { name: "Save" });
59
+ expect(container).toMatchSnapshot();
60
+ });
61
+
62
+ it("matches the latest snapshot (view route)", async () => {
63
+ const renderOpts = {
64
+ routes: ["/referenceDatasets/123"],
65
+ mocks: [datasetMock],
66
+ };
67
+ const { container, findByText } = render(
68
+ <ReferenceDatasetRoutes {...props} />,
69
+ renderOpts
70
+ );
71
+ await findByText("baz2");
72
+ expect(container).toMatchSnapshot();
73
+ });
74
+ });
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ import { render } from "@truedat/test/render";
3
+ import ReferenceDatasetTable from "../ReferenceDatasetTable";
4
+
5
+ const props = {
6
+ headers: ["foo", "bar", "baz"],
7
+ rows: [
8
+ ["foo1", "bar1", "baz1"],
9
+ ["foo2", "bar2", "baz2"],
10
+ ],
11
+ };
12
+
13
+ describe("<ReferenceDatasetTable />", () => {
14
+ it("matches the latest snapshot", () => {
15
+ const { container } = render(<ReferenceDatasetTable {...props} />);
16
+ expect(container).toMatchSnapshot();
17
+ });
18
+ });
@@ -0,0 +1,32 @@
1
+ import React from "react";
2
+ import { render } from "@truedat/test/render";
3
+ import ReferenceDatasets from "../ReferenceDatasets";
4
+ import { REFERENCE_DATASETS_QUERY } from "../../api/queries";
5
+
6
+ const dataset = {
7
+ __typename: "ReferenceDataset",
8
+ id: "123",
9
+ name: "foo",
10
+ headers: ["foo", "bar", "baz"],
11
+ rowCount: 2,
12
+ rows: [
13
+ ["foo1", "bar1", "baz1"],
14
+ ["foo2", "bar2", "baz2"],
15
+ ],
16
+ updatedAt: "2020-01-01T00:00:00.000Z",
17
+ };
18
+
19
+ const datasetsMock = {
20
+ request: { query: REFERENCE_DATASETS_QUERY },
21
+ result: { data: { referenceDatasets: [dataset] } },
22
+ };
23
+
24
+ const renderOpts = { mocks: [datasetsMock] };
25
+
26
+ describe("<ReferenceDatasets />", () => {
27
+ it("matches the latest snapshot", async () => {
28
+ const { container, findByText } = render(<ReferenceDatasets />, renderOpts);
29
+ await findByText("One dataset found");
30
+ expect(container).toMatchSnapshot();
31
+ });
32
+ });
@@ -0,0 +1,22 @@
1
+ import React from "react";
2
+ import { render } from "@truedat/test/render";
3
+ import ReferenceDatasetsTable from "../ReferenceDatasetsTable";
4
+
5
+ const props = {
6
+ datasets: [
7
+ {
8
+ id: "123",
9
+ name: "foo",
10
+ headers: ["foo", "bar", "baz"],
11
+ rowCount: 2,
12
+ updatedAt: "2020-01-01T00:00:00.000Z",
13
+ },
14
+ ],
15
+ };
16
+
17
+ describe("<ReferenceDatasetsTable />", () => {
18
+ it("matches the latest snapshot", () => {
19
+ const { container } = render(<ReferenceDatasetsTable {...props} />);
20
+ expect(container).toMatchSnapshot();
21
+ });
22
+ });
@@ -29,6 +29,10 @@ exports[`<DictionaryRoutes /> matches the latest snapshot 1`] = `
29
29
  path="/structureNotes"
30
30
  render={[Function]}
31
31
  />
32
+ <Route
33
+ path="/referenceDatasets"
34
+ render={[Function]}
35
+ />
32
36
  <Route
33
37
  path="/profileGroups/:id"
34
38
  render={[Function]}