UNPKG

@shopware-ag/meteor-admin-sdk

Version:

The Meteor SDK for the Shopware Administration.

209 lines 10.8 kB
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; (function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "worker_threads", "vue", "flush-promises", "localforage"], factory); } })(function (require, exports) { "use strict"; var __syncRequire = typeof module === "object" && typeof module.exports === "object"; Object.defineProperty(exports, "__esModule", { value: true }); const worker_threads_1 = require("worker_threads"); const vue_1 = __importDefault(require("vue")); const flush_promises_1 = __importDefault(require("flush-promises")); const localforage_1 = __importDefault(require("localforage")); vue_1.default.config.devtools = false; vue_1.default.config.productionTip = false; let useAsyncSharedState; function mockLoadComposableInApp(composable) { let result; const app = new vue_1.default({ setup() { result = composable(); return () => { }; }, }); app.$mount(document.createElement('div')); return [result, app]; } describe('useAsyncSharedState composable', () => { const storeMock = localforage_1.default.createInstance({ name: 'adminExtensionSDK', storeName: 'persistentSharedValueStore', }); beforeAll(() => __awaiter(void 0, void 0, void 0, function* () { window.addEventListener('message', (event) => { if (event.origin === '') { event.stopImmediatePropagation(); const eventWithOrigin = new MessageEvent('message', { data: event.data, origin: window.location.href, }); window.dispatchEvent(eventWithOrigin); } }); useAsyncSharedState = yield (yield __syncRequire ? Promise.resolve().then(() => __importStar(require('./useAsyncSharedState'))) : new Promise((resolve_1, reject_1) => { require(['./useAsyncSharedState'], resolve_1, reject_1); }).then(__importStar)).useAsyncSharedState; const setExtensions = yield (yield __syncRequire ? Promise.resolve().then(() => __importStar(require('../../channel'))) : new Promise((resolve_2, reject_2) => { require(['../../channel'], resolve_2, reject_2); }).then(__importStar)).setExtensions; setExtensions({ 'test-extension': { baseUrl: 'http://localhost', permissions: {}, }, }); })); beforeEach(() => __awaiter(void 0, void 0, void 0, function* () { // @ts-expect-error - Mocking BroadcastChannel global.BroadcastChannel = worker_threads_1.BroadcastChannel; const localStorageMock = (function () { let store = {}; return { getItem(key) { var _a; // @ts-expect-error - Mocking localStorage return (_a = store[key]) !== null && _a !== void 0 ? _a : null; }, setItem(key, value) { // @ts-expect-error - Mocking localStorage store[key] = value; }, clear() { store = {}; }, removeItem(key) { // @ts-expect-error - Mocking localStorage delete store[key]; }, getAll() { return store; }, }; })(); Object.defineProperty(window, 'localStorage', { value: localStorageMock }); yield storeMock.clear(); })); afterEach(() => __awaiter(void 0, void 0, void 0, function* () { window.localStorage.clear(); yield storeMock.clear(); })); it('should be not ready at the beginning and become ready afterwards', () => __awaiter(void 0, void 0, void 0, function* () { const [result, app] = mockLoadComposableInApp(() => useAsyncSharedState('age', 0)); expect(result.isReady.value).toBe(false); yield (0, flush_promises_1.default)(); expect(result.isReady.value).toBe(true); app.$destroy(); })); it('should resolve the ready promise', () => __awaiter(void 0, void 0, void 0, function* () { const [result, app] = mockLoadComposableInApp(() => useAsyncSharedState('age', 0)); let isReady = false; void result.ready.then(() => { isReady = true; }); expect(isReady).toBe(false); yield (0, flush_promises_1.default)(); expect(isReady).toBe(true); app.$destroy(); })); it('should be ready after the value is loaded from the store', () => __awaiter(void 0, void 0, void 0, function* () { yield storeMock.setItem('age', 27); const [result, app] = mockLoadComposableInApp(() => useAsyncSharedState('age', 0)); expect(result.isReady.value).toBe(false); expect(result.state.value).toBe(0); yield (0, flush_promises_1.default)(); expect(result.isReady.value).toBe(true); expect(result.state.value).toBe(27); app.$destroy(); })); it('should update the state when the value is updated', () => __awaiter(void 0, void 0, void 0, function* () { const [result, app] = mockLoadComposableInApp(() => useAsyncSharedState('age', 0)); expect(result.state.value).toBe(0); yield (0, flush_promises_1.default)(); result.state.value = 27; expect(result.state.value).toBe(27); yield (0, flush_promises_1.default)(); app.$destroy(); })); it('should update the state when the value is updated somewhere else', () => __awaiter(void 0, void 0, void 0, function* () { const [result, app] = mockLoadComposableInApp(() => useAsyncSharedState('age', 0)); const [result2, app2] = mockLoadComposableInApp(() => useAsyncSharedState('age', 0)); expect(result.state.value).toBe(0); yield (0, flush_promises_1.default)(); result2.state.value = 27; yield (0, flush_promises_1.default)(); expect(result.state.value).toBe(27); yield (0, flush_promises_1.default)(); app.$destroy(); app2.$destroy(); })); it('should support deep reactivity with objects', () => __awaiter(void 0, void 0, void 0, function* () { const initialValue = { user: { name: 'John', age: 30 } }; const [result, app] = mockLoadComposableInApp(() => useAsyncSharedState('user', initialValue)); expect(result.state.value).toEqual(initialValue); yield (0, flush_promises_1.default)(); // Update nested property result.state.value.user.age = 31; expect(result.state.value.user.age).toBe(31); expect(result.state.value.user.name).toBe('John'); // Update entire nested object result.state.value.user = { name: 'Jane', age: 25 }; expect(result.state.value.user).toEqual({ name: 'Jane', age: 25 }); yield (0, flush_promises_1.default)(); app.$destroy(); })); it('should support deep reactivity with objects and update the state somewhere else', () => __awaiter(void 0, void 0, void 0, function* () { const initialValue = { user: { name: 'John', age: 30 } }; const [result, app] = mockLoadComposableInApp(() => useAsyncSharedState('user', initialValue)); const [result2, app2] = mockLoadComposableInApp(() => useAsyncSharedState('user', initialValue)); expect(result.state.value).toEqual(initialValue); yield (0, flush_promises_1.default)(); // Update nested property result2.state.value.user.age = 31; yield (0, flush_promises_1.default)(); expect(result.state.value.user.age).toBe(31); expect(result.state.value.user.name).toBe('John'); // Update entire nested object result.state.value.user = { name: 'Jane', age: 25 }; expect(result.state.value.user).toEqual({ name: 'Jane', age: 25 }); yield (0, flush_promises_1.default)(); app.$destroy(); app2.$destroy(); })); }); }); //# sourceMappingURL=useAsyncSharedState.spec.js.map