Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@ jobs:
pip install .[dev]

- name: Run tests
run: nosetests --exe
run: pytest
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ dependencies = [

[project.optional-dependencies]
dev = [
"pynose",
"pytest",
"lxml",
]

Expand Down
57 changes: 41 additions & 16 deletions tests.py → tests/test_scraperwiki.py
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,48 @@
# scraperwiki.sql._State.echo = True
DB_NAME = 'scraperwiki.sqlite'

class Setup(TestCase):
def test_setup(self):
try:
os.remove('scraperwiki.sqlite')
except OSError:
pass
class DBTestCase(TestCase):
"""
Ensures database cleanup.
"""
def setUp(self):
self.clean_db()
super().setUp()

def clean_db(self):
if scraperwiki.sql._State._connection:
scraperwiki.sql._State._connection.close()
scraperwiki.sql._State._connection = None

if scraperwiki.sql._State.engine:
scraperwiki.sql._State.engine.dispose()
scraperwiki.sql._State.engine = None

if scraperwiki.sql._State._transaction:
scraperwiki.sql._State._transaction.rollback()
scraperwiki.sql._State._transaction = None

scraperwiki.sql._State.metadata = None
scraperwiki.sql._State.table = None
scraperwiki.sql._State.table_pending = None

if os.path.exists(DB_NAME):
try:
os.remove(DB_NAME)
except OSError:
pass


# called TestAAAWarning so that it gets run first by nosetests,
# which we need, otherwise the warning has already happened.
class TestAAAWarning(TestCase):
class TestAAAWarning(DBTestCase):
def test_save_no_warn(self):
with warnings.catch_warnings():
warnings.simplefilter("error")
scraperwiki.sql.save(['id'], dict(id=4, tumble='weed'),
table_name="warning_test")

class TestSaveGetVar(TestCase):
class TestSaveGetVar(DBTestCase):
def savegetvar(self, var):
scraperwiki.sql.save_var(u"weird\u1234", var)
self.assertEqual(scraperwiki.sql.get_var(u"weird\u1234"), var)
Expand Down Expand Up @@ -73,11 +98,11 @@ def test_save_multiple_values(self):
self.assertEqual(u'hello', scraperwiki.sql.get_var(u'foo\xc3'))
self.assertEqual(u'goodbye\u1234', scraperwiki.sql.get_var(u'bar'))

class TestGetNonexistantVar(TestCase):
class TestGetNonexistantVar(DBTestCase):
def test_get(self):
self.assertIsNone(scraperwiki.sql.get_var(u'meatball\xff'))

class TestSaveVar(TestCase):
class TestSaveVar(DBTestCase):
def setUp(self):
super(TestSaveVar, self).setUp()
scraperwiki.sql.save_var(u"birthday\xfe", u"\u1234November 30, 1888")
Expand All @@ -95,7 +120,7 @@ def test_insert(self):
observed = [(colname, value.decode('utf-8'), _type)]
self.assertEqual(observed, expected)

class SaveAndCheck(TestCase):
class SaveAndCheck(DBTestCase):
def save_and_check(self, dataIn, tableIn, dataOut, tableOut=None, twice=True):
if tableOut == None:
tableOut = '[' + tableIn + ']'
Expand All @@ -122,7 +147,7 @@ def save_and_check(self, dataIn, tableIn, dataOut, tableOut=None, twice=True):
self.assertListEqual(observed1, expected1)
self.assertListEqual(observed2, expected2)

class SaveAndSelect(TestCase):
class SaveAndSelect(DBTestCase):
def save_and_select(self, d):
scraperwiki.sql.save([], {u"foo\xdd": d})
observed = scraperwiki.sql.select(u'* FROM swdata')[0][u'foo\xdd']
Expand Down Expand Up @@ -175,7 +200,7 @@ def test_two(self):
uniquecol = indices[u"keys"].index(u'unique')
self.assertEqual(index[uniquecol], 1)

class TestSaveColumn(TestCase):
class TestSaveColumn(DBTestCase):
def test_add_column(self):
# Indicative for
# https://github.com/scraperwiki/scraperwiki-python/issues/64
Expand Down Expand Up @@ -275,7 +300,7 @@ def test_save_and_drop(self):
scraperwiki.sql.execute(u"DROP TABLE dropper\xaa")
scraperwiki.sql.save([], dict(foo=9), table_name=u"dropper\xaa")

class TestQuestionMark(TestCase):
class TestQuestionMark(DBTestCase):
def test_one_question_mark_with_nonlist(self):
scraperwiki.sql.execute(u'CREATE TABLE zhuozi\xaa (\xaa TEXT);')
scraperwiki.sql.execute(u'INSERT INTO zhuozi\xaa VALUES (?)', u'apple\xff')
Expand All @@ -299,7 +324,7 @@ def test_multiple_question_marks(self):
scraperwiki.sql.execute('DROP TABLE zhuozi')


class TestDateTime(TestCase):
class TestDateTime(DBTestCase):
def rawdate(self, table="swdata", column="datetime"):
connection = sqlite3.connect(DB_NAME)
cursor = connection.cursor()
Expand Down Expand Up @@ -351,7 +376,7 @@ def test_status(self):

self.assertEqual(scraperwiki.status('ok'), None)

class TestUnicodeColumns(TestCase):
class TestUnicodeColumns(DBTestCase):
maxDiff = None
def test_add_column_once_only(self):
scraperwiki.sqlite.save(data = {"i": 1, u"a\xa0b": 1}, unique_keys = ['i'])
Expand Down
Loading