More tests, based on bottle-sqlalchemy unit and regression tests.
This commit is contained in:
parent
a746772bf9
commit
2643fb858f
70
test.py
70
test.py
|
@ -1,24 +1,33 @@
|
||||||
|
import os
|
||||||
import unittest
|
import unittest
|
||||||
import sqlite3
|
import sqlite3
|
||||||
|
import tempfile
|
||||||
|
|
||||||
import bottle
|
import bottle
|
||||||
from bottle.ext import sqlite
|
from bottle.ext import sqlite
|
||||||
|
|
||||||
|
|
||||||
class SQLiteTest(unittest.TestCase):
|
class SQLiteTest(unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.app = bottle.Bottle(catchall=False)
|
self.app = bottle.Bottle(catchall=False)
|
||||||
|
_, dbfile = tempfile.mkstemp(suffix='.sqlite')
|
||||||
|
self.plugin = self.app.install(sqlite.Plugin(dbfile=dbfile))
|
||||||
|
|
||||||
|
self.conn = sqlite3.connect(dbfile)
|
||||||
|
self.conn.execute("CREATE TABLE todo (id INTEGER PRIMARY KEY, task char(100) NOT NULL)")
|
||||||
|
self.conn.commit()
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
os.unlink(self.plugin.dbfile)
|
||||||
|
|
||||||
def test_with_keyword(self):
|
def test_with_keyword(self):
|
||||||
self.plugin = self.app.install(sqlite.Plugin())
|
|
||||||
|
|
||||||
@self.app.get('/')
|
@self.app.get('/')
|
||||||
def test(db):
|
def test(db):
|
||||||
self.assertEqual(type(db), type(sqlite3.connect(':memory:')))
|
self.assertEqual(type(db), type(sqlite3.connect(':memory:')))
|
||||||
self._request('/')
|
self._request('/')
|
||||||
|
|
||||||
def test_without_keyword(self):
|
def test_without_keyword(self):
|
||||||
self.plugin = self.app.install(sqlite.Plugin())
|
|
||||||
|
|
||||||
@self.app.get('/')
|
@self.app.get('/')
|
||||||
def test_1():
|
def test_1():
|
||||||
pass
|
pass
|
||||||
|
@ -30,7 +39,6 @@ class SQLiteTest(unittest.TestCase):
|
||||||
self._request('/2')
|
self._request('/2')
|
||||||
|
|
||||||
def test_install_conflicts(self):
|
def test_install_conflicts(self):
|
||||||
self.app.install(sqlite.Plugin())
|
|
||||||
self.app.install(sqlite.Plugin(keyword='db2'))
|
self.app.install(sqlite.Plugin(keyword='db2'))
|
||||||
|
|
||||||
@self.app.get('/')
|
@self.app.get('/')
|
||||||
|
@ -41,16 +49,60 @@ class SQLiteTest(unittest.TestCase):
|
||||||
self._request('/')
|
self._request('/')
|
||||||
|
|
||||||
def test_raise_sqlite_integrity_error(self):
|
def test_raise_sqlite_integrity_error(self):
|
||||||
self.plugin = self.app.install(sqlite.Plugin())
|
|
||||||
|
|
||||||
@self.app.get('/')
|
@self.app.get('/')
|
||||||
def test(db):
|
def test(db):
|
||||||
raise sqlite3.IntegrityError()
|
# task can not be null, raise an IntegrityError
|
||||||
|
db.execute("INSERT INTO todo (id) VALUES (1)")
|
||||||
|
|
||||||
|
# TODO: assert HTTPError 500
|
||||||
self._request('/')
|
self._request('/')
|
||||||
|
self.assert_records(0)
|
||||||
|
|
||||||
|
def test_autocommit(self):
|
||||||
|
@self.app.get('/')
|
||||||
|
def test(db):
|
||||||
|
self._insert_into(db)
|
||||||
|
|
||||||
|
self._request('/')
|
||||||
|
self.assert_records(1)
|
||||||
|
|
||||||
|
def test_not_autocommit(self):
|
||||||
|
@self.app.get('/', sqlite={'autocommit': False})
|
||||||
|
def test(db):
|
||||||
|
self._insert_into(db)
|
||||||
|
|
||||||
|
self._request('/')
|
||||||
|
self.assert_records(0)
|
||||||
|
|
||||||
|
def test_commit_on_redirect(self):
|
||||||
|
@self.app.get('/')
|
||||||
|
def test(db):
|
||||||
|
self._insert_into(db)
|
||||||
|
bottle.redirect('/')
|
||||||
|
|
||||||
|
self._request('/')
|
||||||
|
self.assert_records(1)
|
||||||
|
|
||||||
|
def test_commit_on_abort(self):
|
||||||
|
@self.app.get('/')
|
||||||
|
def test(db):
|
||||||
|
self._insert_into(db)
|
||||||
|
bottle.abort()
|
||||||
|
|
||||||
|
self._request('/')
|
||||||
|
self.assert_records(0)
|
||||||
|
|
||||||
def _request(self, path, method='GET'):
|
def _request(self, path, method='GET'):
|
||||||
self.app({'PATH_INFO': path, 'REQUEST_METHOD': method},
|
return self.app({'PATH_INFO': path, 'REQUEST_METHOD': method},
|
||||||
lambda x, y: None)
|
lambda x, y: None)
|
||||||
|
|
||||||
|
def _insert_into(self, db):
|
||||||
|
sql = "INSERT INTO todo (task) VALUES ('PASS')"
|
||||||
|
db.execute(sql)
|
||||||
|
|
||||||
|
def assert_records(self, count):
|
||||||
|
cursor = self.conn.execute("SELECT COUNT(*) FROM todo")
|
||||||
|
self.assertEqual((count,), cursor.fetchone())
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user