Files
Umbraco-CMS/src/Umbraco.Web.UI.Client/libs/context-api/provide/context-provider.test.ts
Mads Rasmussen 26fed3638d prefix with umb
2023-04-16 20:40:13 +02:00

70 lines
1.8 KiB
TypeScript

import { expect } from '@open-wc/testing';
import { UmbContextConsumer } from '../consume/context-consumer';
import { UmbContextRequestEventImplementation } from '../consume/context-request.event';
import { UmbContextProvider } from './context-provider';
class UmbTestContextProviderClass {
prop = 'value from provider';
}
describe('UmbContextProvider', () => {
let instance: UmbTestContextProviderClass;
let provider: UmbContextProvider;
beforeEach(() => {
instance = new UmbTestContextProviderClass();
provider = new UmbContextProvider(document.body, 'my-test-context', instance);
provider.hostConnected();
});
afterEach(async () => {
provider.hostDisconnected();
});
describe('Public API', () => {
describe('properties', () => {
it('has a host property', () => {
expect(provider).to.have.property('host');
});
});
describe('methods', () => {
it('has an attach method', () => {
expect(provider).to.have.property('hostConnected').that.is.a('function');
});
it('has a detach method', () => {
expect(provider).to.have.property('hostDisconnected').that.is.a('function');
});
});
});
it('handles context request events', (done) => {
const event = new UmbContextRequestEventImplementation(
'my-test-context',
(_instance: UmbTestContextProviderClass) => {
expect(_instance.prop).to.eq('value from provider');
done();
}
);
document.body.dispatchEvent(event);
});
it('works with UmbContextConsumer', (done) => {
const element = document.createElement('div');
document.body.appendChild(element);
const localConsumer = new UmbContextConsumer(
element,
'my-test-context',
(_instance: UmbTestContextProviderClass) => {
expect(_instance.prop).to.eq('value from provider');
done();
localConsumer.hostDisconnected();
}
);
localConsumer.hostConnected();
});
});