mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-08-14 00:26:21 +00:00
Enhancement: global search tweaks (#6674)
This commit is contained in:
@@ -36,6 +36,7 @@ import { WorkflowEditDialogComponent } from '../../common/edit-dialog/workflow-e
|
||||
import { ElementRef } from '@angular/core'
|
||||
import { ToastService } from 'src/app/services/toast.service'
|
||||
import { DataType } from 'src/app/data/datatype'
|
||||
import { queryParamsFromFilterRules } from 'src/app/utils/query-params'
|
||||
|
||||
const searchResults = {
|
||||
total: 11,
|
||||
@@ -248,10 +249,7 @@ describe('GlobalSearchComponent', () => {
|
||||
expect(blurSpy).toHaveBeenCalled()
|
||||
|
||||
component.searchResults = { total: 1 } as any
|
||||
component.resultsDropdown.close()
|
||||
const openSpy = jest.spyOn(component.resultsDropdown, 'open')
|
||||
component.searchInputKeyDown(new KeyboardEvent('keydown', { key: 'Enter' }))
|
||||
expect(openSpy).toHaveBeenCalled()
|
||||
component.resultsDropdown.open()
|
||||
|
||||
component.searchInputKeyDown(
|
||||
new KeyboardEvent('keydown', { key: 'ArrowDown' })
|
||||
@@ -260,6 +258,13 @@ describe('GlobalSearchComponent', () => {
|
||||
const closeSpy = jest.spyOn(component.resultsDropdown, 'close')
|
||||
component.dropdownKeyDown(new KeyboardEvent('keydown', { key: 'Escape' }))
|
||||
expect(closeSpy).toHaveBeenCalled()
|
||||
|
||||
component.searchResults = searchResults as any
|
||||
component.resultsDropdown.open()
|
||||
component.query = 'test'
|
||||
const advancedSearchSpy = jest.spyOn(component, 'runAdvanedSearch')
|
||||
component.searchInputKeyDown(new KeyboardEvent('keydown', { key: 'Enter' }))
|
||||
expect(advancedSearchSpy).toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('should search on query debounce', fakeAsync(() => {
|
||||
@@ -276,7 +281,6 @@ describe('GlobalSearchComponent', () => {
|
||||
it('should support primary action', () => {
|
||||
const object = { id: 1 }
|
||||
const routerSpy = jest.spyOn(router, 'navigate')
|
||||
const qfSpy = jest.spyOn(documentListViewService, 'quickFilter')
|
||||
const modalSpy = jest.spyOn(modalService, 'open')
|
||||
|
||||
let modal: NgbModalRef
|
||||
@@ -289,23 +293,41 @@ describe('GlobalSearchComponent', () => {
|
||||
expect(routerSpy).toHaveBeenCalledWith(['/view', object.id])
|
||||
|
||||
component.primaryAction(DataType.Correspondent, object)
|
||||
expect(qfSpy).toHaveBeenCalledWith([
|
||||
{ rule_type: FILTER_HAS_CORRESPONDENT_ANY, value: object.id.toString() },
|
||||
expect(routerSpy).toHaveBeenCalledWith([
|
||||
'/documents',
|
||||
queryParamsFromFilterRules([
|
||||
{
|
||||
rule_type: FILTER_HAS_CORRESPONDENT_ANY,
|
||||
value: object.id.toString(),
|
||||
},
|
||||
]),
|
||||
])
|
||||
|
||||
component.primaryAction(DataType.DocumentType, object)
|
||||
expect(qfSpy).toHaveBeenCalledWith([
|
||||
{ rule_type: FILTER_HAS_DOCUMENT_TYPE_ANY, value: object.id.toString() },
|
||||
expect(routerSpy).toHaveBeenCalledWith([
|
||||
'/documents',
|
||||
queryParamsFromFilterRules([
|
||||
{
|
||||
rule_type: FILTER_HAS_DOCUMENT_TYPE_ANY,
|
||||
value: object.id.toString(),
|
||||
},
|
||||
]),
|
||||
])
|
||||
|
||||
component.primaryAction(DataType.StoragePath, object)
|
||||
expect(qfSpy).toHaveBeenCalledWith([
|
||||
{ rule_type: FILTER_HAS_STORAGE_PATH_ANY, value: object.id.toString() },
|
||||
expect(routerSpy).toHaveBeenCalledWith([
|
||||
'/documents',
|
||||
queryParamsFromFilterRules([
|
||||
{ rule_type: FILTER_HAS_STORAGE_PATH_ANY, value: object.id.toString() },
|
||||
]),
|
||||
])
|
||||
|
||||
component.primaryAction(DataType.Tag, object)
|
||||
expect(qfSpy).toHaveBeenCalledWith([
|
||||
{ rule_type: FILTER_HAS_TAGS_ANY, value: object.id.toString() },
|
||||
expect(routerSpy).toHaveBeenCalledWith([
|
||||
'/documents',
|
||||
queryParamsFromFilterRules([
|
||||
{ rule_type: FILTER_HAS_TAGS_ANY, value: object.id.toString() },
|
||||
]),
|
||||
])
|
||||
|
||||
component.primaryAction(DataType.User, object)
|
||||
@@ -450,13 +472,6 @@ describe('GlobalSearchComponent', () => {
|
||||
expect(focusSpy).toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('should prevent event propagation for keyboard events on buttons that are not arrows', () => {
|
||||
const event = { stopImmediatePropagation: jest.fn(), key: 'Enter' }
|
||||
const stopPropagationSpy = jest.spyOn(event, 'stopImmediatePropagation')
|
||||
component.onButtonKeyDown(event as any)
|
||||
expect(stopPropagationSpy).toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('should support explicit advanced search', () => {
|
||||
const qfSpy = jest.spyOn(documentListViewService, 'quickFilter')
|
||||
component.query = 'test'
|
||||
@@ -465,4 +480,25 @@ describe('GlobalSearchComponent', () => {
|
||||
{ rule_type: FILTER_FULLTEXT_QUERY, value: 'test' },
|
||||
])
|
||||
})
|
||||
|
||||
it('should support open in new window', () => {
|
||||
const openSpy = jest.spyOn(window, 'open')
|
||||
const event = new Event('click')
|
||||
event['ctrlKey'] = true
|
||||
component.primaryAction(DataType.Document, { id: 2 }, event as any)
|
||||
expect(openSpy).toHaveBeenCalledWith('/documents/2', '_blank')
|
||||
|
||||
component.searchResults = searchResults as any
|
||||
component.resultsDropdown.open()
|
||||
fixture.detectChanges()
|
||||
|
||||
const button = component.primaryButtons.get(0).nativeElement
|
||||
const keyboardEvent = new KeyboardEvent('keydown', {
|
||||
key: 'Enter',
|
||||
ctrlKey: true,
|
||||
})
|
||||
const dispatchSpy = jest.spyOn(button, 'dispatchEvent')
|
||||
button.dispatchEvent(keyboardEvent)
|
||||
expect(dispatchSpy).toHaveBeenCalledTimes(2) // once for keydown, second for click
|
||||
})
|
||||
})
|
||||
|
Reference in New Issue
Block a user