form-payload.spec.ts 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { buildFormSubmission } from './form-payload';
  2. import { PAGE_BY_PATH } from './page-catalog';
  3. describe('form payload adapters', () => {
  4. it('preserves the feedback save contract and explicitly distinguishes leave requests', () => {
  5. const meta = PAGE_BY_PATH.get('pages/member/feedback')!;
  6. for (const requestType of ['feedback', 'leave']) {
  7. const submission = buildFormSubmission(meta, { name: ' 测试用户 ', content: '申请内容', requestType }, { uid: 7 });
  8. expect(submission?.action).toBe('guestbook_add');
  9. expect(JSON.parse(String(submission?.payload['model']))).toEqual({ UserID: 7, Title: `【${requestType === 'leave' ? '休假申请' : '意见反馈'}】测试用户`, TContent: '申请内容', Cateid: 22 });
  10. }
  11. });
  12. it('maps the address form to the legacy address API contract', () => {
  13. const meta = PAGE_BY_PATH.get('pages/member/receaddr_add')!;
  14. const submission = buildFormSubmission(meta, {
  15. ReceivName: '测试用户',
  16. MobileNum: '13800138000',
  17. Provinces: '江西省 南昌市 红谷滩区',
  18. Street: '测试路 1 号',
  19. Zipcode: '330000',
  20. }, { uid: 7, id: '9' });
  21. expect(submission?.action).toBe('receaddr_upd');
  22. expect(submission?.payload).toEqual(jasmine.objectContaining({
  23. uid: 7,
  24. id: '9',
  25. provinceName: '江西省',
  26. cityName: '南昌市',
  27. countyName: '红谷滩区',
  28. userName: '测试用户',
  29. telNumber: '13800138000',
  30. }));
  31. });
  32. it('serializes product model and gallery data for the product API', () => {
  33. const meta = PAGE_BY_PATH.get('pages/member/myshop_add')!;
  34. const submission = buildFormSubmission(meta, { Proname: '测试商品', Nodeid: 2, pics: '/upload/pic.jpg' }, { uid: 7 });
  35. expect(submission?.action).toBe('product_add');
  36. expect(JSON.parse(String(submission?.payload['model']))).toEqual(jasmine.objectContaining({ Proname: '测试商品', Nodeid: 2 }));
  37. expect(JSON.parse(JSON.parse(String(submission?.payload['addon'])).pics)[0].url).toBe('/upload/pic.jpg');
  38. });
  39. it('maps password confirmation fields to the original API names', () => {
  40. const meta = PAGE_BY_PATH.get('pages/member/passwd')!;
  41. const submission = buildFormSubmission(meta, { passwd: 'secret123', passwd2: 'secret123', vcode: '123456' }, { uid: 7 });
  42. expect(submission?.payload).toEqual(jasmine.objectContaining({ newPass: 'secret123', reNewPass: 'secret123', vcode: '123456' }));
  43. });
  44. });