Skip to content

Commit

Permalink
test: improve RequestBuilder tests
Browse files Browse the repository at this point in the history
  • Loading branch information
nanderstabel committed May 31, 2023
1 parent 5ad06fa commit c3f4839
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 18 deletions.
1 change: 0 additions & 1 deletion src/claims.rs
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,6 @@ where
}
}

// TODO: Check whether claims from a scope are essential or not.
impl From<&Scope> for StandardClaimsRequests {
fn from(value: &Scope) -> Self {
value
Expand Down
1 change: 0 additions & 1 deletion src/provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ where
})
}

// TODO: needs refactoring.
/// Generates a [`Response`] in response to a [`SiopRequest`] and the user's claims. The [`Response`]
/// contains an [`IdToken`], which is signed by the [`Subject`] of the [`Provider`].
pub async fn generate_response(&self, request: SiopRequest, user_claims: StandardClaimsValues) -> Result<Response> {
Expand Down
1 change: 0 additions & 1 deletion src/request/request_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ impl RequestUrlBuilder {
.take()
.ok_or(anyhow!("client_id parameter is required."))?,
scope: self.scope.take().ok_or(anyhow!("scope parameter is required."))?,
// claims: self.claims.take().and_then(|c| c.ok()),
claims: self.claims.take().transpose()?,
redirect_uri: self
.redirect_uri
Expand Down
80 changes: 65 additions & 15 deletions src/response.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,15 @@ impl ResponseBuilder {
})),
(None, None, Some(response)) => Ok(Some(Openid4vpParams::Jwt { response })),
(None, None, None) => Ok(None),
_ => Err(anyhow!("Invalid combination of openid4vp response parameters.")),
(Some(_), None, None) => Err(anyhow!(
"`presentation_submission` parameter is required when using `vp_token` parameter."
)),
(None, Some(_), None) => Err(anyhow!(
"`vp_token` parameter is required when using `presentation_submission` parameter."
)),
_ => Err(anyhow!(
"`response` parameter can not be used with `vp_token` and `presentation_submission` parameters."
)),
}?;

Ok(Response {
Expand All @@ -86,32 +94,74 @@ impl ResponseBuilder {
builder_fn!(state, String);
}

// TODO: Improve tests
#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_openid4vp_response() {
let response = Response::builder()
fn test_valid_response() {
assert!(Response::builder()
.redirect_uri("redirect".to_string())
.id_token("id_token".to_string())
.build()
.is_ok());

assert!(Response::builder()
.redirect_uri("redirect".to_string())
.vp_token("vp_token".to_string())
.presentation_submission("presentation_submission".to_string())
.build()
.unwrap();
.is_ok());

assert!(Response::builder()
.redirect_uri("redirect".to_string())
.id_token("id_token".to_string())
.vp_token("vp_token".to_string())
.presentation_submission("presentation_submission".to_string())
.build()
.is_ok());
}

let response_string = serde_json::to_string(&response).unwrap();
#[test]
fn test_invalid_response() {
assert_eq!(
Response::builder()
.id_token("id_token".to_string())
.build()
.unwrap_err()
.to_string(),
"redirect_uri parameter is required."
);

assert_eq!(
Response::builder()
.redirect_uri("redirect".to_string())
.vp_token("vp_token".to_string())
.build()
.unwrap_err()
.to_string(),
"`presentation_submission` parameter is required when using `vp_token` parameter."
);

assert_eq!(
Response::builder()
.redirect_uri("redirect".to_string())
.presentation_submission("presentation_submission".to_string())
.build()
.unwrap_err()
.to_string(),
"`vp_token` parameter is required when using `presentation_submission` parameter."
);

assert_eq!(
Response {
id_token: None,
openid4vp_response: Some(Openid4vpParams::Params {
vp_token: "vp_token".to_string(),
presentation_submission: "presentation_submission".to_string(),
}),
..Default::default()
},
serde_json::from_str(&response_string).unwrap()
Response::builder()
.redirect_uri("redirect".to_string())
.presentation_submission("presentation_submission".to_string())
.openid4vp_response_jwt("response".to_string())
.build()
.unwrap_err()
.to_string(),
"`response` parameter can not be used with `vp_token` and `presentation_submission` parameters."
);
}
}

0 comments on commit c3f4839

Please sign in to comment.