1
1
use core::fmt::Debug;
2

            
3
use bonsaidb::core::{
4
    document::{CollectionDocument, Emit, KeyId},
5
    schema::{
6
        Collection, CollectionViewSchema, DefaultSerialization, DefaultViewSerialization, Name,
7
        Qualified, Schematic, SerializedCollection, View, ViewMapResult,
8
    },
9
};
10
use serde::{Deserialize, Serialize};
11

            
12
1
#[test]
13
1
fn name_only() {
14
1
    #[derive(Collection, Debug)]
15
1
    #[collection(name = "Name", core = ::bonsaidb::core)]
16
1
    struct Test<T: Sync + Send + Debug>(T);
17
1

            
18
1
    assert_eq!(
19
1
        Test::<String>::collection_name(),
20
1
        bonsaidb::core::schema::CollectionName::private("Name")
21
1
    );
22
1
}
23

            
24
1
#[test]
25
1
fn name_and_authority() {
26
1
    #[derive(Collection, Debug)]
27
1
    #[collection(name = "Name", authority = "Authority")]
28
1
    struct Test<T: Sync + Send + Debug>(T);
29
1

            
30
1
    assert_eq!(
31
1
        Test::<String>::collection_name(),
32
1
        bonsaidb::core::schema::CollectionName::new("Authority", "Name")
33
1
    );
34
1
}
35

            
36
1
#[test]
37
1
fn views() {
38
1
    #[derive(Clone, Collection, Debug, Serialize, Deserialize)]
39
1
    #[collection(name = "Name", authority = "Authority", views = [ShapesByNumberOfSides])]
40
1
    struct Shape {
41
1
        pub sides: u32,
42
1
    }
43
1

            
44
1
    let schematic = Schematic::from_schema::<Shape>().unwrap();
45
1
    schematic
46
1
        .view::<ShapesByNumberOfSides>()
47
1
        .expect("couldn't find view");
48
1

            
49
1
    #[derive(Debug, Clone)]
50
1
    struct ShapesByNumberOfSides;
51
1

            
52
1
    impl View for ShapesByNumberOfSides {
53
1
        type Collection = Shape;
54
1
        type Key = u32;
55
1
        type Value = usize;
56
1

            
57
1
        fn name(&self) -> Name {
58
1
            Name::new("by-number-of-sides")
59
1
        }
60
1
    }
61
1

            
62
1
    impl CollectionViewSchema for ShapesByNumberOfSides {
63
1
        type View = Self;
64
1

            
65
1
        fn map(&self, document: CollectionDocument<Shape>) -> ViewMapResult<Self::View> {
66
            document
67
                .header
68
                .emit_key_and_value(document.contents.sides, 1)
69
        }
70
1
    }
71
1

            
72
1
    impl DefaultViewSerialization for ShapesByNumberOfSides {}
73
1
}
74

            
75
1
#[test]
76
1
fn serialization() {
77
2
    #[derive(Collection, Clone, Debug, Deserialize, Serialize)]
78
1
    #[collection(
79
1
        name = "Name",
80
1
        authority = "Authority",
81
1
        serialization = transmog_bincode::Bincode
82
1
    )]
83
1
    struct Test;
84
1

            
85
1
    assert_eq!(
86
1
        Test::collection_name(),
87
1
        bonsaidb::core::schema::CollectionName::new("Authority", "Name")
88
1
    );
89

            
90
1
    let _: transmog_bincode::Bincode = Test::format();
91
1
}
92

            
93
1
#[test]
94
1
fn serialization_none() {
95
1
    #[derive(Collection, Debug, Deserialize, Serialize)]
96
1
    #[collection(name = "Name", authority = "Authority", serialization = None)]
97
1
    struct Test;
98
1

            
99
1
    impl DefaultSerialization for Test {}
100
1

            
101
1
    assert_eq!(
102
1
        Test::collection_name(),
103
1
        bonsaidb::core::schema::CollectionName::new("Authority", "Name")
104
1
    );
105
1
}
106

            
107
// This could be done through using the macro in the tests for encryption
108
1
#[test]
109
// Pretty pointless, maybe also error?
110
1
fn encryption_optional_no_key() {
111
1
    #[derive(Collection, Debug, Deserialize, Serialize)]
112
1
    #[collection(name = "Name", encryption_optional)]
113
1
    struct Test;
114
1
}
115

            
116
1
#[test]
117
1
fn encryption_optional_with_key() {
118
1
    #[derive(Collection, Debug, Deserialize, Serialize)]
119
1
    #[collection(name = "Name")]
120
1
    #[collection(encryption_optional, encryption_key = Some(KeyId::Master))]
121
1
    struct Test;
122
1
}
123

            
124
1
#[test]
125
1
fn encryption_required_with_key() {
126
1
    #[derive(Collection, Debug, Deserialize, Serialize)]
127
1
    #[collection(name = "Name")]
128
1
    #[collection(encryption_required, encryption_key = Some(KeyId::Master))]
129
1
    struct Test;
130
1
}
131

            
132
1
#[test]
133
1
fn encryption_key() {
134
1
    #[derive(Collection, Debug, Deserialize, Serialize)]
135
1
    #[collection(name = "Name")]
136
1
    #[collection(encryption_key = Some(KeyId::Master))]
137
1
    struct Test;
138
1
}
139

            
140
1
#[test]
141
1
fn primary_key() {
142
1
    #[derive(Collection, Debug, Deserialize, Serialize)]
143
1
    #[collection(name = "Name")]
144
1
    #[collection(primary_key = u32)]
145
1
    struct Test;
146
1
}
147

            
148
1
#[test]
149
1
fn primary_key_natural_id() {
150
1
    #[derive(Collection, Debug, Deserialize, Serialize)]
151
1
    #[collection(name = "Name")]
152
1
    #[collection(primary_key = u32, natural_id = |_:&Self| Some(1_u32))]
153
1
    struct Test;
154
1
}
155

            
156
1
#[test]
157
1
fn natural_id() {
158
1
    #[derive(Collection, Debug, Deserialize, Serialize)]
159
1
    #[collection(name = "Name")]
160
1
    #[collection( natural_id = |_:&Self| Some(1_u64))]
161
1
    struct Test;
162
1
}