@react-mvi/testing
Version:
Test module for React MVI.
84 lines (83 loc) • 3.72 kB
JavaScript
;
/**
* The MIT License (MIT)
* Copyright (c) Taketoshi Aono
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
* @fileoverview
* @author Taketoshi Aono
*/
Object.defineProperty(exports, "__esModule", { value: true });
var core_1 = require("@react-mvi/core");
var rxjs_1 = require("rxjs");
var mocker_1 = require("./mocker");
/**
* Prepare Intent and Store.
* @param IntentClass Intent constructor.
* @param StoreClass Store constructor or Array of Store constructor.
* @param opt Options if contains handlers, call registerHandlers with that,
* if contains state, set as parent state of intent arguments.
*/
function prepareTest(IntentClass, StoreClass, opt) {
if (opt === void 0) { opt = { state: {}, multiIntent: false }; }
if (opt && opt.handlers) {
core_1.registerHandlers(opt.handlers);
}
var context = {
state: opt.state,
mergedState: opt.state,
__intent: null,
__subject: null,
};
var provisioning = new core_1.Provisioning('Prepare', context, core_1.isObject(IntentClass)
? IntentClass
: { intent: IntentClass }, Array.isArray(StoreClass) ? StoreClass : [StoreClass], undefined, opt.services || {}, {}, function (intent) { return new mocker_1.Mocker(intent, opt.state); });
provisioning.prepare();
return {
store: provisioning.getStores()[0],
stores: provisioning.getStores(),
mock: opt.multiIntent
? (function () {
var map = provisioning.getIntentInstance();
var ret = {};
for (var key in map) {
ret[key] = new mocker_1.MockManipulator(map[key]);
}
return ret;
})()
: new mocker_1.MockManipulator(provisioning.getIntentInstance().intent),
};
}
exports.prepareTest = prepareTest;
function initAppTester(app, initialState, opt) {
if (opt === void 0) { opt = { states: {} }; }
var input = new core_1.SubjectTree({ send: function () { } }, null);
var output = app(input.observable, initialState);
input.setState(opt.states);
return {
input: function (type, payload) {
if (payload === void 0) { payload = null; }
input.notify({ type: type, payload: payload });
},
output: output,
};
}
exports.initAppTester = initAppTester;
function safeSubscribe(observable, callback, done, subscription) {
if (subscription === void 0) { subscription = new rxjs_1.Subscription(); }
subscription.add(observable.subscribe(function (v) {
callback(v).then(function () { return done(); }, done);
}));
return subscription;
}
exports.safeSubscribe = safeSubscribe;