From 5fcdc10f360c0957109ea4e7a29024ee4151a26e Mon Sep 17 00:00:00 2001 From: Ardis Lu Date: Thu, 3 Sep 2026 20:46:09 -0700 Subject: [PATCH] Define expected error messages in tests --- src/crypto.js | 9 +++++++-- test/crypto.test.js | 16 ++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/crypto.js b/src/crypto.js index 2dd5146..07e8ba3 100644 --- a/src/crypto.js +++ b/src/crypto.js @@ -55,7 +55,7 @@ export async function encryptRaw(options) { } if (typeof value !== 'string') { - throw new TypeError(`Value "${value}" is not a string.`); + throw new TypeError(`Value "${JSON.stringify(value)}" is not a string.`); } if (version === 'v1') { @@ -108,12 +108,17 @@ export async function encryptRaw(options) { */ export async function decryptRaw(options) { const { prf, value } = options; - const [magic, version, valueBase64] = value.split(':'); if (!ArrayBuffer.isView(prf) && !(prf instanceof ArrayBuffer)) { throw new TypeError(`prf "${prf}" is not an ArrayBuffer or Uint8Array.`); } + if (typeof value !== 'string') { + throw new TypeError(`Value "${JSON.stringify(value)}" is not a string.`); + } + + const [magic, version, valueBase64] = value.split(':'); + if (magic !== 'envpass') { throw new TypeError(`Value "${value}" is not an envpass encrypted value.`); } diff --git a/test/crypto.test.js b/test/crypto.test.js index c2013dc..b6fbf7d 100644 --- a/test/crypto.test.js +++ b/test/crypto.test.js @@ -17,15 +17,15 @@ suite('encryptRaw and decryptRaw', { concurrency: true }, () => { suite('encryptRaw', { concurrency: true }, () => { test('throws on invalid version', { concurrency: true }, () => { // @ts-expect-error - rejects(encryptRaw({ version: 'INVALID', prf, value })); + rejects(encryptRaw({ version: 'INVALID', prf, value }), { name: 'TypeError', message: 'envpass version "INVALID" is not supported.' }); }); test('throws on invalid prf', { concurrency: true }, () => { // @ts-expect-error - rejects(encryptRaw({ version, prf: 'INVALID', value })); + rejects(encryptRaw({ version, prf: 'INVALID', value }, { name: 'TypeError', message: 'prf "INVALID" is not an ArrayBuffer or Uint8Array.' })); }); test('throws on invalid value', { concurrency: true }, () => { // @ts-expect-error - rejects(encryptRaw({ version, prf, value: {} })); + rejects(encryptRaw({ version, prf, value: {} }), { name: 'TypeError', message: 'Value "{}" is not a string.' }); }); }); @@ -33,21 +33,21 @@ suite('decryptRaw', { concurrency: true }, () => { const value = 'envpass:v1:AAA'; test('throws on invalid prf', { concurrency: true }, () => { // @ts-expect-error - rejects(decryptRaw({ prf: 'INVALID', value })); + rejects(decryptRaw({ prf: 'INVALID', value }), { name: 'TypeError', message: 'prf "INVALID" is not an ArrayBuffer or Uint8Array.' }); }); test('throws on invalid value', { concurrency: true }, () => { // @ts-expect-error - rejects(decryptRaw({ prf, value: {} })); + rejects(decryptRaw({ prf, value: {} }), { name: 'TypeError', message: 'Value "{}" is not a string.' }); }); test('throws on invalid magic in value', { concurrency: true }, () => { // @ts-expect-error - rejects(decryptRaw({ prf, value: 'INVALID:v1:AAA' })); + rejects(decryptRaw({ prf, value: 'INVALID:v1:AAA' }), { name: 'TypeError', message: 'Value "INVALID:v1:AAA" is not an envpass encrypted value.' }); }); test('throws on invalid version in value', { concurrency: true }, () => { // @ts-expect-error - rejects(decryptRaw({ prf, value: 'envpass:INVALID:AAA' })); + rejects(decryptRaw({ prf, value: 'envpass:INVALID:AAA' }), { name: 'TypeError', message: 'envpass version "INVALID" is not supported.' }); }); test('throws on invalid (non-base64) string in value', { concurrency: true }, () => { - rejects(decryptRaw({ prf, value: 'envpass:v1:🏴‍☠️' })); + rejects(decryptRaw({ prf, value: 'envpass:v1:🏴‍☠️' }), { name: 'SyntaxError', message: 'Found a character that cannot be part of a valid base64 string.' }); }); }); \ No newline at end of file -- 2.47.3