Skip to content

Commit f867177

Browse files
committed
Use API mocks
1 parent 0117c28 commit f867177

File tree

5 files changed

+71
-56
lines changed

5 files changed

+71
-56
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
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 & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,10 @@ 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"] }
57-
wiremock = { workspace = true }
5859

5960
[lints]
6061
workspace = true

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

Lines changed: 27 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,25 @@ 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::MockApiClient::new();
108+
mock_client
109+
.folders_api_mock
110+
.expect_folders_post()
111+
.returning(move |req| {
112+
let req = req.unwrap();
113+
Ok(FolderResponseModel {
109114
id: Some(folder_id),
110-
name: Some(body.name),
115+
name: Some(req.name),
111116
revision_date: Some("2025-01-01T00:00:00Z".to_string()),
112117
object: Some("folder".to_string()),
113118
})
114-
})
115-
.expect(1)])
116-
.await;
119+
});
117120

118121
let repository = MemoryRepository::<Folder>::default();
119122

120123
let result = create_folder(
121124
&store,
122-
&api_config,
125+
&mock_client,
123126
&repository,
124127
FolderAddEditRequest {
125128
name: "test".to_string(),
@@ -161,16 +164,21 @@ mod tests {
161164
SymmetricCryptoKey::make_aes256_cbc_hmac_key(),
162165
);
163166

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

169177
let repository = MemoryRepository::<Folder>::default();
170178

171179
let result = create_folder(
172180
&store,
173-
&api_config,
181+
&mock_client,
174182
&repository,
175183
FolderAddEditRequest {
176184
name: "test".to_string(),

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

Lines changed: 33 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,27 @@ 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::MockApiClient::new();
106+
mock_client
107+
.folders_api_mock
108+
.expect_folders_id_put()
109+
.returning(move |id, req| {
110+
let req = req.unwrap();
111+
assert_eq!(id, folder_id.to_string());
112+
Ok(FolderResponseModel {
113+
id: Some(folder_id),
114+
name: Some(req.name),
115+
revision_date: Some("2025-01-01T00:00:00Z".to_string()),
116+
object: Some("folder".to_string()),
117+
})
118+
});
123119

124120
let repository = MemoryRepository::<Folder>::default();
125121
repository_add_folder(&repository, &store, folder_id, "old_name").await;
126122

127123
let result = edit_folder(
128124
&store,
129-
&api_config,
125+
&mock_client,
130126
&repository,
131127
&folder_id.to_string(),
132128
FolderAddEditRequest {
@@ -152,10 +148,11 @@ mod tests {
152148

153149
let repository = MemoryRepository::<Folder>::default();
154150
let folder_id = uuid!("25afb11c-9c95-4db5-8bac-c21cb204a3f1");
151+
let mock_client = bitwarden_api_api::apis::MockApiClient::new();
155152

156153
let result = edit_folder(
157154
&store,
158-
&Configuration::default(),
155+
&mock_client,
159156
&repository,
160157
&folder_id.to_string(),
161158
FolderAddEditRequest {
@@ -182,19 +179,22 @@ mod tests {
182179

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

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;
182+
let mut mock_client = bitwarden_api_api::apis::MockApiClient::new();
183+
mock_client
184+
.folders_api_mock
185+
.expect_folders_id_put()
186+
.returning(move |_id, _req| {
187+
Err(bitwarden_api_api::apis::Error::Io(std::io::Error::other(
188+
"Mock error",
189+
)))
190+
});
191191

192192
let repository = MemoryRepository::<Folder>::default();
193193
repository_add_folder(&repository, &store, folder_id, "old_name").await;
194194

195195
let result = edit_folder(
196196
&store,
197-
&api_config,
197+
&mock_client,
198198
&repository,
199199
&folder_id.to_string(),
200200
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)