diff --git a/src/pytest_html/basereport.py b/src/pytest_html/basereport.py index 4d1700f4..e5e61591 100644 --- a/src/pytest_html/basereport.py +++ b/src/pytest_html/basereport.py @@ -77,7 +77,9 @@ def __init__(self, title, config): collapsed = config.getini("render_collapsed") if collapsed: - self.set_data("collapsed", collapsed.split(",")) + self.set_data( + "collapsed", [outcome.lower() for outcome in collapsed.split(",")] + ) @property def title(self): diff --git a/src/pytest_html/scripts/storage.js b/src/pytest_html/scripts/storage.js index 7033ee48..5af8171a 100644 --- a/src/pytest_html/scripts/storage.js +++ b/src/pytest_html/scripts/storage.js @@ -64,17 +64,17 @@ const getCollapsedCategory = (config) => { const url = new URL(window.location.href) const collapsedItems = new URLSearchParams(url.search).get('collapsed') switch (true) { - case collapsedItems === null: - categories = config || ['passed']; + case !config && collapsedItems === null: + categories = ['passed']; break; case collapsedItems?.length === 0 || /^["']{2}$/.test(collapsedItems): categories = []; break; - case /^all$/.test(collapsedItems): + case /^all$/.test(collapsedItems) || (collapsedItems === null && /^all$/.test(config)): categories = [...possibleFilters]; break; default: - categories = collapsedItems?.split(',').map(item => item.toLowerCase()) || []; + categories = collapsedItems?.split(',').map(item => item.toLowerCase()) || config; break; } } else { diff --git a/testing/test_integration.py b/testing/test_integration.py index b94b70ee..079f738b 100644 --- a/testing/test_integration.py +++ b/testing/test_integration.py @@ -727,11 +727,12 @@ def test_falsy(self, pytester, test_file, param): assert_that(is_collapsed(page, "test_fail")).is_false() assert_that(is_collapsed(page, "test_error::setup")).is_false() - def test_render_collapsed(self, pytester, test_file): + @pytest.mark.parametrize("param", ["failed,error", "FAILED,eRRoR"]) + def test_render_collapsed(self, pytester, test_file, param): pytester.makeini( - """ + f""" [pytest] - render_collapsed = failed,error + render_collapsed = {param} """ ) pytester.makepyfile(test_file) diff --git a/testing/unittest.js b/testing/unittest.js index 0b23171f..17d6543d 100644 --- a/testing/unittest.js +++ b/testing/unittest.js @@ -195,16 +195,29 @@ describe('Storage tests', () => { expect(collapsedItems).to.eql(['failed', 'error', 'passed']) }) - it('handles python config', () => { - mockWindow() - const collapsedItems = storageModule.getCollapsedCategory(['failed', 'error']) - expect(collapsedItems).to.eql(['failed', 'error']) + const config = [ + { value: ['failed', 'error'], expected: ['failed', 'error'] }, + { value: ['all'], expected: storageModule.possibleFilters } + ] + config.forEach(({value, expected}) => { + it(`handles python config: ${value}`, () => { + mockWindow() + const collapsedItems = storageModule.getCollapsedCategory(value) + expect(collapsedItems).to.eql(expected) + }) }) - it('handles python config precedence', () => { - mockWindow('collapsed=xpassed,xfailed') - const collapsedItems = storageModule.getCollapsedCategory(['failed', 'error']) - expect(collapsedItems).to.eql(['xpassed', 'xfailed']) + const precedence = [ + {query: 'collapsed=xpassed,xfailed', config: ['failed', 'error'], expected: ['xpassed', 'xfailed']}, + {query: 'collapsed=all', config: ['failed', 'error'], expected: storageModule.possibleFilters}, + {query: 'collapsed=xpassed,xfailed', config: ['all'], expected: ['xpassed', 'xfailed']}, + ] + precedence.forEach(({query, config, expected}, index) => { + it(`handles python config precedence ${index + 1}`, () => { + mockWindow(query) + const collapsedItems = storageModule.getCollapsedCategory(config) + expect(collapsedItems).to.eql(expected) + }) }) const falsy = [