From 898a7a8ca228ccd156ebe190c0eaae2ef4e7b482 Mon Sep 17 00:00:00 2001 From: shockrah Date: Fri, 5 Mar 2021 19:23:50 -0800 Subject: [PATCH] =?UTF-8?q?=E2=9E=95=20New=20/members/single=20route=20?= =?UTF-8?q?=E2=9E=95=20Simple=20test=20for=20/members/single=20handler=20?= =?UTF-8?q?=E2=9D=97=20Should=20probably=20add=20some=20more=20tests=20to?= =?UTF-8?q?=20verify=20failure=20cases?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- json-api/src/main.rs | 1 + json-api/src/members.rs | 48 +++++++++++++++++++++++++++++++++++++++++ json-api/src/routes.rs | 1 + 3 files changed, 50 insertions(+) diff --git a/json-api/src/main.rs b/json-api/src/main.rs index 90ea88d..2cdc3cf 100644 --- a/json-api/src/main.rs +++ b/json-api/src/main.rs @@ -73,6 +73,7 @@ async fn route_dispatcher( /* MEMBERS */ (GET, routes::GET_ONLINE_MEMBERS) => members::get_online_members(pool, resp).await, (GET, routes::GET_MYSELF) => members::get_self(pool, resp, params).await, + (GET, routes::GET_MEMBER) => members::get_member(pool, resp, params).await, (POST, routes::SELF_UPDATE_NICKNAME) => members::post_self_nickname(pool, resp, params).await, /* OWNER */ (POST, routes::SET_NEW_ADMIN) => admin::new_admin(pool, resp, params).await, diff --git a/json-api/src/members.rs b/json-api/src/members.rs index 6761f51..5d2b944 100644 --- a/json-api/src/members.rs +++ b/json-api/src/members.rs @@ -72,3 +72,51 @@ pub async fn post_self_nickname(p: &Pool, response: &mut Response, params: StatusCode::BAD_REQUEST } } + +pub async fn get_member(p: &Pool, response: &mut Response, params: HashMap) { + let target = qs_param!(params, "member_id", u64); + + *response.status_mut() = if let Some(target) = target{ + match Member::get(p, target).await { + Row(member) => { + set_json_body(response, json!({"member": { + "id": member.id, + "name": member.name, + "joindate": member.joindate, + "status": member.status, + "permissions": member.permissions + }})); + StatusCode::OK + }, + Empty => StatusCode::NOT_FOUND, + Other(_msg) => StatusCode::INTERNAL_SERVER_ERROR, + _ => StatusCode::INTERNAL_SERVER_ERROR + } + } else { + StatusCode::BAD_REQUEST + } +} + +#[cfg(test)] +mod tests { + use crate::testing::get_pool; + use crate::testing::hyper_resp; + use std::collections::HashMap; + use tokio; + + #[tokio::test] + async fn get_member_test() { + // mostly looking for correct response code here + // NOTE: we are assuming that the database we're trying against has + // some dummy data in it for us to actually look at + + let p = get_pool(); + let mut resp = hyper_resp(); + let mut params: HashMap = HashMap::new(); + params.insert("member_id".into(), "1".into()); + + super::get_member(&p, &mut resp, params).await; + + println!("Response: {:?}", resp); + } +} diff --git a/json-api/src/routes.rs b/json-api/src/routes.rs index 71ecc09..f8b7d7d 100644 --- a/json-api/src/routes.rs +++ b/json-api/src/routes.rs @@ -15,6 +15,7 @@ pub const MESSAGE_TIME_RANGE: Rstr = "/message/get_range"; // requires @ch pub const MESSAGE_FROM_ID: Rstr = "/message/from_id"; // requires @channel(id) requires @start(id) @limit(1..1000) pub const GET_ONLINE_MEMBERS: Rstr = "/members/get_online"; // requires none +pub const GET_MEMBER: Rstr = "/members/single"; // requires @member_id pub const GET_MYSELF: Rstr = "/members/me"; // @requires none pub const SELF_UPDATE_NICKNAME: Rstr= "/members/me/nickname";