1
//! Tests for mutation-form builders (delete-transaction, set-account-tag, set-transaction-tag).
2

            
3
use crate::eval::{
4
    build_convert_amount_form, build_delete_transaction_form, build_set_account_tag_form,
5
    build_set_transaction_tag_form,
6
};
7

            
8
#[test]
9
1
fn build_delete_transaction_form_produces_correct_form() {
10
1
    let id = "550e8400-e29b-41d4-a716-446655440001";
11
1
    let form = build_delete_transaction_form(id);
12
1
    assert_eq!(form, format!("(delete-transaction \"{id}\")"));
13
1
}
14

            
15
#[test]
16
1
fn build_delete_transaction_form_escapes_special_chars() {
17
1
    let form = build_delete_transaction_form("id\"with\\quotes");
18
1
    assert_eq!(form, r#"(delete-transaction "id\"with\\quotes")"#);
19
1
}
20

            
21
#[test]
22
1
fn build_set_account_tag_form_produces_correct_form() {
23
1
    let id = "550e8400-e29b-41d4-a716-446655440002";
24
1
    let form = build_set_account_tag_form(id, "category", "expenses");
25
1
    assert_eq!(
26
        form,
27
1
        format!("(set-account-tag \"{id}\" \"category\" \"expenses\")")
28
    );
29
1
}
30

            
31
#[test]
32
1
fn build_set_account_tag_form_escapes_name_and_value() {
33
1
    let form = build_set_account_tag_form("abc", r#"k"ey"#, r#"val\ue"#);
34
1
    assert_eq!(form, r#"(set-account-tag "abc" "k\"ey" "val\\ue")"#);
35
1
}
36

            
37
#[test]
38
1
fn build_set_transaction_tag_form_produces_correct_form() {
39
1
    let id = "550e8400-e29b-41d4-a716-446655440003";
40
1
    let form = build_set_transaction_tag_form(id, "name", "groceries");
41
1
    assert_eq!(
42
        form,
43
1
        format!("(set-transaction-tag \"{id}\" \"name\" \"groceries\")")
44
    );
45
1
}
46

            
47
#[test]
48
1
fn build_set_transaction_tag_form_escapes_all_args() {
49
1
    let form = build_set_transaction_tag_form("t\nid", "na\nme", "va\nlue");
50
1
    assert_eq!(form, r#"(set-transaction-tag "t\nid" "na\nme" "va\nlue")"#);
51
1
}
52

            
53
#[test]
54
1
fn build_convert_amount_form_produces_correct_form() {
55
1
    let form = build_convert_amount_form("9/2", "uuid-from", "uuid-to");
56
1
    assert_eq!(form, r#"(convert-amount "9/2" "uuid-from" "uuid-to")"#);
57
1
}
58

            
59
#[test]
60
1
fn build_convert_amount_form_integer_amount() {
61
1
    let form = build_convert_amount_form("90", "uuid-a", "uuid-b");
62
1
    assert_eq!(form, r#"(convert-amount "90" "uuid-a" "uuid-b")"#);
63
1
}
64

            
65
#[test]
66
1
fn build_convert_amount_form_escapes_special_chars() {
67
1
    let form = build_convert_amount_form("1/3", "from\"uuid", "to\\uuid");
68
1
    assert_eq!(form, r#"(convert-amount "1/3" "from\"uuid" "to\\uuid")"#);
69
1
}