support-requests.component.spec.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { TestBed } from '@angular/core/testing';
  2. import { OperationsService } from '../operations.service';
  3. import { SupportRequestsComponent } from './support-requests.component';
  4. describe('反馈与休假申请看板', () => {
  5. let ops: jasmine.SpyObj<OperationsService>;
  6. const data = (page = 1) => ({ items: [], total: 25, page, pageSize: 20, summary: {feedback: 10, leave: 10, legacy: 5}, refreshedAt: '' });
  7. const create = () => TestBed.runInInjectionContext(() => new SupportRequestsComponent());
  8. beforeEach(() => {
  9. ops = jasmine.createSpyObj('OperationsService', ['request']);
  10. TestBed.configureTestingModule({providers: [{provide: OperationsService, useValue: ops}]});
  11. });
  12. it('keeps applied filters when paging even if draft fields changed', async () => {
  13. const c = create(); ops.request.and.resolveTo(data());
  14. c.search = ' 老师 '; c.kind = 'leave'; c.apply();
  15. c.search = '未提交条件'; await c.load(2);
  16. expect(ops.request.calls.mostRecent().args[1]).toEqual(jasmine.objectContaining({search: '老师', kind: 'leave', page: 2}));
  17. });
  18. it('clears stale results on failure and retries the failed page', async () => {
  19. const c = create(); ops.request.and.resolveTo(data()); await c.load();
  20. ops.request.and.rejectWith(new Error('网络中断')); await c.load(2);
  21. expect(c.data()).toBeNull(); expect(c.error()).toBe('网络中断'); expect(c.loading()).toBeFalse();
  22. ops.request.and.resolveTo(data(2)); await c.load();
  23. expect(ops.request.calls.mostRecent().args[1]?.['page']).toBe(2); expect(c.error()).toBe('');
  24. });
  25. it('ignores late responses from an earlier request', async () => {
  26. const c = create(); let resolve!: (v: unknown) => void;
  27. ops.request.and.returnValues(new Promise(r => resolve = r), Promise.resolve(data(2)));
  28. const first = c.load(1); await c.load(2); resolve(data(1)); await first;
  29. expect(c.data()?.page).toBe(2);
  30. });
  31. it('does not submit inverted date ranges', () => {
  32. const c = create(); c.dateFrom = '2026-10-20'; c.dateTo = '2026-10-15'; c.apply();
  33. expect(ops.request).not.toHaveBeenCalled(); expect(c.error()).toContain('开始日期');
  34. });
  35. });