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