def test_index_fails(): # Invalid index/table names - not str db = ItemDB(":memory:") for name in [(), 4, b"", [], {}]: with raises(TypeError): db.ensure_table("items", name) # Invalid index/table names - not an identifier db = ItemDB(":memory:") for name in ["foo bar", "foo-bar", "33", "foo!"]: with raises(ValueError): db.ensure_table("items", name) # Reserved for name in ["!_ob", "_ob"]: with raises(IndexError): db.ensure_table("items", name) # Cannot add a unique key filename = get_fresh_filename() db = ItemDB(filename).ensure_table("foo", "meh") with closing(db): assert "foo" in db.get_table_names() with raises(IndexError): db = ItemDB(filename).ensure_table("foo", "!key") # Cannot use a normal key as a unique key filename = get_fresh_filename() db = ItemDB(filename).ensure_table("foo", "key") with closing(db): assert "foo" in db.get_table_names() with raises(IndexError): db = ItemDB(filename).ensure_table("foo", "!key") # Cannot use a unique key as a normal key filename = get_fresh_filename() db = ItemDB(filename).ensure_table("foo", "!key") with closing(db): assert "foo" in db.get_table_names() with raises(IndexError): db = ItemDB(filename).ensure_table("foo", "key")
def test_create_tables(): # Empty database, zero tables db = ItemDB(":memory:") assert db.get_table_names() == [] # no tables # Two tables db = ItemDB(":memory:").ensure_table("foo", "key").ensure_table("bar") assert db.get_table_names() == ["bar", "foo"] assert db.count_all("foo") == 0 assert db.count_all("bar") == 0
def test_init_write(): db = ItemDB(":memory:").ensure_table("items", "!id", "mt") with raises(IOError): # Put needs to be used under a context db.put("items", dict(id=1, mt=100)) with raises(KeyError): # Invalid table with db: db.put("foo", dict(id=1, mt=100)) with raises(TypeError): # Note a dict with db: db.put("items", "not a dict") with raises(IndexError): # id is required but missing with db: db.put("items", dict(mt=100)) with raises(IOError): # Cant enter twice with db: with db: pass with db: db.put("items", dict(id=1, mt=100)) db.put("items", dict(id=2, mt=100, value=42)) db.put("items", dict(id=3, value=42)) assert len(db.select_all("items")) == 3 assert db.count_all("items") == 3 assert len(db.get_table_names()) == 1 assert len(db.select("items", "mt == 100")) == 2 assert len(db.select("items", "mt is NULL")) == 1 assert db.count("items", "mt == 100") == 2 assert db.count("items", "mt is NULL") == 1 with raises(IndexError): # No index for value db.select("items", "value == 42") with raises(IndexError): # No index for value db.count("items", "value == 42") with raises(sqlite3.OperationalError): # Malformed SQL db.select("items", "id >>> 42") with raises(sqlite3.OperationalError): # Malformed SQL db.count("items", "id >>> 42")
def test_init_read(): # Empty database, zero tables db = ItemDB(":memory:") assert db.get_table_names() == [] # no tables with raises(KeyError): db.select("foo", "key is NULL") with raises(KeyError): db.select_all("foo") with raises(KeyError): db.count_all("foo") # Two tables db = ItemDB(":memory:").ensure_table("foo", "key").ensure_table("bar") assert db.count_all("foo") == 0 assert db.count_all("bar") == 0