gs-port / node_modules /@reduxjs /toolkit /src /query /tests /injectEndpoints.test.tsx
Scribbler310's picture
feat: enhance dashboard
c2b7eb3 verified
import { noop } from '@internal/listenerMiddleware/utils'
import { configureStore } from '@internal/configureStore'
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
const api = createApi({
baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
endpoints: () => ({}),
})
describe('injectEndpoints', () => {
const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(noop)
afterEach(() => {
vi.clearAllMocks()
vi.unstubAllEnvs()
})
afterAll(() => {
vi.restoreAllMocks()
vi.unstubAllEnvs()
})
test("query: overriding with `overrideEndpoints`='throw' throws an error", async () => {
const extended = api.injectEndpoints({
endpoints: (build) => ({
injected: build.query<unknown, string>({
query: () => '/success',
}),
}),
})
expect(() => {
extended.injectEndpoints({
overrideExisting: 'throw',
endpoints: (build) => ({
injected: build.query<unknown, string>({
query: () => '/success',
}),
}),
})
}).toThrowError(
new Error(
`called \`injectEndpoints\` to override already-existing endpointName injected without specifying \`overrideExisting: true\``,
),
)
})
test('query: overriding an endpoint with `overrideEndpoints`=false does nothing in production', async () => {
vi.stubEnv('NODE_ENV', 'development')
const extended = api.injectEndpoints({
endpoints: (build) => ({
injected: build.query<unknown, string>({
query: () => '/success',
}),
}),
})
extended.injectEndpoints({
overrideExisting: false,
endpoints: (build) => ({
injected: build.query<unknown, string>({
query: () => '/success',
}),
}),
})
expect(consoleErrorSpy).toHaveBeenCalledWith(
`called \`injectEndpoints\` to override already-existing endpointName injected without specifying \`overrideExisting: true\``,
)
})
test('query: overriding with `overrideEndpoints`=false logs an error in development', async () => {
vi.stubEnv('NODE_ENV', 'production')
const extended = api.injectEndpoints({
endpoints: (build) => ({
injected: build.query<unknown, string>({
query: () => '/success',
}),
}),
})
extended.injectEndpoints({
overrideExisting: false,
endpoints: (build) => ({
injected: build.query<unknown, string>({
query: () => '/success',
}),
}),
})
expect(consoleErrorSpy).not.toHaveBeenCalled()
})
test('adding the same middleware to the store twice throws an error', () => {
// Strictly speaking this is a duplicate of the tests in configureStore.test.ts,
// but this helps confirm that we throw the error for adding
// the same API middleware twice.
const extendedApi = api.injectEndpoints({
endpoints: (build) => ({
injected: build.query<unknown, string>({
query: () => '/success',
}),
}),
})
const makeStore = () =>
configureStore({
reducer: {
api: api.reducer,
},
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware().concat(api.middleware, extendedApi.middleware),
})
expect(makeStore).toThrowError(
'Duplicate middleware references found when creating the store. Ensure that each middleware is only included once.',
)
})
})