Skip to content

Commit cafdc34

Browse files
authored
Merge pull request #3665 from ilandikov/test-better-renderer-coverage
test: better `QueryResultsRenderer` coverage
2 parents 2c6cb6b + 9280cd5 commit cafdc34

6 files changed

+173
-6
lines changed

src/Renderer/QueryResultsRenderer.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import type { IQuery } from '../IQuery';
66
import { QueryLayout } from '../Layout/QueryLayout';
77
import { TaskLayout } from '../Layout/TaskLayout';
88
import { PerformanceTracker } from '../lib/PerformanceTracker';
9-
import { explainResults, getQueryForQueryRenderer } from '../Query/QueryRendererHelper';
109
import { State } from '../Obsidian/Cache';
1110
import type { GroupDisplayHeading } from '../Query/Group/GroupDisplayHeading';
1211
import type { TaskGroups } from '../Query/Group/TaskGroups';
12+
import { explainResults, getQueryForQueryRenderer } from '../Query/QueryRendererHelper';
1313
import type { QueryResult } from '../Query/QueryResult';
1414
import type { TasksFile } from '../Scripting/TasksFile';
1515
import type { ListItem } from '../Task/ListItem';
@@ -215,11 +215,12 @@ export class QueryResultsRenderer {
215215
}
216216

217217
private renderErrorMessage(content: HTMLDivElement, errorMessage: string) {
218-
content.createDiv().innerHTML = '<pre>' + `Tasks query: ${errorMessage.replace(/\n/g, '<br>')}` + '</pre>';
218+
const container = createAndAppendElement('div', content);
219+
container.innerHTML = '<pre>' + `Tasks query: ${errorMessage.replace(/\n/g, '<br>')}` + '</pre>';
219220
}
220221

221222
private renderLoadingMessage(content: HTMLDivElement) {
222-
content.setText('Loading Tasks ...');
223+
content.textContent = 'Loading Tasks ...';
223224
}
224225

225226
// Use the 'explain' instruction to enable this
@@ -233,7 +234,7 @@ export class QueryResultsRenderer {
233234

234235
const explanationsBlock = createAndAppendElement('pre', content);
235236
explanationsBlock.classList.add('plugin-tasks-query-explanation');
236-
explanationsBlock.setText(explanationAsString);
237+
explanationsBlock.textContent = explanationAsString;
237238
content.appendChild(explanationsBlock);
238239
}
239240

@@ -490,6 +491,7 @@ export class QueryResultsRenderer {
490491
headerEl.classList.add('tasks-group-heading');
491492

492493
if (this.obsidianComponent === null) {
494+
headerEl.textContent = 'For test purposes: ' + group.displayName;
493495
return;
494496
}
495497
await this.renderMarkdown(
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<!--
2+
- [ ] Do exercises #todo #health 🆔 abcdef ⛔ 123456,abc123 🔼 🔁 every day when done 🏁 delete ➕ 2023-07-01 🛫 2023-07-02 ⏳ 2023-07-03 📅 2023-07-04 ❌ 2023-07-06 ✅ 2023-07-05 ^dcf64c
3+
-->
4+
5+
<div>
6+
<div>
7+
<pre>Tasks query: do not understand query<br>Problem line: "apple sauce"</pre>
8+
</div>
9+
</div>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<!--
2+
- [ ] Do exercises #todo #health 🆔 abcdef ⛔ 123456,abc123 🔼 🔁 every day when done 🏁 delete ➕ 2023-07-01 🛫 2023-07-02 ⏳ 2023-07-03 📅 2023-07-04 ❌ 2023-07-06 ✅ 2023-07-05 ^dcf64c
3+
-->
4+
5+
<div>
6+
<pre class="plugin-tasks-query-explanation">
7+
Explanation of this Tasks code block query:
8+
9+
scheduled 1970-01-01 =&gt;
10+
scheduled date is on 1970-01-01 (Thursday 1st January 1970)
11+
</pre
12+
>
13+
<button class="plugin-tasks-copy-button">Copy results</button>
14+
<ul class="contains-task-list plugin-tasks-query-result tasks-layout-hide-urgency"></ul>
15+
<div class="task-count">0 tasks</div>
16+
</div>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<!--
2+
- [ ] Do exercises #todo #health 🆔 abcdef ⛔ 123456,abc123 🔼 🔁 every day when done 🏁 delete ➕ 2023-07-01 🛫 2023-07-02 ⏳ 2023-07-03 📅 2023-07-04 ❌ 2023-07-06 ✅ 2023-07-05 ^dcf64c
3+
-->
4+
5+
<div>Loading Tasks ...</div>
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
<!--
2+
- [ ] parent task
3+
- [ ] grandchild task 1
4+
- [ ] grandchild task 2
5+
- [ ] grandchild task 3
6+
-->
7+
8+
<div>
9+
<button class="plugin-tasks-copy-button">Copy results</button>
10+
<h4 class="tasks-group-heading">For test purposes: 11</h4>
11+
<h5 class="tasks-group-heading">For test purposes: level2</h5>
12+
<h6 class="tasks-group-heading">For test purposes: level3</h6>
13+
<h6 class="tasks-group-heading">For test purposes: level4</h6>
14+
<ul
15+
class="contains-task-list plugin-tasks-query-result tasks-layout-hide-urgency"
16+
data-task-group-by="function,function,function,function">
17+
<li
18+
class="task-list-item plugin-tasks-list-item"
19+
data-task-priority="normal"
20+
data-task=""
21+
data-line="0"
22+
data-task-status-name="Todo"
23+
data-task-status-type="TODO">
24+
<input class="task-list-item-checkbox" type="checkbox" title="Right-click for options" data-line="0" />
25+
<span class="tasks-list-text">
26+
<span class="task-description"><span>parent task</span></span>
27+
</span>
28+
<span class="task-extras">
29+
<span class="tasks-backlink">
30+
(
31+
<a rel="noopener" target="_blank" class="internal-link">inheritance_task_2listitem_3task</a>
32+
)
33+
</span>
34+
<a class="tasks-edit" title="Edit task" href="#"></a>
35+
</span>
36+
</li>
37+
</ul>
38+
<h4 class="tasks-group-heading">For test purposes: 17</h4>
39+
<h5 class="tasks-group-heading">For test purposes: level2</h5>
40+
<h6 class="tasks-group-heading">For test purposes: level3</h6>
41+
<h6 class="tasks-group-heading">For test purposes: level4</h6>
42+
<ul
43+
class="contains-task-list plugin-tasks-query-result tasks-layout-hide-urgency"
44+
data-task-group-by="function,function,function,function">
45+
<li
46+
class="task-list-item plugin-tasks-list-item"
47+
data-task-priority="normal"
48+
data-task=""
49+
data-line="0"
50+
data-task-status-name="Todo"
51+
data-task-status-type="TODO">
52+
<input class="task-list-item-checkbox" type="checkbox" title="Right-click for options" data-line="0" />
53+
<span class="tasks-list-text">
54+
<span class="task-description"><span>grandchild task 1</span></span>
55+
</span>
56+
<span class="task-extras">
57+
<span class="tasks-backlink">
58+
(
59+
<a rel="noopener" target="_blank" class="internal-link">inheritance_task_2listitem_3task</a>
60+
)
61+
</span>
62+
<a class="tasks-edit" title="Edit task" href="#"></a>
63+
</span>
64+
</li>
65+
<li
66+
class="task-list-item plugin-tasks-list-item"
67+
data-task-priority="normal"
68+
data-task=""
69+
data-line="1"
70+
data-task-status-name="Todo"
71+
data-task-status-type="TODO">
72+
<input class="task-list-item-checkbox" type="checkbox" title="Right-click for options" data-line="1" />
73+
<span class="tasks-list-text">
74+
<span class="task-description"><span>grandchild task 2</span></span>
75+
</span>
76+
<span class="task-extras">
77+
<span class="tasks-backlink">
78+
(
79+
<a rel="noopener" target="_blank" class="internal-link">inheritance_task_2listitem_3task</a>
80+
)
81+
</span>
82+
<a class="tasks-edit" title="Edit task" href="#"></a>
83+
</span>
84+
</li>
85+
<li
86+
class="task-list-item plugin-tasks-list-item"
87+
data-task-priority="normal"
88+
data-task=""
89+
data-line="2"
90+
data-task-status-name="Todo"
91+
data-task-status-type="TODO">
92+
<input class="task-list-item-checkbox" type="checkbox" title="Right-click for options" data-line="2" />
93+
<span class="tasks-list-text">
94+
<span class="task-description"><span>grandchild task 3</span></span>
95+
</span>
96+
<span class="task-extras">
97+
<span class="tasks-backlink">
98+
(
99+
<a rel="noopener" target="_blank" class="internal-link">inheritance_task_2listitem_3task</a>
100+
)
101+
</span>
102+
<a class="tasks-edit" title="Edit task" href="#"></a>
103+
</span>
104+
</li>
105+
</ul>
106+
<div class="task-count">4 tasks</div>
107+
</div>

tests/Renderer/QueryResultsRenderer.test.ts

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ function makeQueryResultsRenderer(source: string, tasksFile: TasksFile) {
4242
}
4343

4444
describe('QueryResultsRenderer tests', () => {
45-
async function verifyRenderedTasksHTML(allTasks: Task[], source: string = '') {
45+
async function verifyRenderedTasksHTML(allTasks: Task[], source: string, state: State = State.Warm) {
4646
const renderer = makeQueryResultsRenderer(source, new TasksFile('query.md'));
4747
const queryRendererParameters = {
4848
allTasks,
@@ -53,7 +53,7 @@ describe('QueryResultsRenderer tests', () => {
5353
};
5454
const container = document.createElement('div');
5555

56-
await renderer.render(State.Warm, allTasks, container, queryRendererParameters);
56+
await renderer.render(state, allTasks, container, queryRendererParameters);
5757

5858
const taskAsMarkdown = `<!--
5959
${toMarkdown(allTasks)}
@@ -63,6 +63,21 @@ ${toMarkdown(allTasks)}
6363
verifyWithFileExtension(taskAsMarkdown + prettyHTML, 'html');
6464
}
6565

66+
it('loading message', async () => {
67+
const allTasks = [TaskBuilder.createFullyPopulatedTask()];
68+
await verifyRenderedTasksHTML(allTasks, 'show urgency', State.Initializing);
69+
});
70+
71+
it('error message', async () => {
72+
const allTasks = [TaskBuilder.createFullyPopulatedTask()];
73+
await verifyRenderedTasksHTML(allTasks, 'apple sauce');
74+
});
75+
76+
it('explain', async () => {
77+
const allTasks = [TaskBuilder.createFullyPopulatedTask()];
78+
await verifyRenderedTasksHTML(allTasks, 'scheduled 1970-01-01\nexplain');
79+
});
80+
6681
it('fully populated task', async () => {
6782
const allTasks = [TaskBuilder.createFullyPopulatedTask()];
6883
await verifyRenderedTasksHTML(allTasks, 'show urgency');
@@ -102,6 +117,19 @@ ${toMarkdown(allTasks)}
102117
const allTasks = readTasksFromSimulatedFile('inheritance_non_task_child');
103118
await verifyRenderedTasksHTML(allTasks, showTree);
104119
});
120+
121+
it('should render four group headings', async () => {
122+
const allTasks = readTasksFromSimulatedFile('inheritance_task_2listitem_3task');
123+
await verifyRenderedTasksHTML(
124+
allTasks,
125+
`
126+
group by function task.description.length
127+
group by function 'level2'
128+
group by function 'level3'
129+
group by function 'level4'
130+
`,
131+
);
132+
});
105133
});
106134

107135
describe('QueryResultsRenderer - responding to file edits', () => {

0 commit comments

Comments
 (0)