| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- const { eq, ok } = require('../../helpers/assert');
- const { makeNetwork, makePeer } = require('../../helpers/setup');
- describe('transfers: create + list + confirm', (t) => {
- t('A creates transfer to B', async () => {
- const net = makeNetwork(); const A = makePeer(net); const B = makePeer(net);
- A.setActor();
- const r = await A.use('transfers').createTransfer(B.keypair.id, 'rent', '10', '2026-12-31', []);
- ok(r);
- const list = await A.use('transfers').listAll('all');
- ok(list.length >= 1);
- const mine = list.find(x => x.concept === 'rent');
- ok(mine);
- ok(mine.amount.startsWith('10'));
- eq(mine.to, B.keypair.id);
- });
- t('B (recipient) confirms transfer', async () => {
- const net = makeNetwork(); const A = makePeer(net); const B = makePeer(net);
- A.setActor();
- const r = await A.use('transfers').createTransfer(B.keypair.id, 'fee', '5', '2026-12-31', []);
- B.setActor();
- await B.use('transfers').confirmTransferById(r.key);
- const list = await B.use('transfers').listAll('all');
- const t = list.find(x => x.concept === 'fee');
- ok(t);
- ok(t.confirmedBy.includes(B.keypair.id));
- });
- t('A casts opinion on transfer', async () => {
- const net = makeNetwork(); const A = makePeer(net); const B = makePeer(net);
- A.setActor();
- const r = await A.use('transfers').createTransfer(B.keypair.id, 'gift', '1', '2026-12-31', []);
- await A.use('transfers').createOpinion(r.key, 'inspiring');
- });
- });
- describe('transfers: ECONOMIC / TIME / TRUST categories', (t) => {
- t('default category is ECONOMIC when omitted', async () => {
- const net = makeNetwork(); const A = makePeer(net); const B = makePeer(net);
- A.setActor();
- await A.use('transfers').createTransfer(B.keypair.id, 'rent', '10', '2026-12-31', []);
- const list = await A.use('transfers').listAll('all');
- const tr = list.find(x => x.concept === 'rent');
- eq(tr.category, 'ECONOMIC');
- });
- t('TIME category persists and round-trips', async () => {
- const net = makeNetwork(); const A = makePeer(net); const B = makePeer(net);
- A.setActor();
- await A.use('transfers').createTransfer(B.keypair.id, 'fix-router', '2', '2026-12-31', ['help'], 'TIME');
- const list = await A.use('transfers').listAll('all');
- const tr = list.find(x => x.concept === 'fix-router');
- eq(tr.category, 'TIME');
- ok(tr.amount.startsWith('2'));
- });
- t('TRUST category persists and round-trips', async () => {
- const net = makeNetwork(); const A = makePeer(net); const B = makePeer(net);
- A.setActor();
- await A.use('transfers').createTransfer(B.keypair.id, 'vouch', '1', '2026-12-31', [], 'TRUST');
- const list = await A.use('transfers').listAll('all');
- const tr = list.find(x => x.concept === 'vouch');
- eq(tr.category, 'TRUST');
- });
- t('invalid category falls back to ECONOMIC', async () => {
- const net = makeNetwork(); const A = makePeer(net); const B = makePeer(net);
- A.setActor();
- await A.use('transfers').createTransfer(B.keypair.id, 'garbage-cat', '3', '2026-12-31', [], 'NONSENSE');
- const list = await A.use('transfers').listAll('all');
- const tr = list.find(x => x.concept === 'garbage-cat');
- eq(tr.category, 'ECONOMIC');
- });
- t('lowercase category is normalized', async () => {
- const net = makeNetwork(); const A = makePeer(net); const B = makePeer(net);
- A.setActor();
- await A.use('transfers').createTransfer(B.keypair.id, 'lc', '4', '2026-12-31', [], 'time');
- const list = await A.use('transfers').listAll('all');
- const tr = list.find(x => x.concept === 'lc');
- eq(tr.category, 'TIME');
- });
- t('update preserves category when not specified', async () => {
- const net = makeNetwork(); const A = makePeer(net); const B = makePeer(net);
- A.setActor();
- const r = await A.use('transfers').createTransfer(B.keypair.id, 'orig', '5', '2026-12-31', [], 'TRUST');
- await A.use('transfers').updateTransferById(r.key, B.keypair.id, 'orig-v2', '6', '2026-12-31', []);
- const list = await A.use('transfers').listAll('all');
- const tr = list.find(x => x.concept === 'orig-v2');
- eq(tr.category, 'TRUST');
- });
- t('update can change category', async () => {
- const net = makeNetwork(); const A = makePeer(net); const B = makePeer(net);
- A.setActor();
- const r = await A.use('transfers').createTransfer(B.keypair.id, 'swap', '5', '2026-12-31', [], 'ECONOMIC');
- await A.use('transfers').updateTransferById(r.key, B.keypair.id, 'swap-v2', '6', '2026-12-31', [], 'TIME');
- const list = await A.use('transfers').listAll('all');
- const tr = list.find(x => x.concept === 'swap-v2');
- eq(tr.category, 'TIME');
- });
- t('confirm preserves category', async () => {
- const net = makeNetwork(); const A = makePeer(net); const B = makePeer(net);
- A.setActor();
- const r = await A.use('transfers').createTransfer(B.keypair.id, 'keepcat', '5', '2026-12-31', [], 'TIME');
- B.setActor();
- await B.use('transfers').confirmTransferById(r.key);
- const list = await B.use('transfers').listAll('all');
- const tr = list.find(x => x.concept === 'keepcat');
- eq(tr.category, 'TIME');
- ok(tr.confirmedBy.includes(B.keypair.id));
- });
- });
|