misskey_api/endpoint/channels/
update.rs

1use crate::model::{channel::Channel, drive::DriveFile, id::Id};
2
3use serde::Serialize;
4use typed_builder::TypedBuilder;
5
6#[derive(Serialize, Debug, Clone, TypedBuilder)]
7#[serde(rename_all = "camelCase")]
8#[builder(doc)]
9pub struct Request {
10    pub channel_id: Id<Channel>,
11    /// [ 1 .. 128 ] characters
12    #[serde(skip_serializing_if = "Option::is_none")]
13    #[builder(default, setter(strip_option, into))]
14    pub name: Option<String>,
15    /// [ 1 .. 2048 ] characters
16    #[serde(skip_serializing_if = "Option::is_none")]
17    #[builder(default, setter(strip_option))]
18    pub description: Option<Option<String>>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    #[builder(default, setter(strip_option))]
21    pub banner_id: Option<Option<Id<DriveFile>>>,
22}
23
24impl misskey_core::Request for Request {
25    type Response = Channel;
26    const ENDPOINT: &'static str = "channels/update";
27}
28
29#[cfg(test)]
30mod tests {
31    use super::Request;
32    use crate::test::{ClientExt, TestClient};
33
34    #[tokio::test]
35    async fn request_with_name() {
36        let client = TestClient::new();
37        let channel = client
38            .test(crate::endpoint::channels::create::Request {
39                name: "test channel".to_string(),
40                description: None,
41                banner_id: None,
42            })
43            .await;
44
45        client.test(Request {
46            channel_id: channel.id,
47            // random 128 chars
48            name: Some("yCdKKHkRAmqhE49j3TBCVnnsQiZ2KkCK83z6NNKoGaiqQNOALsAOIz6XVJAcaV9lNbQYuuhSe7nAM8qdvUtokhWYWDO999z07N4ajtikDmzANpgwRh7rxMgb8PLsgcbm".to_string()),
49            description: None,
50            banner_id: None,
51        }).await;
52    }
53
54    #[tokio::test]
55    async fn request_with_description() {
56        let client = TestClient::new();
57        let channel = client
58            .test(crate::endpoint::channels::create::Request {
59                name: "test channel".to_string(),
60                description: None,
61                banner_id: None,
62            })
63            .await;
64
65        client
66            .test(Request {
67                channel_id: channel.id.clone(),
68                name: None,
69                description: Some(Some("description".to_string())),
70                banner_id: None,
71            })
72            .await;
73        client
74            .test(Request {
75                channel_id: channel.id,
76                name: None,
77                description: Some(None),
78                banner_id: None,
79            })
80            .await;
81    }
82
83    #[tokio::test]
84    async fn request_with_banner() {
85        let client = TestClient::new();
86        let channel = client
87            .test(crate::endpoint::channels::create::Request {
88                name: "test channel".to_string(),
89                description: None,
90                banner_id: None,
91            })
92            .await;
93        let url = client.avatar_url().await;
94        let file = client.upload_from_url(url).await;
95
96        client
97            .test(Request {
98                channel_id: channel.id.clone(),
99                name: None,
100                description: None,
101                banner_id: Some(Some(file.id)),
102            })
103            .await;
104        // bug in misskey
105        // client
106        //     .test(Request {
107        //         channel_id: channel.id,
108        //         name: None,
109        //         description: None,
110        //         banner_id: Some(None),
111        //     })
112        //     .await;
113    }
114}