= ({ className, selectedEdge })
<>
-
+
diff --git a/packages/javascript/bh-shared-ui/src/views/Explore/EdgeInfo/EdgeObjectInformation.test.tsx b/packages/javascript/bh-shared-ui/src/views/Explore/EdgeInfo/EdgeObjectInformation.test.tsx
index 7098d154ddae..762fa41f163c 100644
--- a/packages/javascript/bh-shared-ui/src/views/Explore/EdgeInfo/EdgeObjectInformation.test.tsx
+++ b/packages/javascript/bh-shared-ui/src/views/Explore/EdgeInfo/EdgeObjectInformation.test.tsx
@@ -38,9 +38,9 @@ const mockTargetNode: NodeDetails = {
properties: { objectid: 'target-objectid', name: 'target_node', lastSeen: '2023-09-07T11:10:33.664596893Z' },
};
-const EdgeObjectInformationWithProvider = () => (
+const EdgeObjectInformationWithProvider = ({ edge = selectedEdge }: { edge?: RelationshipDetails }) => (
-
+
);
@@ -59,4 +59,31 @@ describe('EdgeObjectInformation', () => {
expect(screen.getByText(/FALSE/)).toBeInTheDocument();
expect(screen.getByText(/Last Seen by BloodHound:/)).toBeInTheDocument();
});
+
+ test('uses privilege zone labels only for privilege zone relationships', async () => {
+ const edge: RelationshipDetails = {
+ ...selectedEdge,
+ relationship_id: 2,
+ kind: { name: 'PZ_InZone', relationship_kind_id: 2 },
+ properties: { ...selectedEdge.properties, environment_name: 'contoso.local', member_count: 42 },
+ };
+
+ render();
+
+ expect(await screen.findByText('Environment:')).toBeInTheDocument();
+ expect(screen.getByText('Members in environment:')).toBeInTheDocument();
+ });
+
+ test('keeps generic labels for unrelated relationships', async () => {
+ const edge: RelationshipDetails = {
+ ...selectedEdge,
+ relationship_id: 3,
+ properties: { ...selectedEdge.properties, environment_name: 'contoso.local', member_count: 42 },
+ };
+
+ render();
+
+ expect(await screen.findByText('Environment Name:')).toBeInTheDocument();
+ expect(screen.getByText('Member Count:')).toBeInTheDocument();
+ });
});
diff --git a/packages/javascript/bh-shared-ui/src/views/Explore/EdgeInfo/EdgeObjectInformation.tsx b/packages/javascript/bh-shared-ui/src/views/Explore/EdgeInfo/EdgeObjectInformation.tsx
index 49a2022832fa..517e2a466331 100644
--- a/packages/javascript/bh-shared-ui/src/views/Explore/EdgeInfo/EdgeObjectInformation.tsx
+++ b/packages/javascript/bh-shared-ui/src/views/Explore/EdgeInfo/EdgeObjectInformation.tsx
@@ -16,7 +16,7 @@
import { NodeDetails, RelationshipDetails } from 'js-client-library';
import { FC, useEffect } from 'react';
import { usePreviousValue } from '../../../hooks';
-import { EntityField, formatObjectInfoFields } from '../../../utils';
+import { EntityField, formatObjectInfoFields, privilegeZonePropertyDisplayNames } from '../../../utils';
import { FieldsContainer, ObjectInfoFields } from '../fragments';
import { useObjectInfoPanelContext } from '../providers';
import EdgeInfoCollapsibleSection from './EdgeInfoCollapsibleSection';
@@ -48,12 +48,16 @@ const EdgeObjectInformation: FC = ({ selectedEdge, s
value: targetNode?.properties.name || targetNode?.properties.objectid || '',
};
+ const isPrivilegeZoneRelationship = ['PZ_InZone', 'PZ_PartOfZone'].includes(selectedEdge.kind.name);
const formattedObjectFields: EntityField[] = [
sourceNodeField,
targetNodeField,
- ...formatObjectInfoFields({
- ...selectedEdge.properties,
- }),
+ ...formatObjectInfoFields(
+ {
+ ...selectedEdge.properties,
+ },
+ isPrivilegeZoneRelationship ? privilegeZonePropertyDisplayNames : undefined
+ ),
];
const sectionLabel = 'Relationship Information';