UNPKG

as-procedure

Version:

easily create procedures within a pit-of-success

40 lines 2.22 kB
"use strict"; 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