Skip to main content

bitwarden_emergency_access/
delete.rs

1use bitwarden_core::ApiError;
2use bitwarden_error::bitwarden_error;
3use thiserror::Error;
4
5use crate::{EmergencyAccessClient, EmergencyAccessId};
6
7/// Errors returned when deleting an emergency access.
8#[bitwarden_error(flat)]
9#[derive(Debug, Error)]
10pub enum EmergencyAccessDeleteError {
11    /// The request to the server failed.
12    #[error(transparent)]
13    Api(#[from] ApiError),
14}
15
16#[bitwarden_ffi::wasm_export]
17impl EmergencyAccessClient {
18    /// Deletes an emergency access.
19    ///
20    /// Called by either the grantor or the grantee.
21    pub async fn delete(
22        &self,
23        emergency_access_id: EmergencyAccessId,
24    ) -> Result<(), EmergencyAccessDeleteError> {
25        self.api_configurations
26            .api_client
27            .emergency_access_api()
28            .delete(emergency_access_id.into())
29            .await?;
30
31        Ok(())
32    }
33}
34
35#[cfg(test)]
36mod tests {
37    use bitwarden_core::client::test_accounts::test_bitwarden_com_account;
38
39    use super::*;
40    use crate::{
41        EmergencyAccessClientExt,
42        test_support::{api_error, is_test_id, test_client, test_id},
43    };
44
45    #[tokio::test]
46    async fn deletes() {
47        let client = test_client(test_bitwarden_com_account(), |mock| {
48            mock.emergency_access_api
49                .expect_delete()
50                .withf(is_test_id)
51                .returning(|_| Ok(()))
52                .once();
53        })
54        .await;
55
56        client.emergency_access().delete(test_id()).await.unwrap();
57    }
58
59    #[tokio::test]
60    async fn fails_when_request_fails() {
61        let client = test_client(test_bitwarden_com_account(), |mock| {
62            mock.emergency_access_api
63                .expect_delete()
64                .returning(|_| api_error())
65                .once();
66        })
67        .await;
68
69        let result = client.emergency_access().delete(test_id()).await;
70
71        assert!(matches!(result, Err(EmergencyAccessDeleteError::Api(_))));
72    }
73}