libmodulor
Version:
A TypeScript library to create platform-agnostic applications
76 lines (75 loc) • 2.9 kB
JavaScript
import { PRODUCT_NAME_PLACEHOLDER } from '../../convention.js';
import { FakeClockManager } from '../../std/impl/FakeClockManager.js';
import { FakeFSManager } from '../../std/impl/FakeFSManager.js';
import { FakeHTTPAPICallExecutor } from '../../std/impl/FakeHTTPAPICallExecutor.js';
import { NodeDeterministicCryptoManager } from '../../std/impl/NodeDeterministicCryptoManager.js';
import { SimpleFormDataBuilder } from '../../std/impl/SimpleFormDataBuilder.js';
import { StaticSettingsManager } from '../../std/impl/StaticSettingsManager.js';
import { bindCommon } from '../../utils/ioc/bindCommon.js';
import { bindNodeCore } from '../../utils/ioc/bindNodeCore.js';
import { bindServer } from '../../utils/ioc/bindServer.js';
export class NodeAppTesterConfigurator {
async authSettersConfig() {
return undefined;
}
async bindImplementations(ctx) {
const { container } = ctx;
bindCommon(container);
bindNodeCore(container);
bindServer(container);
// bindCommon binds it to StaticSettingsManager.
// But bindNodeCore binds it to EnvSettingsManager.
// Tests must be env-agnostic and run with static settings.
(await container.rebind('SettingsManager'))
.to(StaticSettingsManager)
.inSingletonScope();
(await container.rebind('ProductManifest')).toConstantValue({
appReg: [{ name: ctx.appManifest.name }],
name: PRODUCT_NAME_PLACEHOLDER,
});
(await container.rebind('ClockManager')).to(FakeClockManager);
(await container.rebind('CryptoManager'))
.to(NodeDeterministicCryptoManager)
.inSingletonScope();
(await container.rebind('FSManager'))
.to(FakeFSManager)
.inSingletonScope();
(await container.rebind('FormDataBuilder')).to(SimpleFormDataBuilder);
(await container.rebind('HTTPAPICallExecutor'))
.to(FakeHTTPAPICallExecutor)
.inSingletonScope();
}
async clearExecution(ctx) {
const { container } = ctx;
await container.get('CryptoManager').clear();
await container.get('EmailManager').clear();
await container.get('JobManager').clear();
await container.get('UCDataStore').clear();
}
async flows() {
return [];
}
async inputFillers() {
return undefined;
}
async opts() {
return undefined;
}
async seed(_ctx) {
// Nothing to do
}
async sideEffects(_ctx) {
return undefined;
}
async specificAssertions() {
return undefined;
}
async updateSettings(ctx, settings) {
const { container } = ctx;
const current = container.get('Settings');
(await container.rebind('Settings')).toConstantValue({
...current,
...settings,
});
}
}