Skip to content

Commit e22fb75

Browse files
Adds basic parsing tests
1 parent fbd5fb8 commit e22fb75

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

libwebauthn/src/ops/webauthn/make_credential.rs

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,7 @@ mod tests {
469469

470470
use crate::ops::webauthn::MakeCredentialRequest;
471471
use crate::ops::webauthn::RelyingPartyId;
472+
use crate::proto::ctap2::Ctap2PublicKeyCredentialType;
472473

473474
use super::*;
474475

@@ -537,11 +538,102 @@ mod tests {
537538
serde_json::to_string(&v).unwrap()
538539
}
539540

541+
fn test_request_from_json_required_field(field: &str) {
542+
let rpid = RelyingPartyId::try_from("example.org").unwrap();
543+
let req_json = json_field_rm(REQUEST_BASE_JSON, field);
544+
545+
let result = MakeCredentialRequest::from_json(&rpid, &req_json);
546+
assert!(matches!(
547+
result,
548+
Err(MakeCredentialRequestParsingError::EncodingError(_))
549+
));
550+
}
551+
540552
#[test]
541553
fn test_request_from_json_base() {
542554
let rpid = RelyingPartyId::try_from("example.org").unwrap();
543555
let req: MakeCredentialRequest =
544556
MakeCredentialRequest::from_json(&rpid, REQUEST_BASE_JSON).unwrap();
545557
assert_eq!(req, request_base());
546558
}
559+
560+
#[test]
561+
fn test_request_from_json_require_rp() {
562+
test_request_from_json_required_field("rp");
563+
}
564+
565+
#[test]
566+
fn test_request_from_json_require_user() {
567+
test_request_from_json_required_field("user");
568+
}
569+
570+
#[test]
571+
fn test_request_from_json_require_pub_key_cred_params() {
572+
test_request_from_json_required_field("pubKeyCredParams");
573+
}
574+
575+
#[test]
576+
fn test_request_from_json_require_challenge() {
577+
test_request_from_json_required_field("challenge");
578+
}
579+
580+
#[test]
581+
#[ignore] // FIXME(#134): Add validation for challenges
582+
fn test_request_from_json_challenge_empty() {
583+
let rpid = RelyingPartyId::try_from("example.org").unwrap();
584+
let req_json: String = json_field_rm(REQUEST_BASE_JSON, "challenge");
585+
let req_json = json_field_add(&req_json, "challenge", r#""""#);
586+
587+
let result = MakeCredentialRequest::from_json(&rpid, &req_json);
588+
assert!(matches!(
589+
result,
590+
Err(MakeCredentialRequestParsingError::EncodingError(_))
591+
));
592+
}
593+
594+
#[test]
595+
fn test_request_from_json_prf_extension() {
596+
let rpid = RelyingPartyId::try_from("example.org").unwrap();
597+
let req_json = json_field_add(
598+
REQUEST_BASE_JSON,
599+
"extensions",
600+
r#"{"prf": {"eval": {"first": "second"}}}"#,
601+
);
602+
603+
let req: MakeCredentialRequest =
604+
MakeCredentialRequest::from_json(&rpid, &req_json).unwrap();
605+
assert!(matches!(
606+
req.extensions,
607+
Some(MakeCredentialsRequestExtensions { prf: Some(_), .. })
608+
));
609+
}
610+
611+
#[test]
612+
fn test_request_from_json_unknown_pub_key_cred_params() {
613+
let rpid = RelyingPartyId::try_from("example.org").unwrap();
614+
let req_json = json_field_add(
615+
REQUEST_BASE_JSON,
616+
"pubKeyCredParams",
617+
r#"[{"type": "something", "alg": -12345}]"#,
618+
);
619+
let req: MakeCredentialRequest =
620+
MakeCredentialRequest::from_json(&rpid, &req_json).unwrap();
621+
assert_eq!(
622+
req.algorithms,
623+
vec![Ctap2CredentialType {
624+
algorithm: Ctap2COSEAlgorithmIdentifier::Unknown, // FIXME(#148): Passhtrough unknown algorithms
625+
public_key_type: Ctap2PublicKeyCredentialType::Unknown,
626+
}]
627+
);
628+
}
629+
630+
#[test]
631+
fn test_request_from_json_default_timeout() {
632+
let rpid = RelyingPartyId::try_from("example.org").unwrap();
633+
let req_json = json_field_rm(REQUEST_BASE_JSON, "timeout");
634+
635+
let req: MakeCredentialRequest =
636+
MakeCredentialRequest::from_json(&rpid, &req_json).unwrap();
637+
assert_eq!(req.timeout, DEFAULT_TIMEOUT);
638+
}
547639
}

0 commit comments

Comments
 (0)