diff --git a/last_commit.txt b/last_commit.txt index 64620376fd..df389a5f2b 100644 --- a/last_commit.txt +++ b/last_commit.txt @@ -1,66 +1,54 @@ -Repository: plone.z3cform +Repository: plone.app.event Branch: refs/heads/master -Date: 2023-06-24T15:57:26+02:00 -Author: Gil Forcada Codinachs (gforcada) -Commit: https://github.com/plone/plone.z3cform/commit/99f72ef672f96590584ea87db4c2d3f976453039 +Date: 2023-09-01T18:50:34+02:00 +Author: Maurits van Rees (mauritsvanrees) +Commit: https://github.com/plone/plone.app.event/commit/ac473afa69a7c6504f389dab01154a72b5b77b73 -Configuring with plone/meta +Fix test_long_event when run around midnight of the first day of the month. + +Fixes https://github.com/plone/plone.app.event/issues/334. Files changed: -A .editorconfig -A .flake8 -A .github/workflows/meta.yml -A .meta.toml -A .pre-commit-config.yaml -A news/cfffba8c.internal -M .gitignore -M pyproject.toml -M tox.ini +A news/334.tests +M plone/app/event/tests/test_portlet_calendar.py -b'diff --git a/.editorconfig b/.editorconfig\nnew file mode 100644\nindex 0000000..919b411\n--- /dev/null\n+++ b/.editorconfig\n@@ -0,0 +1,53 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+#\n+# EditorConfig Configuration file, for more details see:\n+# http://EditorConfig.org\n+# EditorConfig is a convention description, that could be interpreted\n+# by multiple editors to enforce common coding conventions for specific\n+# file types\n+\n+# top-most EditorConfig file:\n+# Will ignore other EditorConfig files in Home directory or upper tree level.\n+root = true\n+\n+\n+[*] # For All Files\n+# Unix-style newlines with a newline ending every file\n+end_of_line = lf\n+insert_final_newline = true\n+trim_trailing_whitespace = true\n+# Set default charset\n+charset = utf-8\n+# Indent style default\n+indent_style = space\n+# Max Line Length - a hard line wrap, should be disabled\n+max_line_length = off\n+\n+[*.{py,cfg,ini}]\n+# 4 space indentation\n+indent_size = 4\n+\n+[*.{yml,zpt,pt,dtml,zcml}]\n+# 2 space indentation\n+indent_size = 2\n+\n+[*.{json,jsonl,js,jsx,ts,tsx,css,less,scss,html}] # Frontend development\n+# 2 space indentation\n+indent_size = 2\n+\n+[{Makefile,.gitmodules}]\n+# Tab indentation (no size specified, but view as 4 spaces)\n+indent_style = tab\n+indent_size = unset\n+tab_width = unset\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [editorconfig]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.flake8 b/.flake8\nnew file mode 100644\nindex 0000000..7ef4f64\n--- /dev/null\n+++ b/.flake8\n@@ -0,0 +1,22 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+[flake8]\n+doctests = 1\n+ignore =\n+ # black takes care of line length\n+ E501,\n+ # black takes care of where to break lines\n+ W503,\n+ # black takes care of spaces within slicing (list[:])\n+ E203,\n+ # black takes care of spaces after commas\n+ E231,\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [flake8]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.github/workflows/meta.yml b/.github/workflows/meta.yml\nnew file mode 100644\nindex 0000000..a7f25e0\n--- /dev/null\n+++ b/.github/workflows/meta.yml\n@@ -0,0 +1,28 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+name: Meta\n+on:\n+ push:\n+ branches:\n+ - master\n+ - main\n+ pull_request:\n+ branches:\n+ - master\n+ - main\n+ workflow_dispatch:\n+\n+jobs:\n+ qa:\n+ uses: plone/meta/.github/workflows/qa.yml@main\n+ test:\n+ uses: plone/meta/.github/workflows/test.yml@main\n+ coverage:\n+ uses: plone/meta/.github/workflows/coverage.yml@main\n+ dependencies:\n+ uses: plone/meta/.github/workflows/dependencies.yml@main\n+ release-ready:\n+ uses: plone/meta/.github/workflows/release_ready.yml@main\n+ circular:\n+ uses: plone/meta/.github/workflows/circular.yml@main\ndiff --git a/.gitignore b/.gitignore\nindex 9bd0d6e..81594fd 100644\n--- a/.gitignore\n+++ b/.gitignore\n@@ -1,17 +1,51 @@\n-bin\n-build\n-develop-eggs\n-dist\n-lib\n-include\n-man\n-parts\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+# python related\n *.egg-info\n-__pycache__\n-.*\n-*.dll\n *.pyc\n *.pyo\n-*.so\n-!.gitattributes\n-*.mo\n+\n+# tools related\n+build/\n+.coverage\n+coverage.xml\n+dist/\n+docs/_build\n+__pycache__/\n+.tox\n+.vscode/\n+node_modules/\n+\n+# venv / buildout related\n+bin/\n+develop-eggs/\n+eggs/\n+.eggs/\n+etc/\n+.installed.cfg\n+include/\n+lib/\n+lib64\n+.mr.developer.cfg\n+parts/\n+pyvenv.cfg\n+var/\n+\n+# mxdev\n+/instance/\n+/.make-sentinels/\n+/*-mxdev.txt\n+/reports/\n+/sources/\n+/venv/\n+.installed.txt\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [gitignore]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.meta.toml b/.meta.toml\nnew file mode 100644\nindex 0000000..cf12c85\n--- /dev/null\n+++ b/.meta.toml\n@@ -0,0 +1,12 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+[meta]\n+template = "default"\n+commit-id = "cfffba8c"\n+\n+[pyproject]\n+check_manifest_ignores = """\n+ "*.cfg",\n+"""\n+codespell_ignores = "fo,"\ndiff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml\nnew file mode 100644\nindex 0000000..7de9fd7\n--- /dev/null\n+++ b/.pre-commit-config.yaml\n@@ -0,0 +1,84 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+ci:\n+ autofix_prs: false\n+ autoupdate_schedule: monthly\n+\n+repos:\n+- repo: https://github.com/asottile/pyupgrade\n+ rev: v3.4.0\n+ hooks:\n+ - id: pyupgrade\n+ args: [--py38-plus]\n+- repo: https://github.com/pycqa/isort\n+ rev: 5.12.0\n+ hooks:\n+ - id: isort\n+- repo: https://github.com/psf/black\n+ rev: 23.3.0\n+ hooks:\n+ - id: black\n+- repo: https://github.com/collective/zpretty\n+ rev: 3.1.0a2\n+ hooks:\n+ - id: zpretty\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# zpretty_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n+- repo: https://github.com/PyCQA/flake8\n+ rev: 6.0.0\n+ hooks:\n+ - id: flake8\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# flake8_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n+- repo: https://github.com/codespell-project/codespell\n+ rev: v2.2.4\n+ hooks:\n+ - id: codespell\n+ additional_dependencies:\n+ - tomli\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# codespell_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n+- repo: https://github.com/mgedmin/check-manifest\n+ rev: "0.49"\n+ hooks:\n+ - id: check-manifest\n+- repo: https://github.com/regebro/pyroma\n+ rev: "4.2"\n+ hooks:\n+ - id: pyroma\n+- repo: https://github.com/mgedmin/check-python-versions\n+ rev: "0.21.2"\n+ hooks:\n+ - id: check-python-versions\n+ args: [\'--only\', \'setup.py,pyproject.toml\']\n+- repo: https://github.com/collective/i18ndude\n+ rev: "6.0.0"\n+ hooks:\n+ - id: i18ndude\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/news/cfffba8c.internal b/news/cfffba8c.internal\nnew file mode 100644\nindex 0000000..c08f539\n--- /dev/null\n+++ b/news/cfffba8c.internal\n@@ -0,0 +1,2 @@\n+Update configuration files.\n+[plone devs]\ndiff --git a/pyproject.toml b/pyproject.toml\nindex ebe12d5..eb8b561 100644\n--- a/pyproject.toml\n+++ b/pyproject.toml\n@@ -1,8 +1,9 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n [tool.towncrier]\n-filename = "CHANGES.rst"\n directory = "news/"\n+filename = "CHANGES.rst"\n title_format = "{version} ({project_date})"\n underlines = ["-", ""]\n \n@@ -36,32 +37,122 @@ directory = "tests"\n name = "Tests"\n showcontent = true\n \n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# towncrier_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n [tool.isort]\n profile = "plone"\n \n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# isort_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n [tool.black]\n target-version = ["py38"]\n \n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# black_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n+[tool.codespell]\n+ignore-words-list = "discreet,fo,"\n+skip = "*.po,"\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# codespell_ignores = "foo,bar"\n+# codespell_skip = "*.po,*.map,package-lock.json"\n+##\n+\n [tool.dependencychecker]\n Zope = [\n # Zope own provided namespaces\n \'App\', \'OFS\', \'Products.Five\', \'Products.OFSP\', \'Products.PageTemplates\',\n \'Products.SiteAccess\', \'Shared\', \'Testing\', \'ZPublisher\', \'ZTUtils\',\n \'Zope2\', \'webdav\', \'zmi\',\n+ # ExtensionClass own provided namespaces\n+ \'ExtensionClass\', \'ComputedAttribute\', \'MethodObject\',\n # Zope dependencies\n- \'Acquisition\', \'DateTime\', \'transaction\', \'zExceptions\', \'ZODB\', \'zope.component\',\n- \'zope.configuration\', \'zope.container\', \'zope.deferredimport\', \'zope.event\',\n- \'zope.exceptions\', \'zope.globalrequest\', \'zope.i18n\', \'zope.i18nmessageid\',\n- \'zope.interface\', \'zope.lifecycleevent\', \'zope.location\', \'zope.publisher\',\n- \'zope.schema\', \'zope.security\', \'zope.site\', \'zope.traversing\', \'AccessControl\',\n+ \'AccessControl\', \'Acquisition\', \'AuthEncoding\', \'beautifulsoup4\', \'BTrees\',\n+ \'cffi\', \'Chameleon\', \'DateTime\', \'DocumentTemplate\',\n+ \'MultiMapping\', \'multipart\', \'PasteDeploy\', \'Persistence\', \'persistent\',\n+ \'pycparser\', \'python-gettext\', \'pytz\', \'RestrictedPython\', \'roman\',\n+ \'soupsieve\', \'transaction\', \'waitress\', \'WebOb\', \'WebTest\', \'WSGIProxy2\',\n+ \'z3c.pt\', \'zc.lockfile\', \'ZConfig\', \'zExceptions\', \'ZODB\', \'zodbpickle\',\n+ \'zope.annotation\', \'zope.browser\', \'zope.browsermenu\', \'zope.browserpage\',\n+ \'zope.browserresource\', \'zope.cachedescriptors\', \'zope.component\',\n+ \'zope.configuration\', \'zope.container\', \'zope.contentprovider\',\n+ \'zope.contenttype\', \'zope.datetime\', \'zope.deferredimport\',\n+ \'zope.deprecation\', \'zope.dottedname\', \'zope.event\', \'zope.exceptions\',\n+ \'zope.filerepresentation\', \'zope.globalrequest\', \'zope.hookable\',\n+ \'zope.i18n\', \'zope.i18nmessageid\', \'zope.interface\', \'zope.lifecycleevent\',\n+ \'zope.location\', \'zope.pagetemplate\', \'zope.processlifetime\', \'zope.proxy\',\n+ \'zope.ptresource\', \'zope.publisher\', \'zope.schema\', \'zope.security\',\n+ \'zope.sequencesort\', \'zope.site\', \'zope.size\', \'zope.structuredtext\',\n+ \'zope.tal\', \'zope.tales\', \'zope.testbrowser\', \'zope.testing\',\n+ \'zope.traversing\', \'zope.viewlet\'\n+]\n+\'Products.CMFCore\' = [\n+ \'docutils\', \'five.localsitemanager\', \'Missing\', \'Products.BTreeFolder2\',\n+ \'Products.GenericSetup\', \'Products.MailHost\', \'Products.PythonScripts\',\n+ \'Products.StandardCacheManagers\', \'Products.ZCatalog\', \'Record\',\n+ \'zope.sendmail\', \'Zope\'\n ]\n \'plone.base\' = [\n- \'AccessControl\', \'Products.BTreeFolder2\', \'Products.CMFCore\',\n- \'Products.CMFDynamicViewFTI\', \'zope.deprecation\',\n+ \'plone.batching\', \'plone.registry\', \'plone.schema\',\'plone.z3cform\',\n+ \'Products.CMFCore\', \'Products.CMFDynamicViewFTI\',\n ]\n python-dateutil = [\'dateutil\']\n-ignore-packages = [\'five.pt\']\n \n-[tool.codespell]\n-skip = "*.po"\n-ignore-words-list = "fo"\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# dependencies_ignores = "[\'zestreleaser.towncrier\']"\n+# dependencies_mappings = [\n+# "gitpython = [\'git\']",\n+# "pygithub = [\'github\']",\n+# ]\n+# """\n+##\n+\n+[tool.check-manifest]\n+ignore = [\n+ ".editorconfig",\n+ ".meta.toml",\n+ ".pre-commit-config.yaml",\n+ "tox.ini",\n+ ".flake8",\n+ "mx.ini",\n+ "*.cfg",\n+\n+]\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# check_manifest_ignores = """\n+# "*.map.js",\n+# "*.pyc",\n+# """\n+##\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/tox.ini b/tox.ini\nindex 2aec6e6..85aeefd 100644\n--- a/tox.ini\n+++ b/tox.ini\n@@ -1,14 +1,36 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n [tox]\n+# We need 4.4.0 for constrain_package_deps.\n+min_version = 4.4.0\n envlist =\n- format\n lint\n test\n+ dependencies\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# envlist_lines = """\n+# my_other_environment\n+# """\n+# config_lines = """\n+# my_extra_top_level_tox_configuration_lines\n+# """\n+##\n \n [testenv]\n+skip_install = true\n allowlist_externals =\n- sh\n+ echo\n+ false\n+# Make sure typos like `tox -e formaat` are caught instead of silently doing nothing.\n+# See https://github.com/tox-dev/tox/issues/2858.\n+commands =\n+ echo "Unrecognized environment name {envname}"\n+ false\n \n [testenv:format]\n description = automatically reformat code\n@@ -30,21 +52,138 @@ commands =\n pre-commit run -a\n \n [testenv:dependencies]\n-description = check if the package defines all its dependencies and generate a graph out of them\n+description = check if the package defines all its dependencies\n+skip_install = true\n deps =\n+ build\n z3c.dependencychecker==2.11\n+commands =\n+ python -m build --sdist --no-isolation\n+ dependencychecker\n+\n+[testenv:dependencies-graph]\n+description = generate a graph out of the dependencies of the package\n+skip_install = false\n+allowlist_externals =\n+ sh\n+deps =\n pipdeptree==2.5.1\n graphviz # optional dependency of pipdeptree\n commands =\n- dependencychecker\n- sh -c \'pipdeptree --exclude setuptools,pipdeptree,wheel,pipdeptree,z3c.dependencychecker,zope.interface,zope.component --graph-output svg > dependencies.svg\'\n+ sh -c \'pipdeptree --exclude setuptools,wheel,pipdeptree,zope.interface,zope.component --graph-output svg > dependencies.svg\'\n \n [testenv:test]\n-usedevelop = true\n+description = run the distribution tests\n+use_develop = true\n+skip_install = false\n+constrain_package_deps = true\n+set_env =\n+ ROBOT_BROWSER=headlesschrome\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n+deps =\n+ zope.testrunner\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+##\n+# Specify a custom constraints file in .meta.toml:\n+# [tox]\n+# constraints_file = "https://my-server.com/constraints.txt"\n+##\n+commands =\n+ zope-testrunner --all --test-path={toxinidir}/src -s plone.z3cform {posargs}\n+extras =\n+ test\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# test_extras = """\n+# tests\n+# widgets\n+# """\n+##\n+\n+[testenv:coverage]\n+description = get a test coverage report\n+use_develop = true\n+skip_install = false\n+constrain_package_deps = true\n+set_env =\n+ ROBOT_BROWSER=headlesschrome\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n deps =\n+ coverage\n zope.testrunner\n -c https://dist.plone.org/release/6.0-dev/constraints.txt\n commands =\n- zope-testrunner --test-path={toxinidir}/src -s plone.z3cform\n+ coverage run --branch --source plone.z3cform {envbindir}/zope-testrunner --quiet --all --test-path={toxinidir}/src -s plone.z3cform {posargs}\n+ coverage report -m --format markdown\n+ coverage xml\n extras =\n test\n+\n+\n+[testenv:release-check]\n+description = ensure that the distribution is ready to release\n+skip_install = true\n+deps =\n+ twine\n+ build\n+ towncrier\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+commands =\n+ # fake version to not have to install the package\n+ # we build the change log as news entries might break\n+ # the README that is displayed on PyPI\n+ towncrier build --version=100.0.0 --yes\n+ python -m build --sdist --no-isolation\n+ twine check dist/*\n+\n+[testenv:circular]\n+description = ensure there are no cyclic dependencies\n+use_develop = true\n+skip_install = false\n+set_env =\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n+allowlist_externals =\n+ sh\n+deps =\n+ pipdeptree\n+ pipforester\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+commands =\n+ # Generate the full dependency tree\n+ sh -c \'pipdeptree -j > forest.json\'\n+ # Generate a DOT graph with the circular dependencies, if any\n+ pipforester -i forest.json -o forest.dot --cycles\n+ # Report if there are any circular dependencies, i.e. error if there are any\n+ pipforester -i forest.json --check-cycles -o /dev/null\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n' +b'diff --git a/news/334.tests b/news/334.tests\nnew file mode 100644\nindex 000000000..45ea1e5b2\n--- /dev/null\n+++ b/news/334.tests\n@@ -0,0 +1,3 @@\n+Fix test_long_event when run around midnight of the first day of the month.\n+Fixes `issue 334 `_.\n+[maurits]\ndiff --git a/plone/app/event/tests/test_portlet_calendar.py b/plone/app/event/tests/test_portlet_calendar.py\nindex a5a8ada17..8b96a1d3a 100644\n--- a/plone/app/event/tests/test_portlet_calendar.py\n+++ b/plone/app/event/tests/test_portlet_calendar.py\n@@ -181,9 +181,27 @@ def test_portlet_config(self):\n self.assertTrue("?mode=day&date=" in rd)\n \n def test_long_event(self):\n+ """Test a long event.\n+\n+ An event happening on three days, should have an indication on all\n+ three days. That is the main thing we test here.\n+\n+ But the test may fail on the first day of the month.\n+ See https://github.com/plone/plone.app.event/issues/334\n+ When generating the portlet on the first day of the month, it seems\n+ depending on time zones we might get the previous month. This would\n+ mean our event is not (fully) visible. So we force showing the\n+ calendar of the month that we want. This test is not about whether\n+ the correct month is shown at one minute past midnight.\n+\n+ Previously we created an event on the first day. But depending on\n+ the day of the week that the new month starts, this may also influence\n+ what is visible: we may see Friday 1st and Saturday 2nd, but not\n+ Sunday 3rd. So now we pick a day in the middle of the month.\n+ """\n tz = pytz.timezone(TZNAME)\n actual = tz.localize(datetime.now())\n- start = tz.localize(datetime(actual.year, actual.month, 1))\n+ start = tz.localize(datetime(actual.year, actual.month, 15))\n end = start + timedelta(days=2)\n \n e1 = createContentInContainer(\n@@ -191,6 +209,8 @@ def test_long_event(self):\n )\n self.portal.portal_workflow.doActionFor(e1, "publish")\n \n+ self.request["year"] = actual.year\n+ self.request["month"] = actual.month\n r = self.renderer(assignment=portlet_calendar.Assignment(state=("published",)))\n r.update()\n rd = r.render()\n' -Repository: plone.z3cform +Repository: plone.app.event Branch: refs/heads/master -Date: 2023-06-24T15:57:26+02:00 -Author: Gil Forcada Codinachs (gforcada) -Commit: https://github.com/plone/plone.z3cform/commit/2352dfcca40be9be26f344b743c73703c108ed84 +Date: 2023-10-05T11:21:59+02:00 +Author: Jens W. Klein (jensens) +Commit: https://github.com/plone/plone.app.event/commit/9ff0aa9f0cca3cacc7861111c0dd8cb6b9249eef -cleanup: remove unused sections +Merge branch 'master' into maurits-test-long-event-master Files changed: -M setup.cfg +A news/172.internal +M .pre-commit-config.yaml +M pyproject.toml +M tox.ini -b'diff --git a/setup.cfg b/setup.cfg\nindex 65446f0..e5a7298 100644\n--- a/setup.cfg\n+++ b/setup.cfg\n@@ -1,27 +1,2 @@\n-# Generated from:\n-# https://github.com/plone/meta/tree/master/config/default\n-[bdist_wheel]\n-universal = 0\n-\n-[flake8]\n-doctests = 1\n-ignore =\n- # black takes care of line length\n- E501,\n- # black takes care of where to break lines\n- W503,\n- # black takes care of spaces within slicing (list[:])\n- E203,\n- # black takes care of spaces after commas\n- E231,\n-\n-[check-manifest]\n-ignore =\n- .editorconfig\n- .meta.toml\n- .pre-commit-config.yaml\n- tox.ini\n- *.cfg\n-\n [zest.releaser]\n python-file-with-version = setup.py\n' +b'diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml\nindex 0d259b7f..f6f04834 100644\n--- a/.pre-commit-config.yaml\n+++ b/.pre-commit-config.yaml\n@@ -7,7 +7,7 @@ ci:\n \n repos:\n - repo: https://github.com/asottile/pyupgrade\n- rev: v3.8.0\n+ rev: v3.10.1\n hooks:\n - id: pyupgrade\n args: [--py38-plus]\n@@ -16,7 +16,7 @@ repos:\n hooks:\n - id: isort\n - repo: https://github.com/psf/black\n- rev: 23.3.0\n+ rev: 23.7.0\n hooks:\n - id: black\n - repo: https://github.com/collective/zpretty\n@@ -32,7 +32,7 @@ repos:\n # """\n ##\n - repo: https://github.com/PyCQA/flake8\n- rev: 6.0.0\n+ rev: 6.1.0\n hooks:\n - id: flake8\n - repo: https://github.com/codespell-project/codespell\n@@ -63,7 +63,7 @@ repos:\n - id: check-python-versions\n args: [\'--only\', \'setup.py,pyproject.toml\']\n - repo: https://github.com/collective/i18ndude\n- rev: "6.0.0"\n+ rev: "6.1.0"\n hooks:\n - id: i18ndude\n \ndiff --git a/news/172.internal b/news/172.internal\nnew file mode 100644\nindex 00000000..6a54c549\n--- /dev/null\n+++ b/news/172.internal\n@@ -0,0 +1,5 @@\n+Require setuptools 68.2 or higher for building the package.\n+When built with setuptools 68.1, you could not import the package, at least not an editable package.\n+Note that you can still *install* this package with older setuptools versions.\n+See `Plone meta issue 172 `_ for details.\n+[maurits]\ndiff --git a/pyproject.toml b/pyproject.toml\nindex 4f15ca58..fd2ab3e2 100644\n--- a/pyproject.toml\n+++ b/pyproject.toml\n@@ -1,6 +1,9 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n # See the inline comments on how to expand/tweak this configuration file\n+[build-system]\n+requires = ["setuptools>=68.2", "wheel"]\n+\n [tool.towncrier]\n directory = "news/"\n filename = "CHANGES.rst"\ndiff --git a/tox.ini b/tox.ini\nindex 60d323c7..3f82c641 100644\n--- a/tox.ini\n+++ b/tox.ini\n@@ -58,7 +58,7 @@ deps =\n build\n z3c.dependencychecker==2.11\n commands =\n- python -m build --sdist --no-isolation\n+ python -m build --sdist\n dependencychecker\n \n [testenv:dependencies-graph]\n@@ -125,7 +125,7 @@ commands =\n # we build the change log as news entries might break\n # the README that is displayed on PyPI\n towncrier build --version=100.0.0 --yes\n- python -m build --sdist --no-isolation\n+ python -m build --sdist\n twine check dist/*\n \n [testenv:circular]\n' -Repository: plone.z3cform +Repository: plone.app.event Branch: refs/heads/master -Date: 2023-10-05T11:06:02+02:00 -Author: Jens W. Klein (jensens) -Commit: https://github.com/plone/plone.z3cform/commit/38193072370efcea253035e041fb29a6152eaa76 +Date: 2023-10-05T16:10:25+02:00 +Author: Maurits van Rees (mauritsvanrees) +Commit: https://github.com/plone/plone.app.event/commit/71757d6fb0519baf56de26482217432ec5c7d1b5 -Merge pull request #26 from plone/config-with-default-template-9fb3a20a +Merge pull request #383 from plone/maurits-test-long-event-master -Config with default template - -[skip ci] +Fix test_long_event when run around midnight of first day of month Files changed: -A .editorconfig -A .flake8 -A .github/workflows/meta.yml -A .meta.toml -A .pre-commit-config.yaml -A news/cfffba8c.internal -M .gitignore -M pyproject.toml -M setup.cfg -M tox.ini +A news/334.tests +M plone/app/event/tests/test_portlet_calendar.py -b'diff --git a/.editorconfig b/.editorconfig\nnew file mode 100644\nindex 0000000..919b411\n--- /dev/null\n+++ b/.editorconfig\n@@ -0,0 +1,53 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+#\n+# EditorConfig Configuration file, for more details see:\n+# http://EditorConfig.org\n+# EditorConfig is a convention description, that could be interpreted\n+# by multiple editors to enforce common coding conventions for specific\n+# file types\n+\n+# top-most EditorConfig file:\n+# Will ignore other EditorConfig files in Home directory or upper tree level.\n+root = true\n+\n+\n+[*] # For All Files\n+# Unix-style newlines with a newline ending every file\n+end_of_line = lf\n+insert_final_newline = true\n+trim_trailing_whitespace = true\n+# Set default charset\n+charset = utf-8\n+# Indent style default\n+indent_style = space\n+# Max Line Length - a hard line wrap, should be disabled\n+max_line_length = off\n+\n+[*.{py,cfg,ini}]\n+# 4 space indentation\n+indent_size = 4\n+\n+[*.{yml,zpt,pt,dtml,zcml}]\n+# 2 space indentation\n+indent_size = 2\n+\n+[*.{json,jsonl,js,jsx,ts,tsx,css,less,scss,html}] # Frontend development\n+# 2 space indentation\n+indent_size = 2\n+\n+[{Makefile,.gitmodules}]\n+# Tab indentation (no size specified, but view as 4 spaces)\n+indent_style = tab\n+indent_size = unset\n+tab_width = unset\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [editorconfig]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.flake8 b/.flake8\nnew file mode 100644\nindex 0000000..7ef4f64\n--- /dev/null\n+++ b/.flake8\n@@ -0,0 +1,22 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+[flake8]\n+doctests = 1\n+ignore =\n+ # black takes care of line length\n+ E501,\n+ # black takes care of where to break lines\n+ W503,\n+ # black takes care of spaces within slicing (list[:])\n+ E203,\n+ # black takes care of spaces after commas\n+ E231,\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [flake8]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.github/workflows/meta.yml b/.github/workflows/meta.yml\nnew file mode 100644\nindex 0000000..a7f25e0\n--- /dev/null\n+++ b/.github/workflows/meta.yml\n@@ -0,0 +1,28 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+name: Meta\n+on:\n+ push:\n+ branches:\n+ - master\n+ - main\n+ pull_request:\n+ branches:\n+ - master\n+ - main\n+ workflow_dispatch:\n+\n+jobs:\n+ qa:\n+ uses: plone/meta/.github/workflows/qa.yml@main\n+ test:\n+ uses: plone/meta/.github/workflows/test.yml@main\n+ coverage:\n+ uses: plone/meta/.github/workflows/coverage.yml@main\n+ dependencies:\n+ uses: plone/meta/.github/workflows/dependencies.yml@main\n+ release-ready:\n+ uses: plone/meta/.github/workflows/release_ready.yml@main\n+ circular:\n+ uses: plone/meta/.github/workflows/circular.yml@main\ndiff --git a/.gitignore b/.gitignore\nindex 9bd0d6e..81594fd 100644\n--- a/.gitignore\n+++ b/.gitignore\n@@ -1,17 +1,51 @@\n-bin\n-build\n-develop-eggs\n-dist\n-lib\n-include\n-man\n-parts\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+# python related\n *.egg-info\n-__pycache__\n-.*\n-*.dll\n *.pyc\n *.pyo\n-*.so\n-!.gitattributes\n-*.mo\n+\n+# tools related\n+build/\n+.coverage\n+coverage.xml\n+dist/\n+docs/_build\n+__pycache__/\n+.tox\n+.vscode/\n+node_modules/\n+\n+# venv / buildout related\n+bin/\n+develop-eggs/\n+eggs/\n+.eggs/\n+etc/\n+.installed.cfg\n+include/\n+lib/\n+lib64\n+.mr.developer.cfg\n+parts/\n+pyvenv.cfg\n+var/\n+\n+# mxdev\n+/instance/\n+/.make-sentinels/\n+/*-mxdev.txt\n+/reports/\n+/sources/\n+/venv/\n+.installed.txt\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [gitignore]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.meta.toml b/.meta.toml\nnew file mode 100644\nindex 0000000..cf12c85\n--- /dev/null\n+++ b/.meta.toml\n@@ -0,0 +1,12 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+[meta]\n+template = "default"\n+commit-id = "cfffba8c"\n+\n+[pyproject]\n+check_manifest_ignores = """\n+ "*.cfg",\n+"""\n+codespell_ignores = "fo,"\ndiff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml\nnew file mode 100644\nindex 0000000..7de9fd7\n--- /dev/null\n+++ b/.pre-commit-config.yaml\n@@ -0,0 +1,84 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+ci:\n+ autofix_prs: false\n+ autoupdate_schedule: monthly\n+\n+repos:\n+- repo: https://github.com/asottile/pyupgrade\n+ rev: v3.4.0\n+ hooks:\n+ - id: pyupgrade\n+ args: [--py38-plus]\n+- repo: https://github.com/pycqa/isort\n+ rev: 5.12.0\n+ hooks:\n+ - id: isort\n+- repo: https://github.com/psf/black\n+ rev: 23.3.0\n+ hooks:\n+ - id: black\n+- repo: https://github.com/collective/zpretty\n+ rev: 3.1.0a2\n+ hooks:\n+ - id: zpretty\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# zpretty_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n+- repo: https://github.com/PyCQA/flake8\n+ rev: 6.0.0\n+ hooks:\n+ - id: flake8\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# flake8_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n+- repo: https://github.com/codespell-project/codespell\n+ rev: v2.2.4\n+ hooks:\n+ - id: codespell\n+ additional_dependencies:\n+ - tomli\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# codespell_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n+- repo: https://github.com/mgedmin/check-manifest\n+ rev: "0.49"\n+ hooks:\n+ - id: check-manifest\n+- repo: https://github.com/regebro/pyroma\n+ rev: "4.2"\n+ hooks:\n+ - id: pyroma\n+- repo: https://github.com/mgedmin/check-python-versions\n+ rev: "0.21.2"\n+ hooks:\n+ - id: check-python-versions\n+ args: [\'--only\', \'setup.py,pyproject.toml\']\n+- repo: https://github.com/collective/i18ndude\n+ rev: "6.0.0"\n+ hooks:\n+ - id: i18ndude\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/news/cfffba8c.internal b/news/cfffba8c.internal\nnew file mode 100644\nindex 0000000..c08f539\n--- /dev/null\n+++ b/news/cfffba8c.internal\n@@ -0,0 +1,2 @@\n+Update configuration files.\n+[plone devs]\ndiff --git a/pyproject.toml b/pyproject.toml\nindex ebe12d5..eb8b561 100644\n--- a/pyproject.toml\n+++ b/pyproject.toml\n@@ -1,8 +1,9 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n [tool.towncrier]\n-filename = "CHANGES.rst"\n directory = "news/"\n+filename = "CHANGES.rst"\n title_format = "{version} ({project_date})"\n underlines = ["-", ""]\n \n@@ -36,32 +37,122 @@ directory = "tests"\n name = "Tests"\n showcontent = true\n \n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# towncrier_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n [tool.isort]\n profile = "plone"\n \n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# isort_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n [tool.black]\n target-version = ["py38"]\n \n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# black_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n+[tool.codespell]\n+ignore-words-list = "discreet,fo,"\n+skip = "*.po,"\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# codespell_ignores = "foo,bar"\n+# codespell_skip = "*.po,*.map,package-lock.json"\n+##\n+\n [tool.dependencychecker]\n Zope = [\n # Zope own provided namespaces\n \'App\', \'OFS\', \'Products.Five\', \'Products.OFSP\', \'Products.PageTemplates\',\n \'Products.SiteAccess\', \'Shared\', \'Testing\', \'ZPublisher\', \'ZTUtils\',\n \'Zope2\', \'webdav\', \'zmi\',\n+ # ExtensionClass own provided namespaces\n+ \'ExtensionClass\', \'ComputedAttribute\', \'MethodObject\',\n # Zope dependencies\n- \'Acquisition\', \'DateTime\', \'transaction\', \'zExceptions\', \'ZODB\', \'zope.component\',\n- \'zope.configuration\', \'zope.container\', \'zope.deferredimport\', \'zope.event\',\n- \'zope.exceptions\', \'zope.globalrequest\', \'zope.i18n\', \'zope.i18nmessageid\',\n- \'zope.interface\', \'zope.lifecycleevent\', \'zope.location\', \'zope.publisher\',\n- \'zope.schema\', \'zope.security\', \'zope.site\', \'zope.traversing\', \'AccessControl\',\n+ \'AccessControl\', \'Acquisition\', \'AuthEncoding\', \'beautifulsoup4\', \'BTrees\',\n+ \'cffi\', \'Chameleon\', \'DateTime\', \'DocumentTemplate\',\n+ \'MultiMapping\', \'multipart\', \'PasteDeploy\', \'Persistence\', \'persistent\',\n+ \'pycparser\', \'python-gettext\', \'pytz\', \'RestrictedPython\', \'roman\',\n+ \'soupsieve\', \'transaction\', \'waitress\', \'WebOb\', \'WebTest\', \'WSGIProxy2\',\n+ \'z3c.pt\', \'zc.lockfile\', \'ZConfig\', \'zExceptions\', \'ZODB\', \'zodbpickle\',\n+ \'zope.annotation\', \'zope.browser\', \'zope.browsermenu\', \'zope.browserpage\',\n+ \'zope.browserresource\', \'zope.cachedescriptors\', \'zope.component\',\n+ \'zope.configuration\', \'zope.container\', \'zope.contentprovider\',\n+ \'zope.contenttype\', \'zope.datetime\', \'zope.deferredimport\',\n+ \'zope.deprecation\', \'zope.dottedname\', \'zope.event\', \'zope.exceptions\',\n+ \'zope.filerepresentation\', \'zope.globalrequest\', \'zope.hookable\',\n+ \'zope.i18n\', \'zope.i18nmessageid\', \'zope.interface\', \'zope.lifecycleevent\',\n+ \'zope.location\', \'zope.pagetemplate\', \'zope.processlifetime\', \'zope.proxy\',\n+ \'zope.ptresource\', \'zope.publisher\', \'zope.schema\', \'zope.security\',\n+ \'zope.sequencesort\', \'zope.site\', \'zope.size\', \'zope.structuredtext\',\n+ \'zope.tal\', \'zope.tales\', \'zope.testbrowser\', \'zope.testing\',\n+ \'zope.traversing\', \'zope.viewlet\'\n+]\n+\'Products.CMFCore\' = [\n+ \'docutils\', \'five.localsitemanager\', \'Missing\', \'Products.BTreeFolder2\',\n+ \'Products.GenericSetup\', \'Products.MailHost\', \'Products.PythonScripts\',\n+ \'Products.StandardCacheManagers\', \'Products.ZCatalog\', \'Record\',\n+ \'zope.sendmail\', \'Zope\'\n ]\n \'plone.base\' = [\n- \'AccessControl\', \'Products.BTreeFolder2\', \'Products.CMFCore\',\n- \'Products.CMFDynamicViewFTI\', \'zope.deprecation\',\n+ \'plone.batching\', \'plone.registry\', \'plone.schema\',\'plone.z3cform\',\n+ \'Products.CMFCore\', \'Products.CMFDynamicViewFTI\',\n ]\n python-dateutil = [\'dateutil\']\n-ignore-packages = [\'five.pt\']\n \n-[tool.codespell]\n-skip = "*.po"\n-ignore-words-list = "fo"\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# dependencies_ignores = "[\'zestreleaser.towncrier\']"\n+# dependencies_mappings = [\n+# "gitpython = [\'git\']",\n+# "pygithub = [\'github\']",\n+# ]\n+# """\n+##\n+\n+[tool.check-manifest]\n+ignore = [\n+ ".editorconfig",\n+ ".meta.toml",\n+ ".pre-commit-config.yaml",\n+ "tox.ini",\n+ ".flake8",\n+ "mx.ini",\n+ "*.cfg",\n+\n+]\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# check_manifest_ignores = """\n+# "*.map.js",\n+# "*.pyc",\n+# """\n+##\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/setup.cfg b/setup.cfg\nindex 65446f0..e5a7298 100644\n--- a/setup.cfg\n+++ b/setup.cfg\n@@ -1,27 +1,2 @@\n-# Generated from:\n-# https://github.com/plone/meta/tree/master/config/default\n-[bdist_wheel]\n-universal = 0\n-\n-[flake8]\n-doctests = 1\n-ignore =\n- # black takes care of line length\n- E501,\n- # black takes care of where to break lines\n- W503,\n- # black takes care of spaces within slicing (list[:])\n- E203,\n- # black takes care of spaces after commas\n- E231,\n-\n-[check-manifest]\n-ignore =\n- .editorconfig\n- .meta.toml\n- .pre-commit-config.yaml\n- tox.ini\n- *.cfg\n-\n [zest.releaser]\n python-file-with-version = setup.py\ndiff --git a/tox.ini b/tox.ini\nindex 2aec6e6..85aeefd 100644\n--- a/tox.ini\n+++ b/tox.ini\n@@ -1,14 +1,36 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n [tox]\n+# We need 4.4.0 for constrain_package_deps.\n+min_version = 4.4.0\n envlist =\n- format\n lint\n test\n+ dependencies\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# envlist_lines = """\n+# my_other_environment\n+# """\n+# config_lines = """\n+# my_extra_top_level_tox_configuration_lines\n+# """\n+##\n \n [testenv]\n+skip_install = true\n allowlist_externals =\n- sh\n+ echo\n+ false\n+# Make sure typos like `tox -e formaat` are caught instead of silently doing nothing.\n+# See https://github.com/tox-dev/tox/issues/2858.\n+commands =\n+ echo "Unrecognized environment name {envname}"\n+ false\n \n [testenv:format]\n description = automatically reformat code\n@@ -30,21 +52,138 @@ commands =\n pre-commit run -a\n \n [testenv:dependencies]\n-description = check if the package defines all its dependencies and generate a graph out of them\n+description = check if the package defines all its dependencies\n+skip_install = true\n deps =\n+ build\n z3c.dependencychecker==2.11\n+commands =\n+ python -m build --sdist --no-isolation\n+ dependencychecker\n+\n+[testenv:dependencies-graph]\n+description = generate a graph out of the dependencies of the package\n+skip_install = false\n+allowlist_externals =\n+ sh\n+deps =\n pipdeptree==2.5.1\n graphviz # optional dependency of pipdeptree\n commands =\n- dependencychecker\n- sh -c \'pipdeptree --exclude setuptools,pipdeptree,wheel,pipdeptree,z3c.dependencychecker,zope.interface,zope.component --graph-output svg > dependencies.svg\'\n+ sh -c \'pipdeptree --exclude setuptools,wheel,pipdeptree,zope.interface,zope.component --graph-output svg > dependencies.svg\'\n \n [testenv:test]\n-usedevelop = true\n+description = run the distribution tests\n+use_develop = true\n+skip_install = false\n+constrain_package_deps = true\n+set_env =\n+ ROBOT_BROWSER=headlesschrome\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n+deps =\n+ zope.testrunner\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+##\n+# Specify a custom constraints file in .meta.toml:\n+# [tox]\n+# constraints_file = "https://my-server.com/constraints.txt"\n+##\n+commands =\n+ zope-testrunner --all --test-path={toxinidir}/src -s plone.z3cform {posargs}\n+extras =\n+ test\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# test_extras = """\n+# tests\n+# widgets\n+# """\n+##\n+\n+[testenv:coverage]\n+description = get a test coverage report\n+use_develop = true\n+skip_install = false\n+constrain_package_deps = true\n+set_env =\n+ ROBOT_BROWSER=headlesschrome\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n deps =\n+ coverage\n zope.testrunner\n -c https://dist.plone.org/release/6.0-dev/constraints.txt\n commands =\n- zope-testrunner --test-path={toxinidir}/src -s plone.z3cform\n+ coverage run --branch --source plone.z3cform {envbindir}/zope-testrunner --quiet --all --test-path={toxinidir}/src -s plone.z3cform {posargs}\n+ coverage report -m --format markdown\n+ coverage xml\n extras =\n test\n+\n+\n+[testenv:release-check]\n+description = ensure that the distribution is ready to release\n+skip_install = true\n+deps =\n+ twine\n+ build\n+ towncrier\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+commands =\n+ # fake version to not have to install the package\n+ # we build the change log as news entries might break\n+ # the README that is displayed on PyPI\n+ towncrier build --version=100.0.0 --yes\n+ python -m build --sdist --no-isolation\n+ twine check dist/*\n+\n+[testenv:circular]\n+description = ensure there are no cyclic dependencies\n+use_develop = true\n+skip_install = false\n+set_env =\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n+allowlist_externals =\n+ sh\n+deps =\n+ pipdeptree\n+ pipforester\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+commands =\n+ # Generate the full dependency tree\n+ sh -c \'pipdeptree -j > forest.json\'\n+ # Generate a DOT graph with the circular dependencies, if any\n+ pipforester -i forest.json -o forest.dot --cycles\n+ # Report if there are any circular dependencies, i.e. error if there are any\n+ pipforester -i forest.json --check-cycles -o /dev/null\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n' +b'diff --git a/news/334.tests b/news/334.tests\nnew file mode 100644\nindex 00000000..45ea1e5b\n--- /dev/null\n+++ b/news/334.tests\n@@ -0,0 +1,3 @@\n+Fix test_long_event when run around midnight of the first day of the month.\n+Fixes `issue 334 `_.\n+[maurits]\ndiff --git a/plone/app/event/tests/test_portlet_calendar.py b/plone/app/event/tests/test_portlet_calendar.py\nindex a5a8ada1..8b96a1d3 100644\n--- a/plone/app/event/tests/test_portlet_calendar.py\n+++ b/plone/app/event/tests/test_portlet_calendar.py\n@@ -181,9 +181,27 @@ def test_portlet_config(self):\n self.assertTrue("?mode=day&date=" in rd)\n \n def test_long_event(self):\n+ """Test a long event.\n+\n+ An event happening on three days, should have an indication on all\n+ three days. That is the main thing we test here.\n+\n+ But the test may fail on the first day of the month.\n+ See https://github.com/plone/plone.app.event/issues/334\n+ When generating the portlet on the first day of the month, it seems\n+ depending on time zones we might get the previous month. This would\n+ mean our event is not (fully) visible. So we force showing the\n+ calendar of the month that we want. This test is not about whether\n+ the correct month is shown at one minute past midnight.\n+\n+ Previously we created an event on the first day. But depending on\n+ the day of the week that the new month starts, this may also influence\n+ what is visible: we may see Friday 1st and Saturday 2nd, but not\n+ Sunday 3rd. So now we pick a day in the middle of the month.\n+ """\n tz = pytz.timezone(TZNAME)\n actual = tz.localize(datetime.now())\n- start = tz.localize(datetime(actual.year, actual.month, 1))\n+ start = tz.localize(datetime(actual.year, actual.month, 15))\n end = start + timedelta(days=2)\n \n e1 = createContentInContainer(\n@@ -191,6 +209,8 @@ def test_long_event(self):\n )\n self.portal.portal_workflow.doActionFor(e1, "publish")\n \n+ self.request["year"] = actual.year\n+ self.request["month"] = actual.month\n r = self.renderer(assignment=portlet_calendar.Assignment(state=("published",)))\n r.update()\n rd = r.render()\n'