mod test_db;

use crate::test_db::TestDb;
use agdb::DbElement;
use agdb::DbId;
use agdb::QueryBuilder;

#[test]
fn select_node_count_empty() {
    let db = TestDb::new();

    db.exec_elements(
        QueryBuilder::select().node_count().query(),
        &[DbElement {
            id: DbId(0),
            from: None,
            to: None,
            values: vec![("node_count", 0_u64).into()],
        }],
    );
}

#[test]
fn select_node_count() {
    let mut db = TestDb::new();

    db.exec_mut(QueryBuilder::insert().nodes().count(5).query(), 5);

    db.exec_elements(
        QueryBuilder::select().node_count().query(),
        &[DbElement {
            id: DbId(0),
            from: None,
            to: None,
            values: vec![("node_count", 5_u64).into()],
        }],
    );
}

#[test]
fn select_node_count_after_removal() {
    let mut db = TestDb::new();

    db.exec_mut(QueryBuilder::insert().nodes().count(5).query(), 5);
    db.exec_mut(QueryBuilder::remove().ids([2, 4]).query(), -2);

    db.exec_elements(
        QueryBuilder::select().node_count().query(),
        &[DbElement {
            id: DbId(0),
            from: None,
            to: None,
            values: vec![("node_count", 3_u64).into()],
        }],
    );
}
