Private
Public Access
1
0

kordophone: add support for /messages

This commit is contained in:
2025-01-20 19:43:21 -08:00
parent 793faab721
commit a8104c379c
8 changed files with 206 additions and 6 deletions

View File

@@ -9,7 +9,10 @@ use hyper::{Body, Client, Method, Request, Uri};
use async_trait::async_trait;
use serde::{de::DeserializeOwned, Deserialize, Serialize};
use crate::{model::{Conversation, JwtToken}, APIInterface};
use crate::{
model::{Conversation, ConversationID, JwtToken, Message},
APIInterface
};
type HttpClient = Client<hyper::client::HttpConnector>;
@@ -111,6 +114,12 @@ impl APIInterface for HTTPAPIClient {
self.auth_token = Some(token.clone());
Ok(token)
}
async fn get_messages(&mut self, conversation_id: &ConversationID) -> Result<Vec<Message>, Self::Error> {
let endpoint = format!("messages?guid={}", conversation_id);
let messages: Vec<Message> = self.request(&endpoint, Method::GET).await?;
Ok(messages)
}
}
impl HTTPAPIClient {
@@ -261,4 +270,18 @@ mod test {
let conversations = client.get_conversations().await.unwrap();
assert!(!conversations.is_empty());
}
#[tokio::test]
async fn test_messages() {
if !mock_client_is_reachable().await {
log::warn!("Skipping http_client tests (mock server not reachable)");
return;
}
let mut client = local_mock_client();
let conversations = client.get_conversations().await.unwrap();
let conversation = conversations.first().unwrap();
let messages = client.get_messages(&conversation.guid).await.unwrap();
assert!(!messages.is_empty());
}
}

View File

@@ -1,5 +1,7 @@
use async_trait::async_trait;
pub use crate::model::Conversation;
pub use crate::model::{
Conversation, Message, ConversationID
};
use crate::model::JwtToken;
pub mod http_client;
@@ -17,6 +19,9 @@ pub trait APIInterface {
// (GET) /conversations
async fn get_conversations(&mut self) -> Result<Vec<Conversation>, Self::Error>;
// (GET) /messages
async fn get_messages(&mut self, conversation_id: &ConversationID) -> Result<Vec<Message>, Self::Error>;
// (POST) /authenticate
async fn authenticate(&mut self, credentials: Credentials) -> Result<JwtToken, Self::Error>;
}