view tests/test_wsgi.txt @ 65:83327bc715be

make the virtualenv convenience method return more stuff
author Jeff Hammel <jhammel@mozilla.com>
date Thu, 01 Mar 2012 18:31:52 -0800
parents 26139fb1de98
children
line wrap: on
line source

Test simpypi
============

Test the WSGI app with mock requests from ``paste.fixture.TestApp``.

The obligatory imports::

    >>> import os
    >>> import pkginfo
    >>> import shutil
    >>> import simpypi
    >>> import subprocess
    >>> import tarfile
    >>> import tempfile
    >>> from paste.fixture import TestApp

The directory is initially empty::

    >>> os.listdir(directory)
    []

Make a test application::

    >>> app = simpypi.SimPyPI(directory)
    >>> testapp = TestApp(app)

Upload a package::

    >>> field = 'package'
    >>> filename = 'HelloWorld-0.0.tar.gz'
    >>> contents = file(os.path.join(here, filename)).read()
    >>> response = testapp.post('/', upload_files=[(field, filename, contents)])

Ensure that package is in the right place::

    >>> os.listdir(directory)
    ['HelloWorld']
    >>> os.listdir(os.path.join(directory, 'HelloWorld'))
    ['HelloWorld-0.0.tar.gz']

Ensure the package is what you expect it to be::

    >>> path = os.path.join(directory, 'HelloWorld', 'HelloWorld-0.0.tar.gz')
    >>> sdist = pkginfo.sdist.SDist(path)
    >>> sdist.name
    'HelloWorld'
    >>> sdist.version
    '0.0'
    >>> sdist.home_page
    'http://helloworld.example.com/'
    >>> sdist.author
    'Jeff Hammel'

Unpack the archive and ensure the files are there::

    >>> tmpdir = tempfile.mkdtemp()
    >>> archive = tarfile.TarFile.open(path)
    >>> for member in archive.getmembers():
    ...     archive.extract(member, path=tmpdir)
    >>> os.listdir(tmpdir)
    ['HelloWorld-0.0']
    >>> srcdir = os.path.join(tmpdir, 'HelloWorld-0.0')
    >>> os.path.exists(os.path.join(srcdir, 'setup.py'))
    True
    >>> 'helloworld' in os.listdir(srcdir)
    True
    >>> os.listdir(os.path.join(srcdir, 'helloworld'))
    ['__init__.py']

Install the package and inspect the installation::

    >>> python = create_virtualenv(tmpdir).python

You should not be able to import ``helloworld`` yet::

    >>> code = subprocess.call([python, '-c', 'import helloworld'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    >>> code
    1

But after installation you should::

    >>> subprocess.call([python, 'setup.py', 'install'], cwd=srcdir, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    0
    >>> code = subprocess.call([python, '-c', 'import helloworld'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    >>> code
    0
    >>> process = subprocess.Popen([python, '-c', 'import helloworld; print helloworld.hello'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    >>> stdout, stderr = process.communicate()
    >>> process.returncode
    0
    >>> stdout
    'Hello, world!\n'
    >>> shutil.rmtree(tmpdir)

Upload the same package but with the wrong name::

    >>> shutil.rmtree(os.path.join(directory, 'HelloWorld'))
    >>> os.listdir(directory)
    []
    >>> response = testapp.post('/', upload_files=[(field, 'MisleadingName.tar.gz', contents)])
    >>> os.listdir(directory)
    ['HelloWorld']
    >>> os.listdir(os.path.join(directory, 'HelloWorld'))
    ['HelloWorld-0.0.tar.gz']
    >>> shutil.rmtree(os.path.join(directory, 'HelloWorld'))
    >>> os.listdir(directory)
    []
    >>> filename = 'MisleadingFilename.tar.gz'
    >>> contents = file(os.path.join(here, filename)).read()
    >>> response = testapp.post('/', upload_files=[(field, filename, contents)])
    >>> os.listdir(directory)
    ['HelloWorld']
    >>> os.listdir(os.path.join(directory, 'HelloWorld'))
    ['HelloWorld-0.0.tar.gz']