market.test.js 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. const { eq, ok } = require('../../helpers/assert');
  2. const { makeNetwork, makePeer } = require('../../helpers/setup');
  3. describe('market: create + list + bid', (t) => {
  4. t('A creates exchange item', async () => {
  5. const net = makeNetwork(); const A = makePeer(net); A.setActor();
  6. const r = await A.use('market').createItem('exchange', 'Book', 'desc', null, 10, ['books'], 'OPEN', '2026-12-31', false, 1, '');
  7. ok(r);
  8. const list = await A.use('market').listAllItems('all');
  9. ok(list.length >= 1);
  10. eq(list[0].title, 'Book');
  11. });
  12. t('A creates auction', async () => {
  13. const net = makeNetwork(); const A = makePeer(net); A.setActor();
  14. const r = await A.use('market').createItem('auction', 'Painting', '', null, 50, [], 'OPEN', '2026-12-31', false, 1, '');
  15. ok(r);
  16. });
  17. t('B bids on A auction (publish succeeds)', async () => {
  18. const net = makeNetwork(); const A = makePeer(net); const B = makePeer(net);
  19. A.setActor();
  20. const r = await A.use('market').createItem('auction', 'X', '', null, 10, [], 'OPEN', '2026-12-31', false, 1, '');
  21. B.setActor();
  22. await B.use('market').addBidToAuction(r.key, B.keypair.id, 15);
  23. });
  24. });
  25. describe('market: visibility (public / hidden)', (t) => {
  26. t('default visibility is PUBLIC', async () => {
  27. const net = makeNetwork(); const A = makePeer(net); A.setActor();
  28. await A.use('market').createItem('exchange', 'Bike', '', null, 10, [], 'OPEN', '2026-12-31', false, 1, '');
  29. const list = await A.use('market').listAllItems('all');
  30. const it = list.find(x => x.title === 'Bike');
  31. eq(it.visibility, 'PUBLIC');
  32. });
  33. t('HIDDEN item is visible to author', async () => {
  34. const net = makeNetwork(); const A = makePeer(net); A.setActor();
  35. await A.use('market').createItem('exchange', 'PrivateBook', '', null, 10, [], 'OPEN', '2026-12-31', false, 1, '', {}, 'HIDDEN');
  36. const list = await A.use('market').listAllItems('all');
  37. const it = list.find(x => x.title === 'PrivateBook');
  38. ok(it);
  39. eq(it.visibility, 'HIDDEN');
  40. });
  41. t('HIDDEN item is filtered out for non-author viewers', async () => {
  42. const net = makeNetwork(); const A = makePeer(net); const B = makePeer(net);
  43. A.setActor();
  44. await A.use('market').createItem('exchange', 'SecretBook', '', null, 10, [], 'OPEN', '2026-12-31', false, 1, '', {}, 'HIDDEN');
  45. B.setActor();
  46. const list = await B.use('market').listAllItems('all');
  47. eq(list.find(x => x.title === 'SecretBook'), undefined);
  48. });
  49. t('HIDDEN item getById returns null for non-author', async () => {
  50. const net = makeNetwork(); const A = makePeer(net); const B = makePeer(net);
  51. A.setActor();
  52. const r = await A.use('market').createItem('exchange', 'OnlyMine', '', null, 10, [], 'OPEN', '2026-12-31', false, 1, '', {}, 'HIDDEN');
  53. B.setActor();
  54. eq(await B.use('market').getItemById(r.key), null);
  55. });
  56. t('invalid visibility falls back to PUBLIC', async () => {
  57. const net = makeNetwork(); const A = makePeer(net); A.setActor();
  58. await A.use('market').createItem('exchange', 'GarbageVis', '', null, 10, [], 'OPEN', '2026-12-31', false, 1, '', {}, 'NONSENSE');
  59. const list = await A.use('market').listAllItems('all');
  60. const it = list.find(x => x.title === 'GarbageVis');
  61. eq(it.visibility, 'PUBLIC');
  62. });
  63. t('update can flip visibility PUBLIC -> HIDDEN', async () => {
  64. const net = makeNetwork(); const A = makePeer(net); const B = makePeer(net);
  65. A.setActor();
  66. const r = await A.use('market').createItem('exchange', 'Flip', '', null, 10, [], 'OPEN', '2026-12-31', false, 1, '');
  67. await A.use('market').updateItemById(r.key, { visibility: 'HIDDEN' });
  68. B.setActor();
  69. const list = await B.use('market').listAllItems('all');
  70. eq(list.find(x => x.title === 'Flip'), undefined);
  71. });
  72. });