xmtp_api_d14n/endpoints/v3/mls/
get_newest_group_message.rs

1use derive_builder::Builder;
2use prost::Message;
3use prost::bytes::Bytes;
4use std::borrow::Cow;
5use xmtp_proto::api::{BodyError, Endpoint};
6use xmtp_proto::xmtp::mls::api::v1::{GetNewestGroupMessageRequest, GetNewestGroupMessageResponse};
7
8#[derive(Debug, Builder, Default)]
9#[builder(setter(strip_option), build_fn(error = "BodyError"))]
10pub struct GetNewestGroupMessage {
11    #[builder(setter(into))]
12    group_ids: Vec<Vec<u8>>,
13    #[builder(default)]
14    include_content: bool,
15}
16
17impl GetNewestGroupMessage {
18    pub fn builder() -> GetNewestGroupMessageBuilder {
19        Default::default()
20    }
21}
22
23impl Endpoint for GetNewestGroupMessage {
24    type Output = GetNewestGroupMessageResponse;
25
26    fn grpc_endpoint(&self) -> Cow<'static, str> {
27        xmtp_proto::path_and_query::<GetNewestGroupMessageRequest>()
28    }
29
30    fn body(&self) -> Result<Bytes, BodyError> {
31        Ok(GetNewestGroupMessageRequest {
32            group_ids: self.group_ids.clone(),
33            include_content: self.include_content,
34        }
35        .encode_to_vec()
36        .into())
37    }
38}
39
40#[cfg(test)]
41mod test {
42    use crate::v3::GetNewestGroupMessage;
43    use xmtp_api_grpc::test::NodeGoClient;
44    use xmtp_proto::prelude::*;
45    use xmtp_proto::xmtp::mls::api::v1::*;
46
47    #[xmtp_common::test]
48    fn test_file_descriptor() {
49        let pnq = xmtp_proto::path_and_query::<GetNewestGroupMessageRequest>();
50        println!("{}", pnq);
51    }
52
53    #[xmtp_common::test]
54    async fn test_get_newest_group_message() {
55        let client = NodeGoClient::create();
56        let client = client.build().unwrap();
57        let mut endpoint = GetNewestGroupMessage::builder()
58            .group_ids(vec![vec![1, 2, 3], vec![4, 5, 6]])
59            .include_content(true)
60            .build()
61            .unwrap();
62
63        let result = endpoint.query(&client).await.unwrap();
64        assert_eq!(
65            result.responses.len(),
66            2,
67            "Should return response for each group ID"
68        );
69    }
70
71    #[xmtp_common::test]
72    fn test_get_newest_group_message_builder() {
73        // Test basic builder functionality
74        let endpoint = GetNewestGroupMessage::builder()
75            .group_ids(vec![vec![1, 2, 3]])
76            .build()
77            .unwrap();
78
79        assert_eq!(endpoint.group_ids, vec![vec![1, 2, 3]]);
80        assert!(!endpoint.include_content);
81    }
82
83    #[xmtp_common::test]
84    fn test_get_newest_group_message_builder_with_content() {
85        // Test builder with include_content set
86        let endpoint = GetNewestGroupMessage::builder()
87            .group_ids(vec![vec![7, 8, 9], vec![10, 11, 12]])
88            .include_content(true)
89            .build()
90            .unwrap();
91
92        assert_eq!(endpoint.group_ids, vec![vec![7, 8, 9], vec![10, 11, 12]]);
93        assert!(endpoint.include_content);
94    }
95
96    #[xmtp_common::test]
97    fn test_get_newest_group_message_endpoints() {
98        let endpoint = GetNewestGroupMessage::builder()
99            .group_ids(vec![vec![1]])
100            .build()
101            .unwrap();
102
103        assert_eq!(
104            endpoint.grpc_endpoint(),
105            "/xmtp.mls.api.v1.MlsApi/GetNewestGroupMessage"
106        );
107    }
108}