forked from Qortal/q-blog
68 lines
1.7 KiB
TypeScript
68 lines
1.7 KiB
TypeScript
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
import { fetchAndEvaluateMail } from '@/utils/fetchMail';
|
|
|
|
const original = (global as any).qortalRequest;
|
|
|
|
beforeEach(() => {
|
|
(global as any).qortalRequest = vi.fn();
|
|
});
|
|
|
|
afterEach(() => {
|
|
(global as any).qortalRequest = original;
|
|
vi.restoreAllMocks();
|
|
});
|
|
|
|
const validDecrypted = {
|
|
title: 'Mail title',
|
|
createdAt: 1234,
|
|
version: 1,
|
|
attachments: [],
|
|
textContent: [],
|
|
generalData: {},
|
|
};
|
|
|
|
describe('fetchAndEvaluateMail', () => {
|
|
it('returns isValid=false when prerequisites fail', async () => {
|
|
// No owner
|
|
(global as any).qortalRequest = vi
|
|
.fn()
|
|
// FETCH_QDN_RESOURCE
|
|
.mockResolvedValueOnce('encrypted')
|
|
// GET_NAME_DATA
|
|
.mockResolvedValueOnce({});
|
|
|
|
const res = await fetchAndEvaluateMail({
|
|
user: 'u',
|
|
messageIdentifier: 'mid',
|
|
otherUser: 'other',
|
|
content: {},
|
|
});
|
|
expect(res.isValid).toBe(false);
|
|
});
|
|
|
|
it('returns mapped object when all checks pass', async () => {
|
|
const decryptedB64 = btoa(JSON.stringify(validDecrypted));
|
|
(global as any).qortalRequest = vi
|
|
.fn()
|
|
// FETCH_QDN_RESOURCE
|
|
.mockResolvedValueOnce('encrypted')
|
|
// GET_NAME_DATA
|
|
.mockResolvedValueOnce({ owner: 'ADDR' })
|
|
// GET_ACCOUNT_DATA
|
|
.mockResolvedValueOnce({ publicKey: 'PUB' })
|
|
// DECRYPT_DATA
|
|
.mockResolvedValueOnce(decryptedB64);
|
|
|
|
const res = await fetchAndEvaluateMail({
|
|
user: 'u',
|
|
messageIdentifier: 'mid',
|
|
otherUser: 'other',
|
|
content: {},
|
|
});
|
|
expect(res.isValid).toBe(true);
|
|
expect(res.id).toBe('mid');
|
|
expect(res.title).toBe('Mail title');
|
|
expect(res.createdAt).toBe(1234);
|
|
});
|
|
});
|