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 **last** entry in `principal.org_path` (the
9/// acting / leaf org, per the Brefwiz `[root, …, leaf]` convention) or
10/// generates a fresh one when `org_path` is empty.
11///
12/// # Quick start
13///
14/// ```rust
15/// use uuid::Uuid;
16/// use api_bones_test::builders::{FakePrincipal, FakeOrgContext};
17/// use api_bones::org_id::OrgId;
18///
19/// let leaf = OrgId::generate();
20/// let p = FakePrincipal::user(Uuid::new_v4())
21/// .org_path(vec![OrgId::generate(), leaf])
22/// .build();
23/// let ctx = FakeOrgContext::for_principal(&p);
24/// assert_eq!(ctx.org_id, leaf);
25/// ```
26pub struct FakeOrgContext;
27
28impl FakeOrgContext {
29 #[must_use]
30 pub fn for_principal(principal: &Principal) -> OrganizationContext {
31 let org_id = principal
32 .org_path
33 .last()
34 .copied()
35 .unwrap_or_else(OrgId::generate);
36 let org_path = principal.org_path.clone();
37 let mut ctx = OrganizationContext::new(org_id, principal.clone(), RequestId::new());
38 ctx.org_path = org_path;
39 ctx
40 }
41}