Integration test
================

.. :doctest:
.. :setup: zest.releaser.tests.functional.setup
.. :teardown: zest.releaser.tests.functional.teardown

There is a bug in python 2.4. We build zip files when python 2.4 is
being used.  Actually, we should do that always, as the user may still
have python 2.4 even when we release with python 2.6.

Several items are prepared for us.

A git directory (repository and checkout in one):

    >>> gitsourcedir
    'TESTTEMP/tha.example-git'
    >>> import os
    >>> os.chdir(gitsourcedir)

There are no tags yet:

    >>> from zest.releaser.utils import system
    >>> print system("git tag")
    <BLANKLINE>

The changelog is unreleased:

    >>> githead('CHANGES.txt')
    Changelog of tha.example
    =====================
    <BLANKLINE>
    0.1 (unreleased)
    ----------------

The version is at 0.1.dev0:

    >>> githead('setup.py')
    from setuptools import setup, find_packages
    import os.path
    <BLANKLINE>
    version = '0.1.dev0'

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

Run the prerelease script:

    >>> from zest.releaser import prerelease
    >>> utils.answers_for_testing = ['', '']
    >>> prerelease.main()
    Question: Enter version [0.1]:
    Our reply: <ENTER>
    Checking data dict
    Question: OK to commit this (Y/n)?
    Our reply: <ENTER>

The changelog now has a release date instead of ``(unreleased)``:

    >>> githead('CHANGES.txt')
    Changelog of tha.example
    =====================
    <BLANKLINE>
    0.1 (2008-12-20)
    ----------------

And the version number is just 0.1 and has lost its dev marker:

    >>> githead('setup.py')
    from setuptools import setup, find_packages
    import os.path
    <BLANKLINE>
    version = '0.1'

The release script tags the release and uploads it:

    >>> utils.answers_for_testing = ['y', 'y', 'y', 'y', 'y', 'y', 'y', 'y']
    >>> mock_pypi_available.append('tha.example')
    >>> from zest.releaser import release
    >>> release.main()
    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
    <BLANKLINE>
    Question: Check out the tag (for tweaks or pypi/distutils server upload) (Y/n)?
    Our reply: y
    Note: ...0.1...
    ...
    HEAD is now at ...
    Preparing release 0.1
    <BLANKLINE>
    Question: Fix setup.cfg (and commit to tag if possible) (Y/n)?
    Our reply: y
    [egg_info]
    tag_build =
    tag_svn_revision = false
    <BLANKLINE>
    running sdist
    running egg_info
    ...
    creating tha.example-0.1
    ...
    hard linking README.txt -> tha.example-0.1
    ...
    creating dist
    creating 'dist/tha.example-0.1.zip' and adding 'tha.example-0.1' to it
    ...
    removing 'tha.example-0.1' ...
    Question: Register and upload to pypi (Y/n)?
    Our reply: y
    MOCK setup.py register sdist --formats=zip upload

There is now a tag:

    >>> print system("git tag")
    0.1

And the postrelease script ups the version:

    >>> utils.answers_for_testing = ['', '', 'n']
    >>> from zest.releaser import postrelease
    >>> postrelease.main()
    Current version is '0.1'
    Question: Enter new development version ('.dev0' will be appended) [0.2]:
    Our reply: <ENTER>
    Checking data dict
    Question: OK to commit this (Y/n)?
    Our reply: <ENTER>
    Question: OK to push commits to the server? (Y/n)?
    Our reply: n

The changelog and setup.py are at 0.2 and indicate dev mode:

    >>> githead('CHANGES.txt')
    Changelog of tha.example
    =====================
    <BLANKLINE>
    0.2 (unreleased)
    ----------------
    >>> githead('setup.py')
    from setuptools import setup, find_packages
    import os.path
    <BLANKLINE>
    version = '0.2.dev0'

And there are no uncommitted changes:

    >>> print system("git status")
    # On branch master
    nothing to commit (working directory clean)
