Skip to content

Commit 60d0b85

Browse files
committed
Use API mocks
1 parent 0117c28 commit 60d0b85

File tree

5 files changed

+79
-54
lines changed

5 files changed

+79
-54
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/bitwarden-vault/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ wasm-bindgen = { workspace = true, optional = true }
5252
wasm-bindgen-futures = { workspace = true, optional = true }
5353

5454
[dev-dependencies]
55+
bitwarden-api-api = { workspace = true, features = ["mockall"] }
56+
bitwarden-api-identity = { workspace = true, features = ["mockall"] }
5557
bitwarden-test = { workspace = true }
5658
tokio = { workspace = true, features = ["rt"] }
5759
wiremock = { workspace = true }

crates/bitwarden-vault/src/folder/create.rs

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use bitwarden_api_api::{apis::folders_api, models::FolderRequestModel};
1+
use bitwarden_api_api::models::FolderRequestModel;
22
use bitwarden_core::{
33
key_management::{KeyIds, SymmetricKeyId},
44
require, ApiError, MissingFieldError,
@@ -63,12 +63,15 @@ pub enum CreateFolderError {
6363

6464
pub(super) async fn create_folder<R: Repository<Folder> + ?Sized>(
6565
key_store: &KeyStore<KeyIds>,
66-
api_config: &bitwarden_api_api::apis::configuration::Configuration,
66+
api_client: &dyn bitwarden_api_api::apis::Api,
6767
repository: &R,
6868
request: FolderAddEditRequest,
6969
) -> Result<FolderView, CreateFolderError> {
7070
let folder_request = key_store.encrypt(request)?;
71-
let resp = folders_api::folders_post(api_config, Some(folder_request))
71+
72+
let resp = api_client
73+
.folders_api()
74+
.folders_post(Some(folder_request))
7275
.await
7376
.map_err(ApiError::from)?;
7477

@@ -85,9 +88,8 @@ pub(super) async fn create_folder<R: Repository<Folder> + ?Sized>(
8588
mod tests {
8689
use bitwarden_api_api::models::FolderResponseModel;
8790
use bitwarden_crypto::SymmetricCryptoKey;
88-
use bitwarden_test::{start_api_mock, MemoryRepository};
91+
use bitwarden_test::MemoryRepository;
8992
use uuid::uuid;
90-
use wiremock::{matchers, Mock, Request, ResponseTemplate};
9193

9294
use super::*;
9395

@@ -102,24 +104,26 @@ mod tests {
102104

103105
let folder_id = uuid!("25afb11c-9c95-4db5-8bac-c21cb204a3f1");
104106

105-
let (_server, api_config) = start_api_mock(vec![Mock::given(matchers::path("/folders"))
106-
.respond_with(move |req: &Request| {
107-
let body: FolderRequestModel = req.body_json().unwrap();
108-
ResponseTemplate::new(201).set_body_json(FolderResponseModel {
107+
let mut mock_client = bitwarden_api_api::apis::MockApi::new();
108+
mock_client.expect_folders_api().returning(move || {
109+
let mut mock_folders = bitwarden_api_api::apis::folders_api::MockFoldersApi::new();
110+
mock_folders.expect_folders_post().returning(move |req| {
111+
let req = req.unwrap();
112+
Ok(FolderResponseModel {
109113
id: Some(folder_id),
110-
name: Some(body.name),
114+
name: Some(req.name),
111115
revision_date: Some("2025-01-01T00:00:00Z".to_string()),
112116
object: Some("folder".to_string()),
113117
})
114-
})
115-
.expect(1)])
116-
.await;
118+
});
119+
Box::new(mock_folders)
120+
});
117121

118122
let repository = MemoryRepository::<Folder>::default();
119123

120124
let result = create_folder(
121125
&store,
122-
&api_config,
126+
&mock_client,
123127
&repository,
124128
FolderAddEditRequest {
125129
name: "test".to_string(),
@@ -161,16 +165,22 @@ mod tests {
161165
SymmetricCryptoKey::make_aes256_cbc_hmac_key(),
162166
);
163167

164-
let (_server, api_config) = start_api_mock(vec![
165-
Mock::given(matchers::path("/folders")).respond_with(ResponseTemplate::new(500))
166-
])
167-
.await;
168+
let mut mock_client = bitwarden_api_api::apis::MockApi::new();
169+
mock_client.expect_folders_api().returning(move || {
170+
let mut mock_folders = bitwarden_api_api::apis::folders_api::MockFoldersApi::new();
171+
mock_folders.expect_folders_post().returning(move |_req| {
172+
Err(bitwarden_api_api::apis::Error::Io(std::io::Error::other(
173+
"Mock error",
174+
)))
175+
});
176+
Box::new(mock_folders)
177+
});
168178

169179
let repository = MemoryRepository::<Folder>::default();
170180

171181
let result = create_folder(
172182
&store,
173-
&api_config,
183+
&mock_client,
174184
&repository,
175185
FolderAddEditRequest {
176186
name: "test".to_string(),

crates/bitwarden-vault/src/folder/edit.rs

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use bitwarden_api_api::apis::folders_api;
21
use bitwarden_core::{key_management::KeyIds, ApiError, MissingFieldError};
32
use bitwarden_crypto::{CryptoError, KeyStore};
43
use bitwarden_error::bitwarden_error;
@@ -31,7 +30,7 @@ pub enum EditFolderError {
3130

3231
pub(super) async fn edit_folder<R: Repository<Folder> + ?Sized>(
3332
key_store: &KeyStore<KeyIds>,
34-
api_config: &bitwarden_api_api::apis::configuration::Configuration,
33+
api_client: &dyn bitwarden_api_api::apis::Api,
3534
repository: &R,
3635
folder_id: &str,
3736
request: FolderAddEditRequest,
@@ -44,7 +43,9 @@ pub(super) async fn edit_folder<R: Repository<Folder> + ?Sized>(
4443

4544
let folder_request = key_store.encrypt(request)?;
4645

47-
let resp = folders_api::folders_id_put(api_config, folder_id, Some(folder_request))
46+
let resp = api_client
47+
.folders_api()
48+
.folders_id_put(folder_id, Some(folder_request))
4849
.await
4950
.map_err(ApiError::from)?;
5051

@@ -61,15 +62,11 @@ pub(super) async fn edit_folder<R: Repository<Folder> + ?Sized>(
6162

6263
#[cfg(test)]
6364
mod tests {
64-
use bitwarden_api_api::{
65-
apis::configuration::Configuration,
66-
models::{FolderRequestModel, FolderResponseModel},
67-
};
65+
use bitwarden_api_api::models::FolderResponseModel;
6866
use bitwarden_core::key_management::SymmetricKeyId;
6967
use bitwarden_crypto::{PrimitiveEncryptable, SymmetricCryptoKey};
70-
use bitwarden_test::{start_api_mock, MemoryRepository};
68+
use bitwarden_test::MemoryRepository;
7169
use uuid::uuid;
72-
use wiremock::{matchers, Mock, Request, ResponseTemplate};
7370

7471
use super::*;
7572

@@ -105,28 +102,30 @@ mod tests {
105102

106103
let folder_id = uuid!("25afb11c-9c95-4db5-8bac-c21cb204a3f1");
107104

108-
let (_server, api_config) = start_api_mock(vec![Mock::given(matchers::path(format!(
109-
"/folders/{}",
110-
folder_id
111-
)))
112-
.respond_with(move |req: &Request| {
113-
let body: FolderRequestModel = req.body_json().unwrap();
114-
ResponseTemplate::new(200).set_body_json(FolderResponseModel {
115-
object: Some("folder".to_string()),
116-
id: Some(folder_id),
117-
name: Some(body.name),
118-
revision_date: Some("2025-01-01T00:00:00Z".to_string()),
119-
})
120-
})
121-
.expect(1)])
122-
.await;
105+
let mut mock_client = bitwarden_api_api::apis::MockApi::new();
106+
mock_client.expect_folders_api().returning(move || {
107+
let mut mock_folders = bitwarden_api_api::apis::folders_api::MockFoldersApi::new();
108+
mock_folders
109+
.expect_folders_id_put()
110+
.returning(move |id, req| {
111+
let req = req.unwrap();
112+
assert_eq!(id, folder_id.to_string());
113+
Ok(FolderResponseModel {
114+
id: Some(folder_id),
115+
name: Some(req.name),
116+
revision_date: Some("2025-01-01T00:00:00Z".to_string()),
117+
object: Some("folder".to_string()),
118+
})
119+
});
120+
Box::new(mock_folders)
121+
});
123122

124123
let repository = MemoryRepository::<Folder>::default();
125124
repository_add_folder(&repository, &store, folder_id, "old_name").await;
126125

127126
let result = edit_folder(
128127
&store,
129-
&api_config,
128+
&mock_client,
130129
&repository,
131130
&folder_id.to_string(),
132131
FolderAddEditRequest {
@@ -152,10 +151,11 @@ mod tests {
152151

153152
let repository = MemoryRepository::<Folder>::default();
154153
let folder_id = uuid!("25afb11c-9c95-4db5-8bac-c21cb204a3f1");
154+
let mock_client = bitwarden_api_api::apis::MockApi::new();
155155

156156
let result = edit_folder(
157157
&store,
158-
&Configuration::default(),
158+
&mock_client,
159159
&repository,
160160
&folder_id.to_string(),
161161
FolderAddEditRequest {
@@ -182,19 +182,25 @@ mod tests {
182182

183183
let folder_id = uuid!("25afb11c-9c95-4db5-8bac-c21cb204a3f1");
184184

185-
let (_server, api_config) = start_api_mock(vec![Mock::given(matchers::path(format!(
186-
"/folders/{}",
187-
folder_id
188-
)))
189-
.respond_with(ResponseTemplate::new(500))])
190-
.await;
185+
let mut mock_client = bitwarden_api_api::apis::MockApi::new();
186+
mock_client.expect_folders_api().returning(move || {
187+
let mut mock_folders = bitwarden_api_api::apis::folders_api::MockFoldersApi::new();
188+
mock_folders
189+
.expect_folders_id_put()
190+
.returning(move |_id, _req| {
191+
Err(bitwarden_api_api::apis::Error::Io(std::io::Error::other(
192+
"Mock error",
193+
)))
194+
});
195+
Box::new(mock_folders)
196+
});
191197

192198
let repository = MemoryRepository::<Folder>::default();
193199
repository_add_folder(&repository, &store, folder_id, "old_name").await;
194200

195201
let result = edit_folder(
196202
&store,
197-
&api_config,
203+
&mock_client,
198204
&repository,
199205
&folder_id.to_string(),
200206
FolderAddEditRequest {

crates/bitwarden-vault/src/folder/folder_client.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,13 @@ impl FoldersClient {
6565
let config = self.client.internal.get_api_configurations().await;
6666
let repository = self.get_repository()?;
6767

68-
create_folder(key_store, &config.api, repository.as_ref(), request).await
68+
create_folder(
69+
key_store,
70+
config.api_client.as_ref(),
71+
repository.as_ref(),
72+
request,
73+
)
74+
.await
6975
}
7076

7177
/// Edit the [Folder] and save it to the server.
@@ -80,7 +86,7 @@ impl FoldersClient {
8086

8187
edit_folder(
8288
key_store,
83-
&config.api,
89+
config.api_client.as_ref(),
8490
repository.as_ref(),
8591
folder_id,
8692
request,

0 commit comments

Comments
 (0)