summaryrefslogtreecommitdiff
path: root/schist_core/schist_models/tests/budget_period_unit.rs
blob: d5f155362897e2e518aee3418b1f85da819c0f70 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
mod common;

use anyhow::Result;
use common::test_context::TestContext;
use diesel::prelude::{Insertable, Queryable};
use diesel::{
    sql_query, Connection, ExpressionMethods, QueryDsl, RunQueryDsl, Selectable, SelectableHelper,
    SqliteConnection,
};
use schist_models::BudgetPeriodUnit;

diesel::table! {
    budget_period_unit_test (id) {
        id -> Integer,
        budget_period_unit -> Text,
    }
}

#[derive(Insertable, Queryable, Selectable, Clone)]
#[diesel(table_name = budget_period_unit_test)]
pub struct BudgetPeriodUnitTest {
    pub id: i32,
    pub budget_period_unit: BudgetPeriodUnit,
}

fn new_test_context() -> Result<TestContext> {
    let test_context = TestContext::new();
    let connection = &mut SqliteConnection::establish(&test_context.db_url)?;
    let query =
        "CREATE TABLE budget_period_unit_test(id INTEGER PRIMARY KEY, budget_period_unit TEXT);";
    sql_query(query).execute(connection)?;
    Ok(test_context)
}

fn insert_budget_period_unit(
    id: i32,
    budget_period_unit: &BudgetPeriodUnit,
    connection: &mut SqliteConnection,
) -> Result<usize> {
    let model = BudgetPeriodUnitTest {
        id,
        budget_period_unit: budget_period_unit.clone(),
    };
    let num_rows_inserted =
        diesel::insert_into(budget_period_unit_test::dsl::budget_period_unit_test)
            .values(&[model])
            .execute(connection)?;
    Ok(num_rows_inserted)
}

fn get_budget_period_unit(
    id: i32,
    connection: &mut SqliteConnection,
) -> Result<BudgetPeriodUnitTest> {
    let budget_period_unit: Vec<BudgetPeriodUnitTest> =
        budget_period_unit_test::dsl::budget_period_unit_test
            .select(BudgetPeriodUnitTest::as_select())
            .filter(budget_period_unit_test::id.eq(id))
            .load(connection)?;
    Ok(budget_period_unit[0].clone())
}

#[test]
fn when_insert_day_and_select_then_returns_day() {
    let test_context = new_test_context().unwrap();
    let connection = &mut SqliteConnection::establish(&test_context.db_url).unwrap();

    let budget_period_unit = BudgetPeriodUnit::Day;
    let num_rows_inserted = insert_budget_period_unit(0, &budget_period_unit, connection);

    assert!(num_rows_inserted.is_ok());
    let num_rows_inserted = num_rows_inserted.unwrap();
    assert_eq!(num_rows_inserted, 1);

    let budget_period_unit_returned = get_budget_period_unit(0, connection);

    assert!(budget_period_unit_returned.is_ok());
    let budget_period_unit_returned = budget_period_unit_returned.unwrap();
    assert_eq!(
        BudgetPeriodUnit::Day,
        budget_period_unit_returned.budget_period_unit
    );
}

#[test]
fn when_insert_month_and_select_then_returns_month() {
    let test_context = new_test_context().unwrap();
    let connection = &mut SqliteConnection::establish(&test_context.db_url).unwrap();

    let budget_period_unit = BudgetPeriodUnit::Month;
    let num_rows_inserted = insert_budget_period_unit(0, &budget_period_unit, connection);

    assert!(num_rows_inserted.is_ok());
    let num_rows_inserted = num_rows_inserted.unwrap();
    assert_eq!(num_rows_inserted, 1);

    let budget_period_unit_returned = get_budget_period_unit(0, connection);

    assert!(budget_period_unit_returned.is_ok());
    let budget_period_unit_returned = budget_period_unit_returned.unwrap();
    assert_eq!(
        BudgetPeriodUnit::Month,
        budget_period_unit_returned.budget_period_unit
    );
}