ftltest

package
v0.307.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 29, 2024 License: Apache-2.0 Imports: 25 Imported by: 0

Documentation

Overview

Package ftltest contains test utilities for the ftl package.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Context

func Context(options ...Option) context.Context

Context suitable for use in testing FTL verbs with provided options

func ErrorsForSubscription added in v0.254.0

func ErrorsForSubscription[E any](ctx context.Context, subscription ftl.SubscriptionHandle[E]) []error

ErrorsForSubscription returns all errors encountered while consuming events for a subscription

func EventsForTopic added in v0.254.0

func EventsForTopic[E any](ctx context.Context, topic ftl.TopicHandle[E]) []E

EventsForTopic returns all published events for a topic

func WaitForSubscriptionsToComplete added in v0.254.0

func WaitForSubscriptionsToComplete(ctx context.Context)

WaitForSubscriptionsToComplete waits until all subscriptions have consumed all events

Subscriptions with no manually activated subscribers are ignored. Make sure you have called WithSubscriber(…) for all subscriptions you want to wait for.

Types

type Option added in v0.201.0

type Option struct {
	// contains filtered or unexported fields
}

func WhenEmpty added in v0.202.3

func WhenEmpty(empty ftl.Empty, fake func(ctx context.Context) (err error)) Option

WhenEmpty replaces an implementation for a verb with no request or response

To be used when setting up a context for a test:

ctx := ftltest.Context(
	ftltest.WhenEmpty(Example.Empty, func(ctx context.Context) error {
    	...
	}),
)

func WhenMap added in v0.243.0

func WhenMap[T, U any](mapper *ftl.MapHandle[T, U], fake func(context.Context) (U, error)) Option

WhenMap injects a fake implementation of a Mapping function

To be used when setting up a context for a test:

ctx := ftltest.Context(
	ftltest.WhenMap(Example.MapHandle, func(ctx context.Context) (U, error) {
    	// ...
	}),
	// ... other options
)

func WhenSink added in v0.202.3

func WhenSink[Req any](sink ftl.Sink[Req], fake func(ctx context.Context, req Req) error) Option

WhenSink replaces an implementation for a verb with no response

To be used when setting up a context for a test:

ctx := ftltest.Context(
	ftltest.WhenSink(example.Sink, func(ctx context.Context, req example.Req) error {
    	...
	}),
	// ... other options
)

func WhenSource added in v0.202.3

func WhenSource[Resp any](source ftl.Source[Resp], fake func(ctx context.Context) (resp Resp, err error)) Option

WhenSource replaces an implementation for a verb with no request

To be used when setting up a context for a test:

ctx := ftltest.Context(
	ftltest.WhenSource(example.Source, func(ctx context.Context) (example.Resp, error) {
    	// ...
	}),
	// ... other options
)

func WhenVerb added in v0.189.0

func WhenVerb[Req any, Resp any](verb ftl.Verb[Req, Resp], fake ftl.Verb[Req, Resp]) Option

WhenVerb replaces an implementation for a verb

To be used when setting up a context for a test:

ctx := ftltest.Context(
	ftltest.WhenVerb(Example.Verb, func(ctx context.Context, req Example.Req) (Example.Resp, error) {
    	// ...
	}),
	// ... other options
)

func WithCallsAllowedWithinModule added in v0.196.0

func WithCallsAllowedWithinModule() Option

WithCallsAllowedWithinModule allows tests to enable calls to all verbs within the current module

Any overrides provided by calling WhenVerb(...) will take precedence

func WithConfig added in v0.189.0

func WithConfig[T ftl.ConfigType](config ftl.ConfigValue[T], value T) Option

WithConfig sets a configuration for the current module

To be used when setting up a context for a test:

ctx := ftltest.Context(
	ftltest.WithConfig(exampleEndpoint, "https://example.com"),
	// ... other options
)

func WithDatabase added in v0.207.0

func WithDatabase(dbHandle ftl.Database) Option

WithDatabase sets up a database for testing by appending "_test" to the DSN and emptying all tables

To be used when setting up a context for a test:

ctx := ftltest.Context(
	ftltest.WithDatabase(db),
	// ... other options
)

func WithDefaultProjectFile added in v0.255.0

func WithDefaultProjectFile() Option

WithDefaultProjectFile loads config and secrets from the default project file, which is either the FTL_CONFIG environment variable or the ftl-project.toml file in the git root.

func WithMapsAllowed added in v0.243.0

func WithMapsAllowed() Option

WithMapsAllowed allows all `ftl.Map` calls to pass through to their original implementation.

Any overrides provided by calling WhenMap(...) will take precedence.

func WithProjectFile added in v0.201.0

func WithProjectFile(path string) Option

WithProjectFile loads config and secrets from a project file

Takes a path to an FTL project file. If an empty path is provided, the path is inferred from the FTL_CONFIG environment variable. If that is not found, the ftl-project.toml file in the git root is used. If a project file is not found, an error is returned.

To be used when setting up a context for a test:

ctx := ftltest.Context(
	ftltest.WithProjectFile("path/to/ftl-project.yaml"),
	// ... other options
)

func WithSecret added in v0.189.0

func WithSecret[T ftl.SecretType](secret ftl.SecretValue[T], value T) Option

WithSecret sets a secret for the current module

To be used when setting up a context for a test:

ctx := ftltest.Context(
	ftltest.WithSecret(privateKey, "abc123"),
	// ... other options
)

func WithSubscriber added in v0.254.0

func WithSubscriber[E any](subscription ftl.SubscriptionHandle[E], sink ftl.Sink[E]) Option

WithSubscriber adds a subscriber during a test

By default, all subscribers are disabled in unit tests, and must be manually enabled by calling WithSubscriber(…). This allows easy isolation for each unit test.

WithSubscriber(…) can also be used to make an ad-hoc subscriber for your test by defining a new function as the sink.

To be used when setting up a context for a test:

ctx := ftltest.Context(
	ftltest.WithSubscriber(paymentTopic, ProcessPayment),
	// ... other options
)

type OptionsState added in v0.201.0

type OptionsState struct {
	// contains filtered or unexported fields
}

type SubscriptionResult added in v0.254.0

type SubscriptionResult[E any] struct {
	Event E
	Error ftl.Option[error]
}

func ResultsForSubscription added in v0.254.0

func ResultsForSubscription[E any](ctx context.Context, subscription ftl.SubscriptionHandle[E]) []SubscriptionResult[E]

ResultsForSubscription returns all consumed events for a subscription, with any resulting errors

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL