Around remaining blockers (Zapier login, live Verae): generate PDF receipts without extra deps; AES-256-GCM object store with tenant isolation and share tokens; scripts/nats-tunnel.sh to NS1; SHA256 Hash Text local Zapier action; scripts/test-offline.sh for the no-login suite. Learned: other-tenant object GET is 403; share token is the mock unwrap path.
100 lines
3.6 KiB
JavaScript
100 lines
3.6 KiB
JavaScript
/**
|
|
* Activate-now tests: Add Numbers local + hosted paths.
|
|
*/
|
|
|
|
const { describe, it } = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
const App = require('../index');
|
|
const addNumbers = require('../creates/add_numbers');
|
|
const authentication = require('../authentication');
|
|
|
|
describe('verae-activate app', () => {
|
|
it('exports Add Numbers create and custom auth', () => {
|
|
assert.equal(authentication.type, 'custom');
|
|
assert.ok(App.creates.add_numbers);
|
|
assert.ok(App.creates.echo);
|
|
assert.ok(App.creates.sha256_hash);
|
|
assert.equal(addNumbers.key, 'add_numbers');
|
|
assert.ok(addNumbers.operation.inputFields.some((f) => f.key === 'number1'));
|
|
assert.ok(addNumbers.operation.inputFields.some((f) => f.key === 'number2'));
|
|
});
|
|
|
|
it('adds two numbers locally with no API', async () => {
|
|
const z = { request: async () => { throw new Error('should not HTTP'); } };
|
|
const result = await addNumbers.operation.perform(z, {
|
|
inputData: { number1: 2, number2: 3 },
|
|
authData: {},
|
|
});
|
|
assert.deepEqual(result, { number1: 2, number2: 3, sum: 5, mode: 'local' });
|
|
});
|
|
|
|
it('coerces numeric strings', async () => {
|
|
const result = await addNumbers.operation.perform({}, {
|
|
inputData: { number1: '10.5', number2: '-0.5' },
|
|
authData: {},
|
|
});
|
|
assert.equal(result.sum, 10);
|
|
assert.equal(result.mode, 'local');
|
|
});
|
|
|
|
it('rejects non-finite number1', async () => {
|
|
await assert.rejects(
|
|
() => addNumbers.operation.perform({}, { inputData: { number1: 'x', number2: 1 }, authData: {} }),
|
|
/number1 must be a finite number/,
|
|
);
|
|
});
|
|
|
|
it('POSTs to hosted /v1/add when api_base and api_key are set', async () => {
|
|
const calls = [];
|
|
const z = {
|
|
request: async (opts) => {
|
|
calls.push(opts);
|
|
return { data: { number1: 1, number2: 4, sum: 5, quote: { totalCents: 0 } } };
|
|
},
|
|
};
|
|
const result = await addNumbers.operation.perform(z, {
|
|
inputData: { number1: 1, number2: 4 },
|
|
authData: { api_base: 'https://edge.example.com/', api_key: 'key-ada' },
|
|
});
|
|
assert.equal(calls[0].method, 'POST');
|
|
assert.equal(calls[0].url, 'https://edge.example.com/v1/add');
|
|
assert.equal(calls[0].headers['x-api-key'], 'key-ada');
|
|
assert.deepEqual(calls[0].body, { number1: 1, number2: 4 });
|
|
assert.equal(result.mode, 'hosted');
|
|
assert.equal(result.sum, 5);
|
|
});
|
|
|
|
it('sha256 hashes hello', async () => {
|
|
const sha = require('../creates/sha256');
|
|
const out = await sha.operation.perform({}, { inputData: { text: 'hello' }, authData: {} });
|
|
assert.equal(out.sha256, '2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824');
|
|
assert.equal(out.mode, 'local');
|
|
});
|
|
|
|
it('echo returns text length', async () => {
|
|
const echo = require('../creates/echo');
|
|
const out = await echo.operation.perform({}, { inputData: { text: 'ab' }, authData: {} });
|
|
assert.equal(out.length, 2);
|
|
assert.equal(out.mode, 'local');
|
|
});
|
|
|
|
it('auth test is local when fields empty', async () => {
|
|
const out = await authentication.test({ request: async () => ({ data: {} }) }, { authData: {} });
|
|
assert.equal(out.ok, true);
|
|
assert.equal(out.mode, 'local');
|
|
});
|
|
|
|
it('auth test hits /v1/status when hosted', async () => {
|
|
const z = {
|
|
request: async (opts) => {
|
|
assert.equal(opts.url, 'https://edge.example.com/v1/status');
|
|
return { data: { status: 'ok' } };
|
|
},
|
|
};
|
|
const out = await authentication.test(z, {
|
|
authData: { api_base: 'https://edge.example.com', api_key: 'k' },
|
|
});
|
|
assert.equal(out.mode, 'hosted');
|
|
});
|
|
});
|