More unit tests for table.
This commit is contained in:
parent
57b124365b
commit
0f81dbe52c
@ -53,7 +53,8 @@ class Table(object):
|
|||||||
|
|
||||||
def delete(self, **kw):
|
def delete(self, **kw):
|
||||||
q = self._args_to_clause(kw)
|
q = self._args_to_clause(kw)
|
||||||
self.database.engine.execute(q)
|
stmt = self.table.delete(q)
|
||||||
|
self.database.engine.execute(stmt)
|
||||||
|
|
||||||
def _ensure_columns(self, row, types={}):
|
def _ensure_columns(self, row, types={}):
|
||||||
for column in set(row.keys()) - set(self.table.columns.keys()):
|
for column in set(row.keys()) - set(self.table.columns.keys()):
|
||||||
@ -66,7 +67,7 @@ class Table(object):
|
|||||||
self.create_column(column, _type)
|
self.create_column(column, _type)
|
||||||
|
|
||||||
def _args_to_clause(self, args):
|
def _args_to_clause(self, args):
|
||||||
self._ensure_columns(kw)
|
self._ensure_columns(args)
|
||||||
clauses = []
|
clauses = []
|
||||||
for k, v in args.items():
|
for k, v in args.items():
|
||||||
clauses.append(self.table.c[k] == v)
|
clauses.append(self.table.c[k] == v)
|
||||||
@ -95,16 +96,15 @@ class Table(object):
|
|||||||
self.indexes[name] = idx
|
self.indexes[name] = idx
|
||||||
return idx
|
return idx
|
||||||
|
|
||||||
def find_one(**kw):
|
def find_one(self, **kw):
|
||||||
res = list(self.find(self.database.engine,
|
res = list(self.find(_limit=1, **kw))
|
||||||
self.table, _limit=1, **kw))
|
|
||||||
if not len(res):
|
if not len(res):
|
||||||
return None
|
return None
|
||||||
return res[0]
|
return res[0]
|
||||||
|
|
||||||
def find(engine, _limit=None, _step=5000, _offset=0,
|
def find(self, _limit=None, _step=5000, _offset=0,
|
||||||
order_by='id', **kw):
|
order_by='id', **kw):
|
||||||
order_by = [table.c[order_by].asc()]
|
order_by = [self.table.c[order_by].asc()]
|
||||||
args = self._args_to_clause(kw)
|
args = self._args_to_clause(kw)
|
||||||
|
|
||||||
for i in count():
|
for i in count():
|
||||||
|
|||||||
93
test.py
93
test.py
@ -1,93 +0,0 @@
|
|||||||
import unittest
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from dataset import *
|
|
||||||
|
|
||||||
TEST_DATA = [
|
|
||||||
{
|
|
||||||
'date': datetime(2011, 01, 01),
|
|
||||||
'temperature': 1,
|
|
||||||
'place': 'Galway'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'date': datetime(2011, 01, 02),
|
|
||||||
'temperature': -1,
|
|
||||||
'place': 'Galway'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'date': datetime(2011, 01, 03),
|
|
||||||
'temperature': 0,
|
|
||||||
'place': 'Galway'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'date': datetime(2011, 01, 01),
|
|
||||||
'temperature': 6,
|
|
||||||
'place': 'Berkeley'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'date': datetime(2011, 01, 02),
|
|
||||||
'temperature': 8,
|
|
||||||
'place': 'Berkeley'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'date': datetime(2011, 01, 03),
|
|
||||||
'temperature': 5,
|
|
||||||
'place': 'Berkeley'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
class TableTestCase(unittest.TestCase):
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
self.engine = connect('sqlite:///:memory:')
|
|
||||||
|
|
||||||
def test_create_table(self):
|
|
||||||
table = create_table(self.engine, 'foo')
|
|
||||||
assert table.exists()
|
|
||||||
assert len(table.columns) == 1, table.columns
|
|
||||||
|
|
||||||
|
|
||||||
class QueryTestCase(unittest.TestCase):
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
self.engine = connect('sqlite:///:memory:')
|
|
||||||
self.table = create_table(self.engine, 'weather')
|
|
||||||
for entry in TEST_DATA:
|
|
||||||
upsert(self.engine, self.table, entry, ['place', 'date'],
|
|
||||||
ensure=True)
|
|
||||||
|
|
||||||
def test_all(self):
|
|
||||||
x = list(all(self.engine, self.table))
|
|
||||||
assert len(x) == len(TEST_DATA), len(x)
|
|
||||||
|
|
||||||
def test_distinct(self):
|
|
||||||
x = list(distinct(self.engine, self.table, 'place'))
|
|
||||||
assert len(x) == 2, x
|
|
||||||
p = [i['place'] for i in x]
|
|
||||||
assert 'Berkeley' in p, p
|
|
||||||
assert 'Galway' in p, p
|
|
||||||
|
|
||||||
|
|
||||||
class ObjectAPITestCase(unittest.TestCase):
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
db = create('sqlite:///:memory:')
|
|
||||||
self.table = db.get_table('weather2')
|
|
||||||
for entry in TEST_DATA:
|
|
||||||
self.table.upsert(entry, ['place', 'date'], ensure=True)
|
|
||||||
|
|
||||||
def test_all(self):
|
|
||||||
x = list(self.table.all())
|
|
||||||
assert len(x) == len(TEST_DATA), len(x)
|
|
||||||
|
|
||||||
def test_distinct(self):
|
|
||||||
x = list(self.table.distinct('place'))
|
|
||||||
assert len(x) == 2, x
|
|
||||||
p = [i['place'] for i in x]
|
|
||||||
assert 'Berkeley' in p, p
|
|
||||||
assert 'Galway' in p, p
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
unittest.main()
|
|
||||||
@ -44,6 +44,49 @@ class TableTestCase(unittest.TestCase):
|
|||||||
)
|
)
|
||||||
assert len(self.tbl)==len(TEST_DATA)+1, len(self.tbl)
|
assert len(self.tbl)==len(TEST_DATA)+1, len(self.tbl)
|
||||||
|
|
||||||
|
def test_upsert(self):
|
||||||
|
self.tbl.upsert({
|
||||||
|
'date': datetime(2011, 01, 02),
|
||||||
|
'temperature': -10,
|
||||||
|
'place': 'Berlin'},
|
||||||
|
['place']
|
||||||
|
)
|
||||||
|
assert len(self.tbl)==len(TEST_DATA)+1, len(self.tbl)
|
||||||
|
self.tbl.upsert({
|
||||||
|
'date': datetime(2011, 01, 02),
|
||||||
|
'temperature': -10,
|
||||||
|
'place': 'Berlin'},
|
||||||
|
['place']
|
||||||
|
)
|
||||||
|
assert len(self.tbl)==len(TEST_DATA)+1, len(self.tbl)
|
||||||
|
|
||||||
|
def test_delete(self):
|
||||||
|
self.tbl.insert({
|
||||||
|
'date': datetime(2011, 01, 02),
|
||||||
|
'temperature': -10,
|
||||||
|
'place': 'Berlin'}
|
||||||
|
)
|
||||||
|
assert len(self.tbl)==len(TEST_DATA)+1, len(self.tbl)
|
||||||
|
self.tbl.delete(place='Berlin')
|
||||||
|
assert len(self.tbl)==len(TEST_DATA), len(self.tbl)
|
||||||
|
|
||||||
|
def test_find_one(self):
|
||||||
|
self.tbl.insert({
|
||||||
|
'date': datetime(2011, 01, 02),
|
||||||
|
'temperature': -10,
|
||||||
|
'place': 'Berlin'}
|
||||||
|
)
|
||||||
|
d = self.tbl.find_one(place='Berlin')
|
||||||
|
assert d['temperature']==-10, d
|
||||||
|
d = self.tbl.find_one(place='Atlantis')
|
||||||
|
assert d is None, d
|
||||||
|
|
||||||
|
def test_find(self):
|
||||||
|
ds = list(self.tbl.find(place='Berkeley'))
|
||||||
|
assert len(ds)==3, ds
|
||||||
|
ds = list(self.tbl.find(place='Berkeley', _limit=2))
|
||||||
|
assert len(ds)==2, ds
|
||||||
|
|
||||||
def test_distinct(self):
|
def test_distinct(self):
|
||||||
x = list(self.tbl.distinct('place'))
|
x = list(self.tbl.distinct('place'))
|
||||||
assert len(x)==2, x
|
assert len(x)==2, x
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user