included test for plugins_index and added command line options

--HG--
branch : plugins-index
This commit is contained in:
Bruno Oliveira 2013-10-11 20:53:03 -03:00
parent d92322a574
commit 5b2b71bfd4
2 changed files with 109 additions and 3 deletions

View File

@ -8,6 +8,7 @@ from collections import namedtuple
import datetime import datetime
from distutils.version import LooseVersion from distutils.version import LooseVersion
import itertools import itertools
from optparse import OptionParser
import os import os
import sys import sys
import xmlrpclib import xmlrpclib
@ -126,7 +127,17 @@ def generate_plugins_index_from_table(filename, headers, rows):
print >> f, get_row_limiter('=') print >> f, get_row_limiter('=')
print >> f print >> f
print >> f, '*(Last updated: %s)*' % datetime.date.today().strftime('%Y-%m-%d') print >> f, '*(Updated on %s)*' % _get_today_as_str()
#===================================================================================================
# _get_today_as_str
#===================================================================================================
def _get_today_as_str():
'''
internal. only exists so we can patch it in testing.
'''
return datetime.date.today().strftime('%Y-%m-%d')
#=================================================================================================== #===================================================================================================
@ -148,9 +159,16 @@ def generate_plugins_index(client, filename):
# main # main
#=================================================================================================== #===================================================================================================
def main(argv): def main(argv):
client = xmlrpclib.ServerProxy('http://pypi.python.org/pypi')
filename = os.path.join(os.path.dirname(__file__), 'plugins_index.txt') filename = os.path.join(os.path.dirname(__file__), 'plugins_index.txt')
generate_plugins_index(client, filename) url = 'http://pypi.python.org/pypi'
parser = OptionParser(description='Generates a restructured document of pytest plugins from PyPi')
parser.add_option('-f', '--filename', default=filename, help='output filename [default: %default]')
parser.add_option('-u', '--url', default=url, help='url of PyPi server to obtain data from [default: %default]')
(options, _) = parser.parse_args(argv[1:])
client = xmlrpclib.ServerProxy(options.url)
generate_plugins_index(client, options.filename)
print 'OK' print 'OK'
return 0 return 0

View File

@ -0,0 +1,88 @@
import os
import xmlrpclib
#===================================================================================================
# test_plugins_index
#===================================================================================================
def test_plugins_index(tmpdir, monkeypatch):
'''
Blackbox testing for plugins_index script. Calls main() generating a file and compares produced
output to expected.
.. note:: if the test fails, a file named `test_plugins_index.obtained` will be generated in
the same directory as this test file. Ensure the contents are correct and overwrite
the global `expected_output` with the new contents.
'''
import plugins_index
# dummy interface to xmlrpclib.ServerProxy
class DummyProxy(object):
expected_url = 'http://dummy.pypi'
def __init__(self, url):
assert url == self.expected_url
def search(self, query):
assert query == {'name' : 'pytest-'}
return [
{'name': 'pytest-plugin1', 'version' : '0.8'},
{'name': 'pytest-plugin1', 'version' : '1.0'},
{'name': 'pytest-plugin2', 'version' : '1.2'},
]
def release_data(self, package_name, version):
results = {
('pytest-plugin1', '1.0') : {
'package_url' : 'http://plugin1',
'release_url' : 'http://plugin1/1.0',
'author' : 'someone',
'author_email' : 'someone@py.com',
'summary' : 'some plugin',
},
('pytest-plugin2', '1.2') : {
'package_url' : 'http://plugin2',
'release_url' : 'http://plugin2/1.2',
'author' : 'other',
'author_email' : 'other@py.com',
'summary' : 'some other plugin',
},
}
return results[(package_name, version)]
monkeypatch.setattr(xmlrpclib, 'ServerProxy', DummyProxy, 'foo')
monkeypatch.setattr(plugins_index, '_get_today_as_str', lambda: '2013-10-20')
output_file = str(tmpdir.join('output.txt'))
assert plugins_index.main(['', '-f', output_file, '-u', DummyProxy.expected_url]) == 0
with file(output_file, 'rU') as f:
obtained_output = f.read()
if obtained_output != expected_output:
obtained_file = os.path.splitext(__file__)[0] + '.obtained'
with file(obtained_file, 'w') as f:
f.write(obtained_output)
assert obtained_output == expected_output
expected_output = '''\
.. _plugins_index:
List of Third-Party Plugins
===========================
==================================== ============================= ============================= ===================
Name Version Author Summary
==================================== ============================= ============================= ===================
`pytest-plugin1 <http://plugin1>`_ `1.0 <http://plugin1/1.0>`_ `someone <someone@py.com>`_ some plugin
`pytest-plugin2 <http://plugin2>`_ `1.2 <http://plugin2/1.2>`_ `other <other@py.com>`_ some other plugin
==================================== ============================= ============================= ===================
*(Updated on 2013-10-20)*
'''