Skip to main content

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}