import * as React from "react";
import { render } from "@testing-library/react-native";
import { Text } from "react-native";
const mockedUseBuildPipesUrl = jest.fn();
jest.mock("@applicaster/zapp-react-native-utils/reactHooks/feed", () => ({
useBuildPipesUrl: (args) => mockedUseBuildPipesUrl(args),
}));
const { withPipesEndpoint } = require("../withPipesEndpoint");
// eslint-disable-next-line react/display-name
const Wrapped = React.forwardRef((props: any, _ref) => (
{`${props.uri}|${JSON.stringify(props.headers)}`}
));
describe("withPipesEndpoint", () => {
afterEach(() => jest.clearAllMocks());
it("renders nothing while the endpoint context is resolving", () => {
mockedUseBuildPipesUrl.mockReturnValue({ requestParams: null });
const Decorated = withPipesEndpoint(Wrapped);
const { queryByTestId } = render();
expect(queryByTestId("wrapped")).toBeNull();
});
it("passes the uri through unchanged when there are no params", () => {
mockedUseBuildPipesUrl.mockReturnValue({ requestParams: {} });
const Decorated = withPipesEndpoint(Wrapped);
const { getByTestId } = render();
expect(getByTestId("wrapped").props.children).toBe(
"https://foo.com/path|{}"
);
});
it("merges resolved params into the uri and forwards headers", () => {
mockedUseBuildPipesUrl.mockReturnValue({
requestParams: {
params: { token: "abc" },
headers: { Authorization: "Bearer xyz" },
},
});
const Decorated = withPipesEndpoint(Wrapped);
const { getByTestId } = render();
expect(getByTestId("wrapped").props.children).toBe(
'https://foo.com/path?token=abc|{"Authorization":"Bearer xyz"}'
);
});
});