UNPKG

@shko.online/componentframework-mock

Version:

Mocking library to help with testing PowerApps Component Framework Components

97 lines (95 loc) 4.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ComponentFrameworkMockGenerator = void 0; var _sinon = require("sinon"); var _Metadata = require("./Metadata.db"); var _mockGetEntityMetadata = require("./mockGetEntityMetadata"); var _mockSetControlState = require("./mockSetControlState"); var _mockSetControlResource = require("./mockSetControlResource"); var _mockRefreshParameters = require("./mockRefreshParameters"); var _mockNotifyOutputChanged = require("./mockNotifyOutputChanged"); var _ComponentFrameworkMock = require("../ComponentFramework-Mock"); var _utils = require("../utils"); var _mockRefreshDatasets = require("./mockRefreshDatasets"); /* Copyright (c) 2022 Betim Beja and Shko Online LLC Licensed under the MIT license. */ /** * This class mocks the standard version of the PowerApps Component Framework control. */ class ComponentFrameworkMockGenerator { constructor(control, inputs, container, outputs, overrides) { this._PendingUpdates = void 0; this.RefreshDatasets = void 0; this.RefreshParameters = void 0; this.SetControlResource = void 0; this.UpdateValues = void 0; this.container = void 0; this.context = void 0; this.control = void 0; this.metadata = void 0; this.notifyOutputChanged = void 0; this.onOutputChanged = void 0; this.outputOnlyProperties = void 0; this.resizeObserver = void 0; this.state = void 0; (0, _utils.showBanner)(control.name); this._PendingUpdates = []; this.state = {}; this.outputOnlyProperties = {}; this.container = container ?? document.createElement('div'); this.control = (0, _sinon.spy)(new control()); this.metadata = overrides?.metadata ?? new _Metadata.MetadataDB(); this.context = new _ComponentFrameworkMock.ContextMock(inputs, this.metadata); this.resizeObserver = new ResizeObserver(entries => { const size = entries[0]; this.context.mode.allocatedHeight = size.contentRect.height; this.context.mode.allocatedWidth = size.contentRect.width; this.ExecuteUpdateView(); }); this.context.mode.trackContainerResize.callsFake(value => { if (value) this.resizeObserver.observe(this.container);else this.resizeObserver.unobserve(this.container); }); const inputProperties = Object.getOwnPropertyNames(this.context._parameters); inputProperties.forEach(p => { const parameter = this.context._parameters[p]; if (parameter instanceof _ComponentFrameworkMock.DataSetMock) { parameter._updateView = this.ExecuteUpdateView.bind(this); } }); if (outputs) { Object.getOwnPropertyNames(outputs).forEach(p => { if (inputProperties.includes(p)) { return; } this.outputOnlyProperties[p] = outputs[p]; }); } this.UpdateValues = (0, _sinon.stub)(); (0, _mockGetEntityMetadata.mockGetEntityMetadata)(this); this.notifyOutputChanged = (0, _sinon.stub)(); (0, _mockNotifyOutputChanged.mockNotifyOutputChanged)(this, this.control.getOutputs?.bind(this.control), this.ExecuteUpdateView.bind(this)); this.onOutputChanged = (0, _sinon.stub)(); this.RefreshParameters = (0, _sinon.stub)(); (0, _mockRefreshParameters.mockRefreshParameters)(this); this.RefreshDatasets = (0, _sinon.stub)(); (0, _mockRefreshDatasets.mockRefreshDatasets)(this, this.ExecuteUpdateView.bind(this)); this.SetControlResource = (0, _sinon.stub)(); (0, _mockSetControlResource.mockSetControlResource)(this); (0, _mockSetControlState.mockSetControlState)(this); } ExecuteInit() { this.RefreshParameters(); const state = this.state === undefined ? this.state : Object.assign({}, this.state); this.control.init(this.context, this.notifyOutputChanged, state, this.container); } ExecuteUpdateView() { this.RefreshParameters(); this.control.updateView(this.context); this.RefreshDatasets(); } } exports.ComponentFrameworkMockGenerator = ComponentFrameworkMockGenerator;