Skip to content

Commit 7ff7703

Browse files
authored
Fix: Environment table toggle bug (#693)
1 parent 27208bb commit 7ff7703

File tree

9 files changed

+55
-36
lines changed

9 files changed

+55
-36
lines changed

docs/user_guide.rst

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,19 +61,23 @@ To modify the *Environment* section **before** tests are run, use :code:`pytest_
6161

6262
.. code-block:: python
6363
64+
from pytest_metadata.plugin import metadata_key
65+
66+
6467
def pytest_configure(config):
65-
config._metadata["foo"] = "bar"
68+
config.stash[metadata_key]["foo"] = "bar"
6669
6770
To modify the *Environment* section **after** tests are run, use :code:`pytest_sessionfinish`:
6871

6972
.. code-block:: python
7073
7174
import pytest
75+
from pytest_metadata.plugin import metadata_key
7276
7377
7478
@pytest.hookimpl(tryfirst=True)
7579
def pytest_sessionfinish(session, exitstatus):
76-
session.config._metadata["foo"] = "bar"
80+
session.config.stash[metadata_key]["foo"] = "bar"
7781
7882
Note that in the above example `@pytest.hookimpl(tryfirst=True)`_ is important, as this ensures that a best effort attempt is made to run your
7983
:code:`pytest_sessionfinish` **before** any other plugins ( including :code:`pytest-html` and :code:`pytest-metadata` ) run theirs.
@@ -282,7 +286,10 @@ The following values may be passed:
282286
Results Table Sorting
283287
~~~~~~~~~~~~~~~~~~~~~
284288

285-
You can change the sort order of the results table on page load by passing the :code:`sort` query parameter.
289+
You can change which column the results table is sorted on, on page load by passing the :code:`sort` query parameter.
290+
291+
You can also set the initial sorting by setting :code:`initial_sort` in a configuration file (pytest.ini, setup.cfg, etc).
292+
Note that the query parameter takes precedence.
286293

287294
The following values may be passed:
288295

src/pytest_html/scripts/datamanager.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@ const { getCollapsedCategory } = require('./storage.js')
33
class DataManager {
44
setManager(data) {
55
const collapsedCategories = [...getCollapsedCategory(data.renderCollapsed)]
6-
const dataBlob = { ...data, tests: Object.values(data.tests).flat().map((test, index) => ({
7-
...test,
8-
id: `test_${index}`,
9-
collapsed: collapsedCategories.includes(test.result.toLowerCase()),
10-
})) }
6+
const tests = Object.values(data.tests).flat().map((test, index) => {
7+
const collapsed = collapsedCategories.includes(test.result.toLowerCase())
8+
return {
9+
...test,
10+
id: `test_${index}`,
11+
collapsed,
12+
}
13+
})
14+
const dataBlob = { ...data, tests }
1115
this.data = { ...dataBlob }
1216
this.renderData = { ...dataBlob }
1317
}

src/pytest_html/scripts/dom.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ const dom = {
9393
resultBody.querySelector('.extraHTML').insertAdjacentHTML('beforeend', `<div>${content}</div>`)
9494
}
9595
})
96-
mediaViewer.setUp(resultBody, media)
96+
mediaViewer.setup(resultBody, media)
9797

9898
// Add custom html from the pytest_html_results_table_html hook
9999
tableHtml?.forEach((item) => {
@@ -104,7 +104,9 @@ const dom = {
104104
},
105105
}
106106

107-
exports.dom = dom
108-
exports.htmlToElements = htmlToElements
109-
exports.find = find
110-
exports.findAll = findAll
107+
module.exports = {
108+
dom,
109+
htmlToElements,
110+
find,
111+
findAll,
112+
}

src/pytest_html/scripts/filter.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,8 @@ const doFilter = (type, show) => {
1818
}
1919

2020
const currentFilter = storageModule.getVisible()
21-
22-
if (currentFilter.length) {
23-
const filteredSubset = getFilteredSubSet(currentFilter)
24-
manager.setRender(filteredSubset)
25-
} else {
26-
manager.resetRender()
27-
}
21+
const filteredSubset = getFilteredSubSet(currentFilter)
22+
manager.setRender(filteredSubset)
2823
}
2924

3025
module.exports = {

src/pytest_html/scripts/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { redraw, bindEvents } = require('./main.js')
1+
const { redraw, bindEvents, renderStatic } = require('./main.js')
22
const { doInitFilter } = require('./filter.js')
33
const { doInitSort } = require('./sort.js')
44
const { manager } = require('./datamanager.js')
@@ -8,6 +8,7 @@ function init() {
88
manager.setManager(data)
99
doInitFilter()
1010
doInitSort()
11+
renderStatic()
1112
redraw()
1213
bindEvents()
1314
}

src/pytest_html/scripts/main.js

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,6 @@ const renderStatic = () => {
2222
const table = document.querySelector('#environment')
2323
removeChildren(table)
2424
rows.forEach((row) => table.appendChild(row))
25-
26-
const header = document.querySelector('#environment-header')
27-
header.addEventListener('click', () => {
28-
table.classList.toggle('hidden')
29-
header.classList.toggle('collapser')
30-
header.classList.toggle('expander')
31-
})
3225
}
3326
renderTitle()
3427
renderEnvironmentTable()
@@ -59,6 +52,7 @@ const renderContent = (tests) => {
5952
redraw()
6053
})
6154
})
55+
6256
findAll('.collapsible td:not(.col-links').forEach((elem) => {
6357
elem.addEventListener('click', ({ target }) => {
6458
manager.toggleCollapsedItem(target.parentElement.dataset.id)
@@ -103,8 +97,16 @@ const bindEvents = () => {
10397
doFilter(testResult, element.checked)
10498
redraw()
10599
}
100+
101+
const header = document.querySelector('#environment-header')
102+
header.addEventListener('click', () => {
103+
const table = document.querySelector('#environment')
104+
table.classList.toggle('hidden')
105+
header.classList.toggle('collapser')
106+
header.classList.toggle('expander')
107+
})
108+
106109
findAll('input[name="filter_checkbox"]').forEach((elem) => {
107-
elem.removeEventListener('click', filterColumn)
108110
elem.addEventListener('click', filterColumn)
109111
})
110112
document.querySelector('#show_all_details').addEventListener('click', () => {
@@ -120,10 +122,12 @@ const bindEvents = () => {
120122
const redraw = () => {
121123
const { testSubset, allTests, collectedItems, isFinished, formattedDuration } = manager
122124

123-
renderStatic()
124125
renderContent(testSubset)
125126
renderDerived(allTests, collectedItems, isFinished, formattedDuration )
126127
}
127128

128-
exports.redraw = redraw
129-
exports.bindEvents = bindEvents
129+
module.exports = {
130+
redraw,
131+
bindEvents,
132+
renderStatic,
133+
}

src/pytest_html/scripts/mediaviewer.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class MediaViewer {
2121
}
2222

2323

24-
const setUp = (resultBody, assets) => {
24+
const setup = (resultBody, assets) => {
2525
if (!assets.length) {
2626
resultBody.querySelector('.media').classList.add('hidden')
2727
return
@@ -71,4 +71,6 @@ const setUp = (resultBody, assets) => {
7171
imageEl.addEventListener('click', openImg)
7272
}
7373

74-
exports.setUp = setUp
74+
module.exports = {
75+
setup,
76+
}

src/pytest_html/scripts/sort.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,5 +78,7 @@ const doSort = (type) => {
7878
manager.setRender(sortedList)
7979
}
8080

81-
exports.doSort = doSort
82-
exports.doInitSort = doInitSort
81+
module.exports = {
82+
doInitSort,
83+
doSort,
84+
}

src/pytest_html/scripts/storage.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const showCategory = (categoryToShow) => {
3737
noFilter ? url.searchParams.delete('visible') : url.searchParams.set('visible', settings.join(','))
3838
history.pushState({}, null, unescape(url.href))
3939
}
40+
4041
const setFilter = (currentFilter) => {
4142
if (!possibleFilters.includes(currentFilter)) {
4243
return
@@ -56,6 +57,7 @@ const getSort = (initialSort) => {
5657
}
5758
return sort
5859
}
60+
5961
const setSort = (type) => {
6062
const url = new URL(window.location.href)
6163
url.searchParams.set('sort', type)

0 commit comments

Comments
 (0)