api_bones_test/builders/org_context.rs
1use api_bones::audit::Principal;
2use api_bones::org_context::OrganizationContext;
3use api_bones::org_id::OrgId;
4use api_bones::request_id::RequestId;
5
6/// Convenience shortcut for building a fake [`OrganizationContext`].
7///
8/// Derives `org_id` from the first entry in `principal.org_path` (or generates
9/// a fresh one) so the context is internally consistent.
10///
11/// # Quick start
12///
13/// ```rust
14/// use uuid::Uuid;
15/// use api_bones_test::builders::{FakePrincipal, FakeOrgContext};
16///
17/// let p = FakePrincipal::user(Uuid::new_v4()).build();
18/// let ctx = FakeOrgContext::for_principal(&p);
19/// assert!(!ctx.org_id.to_string().is_empty());
20/// ```
21pub struct FakeOrgContext;
22
23impl FakeOrgContext {
24 #[must_use]
25 pub fn for_principal(principal: &Principal) -> OrganizationContext {
26 let org_id = principal
27 .org_path
28 .first()
29 .copied()
30 .unwrap_or_else(OrgId::generate);
31 let org_path = principal.org_path.clone();
32 let mut ctx = OrganizationContext::new(org_id, principal.clone(), RequestId::new());
33 ctx.org_path = org_path;
34 ctx
35 }
36}