Skip to content

Commit

Permalink
fix: update server version endpoint with optional python version
Browse files Browse the repository at this point in the history
Signed-off-by: Hanadi92 <hanadi.tamimi@gmail.com>
  • Loading branch information
hanadi92 committed Jan 19, 2024
1 parent 8d2b5a6 commit deb14a8
Showing 1 changed file with 51 additions and 3 deletions.
54 changes: 51 additions & 3 deletions src/version/get_server_version/v1.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
//! [GET /_synapse/admin/v1/server_version](https://github.com/matrix-org/synapse/blob/master/docs/admin_api/version_api.rst)
//! [GET /_synapse/admin/v1/server_version](https://github.com/element-hq/synapse/blob/develop/docs/admin_api/version_api.md)
use ruma::api::{metadata, request, response, Metadata};
use serde::{Deserialize, Serialize};

const METADATA: Metadata = metadata! {
method: GET,
Expand All @@ -16,12 +17,15 @@ const METADATA: Metadata = metadata! {
pub struct Request {}

#[response]
#[derive(Serialize, Deserialize)]
pub struct Response {
/// The Synapse version.
pub server_version: String,

/// The Python version.
pub python_version: String,
/// Optional since Synapse 1.94.0
#[serde(skip_serializing_if = "Option::is_none")]
pub python_version: Option<String>,
}

impl Request {
Expand All @@ -33,7 +37,51 @@ impl Request {

impl Response {
/// Creates a `Response` with the given Synapse and Python versions.
pub fn new(server_version: String, python_version: String) -> Self {
pub fn new(server_version: String, python_version: Option<String>) -> Self {
Self { server_version, python_version }
}
}

#[test]
fn test_response_with_python_version() {
use serde_json;

let server_version = "1.2.3".to_string();
let python_version = Some("4.5.6".to_string());

// create response case
let response = Response::new(server_version.clone(), python_version.clone());
assert_eq!(response.server_version, server_version);
assert_eq!(response.python_version, python_version);

// serialization case
let serialized = serde_json::to_string(&response).unwrap();
assert_eq!(serialized, "{\"server_version\":\"1.2.3\",\"python_version\":\"4.5.6\"}");

// deserialization case
let deserialized: Response = serde_json::from_str(&serialized).unwrap();
assert_eq!(deserialized.server_version, "1.2.3");
assert_eq!(deserialized.python_version, Some("4.5.6".to_string()));
}

#[test]
fn test_response_without_python_version() {
use serde_json;

let server_version = "1.2.3".to_string();
let python_version = None;

// create response case
let response = Response::new(server_version.clone(), python_version);
assert_eq!(response.server_version, server_version);
assert!(response.python_version.is_none());

// serialization case
let serialized = serde_json::to_string(&response).unwrap();
assert_eq!(serialized, "{\"server_version\":\"1.2.3\"}");

// deserialization case
let deserialized: Response = serde_json::from_str(&serialized).unwrap();
assert_eq!(deserialized.server_version, "1.2.3");
assert!(deserialized.python_version.is_none());
}

0 comments on commit deb14a8

Please sign in to comment.