/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
import React from "react";
import { render, act, screen } from "@testing-library/react";
import { useDatasets, useJsonDataset, useSampleDataset } from "../dataset-hooks";
import BackendService from "../../services/BackendService";
import StorageService from "../../services/StorageService";
import Papa from "papaparse";
import { Dataset, DatasetSchema, SourceType } from "../../models";
jest.mock("papaparse");
describe("useDatasets", () => {
const FooComponent = () => {
const { datasets } = useDatasets();
return (
<>
{datasets?.length}
>
);
};
test("should fetch datasets", async () => {
const datasetSamples: Dataset[] = [
{
id: "ingest-api",
fileName: "ingest-api",
s3Key: { raw: "raw", json: "json" },
sourceType: SourceType.IngestApi,
schema: DatasetSchema.None,
},
{
id: "ingest-api-metrics",
fileName: "ingest-api-metrics",
s3Key: { raw: "raw", json: "json" },
sourceType: SourceType.IngestApi,
schema: DatasetSchema.Metrics,
},
{
id: "file-upload",
fileName: "file-upload",
s3Key: { raw: "raw", json: "json" },
sourceType: SourceType.FileUpload,
schema: DatasetSchema.None,
},
];
const fetchDatasetsSpy = jest
.spyOn(BackendService, "fetchDatasets")
.mockImplementation(() => Promise.resolve(datasetSamples));
await act(async () => {
render();
});
expect(fetchDatasetsSpy).toHaveBeenCalled();
expect(screen.getByText(datasetSamples.length)).toBeInTheDocument();
});
});
describe("useJsonDataset", () => {
interface Props {
s3Key: string;
}
const FooComponent = (props: Props) => {
const { json } = useJsonDataset(props.s3Key);
return (
<>
{Object.keys(json).length}
>
);
};
test("should fetch json", async () => {
const sampleJson = '{"sample": 500}';
const downloadJsonSpy = jest
.spyOn(StorageService, "downloadJson")
.mockImplementation(() => Promise.resolve(JSON.parse(sampleJson)));
await act(async () => {
render();
});
expect(downloadJsonSpy).toHaveBeenCalled();
expect(screen.getByText(1)).toBeInTheDocument();
});
});
describe("useSampleDataset", () => {
interface Props {
sampleCSV: string;
}
const FooComponent = (props: Props) => {
const { dataset } = useSampleDataset(props.sampleCSV);
return (
<>
{dataset.headers.length}
>
);
};
test("should fetch json", async () => {
const parseSpy = jest.spyOn(Papa, "parse");
await act(async () => {
render();
});
expect(parseSpy).toHaveBeenCalled();
expect(screen.getByText(0)).toBeInTheDocument();
});
});