as-procedure
Version:
easily create procedures within a pit-of-success
40 lines • 2.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const error_fns_1 = require("@ehmpathy/error-fns");
const getError_1 = require("@ehmpathy/error-fns/dist/getError");
const test_fns_1 = require("test-fns");
const withExpectOutput_1 = require("./withExpectOutput");
describe('withExpectOutput', () => {
(0, test_fns_1.given)('a function that returns a record or null', () => {
const findMiracle = async (input) => {
if (input.slug === 'none')
return null;
return { slug: input.slug, name: 'MiracleName' };
};
(0, test_fns_1.when)('wrapped withExpectOutput', () => {
const findMiracleWrapped = (0, withExpectOutput_1.withExpectOutput)(findMiracle);
(0, test_fns_1.then)('should succeed when result is present', async () => {
const result = findMiracleWrapped({ slug: 'exists' });
const miracle = await result.expect('isPresent');
expect(miracle).toEqual({ slug: 'exists', name: 'MiracleName' });
});
(0, test_fns_1.then)('should throw HelpfulError if result is null', async () => {
const error = await (0, test_fns_1.getError)(() => findMiracleWrapped({ slug: 'none' }).expect('isPresent'));
if (error instanceof getError_1.NoErrorThrownError)
throw error;
expect(error).toBeInstanceOf(error_fns_1.HelpfulError);
expect(error.message).toContain('expect.output: breach');
expect(error.cause?.message).toContain('expect.output: call');
});
(0, test_fns_1.then)('should typecheck against invalid operation keys', async () => {
const result = findMiracleWrapped({ slug: 'exists' });
// @ts-expect-error: Argument of type '"unknown"' is not assignable to parameter of type '"isPresent"'
await result.expect('unknown');
// valid usage should work
const data = await result.expect('isPresent');
expect(data.slug).toBe('exists');
});
});
});
});
//# sourceMappingURL=withExpectOutput.test.js.map