Skip to main content

bitwarden_vault/cipher/blob/conversions/
drivers_license.rs

1use super::{DriversLicenseDataV1, DriversLicenseView};
2
3impl_bidirectional_from!(
4    DriversLicenseView,
5    DriversLicenseDataV1,
6    [
7        first_name,
8        middle_name,
9        last_name,
10        date_of_birth,
11        license_number,
12        issuing_country,
13        issuing_state,
14        issue_date,
15        expiration_date,
16        issuing_authority,
17        license_class,
18    ]
19);
20
21#[cfg(test)]
22mod tests {
23    use super::super::{CipherBlobV1, test_support::*};
24    use crate::cipher::{cipher::CipherType, drivers_license::DriversLicenseView};
25
26    #[test]
27    fn test_drivers_license_cipher_round_trip() {
28        let (key_store, key_id) = create_test_key_store();
29        let mut ctx = key_store.context_mut();
30
31        let original = crate::CipherView {
32            name: "My Driver's License".to_string(),
33            notes: None,
34            r#type: CipherType::DriversLicense,
35            drivers_license: Some(DriversLicenseView {
36                first_name: Some("John".to_string()),
37                middle_name: Some("Michael".to_string()),
38                last_name: Some("Doe".to_string()),
39                date_of_birth: Some("1985-06-15".to_string()),
40                license_number: Some("DL-987654".to_string()),
41                issuing_country: Some("US".to_string()),
42                issuing_state: Some("NY".to_string()),
43                issue_date: Some("2020-01-01".to_string()),
44                expiration_date: Some("2028-01-01".to_string()),
45                issuing_authority: Some("NY DMV".to_string()),
46                license_class: Some("D".to_string()),
47            }),
48            ..create_shell_cipher_view(CipherType::DriversLicense)
49        };
50
51        let blob = CipherBlobV1::from_cipher_view(&original, &mut ctx, key_id).unwrap();
52        let mut restored = create_shell_cipher_view(CipherType::DriversLicense);
53        blob.apply_to_cipher_view(&mut restored, &mut ctx, key_id)
54            .unwrap();
55
56        assert_eq!(restored.name, "My Driver's License");
57        assert_eq!(restored.r#type, CipherType::DriversLicense);
58        let dl = restored.drivers_license.unwrap();
59        assert_eq!(dl.first_name, Some("John".to_string()));
60        assert_eq!(dl.license_number, Some("DL-987654".to_string()));
61        assert!(restored.login.is_none());
62    }
63}