157 lines
6.7 KiB
Python
157 lines
6.7 KiB
Python
from datetime import datetime
|
|
import os
|
|
import unittest
|
|
|
|
from mock import call, MagicMock, patch
|
|
|
|
from yarg import newest_packages, latest_updated_packages, HTTPError
|
|
from yarg.parse import _get, Package
|
|
|
|
|
|
class GoodNewestResponse(object):
|
|
status_code = 200
|
|
xml = os.path.join(os.path.dirname(__file__),
|
|
'newest.xml')
|
|
content = open(xml).read()
|
|
|
|
|
|
class GoodUpdatedResponse(object):
|
|
status_code = 200
|
|
xml = os.path.join(os.path.dirname(__file__),
|
|
'updated.xml')
|
|
content = open(xml).read()
|
|
|
|
|
|
class BadResponse(object):
|
|
status_code = 300
|
|
reason = "Mocked"
|
|
|
|
|
|
class TestParse(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.newest = self.setup_newest()
|
|
self.updated = self.setup_updated()
|
|
|
|
def setup_newest(self):
|
|
item1 = {'name': 'gobble',
|
|
'url': 'http://pypi.python.org/pypi/gobble',
|
|
'description': 'Automatic functional testing for CLI apps.',
|
|
'date': '09 Aug 2014 06:57:42 GMT'}
|
|
item2 = {'name': 'flask_autorest',
|
|
'url': 'http://pypi.python.org/pypi/flask_autorest',
|
|
'description': 'auto create restful apis for database, with the help of dataset.',
|
|
'date': '09 Aug 2014 05:24:58 GMT'}
|
|
item3 = {'name': 'ranrod',
|
|
'url': 'http://pypi.python.org/pypi/ranrod',
|
|
'description': 'download route53 hosted zones as local json files',
|
|
'date': '09 Aug 2014 05:20:21 GMT'}
|
|
return [Package(item1), Package(item2), Package(item3)]
|
|
|
|
def setup_updated(self):
|
|
item1 = {'name': 'pycoin',
|
|
'version': '0.50',
|
|
'url': 'http://pypi.python.org/pypi/pycoin/0.50',
|
|
'description': 'Utilities for Bitcoin and altcoin addresses and transaction manipulation.',
|
|
'date': '09 Aug 2014 08:40:20 GMT'}
|
|
item2 = {'name': 'django-signup',
|
|
'version': '0.6.0',
|
|
'url': 'http://pypi.python.org/pypi/django-signup/0.6.0',
|
|
'description': 'A user registration app for Django with support for custom user models',
|
|
'date': '09 Aug 2014 08:33:53 GMT'}
|
|
item3 = {'name': 'pyADC',
|
|
'version': '0.1.3',
|
|
'url': 'http://pypi.python.org/pypi/pyADC/0.1.3',
|
|
'description': 'Python implementation of the ADC(S) Protocol for Direct Connect.',
|
|
'date': '09 Aug 2014 08:19:56 GMT'}
|
|
return [Package(item1), Package(item2), Package(item3)]
|
|
|
|
@patch('requests.get', return_value=BadResponse)
|
|
def test_newest_packages_bad_get(self, get_mock):
|
|
# Python 2.6....
|
|
try:
|
|
newest_packages()
|
|
except HTTPError as e:
|
|
self.assertEqual(300, e.status_code)
|
|
self.assertEqual(e.status_code, e.errno)
|
|
self.assertEqual(e.reason, e.message)
|
|
|
|
@patch('requests.get', return_value=BadResponse)
|
|
def test_updated_packages_bad_get(self, get_mock):
|
|
# Python 2.6....
|
|
try:
|
|
latest_updated_packages()
|
|
except HTTPError as e:
|
|
self.assertEqual(300, e.status_code)
|
|
self.assertEqual(e.status_code, e.errno)
|
|
self.assertEqual(e.reason, e.message)
|
|
|
|
@patch('requests.get', return_value=GoodNewestResponse)
|
|
def test_newest_packages(self, get_mock):
|
|
p = newest_packages()
|
|
self.assertEqual(call('https://pypi.python.org/pypi?%3Aaction=packages_rss'),
|
|
get_mock.call_args)
|
|
self.assertEqual(self.newest[0].name, p[0].name)
|
|
self.assertEqual(self.newest[1].name, p[1].name)
|
|
self.assertEqual(self.newest[2].name, p[2].name)
|
|
|
|
@patch('requests.get', return_value=GoodNewestResponse)
|
|
def test_newest_package(self, get_mock):
|
|
p = newest_packages()
|
|
self.assertEqual(call('https://pypi.python.org/pypi?%3Aaction=packages_rss'),
|
|
get_mock.call_args)
|
|
self.assertEqual('gobble', p[0].name)
|
|
self.assertEqual('http://pypi.python.org/pypi/gobble', p[0].url)
|
|
self.assertEqual('Automatic functional testing for CLI apps.',
|
|
p[0].description)
|
|
self.assertEqual(datetime.strptime('09 Aug 2014 06:57:42 GMT',
|
|
"%d %b %Y %H:%M:%S %Z"),
|
|
p[0].date)
|
|
|
|
@patch('requests.get', return_value=GoodNewestResponse)
|
|
def test_newest_package_repr(self, get_mock):
|
|
p = newest_packages()
|
|
self.assertEqual(call('https://pypi.python.org/pypi?%3Aaction=packages_rss'),
|
|
get_mock.call_args)
|
|
self.assertEqual('<Package gobble>', p[0].__repr__())
|
|
|
|
@patch('requests.get', return_value=GoodNewestResponse)
|
|
def test_newest_package_version(self, get_mock):
|
|
p = newest_packages()
|
|
self.assertEqual(call('https://pypi.python.org/pypi?%3Aaction=packages_rss'),
|
|
get_mock.call_args)
|
|
self.assertEqual(None, p[0].version)
|
|
|
|
@patch('requests.get', return_value=GoodUpdatedResponse)
|
|
def test_updated_packages(self, get_mock):
|
|
p = latest_updated_packages()
|
|
self.assertEqual(call('https://pypi.python.org/pypi?%3Aaction=rss'),
|
|
get_mock.call_args)
|
|
self.assertEqual(self.updated[0].name, p[0].name)
|
|
self.assertEqual(self.updated[0].version, p[0].version)
|
|
self.assertEqual(self.updated[1].name, p[1].name)
|
|
self.assertEqual(self.updated[1].version, p[1].version)
|
|
self.assertEqual(self.updated[2].name, p[2].name)
|
|
self.assertEqual(self.updated[2].version, p[2].version)
|
|
|
|
@patch('requests.get', return_value=GoodUpdatedResponse)
|
|
def test_updated_package(self, get_mock):
|
|
p = latest_updated_packages()
|
|
self.assertEqual(call('https://pypi.python.org/pypi?%3Aaction=rss'),
|
|
get_mock.call_args)
|
|
self.assertEqual('pycoin', p[0].name)
|
|
self.assertEqual('0.50', p[0].version)
|
|
self.assertEqual('http://pypi.python.org/pypi/pycoin/0.50', p[0].url)
|
|
self.assertEqual('Utilities for Bitcoin and altcoin addresses and transaction manipulation.',
|
|
p[0].description)
|
|
self.assertEqual(datetime.strptime('09 Aug 2014 08:40:20 GMT',
|
|
"%d %b %Y %H:%M:%S %Z"),
|
|
p[0].date)
|
|
|
|
@patch('requests.get', return_value=GoodUpdatedResponse)
|
|
def test_updated_package_repr(self, get_mock):
|
|
p = latest_updated_packages()
|
|
self.assertEqual(call('https://pypi.python.org/pypi?%3Aaction=rss'),
|
|
get_mock.call_args)
|
|
self.assertEqual('<Package pycoin>', p[0].__repr__())
|