unifly_api/convert/
site.rs1use crate::integration_types;
2use crate::model::common::DataSource;
3use crate::model::entity_id::EntityId;
4use crate::model::site::Site;
5use crate::session::models::SessionSite;
6
7impl From<SessionSite> for Site {
8 fn from(s: SessionSite) -> Self {
9 let display_name = s
10 .desc
11 .filter(|d| !d.is_empty())
12 .unwrap_or_else(|| s.name.clone());
13
14 Site {
15 id: EntityId::from(s.id),
16 internal_name: s.name,
17 name: display_name,
18 device_count: None,
19 client_count: None,
20 source: DataSource::SessionApi,
21 }
22 }
23}
24
25impl From<integration_types::SiteResponse> for Site {
26 fn from(s: integration_types::SiteResponse) -> Self {
27 Site {
28 id: EntityId::Uuid(s.id),
29 internal_name: s.internal_reference,
30 name: s.name,
31 device_count: None,
32 client_count: None,
33 source: DataSource::IntegrationApi,
34 }
35 }
36}
37
38#[cfg(test)]
39mod tests {
40 use super::*;
41
42 #[test]
43 fn legacy_site_uses_desc_as_display_name() {
44 let site = SessionSite {
45 id: "abc123".into(),
46 name: "default".into(),
47 desc: Some("Main Office".into()),
48 role: None,
49 extra: serde_json::Map::new(),
50 };
51 let converted: Site = site.into();
52 assert_eq!(converted.internal_name, "default");
53 assert_eq!(converted.name, "Main Office");
54 }
55
56 #[test]
57 fn legacy_site_falls_back_to_name_when_desc_empty() {
58 let site = SessionSite {
59 id: "abc123".into(),
60 name: "branch-1".into(),
61 desc: Some(String::new()),
62 role: None,
63 extra: serde_json::Map::new(),
64 };
65 let converted: Site = site.into();
66 assert_eq!(converted.name, "branch-1");
67 }
68}