blob: 7aabae74b58fe7bce7da2283eeb27e5c8c06f9e9 [file] [log] [blame]
/**
* @license
* Copyright 2022 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import '../../test/common-test-setup';
import './plugins-model';
import {ChecksApiConfig, ChecksProvider, ResponseCode} from '../../api/checks';
import {ChecksPlugin, ChecksUpdate, PluginsModel} from './plugins-model';
import {createRun, createRunResult} from '../../test/test-data-generators';
import {assert} from '@open-wc/testing';
const PLUGIN_NAME = 'test-plugin';
const CONFIG: ChecksApiConfig = {
fetchPollingIntervalSeconds: 1000,
};
function createProvider(): ChecksProvider {
return {
fetch: () =>
Promise.resolve({
responseCode: ResponseCode.OK,
runs: [],
}),
};
}
suite('plugins-model tests', () => {
let model: PluginsModel;
let checksPlugins: ChecksPlugin[] = [];
const register = function () {
model.checksRegister({
pluginName: PLUGIN_NAME,
provider: createProvider(),
config: CONFIG,
});
};
setup(() => {
model = new PluginsModel();
model.state$.subscribe(s => {
checksPlugins = s.checksPlugins;
});
});
teardown(() => {
model.finalize();
});
test('checksRegister', async () => {
assert.isFalse(checksPlugins.some(p => p.pluginName === PLUGIN_NAME));
register();
assert.isTrue(checksPlugins.some(p => p.pluginName === PLUGIN_NAME));
});
test('checksAnnounce', async () => {
let announcement: ChecksPlugin | undefined;
model.checksAnnounce$.subscribe(a => (announcement = a));
assert.isUndefined(announcement?.pluginName);
register();
model.checksAnnounce(PLUGIN_NAME);
assert.equal(announcement?.pluginName, PLUGIN_NAME);
});
test('checksUpdate', async () => {
let update: ChecksUpdate | undefined;
model.checksUpdate$.subscribe(u => (update = u));
assert.isUndefined(update?.pluginName);
register();
model.checksUpdate({
pluginName: PLUGIN_NAME,
run: createRun(),
result: createRunResult(),
});
assert.equal(update?.pluginName, PLUGIN_NAME);
});
});