Skip to content

Commit 05f7abe

Browse files
authored
Merge pull request #3703 from ilandikov/test/issue-3702
test: issue 3702
2 parents b0d93f7 + 4c22225 commit 05f7abe

File tree

3 files changed

+197
-4
lines changed

3 files changed

+197
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
<h2>Initial results:</h2>
2+
3+
<!--
4+
- [ ] parent 📅 2025-12-01
5+
- [ ] child 🆔 childID
6+
-->
7+
8+
<div>
9+
<div class="plugin-tasks-toolbar">
10+
<label test-icon="lucide-filter">
11+
<input placeholder="Filter by description..." test-tooltip="Filter results" />
12+
</label>
13+
<button test-icon="lucide-copy" test-tooltip="Copy results"></button>
14+
</div>
15+
<pre class="plugin-tasks-query-explanation">
16+
Explanation of this Tasks code block query:
17+
18+
No filters supplied. All tasks will match the query.
19+
</pre
20+
>
21+
<ul class="contains-task-list plugin-tasks-query-result tasks-layout-hide-urgency">
22+
<li
23+
class="task-list-item plugin-tasks-list-item"
24+
data-task-due="today"
25+
data-task-priority="normal"
26+
data-task=""
27+
data-line="0"
28+
data-task-status-name="Todo"
29+
data-task-status-type="TODO">
30+
<input class="task-list-item-checkbox" type="checkbox" data-line="0" />
31+
<span class="tasks-list-text">
32+
<span class="task-description"><span>parent</span></span>
33+
<span class="task-due" data-task-due="today" title="Click to edit due date, Right-click for more options">
34+
<span>📅 2025-12-01</span>
35+
</span>
36+
</span>
37+
<span class="task-extras">
38+
<span class="tasks-backlink">
39+
(
40+
<a rel="noopener" target="_blank" class="internal-link">/</a>
41+
)
42+
</span>
43+
<a class="tasks-edit" title="Edit task" href="#"></a>
44+
<a class="tasks-postpone" title="ℹ️ Due tomorrow, on Tue 2nd Dec (right-click for more options)"></a>
45+
</span>
46+
</li>
47+
<li
48+
class="task-list-item plugin-tasks-list-item"
49+
data-task-priority="normal"
50+
data-task=""
51+
data-line="1"
52+
data-task-status-name="Todo"
53+
data-task-status-type="TODO">
54+
<input class="task-list-item-checkbox" type="checkbox" data-line="1" />
55+
<span class="tasks-list-text">
56+
<span class="task-description"><span>child</span></span>
57+
<span class="task-id"><span>🆔 childID</span></span>
58+
</span>
59+
<span class="task-extras">
60+
<span class="tasks-backlink">
61+
(
62+
<a rel="noopener" target="_blank" class="internal-link">/</a>
63+
)
64+
</span>
65+
<a class="tasks-edit" title="Edit task" href="#"></a>
66+
</span>
67+
</li>
68+
</ul>
69+
<div class="task-count">2 tasks</div>
70+
</div>
71+
<h2>Check that due date is hidden by global query:</h2>
72+
73+
<!--
74+
- [ ] parent 📅 2025-12-01
75+
- [ ] child 🆔 childID
76+
-->
77+
78+
<div>
79+
<div class="plugin-tasks-toolbar">
80+
<label test-icon="lucide-filter">
81+
<input placeholder="Filter by description..." test-tooltip="Filter results" />
82+
</label>
83+
<button test-icon="lucide-copy" test-tooltip="Copy results"></button>
84+
</div>
85+
<pre class="plugin-tasks-query-explanation">
86+
Explanation of the global query:
87+
88+
No filters supplied. All tasks will match the query.
89+
90+
hide due date
91+
92+
Explanation of this Tasks code block query:
93+
94+
No filters supplied. All tasks will match the query.
95+
</pre
96+
>
97+
<ul class="contains-task-list plugin-tasks-query-result tasks-layout-hide-dueDate tasks-layout-hide-urgency">
98+
<li
99+
class="task-list-item plugin-tasks-list-item"
100+
data-task-due="today"
101+
data-task-priority="normal"
102+
data-task=""
103+
data-line="0"
104+
data-task-status-name="Todo"
105+
data-task-status-type="TODO">
106+
<input class="task-list-item-checkbox" type="checkbox" data-line="0" />
107+
<span class="tasks-list-text">
108+
<span class="task-description"><span>parent</span></span>
109+
<span class="task-due" data-task-due="today" title="Click to edit due date, Right-click for more options">
110+
<span>📅 2025-12-01</span>
111+
</span>
112+
</span>
113+
<span class="task-extras">
114+
<span class="tasks-backlink">
115+
(
116+
<a rel="noopener" target="_blank" class="internal-link">/</a>
117+
)
118+
</span>
119+
<a class="tasks-edit" title="Edit task" href="#"></a>
120+
<a class="tasks-postpone" title="ℹ️ Due tomorrow, on Tue 2nd Dec (right-click for more options)"></a>
121+
</span>
122+
</li>
123+
<li
124+
class="task-list-item plugin-tasks-list-item"
125+
data-task-priority="normal"
126+
data-task=""
127+
data-line="1"
128+
data-task-status-name="Todo"
129+
data-task-status-type="TODO">
130+
<input class="task-list-item-checkbox" type="checkbox" data-line="1" />
131+
<span class="tasks-list-text">
132+
<span class="task-description"><span>child</span></span>
133+
<span class="task-id"><span>🆔 childID</span></span>
134+
</span>
135+
<span class="task-extras">
136+
<span class="tasks-backlink">
137+
(
138+
<a rel="noopener" target="_blank" class="internal-link">/</a>
139+
)
140+
</span>
141+
<a class="tasks-edit" title="Edit task" href="#"></a>
142+
</span>
143+
</li>
144+
</ul>
145+
<div class="task-count">2 tasks</div>
146+
</div>

tests/Renderer/QueryResultsRenderer.test.ts

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,20 @@
33
*/
44
import moment from 'moment';
55
import type { Task } from 'Task/Task';
6+
import { GlobalQuery } from '../../src/Config/GlobalQuery';
67
import { resetSettings, updateSettings } from '../../src/Config/Settings';
78
import { State } from '../../src/Obsidian/Cache';
89
import { QueryResultsRenderer } from '../../src/Renderer/QueryResultsRenderer';
910
import { TasksFile } from '../../src/Scripting/TasksFile';
1011
import { mockApp } from '../__mocks__/obsidian';
11-
import { makeQueryRendererParameters, mockHTMLRenderer, verifyRenderedTasks } from './RenderingTestHelpers';
12+
import { verifyWithFileExtension } from '../TestingTools/ApprovalTestHelpers';
13+
import { TaskBuilder } from '../TestingTools/TaskBuilder';
14+
import {
15+
makeQueryRendererParameters,
16+
mockHTMLRenderer,
17+
tasksMarkdownAndPrettifiedHtml,
18+
verifyRenderedTasks,
19+
} from './RenderingTestHelpers';
1220

1321
window.moment = moment;
1422

@@ -83,3 +91,37 @@ describe('QueryResultsRenderer - responding to file edits', () => {
8391
expect(renderer.query.explainQuery()).toContain('group by DUE');
8492
});
8593
});
94+
95+
describe('QueryResultsRenderer - sequences', () => {
96+
const parent = new TaskBuilder().description('parent').dueDate('2025-12-01').build();
97+
const child = new TaskBuilder().description('child').indentation(' ').id('childID').parent(parent).build();
98+
const parentAndChild: Task[] = [parent, child];
99+
100+
it('global query change to task layout option', async () => {
101+
// see issue #3702
102+
const source = 'explain';
103+
const renderer = makeQueryResultsRenderer(source, new TasksFile('file.md'), parentAndChild);
104+
let output = '';
105+
106+
{
107+
const container = document.createElement('div');
108+
await renderer.render(State.Warm, parentAndChild, container);
109+
110+
const { tasksAsMarkdown, prettyHTML } = tasksMarkdownAndPrettifiedHtml(container, parentAndChild);
111+
output += '<h2>Initial results:</h2>\n\n' + tasksAsMarkdown + prettyHTML;
112+
}
113+
114+
GlobalQuery.getInstance().set('hide due date');
115+
renderer.rereadQueryFromFile();
116+
117+
{
118+
const container = document.createElement('div');
119+
await renderer.render(State.Warm, parentAndChild, container);
120+
121+
const { tasksAsMarkdown, prettyHTML } = tasksMarkdownAndPrettifiedHtml(container, parentAndChild);
122+
output += '<h2>Check that due date is hidden by global query:</h2>\n\n' + tasksAsMarkdown + prettyHTML;
123+
}
124+
125+
verifyWithFileExtension(output, 'html');
126+
});
127+
});

tests/Renderer/RenderingTestHelpers.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,16 @@ export async function renderMarkdown(source: string, tasks: Task[]) {
6060
};
6161
}
6262

63-
export function verifyRenderedTasks(container: HTMLDivElement, allTasks: Task[]): void {
64-
const taskAsMarkdown = `<!--
63+
export function tasksMarkdownAndPrettifiedHtml(container: HTMLDivElement, allTasks: Task[]) {
64+
const tasksAsMarkdown = `<!--
6565
${toMarkdown(allTasks)}
6666
-->\n\n`;
6767

6868
const prettyHTML = prettifyHTML(container.outerHTML);
69-
verifyWithFileExtension(taskAsMarkdown + prettyHTML, 'html');
69+
return { tasksAsMarkdown, prettyHTML };
70+
}
71+
72+
export function verifyRenderedTasks(container: HTMLDivElement, allTasks: Task[]): void {
73+
const { tasksAsMarkdown, prettyHTML } = tasksMarkdownAndPrettifiedHtml(container, allTasks);
74+
verifyWithFileExtension(tasksAsMarkdown + prettyHTML, 'html');
7075
}

0 commit comments

Comments
 (0)