@prismatic-io/spectral
Version:
Utility library for building Prismatic connectors and code-native integrations
134 lines (133 loc) • 9.84 kB
TypeScript
/**
* This module provides functions to help developers unit
* test custom components prior to publishing them. For
* information on unit testing, check out our docs:
* https://prismatic.io/docs/custom-connectors/unit-testing/
*/
import type { ActionPerformReturn as ServerActionPerformReturn, TriggerPayload, TriggerResult, ConnectionValue, ActionLogger, Component, DataSourceResult, DataSourceContext } from "./serverTypes";
import type { ActionContext, ConnectionDefinition, ActionDefinition, TriggerDefinition, Inputs, ActionInputParameters, DataSourceDefinition, ActionPerformReturn as InvokeActionPerformReturn, TriggerResult as InvokeTriggerResult, DataSourceType, DataSourceResult as InvokeDataSourceResult, TriggerEventFunctionReturn, Flow, ConfigVarResultCollection, ComponentManifest } from "./types";
/**
* Create a test connection to use when testing your custom component locally. See
* https://prismatic.io/docs/custom-connectors/unit-testing/#providing-test-connection-inputs-to-an-action-test
*/
export declare const createConnection: <T extends ConnectionDefinition>({ key }: T, values: Record<string, unknown>, tokenValues?: Record<string, unknown>, displayName?: string) => ConnectionValue;
export declare const defaultConnectionValueEnvironmentVariable = "PRISMATIC_CONNECTION_VALUE";
/**
* Source a test connection from an environment variable for local testing. See
* https://prismatic.io/docs/custom-connectors/unit-testing/#access-connections-for-local-testing
*/
export declare const connectionValue: (envVarKey?: string) => ConnectionValue;
/**
* Pre-built mock of ActionLogger. Suitable for asserting logs are created as expected. See
* https://prismatic.io/docs/custom-connectors/unit-testing/#verifying-correct-logging-in-action-tests
* for information on testing correct logging behavior in your custom component.
*/
export declare const loggerMock: () => ActionLogger;
/**
* Creates basic component mocks based on the CNI's component registry.
* You may pass mock overrides in the second argument, e.g.:
*
* createMockContextComponents(myManifest, {
* actions: {
* myComponentName: {
* myComponentAction: () => Promise.resolve({ data: "my test data "}),
* }
* },
* });
*/
export declare const createMockContextComponents: <TMockAction extends () => Promise<any>>(registry: Record<string, {
actions: ComponentManifest["actions"];
}>, mocks?: {
actions: Record<string, Record<string, TMockAction>>;
}) => Record<string, Record<string, TMockAction>>;
/**
* The type of data returned by an `invoke()` function used for unit testing component actions and triggers.
*/
interface InvokeReturn<ReturnData> {
result: ReturnData;
loggerMock: ActionLogger;
}
/**
* Invokes specified ActionDefinition perform function using supplied params
* and optional context. Accepts a generic type matching ActionPerformReturn as a convenience
* to avoid extra casting within test methods. Returns an InvokeResult containing both the
* action result and a mock logger for asserting logging.
*/
export declare const invoke: <TInputs extends Inputs, TConfigVars extends ConfigVarResultCollection, TAllowsBranching extends boolean, TReturn extends InvokeActionPerformReturn<TAllowsBranching, unknown>>({ perform }: ActionDefinition<TInputs, TConfigVars, TAllowsBranching, TReturn>, params: ActionInputParameters<TInputs>, context?: Partial<ActionContext<TConfigVars>>) => Promise<InvokeReturn<TReturn>>;
export declare const defaultTriggerPayload: () => TriggerPayload;
/**
* Invokes specified TriggerDefinition perform function using supplied params
* and optional context. Accepts a generic type matching TriggerResult as a convenience
* to avoid extra casting within test methods. Returns an InvokeResult containing both the
* trigger result and a mock logger for asserting logging.
*/
export declare const invokeTrigger: <TInputs extends Inputs, TConfigVars extends ConfigVarResultCollection, TAllowsBranching extends boolean, TResult extends InvokeTriggerResult<TAllowsBranching, TriggerPayload>>({ perform }: TriggerDefinition<TInputs, TConfigVars, TAllowsBranching, TResult>, context?: Partial<ActionContext<TConfigVars>>, payload?: TriggerPayload, params?: ActionInputParameters<TInputs>) => Promise<InvokeReturn<TResult>>;
/**
* Invokes specified DataSourceDefinition perform function using supplied params.
* Accepts a generic type matching DataSourceResult as a convenience to avoid extra
* casting within test methods. Returns a DataSourceResult.
*/
export declare const invokeDataSource: <TInputs extends Inputs, TConfigVars extends ConfigVarResultCollection, TDataSourceType extends DataSourceType>({ perform }: DataSourceDefinition<TInputs, TConfigVars, TDataSourceType>, params: ActionInputParameters<TInputs>, context?: Partial<DataSourceContext<TConfigVars>>) => Promise<InvokeDataSourceResult<TDataSourceType>>;
type TestConnectionValue = Pick<ConnectionValue, "fields" | "context" | "token" | "key">;
type TestConfigVarValues = Record<string, string | TestConnectionValue>;
type ToTestValues<TConfigVars extends ConfigVarResultCollection> = {
[K in keyof TConfigVars]: TConfigVars[K] extends ConnectionDefinition ? TestConnectionValue : string;
};
/**
* Invokes specified Flow of a Code Native Integration using supplied params.
* Runs the Trigger and then the Action function and returns the result of the Action. See
* https://prismatic.io/docs/integrations/triggers/cross-flow/#using-cross-flow-triggers-in-code-native
*/
export declare const invokeFlow: <TConfigVars extends ConfigVarResultCollection = ConfigVarResultCollection, TConfigVarValues extends TestConfigVarValues = ToTestValues<TConfigVars>>(flow: Flow, { configVars, context, payload, }?: {
configVars?: TConfigVarValues;
context?: Partial<ActionContext<TConfigVars>>;
payload?: Partial<TriggerPayload>;
}) => Promise<InvokeReturn<InvokeActionPerformReturn<false, unknown>>>;
export declare class ComponentTestHarness<TComponent extends Component> {
component: TComponent;
constructor(component: TComponent);
private buildParams;
/**
* Source a test connection from an environment variable for local testing. See
* https://prismatic.io/docs/custom-connectors/unit-testing/#access-connections-for-local-testing
*/
connectionValue({ key }: ConnectionDefinition): ConnectionValue;
/**
* Invoke a trigger by its key within a unit test. See
* https://prismatic.io/docs/custom-connectors/unit-testing/
*/
trigger<TConfigVars extends ConfigVarResultCollection>(key: string, payload?: TriggerPayload, params?: Record<string, unknown>, context?: Partial<ActionContext<TConfigVars>>): Promise<TriggerResult>;
/**
* Invoke a trigger's onInstanceDeploy function by its key within a unit test. See
* https://prismatic.io/docs/custom-connectors/unit-testing/
*/
triggerOnInstanceDeploy<TConfigVars extends ConfigVarResultCollection>(key: string, params?: Record<string, unknown>, context?: Partial<ActionContext<TConfigVars>>): Promise<TriggerEventFunctionReturn | void>;
/**
* Invoke a trigger's onInstanceDelete function by its key within a unit test. See
* https://prismatic.io/docs/custom-connectors/unit-testing/
*/
triggerOnInstanceDelete<TConfigVars extends ConfigVarResultCollection>(key: string, params?: Record<string, unknown>, context?: Partial<ActionContext<TConfigVars>>): Promise<TriggerEventFunctionReturn | void>;
/**
* Invoke an action by its key within a unit test. See
* https://prismatic.io/docs/custom-connectors/unit-testing/
*/
action<TConfigVars extends ConfigVarResultCollection>(key: string, params?: Record<string, unknown>, context?: Partial<ActionContext<TConfigVars>>): Promise<ServerActionPerformReturn>;
/**
* Invoke a data source by its key within a unit test. See
* https://prismatic.io/docs/custom-connectors/unit-testing/
*/
dataSource<TConfigVars extends ConfigVarResultCollection>(key: string, params?: Record<string, unknown>, context?: Partial<DataSourceContext<TConfigVars>>): Promise<DataSourceResult>;
}
/**
* Create a testing harness to test a custom component's actions, triggers and data sources. See
* https://prismatic.io/docs/custom-connectors/unit-testing/
*/
export declare const createHarness: <TComponent extends Component>(component: TComponent) => ComponentTestHarness<TComponent>;
declare const _default: {
loggerMock: () => ActionLogger;
invoke: <TInputs extends Inputs, TConfigVars extends ConfigVarResultCollection, TAllowsBranching extends boolean, TReturn extends InvokeActionPerformReturn<TAllowsBranching, unknown>>({ perform }: ActionDefinition<TInputs, TConfigVars, TAllowsBranching, TReturn>, params: ActionInputParameters<TInputs>, context?: Partial<ActionContext<TConfigVars>>) => Promise<InvokeReturn<TReturn>>;
invokeTrigger: <TInputs extends Inputs, TConfigVars extends ConfigVarResultCollection, TAllowsBranching extends boolean, TResult extends InvokeTriggerResult<TAllowsBranching, TriggerPayload>>({ perform }: TriggerDefinition<TInputs, TConfigVars, TAllowsBranching, TResult>, context?: Partial<ActionContext<TConfigVars>>, payload?: TriggerPayload, params?: ActionInputParameters<TInputs>) => Promise<InvokeReturn<TResult>>;
createHarness: <TComponent extends Component>(component: TComponent) => ComponentTestHarness<TComponent>;
invokeDataSource: <TInputs extends Inputs, TConfigVars extends ConfigVarResultCollection, TDataSourceType extends DataSourceType>({ perform }: DataSourceDefinition<TInputs, TConfigVars, TDataSourceType>, params: ActionInputParameters<TInputs>, context?: Partial<DataSourceContext<TConfigVars>>) => Promise<InvokeDataSourceResult<TDataSourceType>>;
};
export default _default;