bitwarden_emergency_access/
initiate.rs1use bitwarden_core::ApiError;
2use bitwarden_error::bitwarden_error;
3use thiserror::Error;
4
5use crate::{EmergencyAccessClient, EmergencyAccessId};
6
7#[bitwarden_error(flat)]
9#[derive(Debug, Error)]
10pub enum EmergencyAccessInitiateError {
11 #[error(transparent)]
13 Api(#[from] ApiError),
14}
15
16#[bitwarden_ffi::wasm_export]
17impl EmergencyAccessClient {
18 pub async fn initiate(
23 &self,
24 emergency_access_id: EmergencyAccessId,
25 ) -> Result<(), EmergencyAccessInitiateError> {
26 self.api_configurations
27 .api_client
28 .emergency_access_api()
29 .initiate(emergency_access_id.into())
30 .await?;
31
32 Ok(())
33 }
34}
35
36#[cfg(test)]
37mod tests {
38 use bitwarden_core::client::test_accounts::test_bitwarden_com_account_v2;
39
40 use super::*;
41 use crate::{
42 EmergencyAccessClientExt,
43 test_support::{api_error, is_test_id, test_client, test_id},
44 };
45
46 #[tokio::test]
47 async fn initiates() {
48 let client = test_client(test_bitwarden_com_account_v2(), |mock| {
49 mock.emergency_access_api
50 .expect_initiate()
51 .withf(is_test_id)
52 .returning(|_| Ok(()))
53 .once();
54 })
55 .await;
56
57 client.emergency_access().initiate(test_id()).await.unwrap();
58 }
59
60 #[tokio::test]
61 async fn fails_when_request_fails() {
62 let client = test_client(test_bitwarden_com_account_v2(), |mock| {
63 mock.emergency_access_api
64 .expect_initiate()
65 .returning(|_| api_error())
66 .once();
67 })
68 .await;
69
70 let result = client.emergency_access().initiate(test_id()).await;
71
72 assert!(matches!(result, Err(EmergencyAccessInitiateError::Api(_))));
73 }
74}