bd0140b6f0
* GrafanaBootData: decouple `config.apps` from boot data IV * chore: changed to openfeature flags eval * chore: updates after PR feedback * chore: updates after PR feedback * chore: copy types to runtime package * chore: add code ownership * chore: deprecate in interface too * chore: add important notice to comments * chore: deprecate the whole interface
154 lines
4.4 KiB
TypeScript
154 lines
4.4 KiB
TypeScript
import { evaluateBooleanFlag } from '../../internal/openFeature';
|
|
|
|
import { clearCache, initPluginMetas } from './plugins';
|
|
import { v0alpha1Meta } from './test-fixtures/v0alpha1Response';
|
|
|
|
jest.mock('../../internal/openFeature', () => ({
|
|
...jest.requireActual('../../internal/openFeature'),
|
|
evaluateBooleanFlag: jest.fn(),
|
|
}));
|
|
|
|
const evaluateBooleanFlagMock = jest.mocked(evaluateBooleanFlag);
|
|
|
|
describe('when useMTPlugins toggle is enabled and cache is not initialized', () => {
|
|
const originalFetch = global.fetch;
|
|
|
|
beforeEach(() => {
|
|
jest.resetAllMocks();
|
|
clearCache();
|
|
evaluateBooleanFlagMock.mockReturnValue(true);
|
|
});
|
|
|
|
afterEach(() => {
|
|
global.fetch = originalFetch;
|
|
});
|
|
|
|
it('initPluginMetas should call loadPluginMetas and return correct result if response is ok', async () => {
|
|
global.fetch = jest.fn().mockResolvedValue({
|
|
ok: true,
|
|
status: 200,
|
|
json: () => Promise.resolve({ items: [v0alpha1Meta] }),
|
|
});
|
|
|
|
const response = await initPluginMetas();
|
|
|
|
expect(response.items).toHaveLength(1);
|
|
expect(response.items[0]).toEqual(v0alpha1Meta);
|
|
expect(global.fetch).toHaveBeenCalledTimes(1);
|
|
expect(global.fetch).toHaveBeenCalledWith('/apis/plugins.grafana.app/v0alpha1/namespaces/default/metas');
|
|
});
|
|
|
|
it('initPluginMetas should call loadPluginMetas and return correct result if response is not ok', async () => {
|
|
global.fetch = jest.fn().mockResolvedValue({
|
|
ok: false,
|
|
status: 404,
|
|
statusText: 'Not found',
|
|
});
|
|
|
|
await expect(initPluginMetas()).rejects.toThrow(new Error(`Failed to load plugin metas 404:Not found`));
|
|
expect(global.fetch).toHaveBeenCalledTimes(1);
|
|
expect(global.fetch).toHaveBeenCalledWith('/apis/plugins.grafana.app/v0alpha1/namespaces/default/metas');
|
|
});
|
|
});
|
|
|
|
describe('when useMTPlugins toggle is enabled and cache is initialized', () => {
|
|
const originalFetch = global.fetch;
|
|
|
|
beforeEach(() => {
|
|
jest.resetAllMocks();
|
|
clearCache();
|
|
evaluateBooleanFlagMock.mockReturnValue(true);
|
|
});
|
|
|
|
afterEach(() => {
|
|
global.fetch = originalFetch;
|
|
});
|
|
|
|
it('initPluginMetas should return cache', async () => {
|
|
global.fetch = jest.fn().mockResolvedValue({
|
|
ok: true,
|
|
status: 200,
|
|
json: () => Promise.resolve({ items: [v0alpha1Meta] }),
|
|
});
|
|
|
|
const original = await initPluginMetas();
|
|
const cached = await initPluginMetas();
|
|
|
|
expect(original).toEqual(cached);
|
|
expect(global.fetch).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it('initPluginMetas should return inflight promise', async () => {
|
|
jest.useFakeTimers();
|
|
|
|
global.fetch = jest.fn().mockResolvedValue({
|
|
ok: true,
|
|
status: 200,
|
|
json: () => Promise.resolve({ items: [v0alpha1Meta] }),
|
|
});
|
|
|
|
const original = initPluginMetas();
|
|
const cached = initPluginMetas();
|
|
await jest.runAllTimersAsync();
|
|
|
|
expect(original).toEqual(cached);
|
|
expect(global.fetch).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|
|
|
|
describe('when useMTPlugins toggle is disabled and cache is not initialized', () => {
|
|
const originalFetch = global.fetch;
|
|
|
|
beforeEach(() => {
|
|
jest.resetAllMocks();
|
|
clearCache();
|
|
global.fetch = jest.fn();
|
|
evaluateBooleanFlagMock.mockReturnValue(false);
|
|
});
|
|
|
|
afterEach(() => {
|
|
global.fetch = originalFetch;
|
|
});
|
|
|
|
it('initPluginMetas should call loadPluginMetas and return correct result if response is ok', async () => {
|
|
const response = await initPluginMetas();
|
|
|
|
expect(response.items).toHaveLength(0);
|
|
expect(global.fetch).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
|
|
describe('when useMTPlugins toggle is disabled and cache is initialized', () => {
|
|
const originalFetch = global.fetch;
|
|
|
|
beforeEach(() => {
|
|
jest.resetAllMocks();
|
|
clearCache();
|
|
global.fetch = jest.fn();
|
|
evaluateBooleanFlagMock.mockReturnValue(false);
|
|
});
|
|
|
|
afterEach(() => {
|
|
global.fetch = originalFetch;
|
|
});
|
|
|
|
it('initPluginMetas should return cache', async () => {
|
|
const original = await initPluginMetas();
|
|
const cached = await initPluginMetas();
|
|
|
|
expect(original).toEqual(cached);
|
|
expect(global.fetch).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('initPluginMetas should return inflight promise', async () => {
|
|
jest.useFakeTimers();
|
|
|
|
const original = initPluginMetas();
|
|
const cached = initPluginMetas();
|
|
await jest.runAllTimersAsync();
|
|
|
|
expect(original).toEqual(cached);
|
|
expect(global.fetch).not.toHaveBeenCalled();
|
|
});
|
|
});
|