Skip to content

Commit 2b97b10

Browse files
authored
Merge pull request #16 from G8XSU/throwValueAbsentViolation
Throw error if GetObjectResponse contains None
2 parents 3a26735 + aa32775 commit 2b97b10

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

src/client.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@ impl VssClient {
3535

3636
if status.is_success() {
3737
let response = GetObjectResponse::decode(&payload[..])?;
38+
39+
if response.value.is_none() {
40+
return Err(VssError::InternalServerError(
41+
"VSS Server API Violation, expected value in GetObjectResponse but found none".to_string(),
42+
));
43+
}
44+
3845
Ok(response)
3946
} else {
4047
Err(VssError::new(status, payload))

tests/tests.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,27 @@ mod tests {
173173
mock_server.expect(1).assert();
174174
}
175175

176+
#[tokio::test]
177+
async fn test_get_response_without_value() {
178+
let base_url = mockito::server_url();
179+
let vss_client = VssClient::new(&base_url);
180+
181+
// GetObjectResponse with None value
182+
let mock_response = GetObjectResponse { value: None, ..Default::default() };
183+
let mock_server = mockito::mock("POST", GET_OBJECT_ENDPOINT)
184+
.with_status(200)
185+
.with_body(&mock_response.encode_to_vec())
186+
.create();
187+
188+
let get_result = vss_client
189+
.get_object(&GetObjectRequest { store_id: "store".to_string(), key: "k1".to_string() })
190+
.await;
191+
assert!(matches!(get_result.unwrap_err(), VssError::InternalServerError { .. }));
192+
193+
// Verify 1 request hit the server
194+
mock_server.expect(1).assert();
195+
}
196+
176197
#[tokio::test]
177198
async fn test_invalid_request_err_handling() {
178199
let base_url = mockito::server_url();

0 commit comments

Comments
 (0)