@shko.online/componentframework-mock
Version:
Mocking library to help with testing PowerApps Component Framework Components
80 lines (78 loc) • 3.22 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ComponentFrameworkMockGeneratorReact = void 0;
var _react = require("react");
var _sinon = require("sinon");
var _ComponentFrameworkMock = require("../ComponentFramework-Mock");
var _Metadata = require("./Metadata.db");
var _ReactResizeObserver = require("./ReactResizeObserver");
var _utils = require("../utils");
var _mockGetEntityMetadata = require("./mockGetEntityMetadata");
var _mockSetControlState = require("./mockSetControlState");
var _mockSetControlResource = require("./mockSetControlResource");
var _mockRefreshParameters = require("./mockRefreshParameters");
/*
Copyright (c) 2022 Betim Beja and Shko Online LLC
Licensed under the MIT license.
*/
class ComponentFrameworkMockGeneratorReact {
constructor(control, inputs, outputs, overrides) {
this._PendingUpdates = void 0;
this.RefreshParameters = void 0;
this.RefreshDatasets = void 0;
this.UpdateValues = void 0;
this.context = void 0;
this.control = void 0;
this.notifyOutputChanged = void 0;
this.onOutputChanged = void 0;
this.outputOnlyProperties = void 0;
this.resizeObserver = void 0;
this.state = void 0;
this.SetControlResource = void 0;
this.metadata = void 0;
this.circuitBreaker = false;
(0, _utils.showBanner)(control.name);
this._PendingUpdates = [];
this.state = {};
this.outputOnlyProperties = {};
this.control = (0, _sinon.spy)(new control());
this.metadata = overrides?.metadata ?? new _Metadata.MetadataDB();
this.context = new _ComponentFrameworkMock.ContextMock(inputs, this.metadata);
const inputProperties = Object.getOwnPropertyNames(this.context._parameters);
if (outputs) {
Object.getOwnPropertyNames(outputs).forEach(p => {
if (inputProperties.includes(p)) {
return;
}
this.outputOnlyProperties[p] = outputs[p];
});
}
(0, _mockGetEntityMetadata.mockGetEntityMetadata)(this);
this.UpdateValues = (0, _sinon.stub)();
this.notifyOutputChanged = (0, _sinon.stub)(); // Mocked in ReactResizeObserver
this.onOutputChanged = (0, _sinon.stub)();
this.resizeObserver = new ResizeObserver(() => undefined); // Defined in ReactResizeObserver
this.RefreshParameters = (0, _sinon.stub)();
(0, _mockRefreshParameters.mockRefreshParameters)(this);
this.RefreshDatasets = (0, _sinon.stub)();
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);
}
ExecuteUpdateView() {
this.RefreshParameters();
this.circuitBreaker = !this.circuitBreaker;
return /*#__PURE__*/(0, _react.createElement)(_ReactResizeObserver.ReactResizeObserver, {
componentFrameworkMockGeneratorReact: this,
circuitBreaker: this.circuitBreaker
});
}
}
exports.ComponentFrameworkMockGeneratorReact = ComponentFrameworkMockGeneratorReact;