included test for plugins_index and added command line options
--HG-- branch : plugins-index
This commit is contained in:
parent
d92322a574
commit
5b2b71bfd4
|
@ -8,6 +8,7 @@ from collections import namedtuple
|
|||
import datetime
|
||||
from distutils.version import LooseVersion
|
||||
import itertools
|
||||
from optparse import OptionParser
|
||||
import os
|
||||
import sys
|
||||
import xmlrpclib
|
||||
|
@ -126,7 +127,17 @@ def generate_plugins_index_from_table(filename, headers, rows):
|
|||
print >> f, get_row_limiter('=')
|
||||
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
|
||||
#===================================================================================================
|
||||
def main(argv):
|
||||
client = xmlrpclib.ServerProxy('http://pypi.python.org/pypi')
|
||||
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'
|
||||
return 0
|
||||
|
||||
|
|
|
@ -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)*
|
||||
'''
|
Loading…
Reference in New Issue