mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2024-12-23 09:30:31 +03:00
Create ShlinkWebComponent test
This commit is contained in:
parent
74aaed65b6
commit
6db60f0aa3
2 changed files with 59 additions and 2 deletions
|
@ -21,12 +21,15 @@ type ShlinkWebComponentProps = {
|
||||||
};
|
};
|
||||||
|
|
||||||
// FIXME This allows to track the reference to be resolved by the container, but it's hacky and relies on not more than
|
// FIXME This allows to track the reference to be resolved by the container, but it's hacky and relies on not more than
|
||||||
// one ShlinkWebComponent rendered at the same time
|
// one ShlinkWebComponent rendered at the same time.
|
||||||
|
// Works for now, but should be addressed.
|
||||||
let apiClientRef: ShlinkApiClient;
|
let apiClientRef: ShlinkApiClient;
|
||||||
|
|
||||||
export const createShlinkWebComponent = (
|
export const createShlinkWebComponent = (
|
||||||
bottle: Bottle,
|
bottle: Bottle,
|
||||||
): FC<ShlinkWebComponentProps> => ({ serverVersion, apiClient, settings, routesPrefix = '', createNotFound, tagColorsStorage }) => {
|
): FC<ShlinkWebComponentProps> => (
|
||||||
|
{ serverVersion, apiClient, settings, routesPrefix = '', createNotFound, tagColorsStorage },
|
||||||
|
) => {
|
||||||
const features = useFeatures(serverVersion);
|
const features = useFeatures(serverVersion);
|
||||||
const mainContent = useRef<ReactNode>();
|
const mainContent = useRef<ReactNode>();
|
||||||
const [theStore, setStore] = useState<Store | undefined>();
|
const [theStore, setStore] = useState<Store | undefined>();
|
||||||
|
|
54
shlink-web-component/test/ShlinkWebComponent.test.tsx
Normal file
54
shlink-web-component/test/ShlinkWebComponent.test.tsx
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
import { render, screen, waitFor } from '@testing-library/react';
|
||||||
|
import { fromPartial } from '@total-typescript/shoehorn';
|
||||||
|
import Bottle from 'bottlejs';
|
||||||
|
import type { TagColorsStorage } from '../src';
|
||||||
|
import type { ShlinkApiClient } from '../src/api-contract';
|
||||||
|
import { createShlinkWebComponent } from '../src/ShlinkWebComponent';
|
||||||
|
|
||||||
|
describe('<ShlinkWebComponent />', () => {
|
||||||
|
let bottle: Bottle;
|
||||||
|
const dispatch = vi.fn();
|
||||||
|
const loadMercureInfo = vi.fn();
|
||||||
|
const apiClient = fromPartial<ShlinkApiClient>({});
|
||||||
|
|
||||||
|
const setUp = (tagColorsStorage?: TagColorsStorage) => {
|
||||||
|
const ShlinkWebComponent = createShlinkWebComponent(bottle);
|
||||||
|
return render(
|
||||||
|
<ShlinkWebComponent serverVersion="3.0.0" apiClient={apiClient} tagColorsStorage={tagColorsStorage} />,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
bottle = new Bottle();
|
||||||
|
|
||||||
|
bottle.value('Main', () => <>Main</>);
|
||||||
|
bottle.value('store', {
|
||||||
|
dispatch,
|
||||||
|
getState: vi.fn().mockReturnValue({}),
|
||||||
|
subscribe: vi.fn(),
|
||||||
|
});
|
||||||
|
bottle.value('loadMercureInfo', loadMercureInfo);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('registers services when mounted', async () => {
|
||||||
|
expect(bottle.container.TagColorsStorage).not.toBeDefined();
|
||||||
|
expect(bottle.container.apiClientFactory).not.toBeDefined();
|
||||||
|
|
||||||
|
setUp(fromPartial({}));
|
||||||
|
|
||||||
|
await waitFor(() => expect(bottle.container.TagColorsStorage).toBeDefined());
|
||||||
|
expect(bottle.container.apiClientFactory).toBeDefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('renders main content', async () => {
|
||||||
|
setUp();
|
||||||
|
await waitFor(() => expect(screen.getByText('Main')).toBeInTheDocument());
|
||||||
|
});
|
||||||
|
|
||||||
|
it('loads mercure on mount', async () => {
|
||||||
|
setUp();
|
||||||
|
|
||||||
|
await waitFor(() => expect(dispatch).toHaveBeenCalledOnce());
|
||||||
|
expect(loadMercureInfo).toHaveBeenCalledOnce();
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in a new issue