示例#1
0
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")
示例#2
0
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
示例#3
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")
示例#4
0
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