diff --git a/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts b/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts index 3b2c58f63e..20a8de81e8 100644 --- a/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts +++ b/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts @@ -219,7 +219,11 @@ describe('TasksComponent', () => { }) // answers task list requests with the fixture tasks matching their status filter - function flushTaskLists(pageSize: number, count?: number) { + function flushTaskLists( + pageSize: number, + count?: number, + filteredTasks: PaperlessTask[] = tasks + ) { httpTestingController .match( (req) => @@ -228,7 +232,9 @@ describe('TasksComponent', () => { ) .forEach((req) => { const statuses = req.request.params.getAll('status') - const results = tasks.filter((task) => statuses.includes(task.status)) + const results = filteredTasks.filter((task) => + statuses.includes(task.status) + ) req.flush({ count: count ?? results.length, results }) }) } @@ -771,6 +777,7 @@ describe('TasksComponent', () => { input.nativeElement.value = '191092' input.nativeElement.dispatchEvent(new Event('input')) jest.advanceTimersByTime(150) + flushTaskLists(10, undefined, [tasks[1]]) fixture.detectChanges() expect(component.filterText).toEqual('191092') expect(component.tasksForSection(TaskSection.NeedsAttention)).toHaveLength( @@ -782,6 +789,7 @@ describe('TasksComponent', () => { component.setSection(TaskSection.InProgress) component.filterText = 'system' jest.advanceTimersByTime(150) + flushTaskLists(25, undefined, [tasks[6]]) expect(component.tasksForSection(TaskSection.InProgress)).toHaveLength(1) expect(component.tasksForSection(TaskSection.InProgress)[0].task_type).toBe( @@ -815,6 +823,7 @@ describe('TasksComponent', () => { input.nativeElement.value = 'duplicate' input.nativeElement.dispatchEvent(new Event('input')) jest.advanceTimersByTime(150) + flushTaskLists(25, undefined, [tasks[0], tasks[1]]) fixture.detectChanges() expect(component.filterText).toEqual('duplicate') expect(component.tasksForSection(TaskSection.NeedsAttention)).toHaveLength( @@ -822,6 +831,53 @@ describe('TasksComponent', () => { ) }) + it('should show server-matched names when the displayed source is translated', () => { + component.setSection(TaskSection.InProgress) + flushTaskLists(25) + component.filterText = 'email' + jest.advanceTimersByTime(150) + + const request = httpTestingController.expectOne( + (req) => + req.url === `${environment.apiBaseUrl}tasks/` && + req.params.get('name') === 'email' && + req.params.get('page_size') === '25' + ) + const translatedTask = { + ...tasks[5], + trigger_source_display: 'E-Mail', + } + request.flush({ count: 1, results: [translatedTask] }) + fixture.detectChanges() + + expect(component.totalTasks()).toBe(1) + expect(component.visibleTasks).toEqual([translatedTask]) + }) + + it('should show server-matched duplicates when the displayed result is translated', () => { + component.setSection(TaskSection.NeedsAttention) + flushTaskLists(25) + jest + .spyOn(component, 'taskResultMessage') + .mockReturnValue('Duplikat von Document #311') + component.setFilterTarget(TaskFilterTargetID.Result) + component.filterText = 'duplicate' + jest.advanceTimersByTime(150) + + const request = httpTestingController.expectOne( + (req) => + req.url === `${environment.apiBaseUrl}tasks/` && + req.params.get('result') === 'duplicate' && + req.params.get('page_size') === '25' + ) + request.flush({ count: 1, results: [tasks[1]] }) + fixture.detectChanges() + + expect(component.totalTasks()).toBe(1) + expect(component.visibleTasks).toEqual([tasks[1]]) + expect(fixture.nativeElement.textContent).toContain('191092.pdf') + }) + it('should prefer explicit reason in the result message', () => { expect( component.taskResultMessage({ diff --git a/src-ui/src/app/components/admin/tasks/tasks.component.ts b/src-ui/src/app/components/admin/tasks/tasks.component.ts index 20f3107ca4..c354a986ac 100644 --- a/src-ui/src/app/components/admin/tasks/tasks.component.ts +++ b/src-ui/src/app/components/admin/tasks/tasks.component.ts @@ -630,23 +630,8 @@ export class TasksComponent return false } - if (!this._filterText.length) { - return true - } - - const query = this._filterText.toLowerCase() - - if (this.filterTargetID == TaskFilterTargetID.Name) { - return [ - this.taskDisplayName(task), - task.task_type_display, - task.trigger_source_display, - ] - .filter(Boolean) - .some((value) => value.toLowerCase().includes(query)) - } - - return this.taskResultMessage(task)?.toLowerCase().includes(query) ?? false + // Text filtering now handled API-side + return true } private tasksForOptionCounts({