use http::HeaderMap;
use crate::types::RiskLevel;
#[derive(Debug, Clone)]
pub struct KnownDuplicate {
pub field: String,
pub value: String,
}
#[derive(Debug, Clone)]
pub struct StateField {
pub field: String,
pub value: String,
}
#[derive(Debug, Clone)]
pub struct ScanContext {
pub target: String,
pub baseline_id: String,
pub probe_id: String,
pub headers: HeaderMap,
pub max_risk: RiskLevel,
pub known_duplicate: Option<KnownDuplicate>,
pub state_field: Option<StateField>,
pub alt_credential: Option<HeaderMap>,
}
#[cfg(test)]
mod tests {
use super::*;
use http::HeaderMap;
#[test]
fn known_duplicate_fields_accessible() {
let kd = KnownDuplicate {
field: "email".to_owned(),
value: "alice@example.com".to_owned(),
};
assert_eq!(kd.field, "email");
assert_eq!(kd.value, "alice@example.com");
}
#[test]
fn state_field_fields_accessible() {
let sf = StateField {
field: "status".to_owned(),
value: "invalid_state".to_owned(),
};
assert_eq!(sf.field, "status");
assert_eq!(sf.value, "invalid_state");
}
#[test]
fn scan_context_all_some_fields_accessible() {
let ctx = ScanContext {
target: "https://example.com/users/{id}".to_owned(),
baseline_id: "00000000-0000-0000-0000-000000000001".to_owned(),
probe_id: "ffffffff-ffff-ffff-ffff-ffffffffffff".to_owned(),
headers: HeaderMap::new(),
max_risk: RiskLevel::MethodDestructive,
known_duplicate: Some(KnownDuplicate {
field: "email".to_owned(),
value: "alice@example.com".to_owned(),
}),
state_field: Some(StateField {
field: "status".to_owned(),
value: "invalid_state".to_owned(),
}),
alt_credential: Some(HeaderMap::new()),
};
assert_eq!(ctx.target, "https://example.com/users/{id}");
assert_eq!(ctx.max_risk, RiskLevel::MethodDestructive);
assert!(ctx.known_duplicate.is_some());
assert!(ctx.state_field.is_some());
assert!(ctx.alt_credential.is_some());
}
#[test]
fn scan_context_all_none_fields_accessible() {
let ctx = ScanContext {
target: "https://example.com/items/{id}".to_owned(),
baseline_id: "1".to_owned(),
probe_id: "999999".to_owned(),
headers: HeaderMap::new(),
max_risk: RiskLevel::Safe,
known_duplicate: None,
state_field: None,
alt_credential: None,
};
assert!(ctx.known_duplicate.is_none());
assert!(ctx.state_field.is_none());
assert!(ctx.alt_credential.is_none());
}
}