grafana/public/app/features/plugins/tests/pluginCacheBuster.test.ts
Timur Olzhabayev 8717bc7ef4
fix(40639): datasource should not be visible after uninstall (#43625)
* fix(40639): datasource should not be visible after uninstall
2022-01-07 09:54:02 +01:00

58 lines
2.0 KiB
TypeScript

import { invalidatePluginInCache, locateWithCache, registerPluginInCache } from '../pluginCacheBuster';
import * as pluginSettings from '../pluginSettings';
describe('PluginCacheBuster', () => {
const now = 12345;
it('should append plugin version as cache flag if plugin is registered in buster', () => {
const slug = 'bubble-chart-1';
const version = 'v1.0.0';
const path = resolvePath(slug);
const address = `http://localhost:3000/public/${path}.js`;
registerPluginInCache({ path, version });
const url = `${address}?_cache=${encodeURI(version)}`;
expect(locateWithCache({ address }, now)).toBe(url);
});
it('should append Date.now as cache flag if plugin is not registered in buster', () => {
const slug = 'bubble-chart-2';
const address = `http://localhost:3000/public/${resolvePath(slug)}.js`;
const url = `${address}?_cache=${encodeURI(String(now))}`;
expect(locateWithCache({ address }, now)).toBe(url);
});
it('should append Date.now as cache flag if plugin is invalidated in buster', () => {
const slug = 'bubble-chart-3';
const version = 'v1.0.0';
const path = resolvePath(slug);
const address = `http://localhost:3000/public/${path}.js`;
registerPluginInCache({ path, version });
invalidatePluginInCache(slug);
const url = `${address}?_cache=${encodeURI(String(now))}`;
expect(locateWithCache({ address }, now)).toBe(url);
});
it('should also clear plugin settings cache', () => {
const slug = 'bubble-chart-3';
const version = 'v1.0.0';
const path = resolvePath(slug);
const clearPluginSettingsCacheSpy = jest.spyOn(pluginSettings, 'clearPluginSettingsCache');
registerPluginInCache({ path, version });
invalidatePluginInCache(slug);
expect(clearPluginSettingsCacheSpy).toBeCalledTimes(1);
expect(clearPluginSettingsCacheSpy).toBeCalledWith('bubble-chart-3');
});
});
function resolvePath(slug: string): string {
return `plugins/${slug}/module`;
}