diff --git a/tests/test_dom_patchers.mjs b/tests/test_dom_patchers.mjs index 3f67e7b..b329c85 100644 --- a/tests/test_dom_patchers.mjs +++ b/tests/test_dom_patchers.mjs @@ -60,6 +60,7 @@ const patchLocalMatchesContainer = eval(`(${extractMethod(resolveDownloadMethods const resolveUrnAsync = eval(`(${extractMethod(resolveDownloadMethodsSource, 'resolveUrnAsync')})`); const fetchUrnLocalMatches = eval(`(${extractMethod(searchPanelMethodsSource, 'fetchUrnLocalMatches')})`); const scheduleSearchUiRefresh = eval(`(${extractMethod(searchPanelMethodsSource, 'scheduleSearchUiRefresh')})`); +const wireLocalMatchButtons = eval(`(${extractMethod(searchPanelMethodsSource, 'wireLocalMatchButtons')})`); const patchQueuedSelections = eval(`(${extractMethod(queueMethodsSource, 'patchQueuedSelections')})`); const patchDownloadsPanelElement = eval(`(${extractMethod(queueMethodsSource, 'patchDownloadsPanelElement')})`); const patchLoadedModelsProgress = eval(`(${extractMethod(renderFormatMethodsSource, 'patchLoadedModelsProgress')})`); @@ -253,15 +254,54 @@ test('search download button wiring remains idempotent on the same node', () => const window = new Window(); const dialog = createDialog(window); const container = window.document.createElement('div'); - container.innerHTML = ''; + container.innerHTML = ` + + + `; let calls = 0; + let details = null; dialog.downloadFromSearch = () => { calls += 1; }; + dialog.showSourceModelDetails = model => { details = model; }; dialog.wireSearchDownloadButtons(container, {}); dialog.wireSearchDownloadButtons(container, {}); container.querySelector('.search-download-btn').click(); + container.querySelector('.search-show-details-btn').click(); assert.equal(calls, 1); + assert.deepEqual(details, { name: 'Example' }); +}); + +test('local match action delegation remains idempotent across keyed rows', () => { + const window = new Window(); + const container = window.document.createElement('div'); + container.innerHTML = ` +