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 **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}