@hypequery/react 0.6.4 → 0.7.1

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.
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=provider.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.test.d.ts","sourceRoot":"","sources":["../src/provider.test.tsx"],"names":[],"mappings":""}
@@ -1,53 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { renderHook, waitFor } from '@testing-library/react';
3
- import { QueryClient } from '@tanstack/react-query';
4
- import { describe, expect, it, vi } from 'vitest';
5
- import { createHypequeryClient } from './client.js';
6
- import { createHooks } from './createHooks.js';
7
- import { HypequeryProvider } from './provider.js';
8
- function success(data) {
9
- return { ok: true, status: 200, json: async () => data };
10
- }
11
- describe('HypequeryProvider', () => {
12
- it('configures generated hooks once and supplies their TanStack Query client', async () => {
13
- const fetchFn = vi.fn().mockResolvedValue(success({ message: 'Hello Luke' }));
14
- const client = createHypequeryClient({
15
- baseUrl: 'https://acme.hypequery.cloud/v1/analytics/production',
16
- token: async () => 'browser-token',
17
- fetchFn: fetchFn,
18
- manifest: { greeting: { method: 'GET', path: 'queries/greeting' } },
19
- });
20
- const { useQuery } = createHooks();
21
- const wrapper = ({ children }) => (_jsx(HypequeryProvider, { client: client, children: children }));
22
- const { result } = renderHook(() => useQuery('greeting', { name: 'Luke' }), { wrapper });
23
- await waitFor(() => expect(result.current.data).toEqual({ message: 'Hello Luke' }));
24
- expect(fetchFn).toHaveBeenCalledWith('https://acme.hypequery.cloud/v1/analytics/production/queries/greeting?name=Luke', expect.objectContaining({
25
- headers: expect.objectContaining({ authorization: 'Bearer browser-token' }),
26
- }));
27
- });
28
- it('isolates cached responses when the provider client changes', async () => {
29
- const firstFetch = vi.fn().mockResolvedValue(success({ message: 'First user' }));
30
- const secondFetch = vi.fn().mockResolvedValue(success({ message: 'Second user' }));
31
- const createClient = (fetchFn) => createHypequeryClient({
32
- baseUrl: 'https://acme.hypequery.cloud/v1/analytics/production',
33
- fetchFn: fetchFn,
34
- manifest: { greeting: { method: 'GET', path: 'queries/greeting' } },
35
- });
36
- const firstClient = createClient(firstFetch);
37
- const secondClient = createClient(secondFetch);
38
- const queryClient = new QueryClient({
39
- defaultOptions: { queries: { retry: false } },
40
- });
41
- const { useQuery } = createHooks();
42
- let activeClient = firstClient;
43
- const wrapper = ({ children }) => (_jsx(HypequeryProvider, { client: activeClient, queryClient: queryClient, children: children }));
44
- const view = renderHook(() => useQuery('greeting', { name: 'Luke' }), { wrapper });
45
- await waitFor(() => expect(view.result.current.data).toEqual({ message: 'First user' }));
46
- activeClient = secondClient;
47
- view.rerender();
48
- await waitFor(() => expect(view.result.current.data).toEqual({ message: 'Second user' }));
49
- expect(firstClient.cacheKey).not.toBe(secondClient.cacheKey);
50
- expect(firstFetch).toHaveBeenCalledTimes(1);
51
- expect(secondFetch).toHaveBeenCalledTimes(1);
52
- });
53
- });