localencrypt/common/
object_key.rs

1use crate::SecureStringError;
2
3const DEFAULT_ENVIRONMENT: &str = "LocalEncrypt";
4
5#[derive(Clone, PartialEq, Debug)]
6pub struct ObjectKey {
7    environment: String,
8    tag: String,
9    id: String,
10}
11
12impl ObjectKey {
13    pub fn new(environment: &str, tag: &str, id: &str) -> Result<Self, SecureStringError> {
14        if id.is_empty() {
15            return Err(SecureStringError::InvalidArgument(String::from(
16                "Tag and ID must not be empty",
17            )));
18        }
19
20        Ok(Self {
21            environment: environment.to_string(),
22            tag: tag.to_string(),
23            id: id.to_string(),
24        })
25    }
26
27    pub fn environment(&self) -> String {
28        self.environment.clone()
29    }
30
31    pub fn tag(&self) -> String {
32        self.tag.clone()
33    }
34
35    pub fn id(&self) -> String {
36        self.id.clone()
37    }
38}
39
40#[cfg(test)]
41mod tests {
42    use wasm_bindgen_test::*;
43
44    use super::*;
45
46    #[wasm_bindgen_test]
47    fn test_object_key_new() {
48        let object_key = ObjectKey::new("debug", "test", "test_id").unwrap();
49        assert_eq!(object_key.tag(), "test");
50        assert_eq!(object_key.id(), "test_id");
51    }
52
53    #[wasm_bindgen_test]
54    async fn test_invalid_object_key_creation() {
55        // Check that ObjectKey::new returns an error when given an empty id
56        let object_key_empty_id = ObjectKey::new("debug", "test_tag", "");
57        assert!(
58            object_key_empty_id.is_err(),
59            "Successfully created ObjectKey with empty id"
60        );
61    }
62
63    #[wasm_bindgen_test]
64    fn test_object_key_new_empty_tag_and_id() {
65        let object_key = ObjectKey::new("debug", "", "");
66        assert!(
67            object_key.is_err(),
68            "Successfully created ObjectKey with empty tag and id"
69        );
70        match object_key {
71            Err(SecureStringError::InvalidArgument(msg)) => {
72                assert_eq!(msg, "Tag and ID must not be empty");
73            }
74            _ => {
75                panic!("Unexpected result from ObjectKey::new with empty tag and id");
76            }
77        }
78    }
79
80    #[wasm_bindgen_test]
81    fn test_object_key_new_error_message() {
82        let object_key = ObjectKey::new("debug", "test", "");
83        assert!(
84            object_key.is_err(),
85            "Successfully created ObjectKey with empty id"
86        );
87        match object_key {
88            Err(SecureStringError::InvalidArgument(msg)) => {
89                assert_eq!(msg, "Tag and ID must not be empty");
90            }
91            _ => {
92                panic!("Unexpected result from ObjectKey::new with empty id");
93            }
94        }
95    }
96}