From d3b8f674cda817abe6c1f7f3b91c9dbcf9ab6747 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 17 Jan 2023 15:36:10 +0100 Subject: [PATCH] add tests for ContextAlias --- .../core/context-api/context-alias.test.ts | 51 +++++++++++++++++++ .../src/core/context-api/context-alias.ts | 11 +++- 2 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/core/context-api/context-alias.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/core/context-api/context-alias.test.ts b/src/Umbraco.Web.UI.Client/src/core/context-api/context-alias.test.ts new file mode 100644 index 0000000000..4339baca08 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/core/context-api/context-alias.test.ts @@ -0,0 +1,51 @@ +import { expect } from '@open-wc/testing'; +import { UmbContextConsumer } from './consume/context-consumer'; +import { UmbContextAlias } from './context-alias'; +import { UmbContextProvider } from './provide/context-provider'; + +const testContextAlias = 'my-test-context'; + +class MyClass { + prop = 'value from provider'; +} + +describe('ContextAlias', () => { + const contextAlias = new UmbContextAlias(testContextAlias); + const typedProvider = new UmbContextProvider(document.body, contextAlias, new MyClass()); + typedProvider.hostConnected(); + + after(() => { + typedProvider.hostDisconnected(); + }); + + it('toString returns the alias', () => { + expect(contextAlias.toString()).to.eq(testContextAlias); + }); + + it('can be consumed directly', (done) => { + const element = document.createElement('div'); + document.body.appendChild(element); + + const localConsumer = new UmbContextConsumer(element, contextAlias, (_instance) => { + console.log('got instance', _instance); + expect(_instance).to.be.instanceOf(MyClass); + expect(_instance.prop).to.eq('value from provider'); + done(); + }); + + localConsumer.hostConnected(); + }); + + it('can be consumed using the inner string alias', (done) => { + const element = document.createElement('div'); + document.body.appendChild(element); + + const localConsumer = new UmbContextConsumer(element, testContextAlias, (_instance: MyClass) => { + expect(_instance).to.be.instanceOf(MyClass); + expect(_instance.prop).to.eq('value from provider'); + done(); + }); + + localConsumer.hostConnected(); + }); +}); diff --git a/src/Umbraco.Web.UI.Client/src/core/context-api/context-alias.ts b/src/Umbraco.Web.UI.Client/src/core/context-api/context-alias.ts index 0bdc5d4495..a26741648b 100644 --- a/src/Umbraco.Web.UI.Client/src/core/context-api/context-alias.ts +++ b/src/Umbraco.Web.UI.Client/src/core/context-api/context-alias.ts @@ -1,10 +1,11 @@ export class UmbContextAlias { /** + * @param alias Unique identifier for the token, * @param _desc Description for the token, * used only for debugging purposes, * it should but does not need to be unique */ - constructor(protected _desc: string) {} + constructor(protected alias: string, protected _desc?: string) {} /** * @internal @@ -13,7 +14,13 @@ export class UmbContextAlias { return this as UmbContextAlias>; } + /** + * This method must always return the unique alias of the token since that + * will be used to look up the token in the injector. + * + * @returns the unique alias of the token + */ toString(): string { - return `${UmbContextAlias.name} ${this._desc}`; + return this.alias; } }