def test_upsert_modify_check(): table = setup() table.clear() assert not table.upsert({"i": 1, "j": 1}, ["i"]) print(table.all()) row = table.find_one(i=1, j=1) assert row print("test id", row["_id"]) row["i"] = 3 row["j"] = 2 assert table.upsert(row) print(table.all()) assert len(table) == 1 assert not table.upsert(row) assert len(table) == 1 print(table.all()) assert table.find_one(i=3, j=2) assert not table.find_one(i=1, j=1) row2 = table.find_one(i=3, j=2) assert row assert row2["i"] == 3 assert row2["j"] == 2
def test_find_expr(): table = setup() table.clear() table.insert({"i": 1, "j": 1}) table.insert({"i": 2, "j": 2}) table.insert({"i": 1, "j": 3}) table.insert({"i": 2, "j": 4}) rows = table.find(j=gt(2)) assert len(rows) == 2 rows = table.find(j=gte(2)) assert len(rows) == 3 rows = table.find(i=lt(2)) assert len(rows) == 2 rows = table.find(i=lte(2)) assert len(rows) == 4 rows = table.find(j=(gt(1), lt(3))) assert len(rows) == 1 rows = table.find(j=(gt(1), lte(3))) assert len(rows) == 2 rows = table.find(j=(gt(1), lte(3)), i=lt(2)) assert len(rows) == 1 rows = table.find(j=in_list(2, 4)) assert len(rows) == 2 rows = table.find(j=not_in_list(1, 2, 4)) assert len(rows) == 1
def test_delete(): table = setup() table.clear() table.insert({"test": True}) assert table.find(test=True) assert table.delete(test=True) assert not table.find(test=True)
def test_insert(): table = setup() len_before_insert = len(table) table.insert({"a": "b"}) len_after_insert = len(table) assert len_before_insert + 1 == len_after_insert
def test_clear(): table = setup() table.insert({"a": "b"}) table.insert({"a": "b"}) table.insert({"a": "b"}) table.clear() assert len(table) == 0
def test_update_race(start_race): table_main = setup() table_main.clear() assert table_main.insert({"i": 1, "locked": False}) def test_update(): table = setup() assert table.update({"i": 1, "locked": True}, ["i"]) start_race(threads_num=1, target=test_update)
def test_lock_race_success(start_race): table = TestObjectTable(setup()) table.clear() test_object = TestObject(first_name="Max", age=10) assert table.create(test_object) def test_lock(): assert table.lock(test_object) start_race(threads_num=1, target=test_lock)
def test_upsert(): table = setup() table.clear() assert not table.upsert({"i": 1, "j": 1}, ["i"]) row = table.find_one(i=1, j=1) assert row assert row["i"] == 1 assert row["j"] == 1 assert not table.upsert({"test": 1}, ["test"])
def test_delete(): table = setup() table.clear() table.insert({"i": 1, "j": 1}) table.insert({"i": 2, "j": 1}) table.insert({"i": 1, "j": 2}) table.insert({"i": 2, "j": 2}) table.delete(i=1) assert len(table) == 2
def test_lock(): table = TestObjectTable(setup()) table.clear() test_object = TestObject(first_name="Max", age=10) assert table.create(test_object) assert table.lock(test_object) assert not table.lock(test_object) assert table.release(test_object) assert not table.release(test_object)
def test_lock_race_fail(start_race): for i in range(5): table = TestObjectTable(setup()) table.clear() test_object = TestObject(first_name="Max", age=10) assert table.create(test_object) def test_lock(): assert table.lock(test_object) with pytest.raises(Exception) as e: start_race(threads_num=2, target=test_lock)
def test_upsert_race_fail(start_race): table_main = setup() table_main.clear() assert table_main.insert({"i": 1, "locked": False}) def test_upsert(): table = setup() assert table.upsert({"i": 1, "locked": True}, ["i"]) with pytest.raises(Exception) as e: start_race(threads_num=2, target=test_upsert) assert "Table.upsert" in str(e) assert "AssertionError" in str(e) assert "where False =" in str(e)
def test_find_none(): table = setup() table.clear() rows = table.find(j=gt(2)) assert not rows rows = table.find() assert not rows rows = table.find_one(j=gt(2)) assert not rows rows = table.find_one() assert not rows
def test_all(): table = setup() table.clear() table.insert({"j": 1, "k": 1}) table.insert({"j": 2, "k": 1}) table.insert({"j": 1, "k": 2}) table.insert({"j": 2, "k": 2}) elements = table.all() assert len(elements) == 4 for element in elements: assert element["j"] assert element["k"]
def test_upsert_non_id(): table = setup() table.clear() assert not table.upsert({"i": 1, "j": 1}, key=["i"]) row = table.find_one(i=1, j=1) row["k"] = 4 del row["_id"] assert table.upsert(row, ["i"]) == 1 assert len(table) == 1 row2 = table.find_one(i=1, j=1) assert row2["i"] == 1 assert row2["j"] == 1 print(table.all()) assert row2["k"] == 4 assert len(table) == 1
def test_find(): table = setup() table.clear() table.insert({"i": 1, "j": 1}) table.insert({"i": 2, "j": 1}) table.insert({"i": 1, "j": 2}) table.insert({"i": 2, "j": 2}) rows = table.find(i=1) assert len(rows) == 2 assert rows[0]["i"] == 1 assert rows[1]["i"] == 1 rows = table.find(i=1, j=1) assert len(rows) == 1 assert rows[0]["i"] == 1 assert rows[0]["j"] == 1
def test_model(): table = TestObjectTable(setup()) table.clear() obj0 = TestObject(first_name="ethan", age=15) table.create(obj0) try: obj0.first_name = "test" except ValueError: pass else: raise ValueError("Immutable field was set") obj0.age = 10 table.update(obj0) obj1 = table.get_by_id(obj0.id) assert obj0 == obj1
def test_table(): table = setup() assert isinstance(table, Table)
def test_upsert(): table = setup() assert table.upsert({"i": 1, "locked": True}, ["i"])
def setup_model(): table = TestObjectTable(setup()) table.clear() return table