Integration test ================ .. :doctest: .. :setup: zest.releaser.tests.functional.setup .. :teardown: zest.releaser.tests.functional.teardown This test is based on the functional tests using a git repository, but enables releaser hooks on the test package and ensures that they run. Several items are prepared for us. A git directory (repository and checkout in one): >>> gitsourcedir 'TESTTEMP/tha.example-git' >>> import os >>> os.chdir(gitsourcedir) Asking input on the prompt is not unittestable unless we use the prepared testing hack in utils.py: >>> from zest.releaser import utils >>> utils.TESTMODE = True Append the [zest.releaser] section to the setup.cfg file, enabling the releaser hooks: >>> dont_care = open('setup.cfg', 'a').write(""" ... [zest.releaser] ... hook_package_dir = src ... prereleaser.before = tha.example.hooks.prereleaser_before ... prereleaser.middle = tha.example.hooks.prereleaser_middle ... prereleaser.after = tha.example.hooks.prereleaser_after ... releaser.before = tha.example.hooks.releaser_before ... releaser.middle = tha.example.hooks.releaser_middle ... releaser.after_checkout = tha.example.hooks.releaser_after_checkout ... releaser.before_upload = tha.example.hooks.releaser_before_upload ... releaser.after = tha.example.hooks.releaser_after ... postreleaser.before = tha.example.hooks.postreleaser_before ... postreleaser.middle = tha.example.hooks.postreleaser_middle ... postreleaser.after = tha.example.hooks.postreleaser_after""") Commit the change to setup.cfg so that we have a clean checkout: >>> from zest.releaser import git >>> checkout = git.Git() >>> cmd = checkout.cmd_commit("tweak setup.cfg to enable hooks") >>> print('dummy %s' % utils.execute_command(cmd)) dummy...tweak setup.cfg to enable hooks 1 file changed, 14 insertions(+) Run the prerelease script. Note that pyroma and check-manifest have hooks here so they are run too, but the order may differ. With the bin/test script first pyroma is run, then check-manifest. With tox it is the other way around. So we use ellipsis for that part. >>> from zest.releaser import prerelease >>> utils.test_answer_book.set_answers(['', '', '', '', '']) >>> prerelease.main() prereleaser_before ... Question: Enter version [0.1]: Our reply: prereleaser_middle Checking data dict Question: OK to commit this (Y/n)? Our reply: prereleaser_after The release script tags the release and uploads it: >>> utils.test_answer_book.set_answers(['y', 'y', 'y', 'y', 'y', 'y', 'y', 'y']) >>> mock_pypi_available.append('tha.example') >>> from zest.releaser import release >>> release.main() releaser_before releaser_middle Checking data dict Tag needed to proceed, you can use the following command: git tag 0.1 -m "Tagging 0.1" Question: Run this command (Y/n)? Our reply: y Question: Check out the tag (for tweaks or pypi/distutils server upload) (Y/n)? Our reply: y RED Note: ...0.1... ... RED HEAD is now at ... Preparing release 0.1 Question: Fix setup.cfg (and commit to tag if possible) (Y/n)? Our reply: y [egg_info] tag_build = tag_svn_revision = false [zest.releaser] ... releaser_after_checkout Showing first few lines... running sdist running egg_info ... creating dist Creating ... removing 'tha.example-0.1' ... releaser_before_upload Question: Register and upload to pypi (Y/n)? Our reply: y MOCK twine upload dist/tha.example-0.1.tar.gz releaser_after And the postrelease script ups the version: >>> utils.test_answer_book.set_answers(['', '', 'n']) >>> from zest.releaser import postrelease >>> postrelease.main() postreleaser_before Current version is 0.1 Question: Enter new development version ('.dev0' will be appended) [0.2]: Our reply: postreleaser_middle Checking data dict Question: OK to commit this (Y/n)? Our reply: Question: OK to push commits to the server? (Y/n)? Our reply: n postreleaser_after