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); }); });