From ced09650600f92e30a0f0982f27e8e010feb93dc Mon Sep 17 00:00:00 2001 From: shockrah Date: Mon, 17 Aug 2020 18:51:35 -0700 Subject: [PATCH] fixed channel creation/deletion test so it behaves properlu, all new tests passing atm --- server/src/channels.rs | 40 +++++++++++++++++++++++++++++----------- server/src/common.rs | 38 ++++++++++++++++++++++++++++++++++++++ server/src/main.rs | 14 +++++++------- 3 files changed, 74 insertions(+), 18 deletions(-) create mode 100644 server/src/common.rs diff --git a/server/src/channels.rs b/server/src/channels.rs index 14c5f2c..aab4c53 100644 --- a/server/src/channels.rs +++ b/server/src/channels.rs @@ -8,6 +8,7 @@ use mysql_async::prelude::{params, Queryable}; use serde_json::Value; use crate::db_types::{UBigInt, VarChar, Integer}; +use crate::common; #[derive(Debug)] pub enum ChannelType { @@ -164,9 +165,10 @@ pub async fn create_channel(pool: &Pool, response: &mut Response, params: match insert_channel(pool, name, desc, kind).await { // Server Errors are generally _ok_ to reveal in body I suppose Err(Error::Server(se)) => { - *response.status_mut() = StatusCode::BAD_REQUEST; - let b = format!("Server code: {}\nServer Message:{}", se.code, se.message); - *response.body_mut() = Body::from(b); + common::db_err_response_body(response, se); + //*response.status_mut() = StatusCode::BAD_REQUEST; + //let b = format!("Server code: {}\nServer Message:{}", se.code, se.message); + //*response.body_mut() = Body::from(b); }, // generic errors get a 500 Err(_) => { @@ -193,7 +195,7 @@ pub async fn delete_channel(pool: &Pool, response: &mut Response, params: match db_delete_channel(pool, name).await { Ok(_) => *response.status_mut() = StatusCode::OK, Err(e) => { - println!("delete_chanel sql error :\n{}", e); + *response.body_mut() = Body::from(format!("delete_chanel sql error :\n{}", e)); } } } @@ -208,6 +210,7 @@ mod channels_tests { use crate::testing::{get_pool, hyper_resp}; use serde_json::Value; use hyper::StatusCode; + const DUMMY_TRANSIENT_CHANNEL: &'static str = "sample channel"; #[tokio::test] async fn list_all_channels_good() { @@ -225,22 +228,37 @@ mod channels_tests { } #[tokio::test] - async fn create_channel_good() { + async fn delete_and_create_channel_good() { + use chrono::Utc; let p = get_pool(); let mut resp = hyper_resp(); // @params: name + kind + [description] - let params: Value = serde_json::from_str(r#" - { - "name": "sample channel", + let cname_id = Utc::now(); + let params: Value = serde_json::from_str(&format!(r#" + {{ + "name": "{}-{}", "kind": 2, "description": "some random bs" - } - "#).unwrap(); + }} + "#, DUMMY_TRANSIENT_CHANNEL, cname_id)).unwrap(); super::create_channel(&p, &mut resp, params).await; - // hopefully we 200 + println!("CREATE CHANNEL: {:?}", resp.body()); assert_eq!(StatusCode::OK, resp.status()); + + + // clean up and hopefully delete the channel properly + let mut resp_delete = hyper_resp(); + let params_delete: Value = serde_json::from_str(&format!(r#" + {{ + "name": "{}-{}" + }} + "#, DUMMY_TRANSIENT_CHANNEL, cname_id)).unwrap(); + println!("Parameters: {}", params_delete); + super::delete_channel(&p, &mut resp_delete, params_delete).await; + + println!("Body: {:?}", resp.body()); let _ = p.disconnect().await; } } diff --git a/server/src/common.rs b/server/src/common.rs new file mode 100644 index 0000000..72f6780 --- /dev/null +++ b/server/src/common.rs @@ -0,0 +1,38 @@ +use mysql_async::error::ServerError; +use hyper::{Body, Response, StatusCode}; +use serde::Serialize; +use serde_json::to_string as json; + +#[derive(Serialize)] +struct GenericErrData { + status: u16, + message: &'static str, + note: &'static str, +} + + +pub fn db_err_response_body(response: &mut Response, err: ServerError) { + *response.status_mut() = StatusCode::INTERNAL_SERVER_ERROR; + match err.code { + // Duplicate unique value was (tried to be) inserted + 1062 => { + + let s = json(&GenericErrData { + status: 1062, + message: "Duplicate key was inserted and failed", + note: "Check parameters given" + }).unwrap(); + *response.body_mut() = Body::from(s); + }, + // Generic errors + _ => { + let s = json(&GenericErrData{ + status: 500, + message: "Generic Backend error", + note:"" + }).unwrap(); + *response.body_mut() = Body::from(s); + } + } +} + diff --git a/server/src/main.rs b/server/src/main.rs index a074fc0..dd9dd5f 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -22,21 +22,21 @@ use mysql_async::Pool; use dotenv::dotenv; use clap::{Arg, App}; - -mod testing; -mod auth; use auth::AuthReason; +mod auth; + mod routes; mod invites; mod channels; - mod members; - -mod messages; -mod http_params; mod perms; +mod messages; + +mod http_params; mod db_types; +mod common; +mod testing; const NO_ERR: u16 = 0; const CONFIG_ERR: u16 = 1;