cascading delete, mcaptcha add/del and test suite

This commit is contained in:
realaravinth
2021-03-11 20:58:18 +05:30
parent 6be10af6fd
commit 096dcd32e4
8 changed files with 287 additions and 85 deletions

View File

@@ -3,11 +3,13 @@ use actix_web::{
dev::ServiceResponse,
http::{header, StatusCode},
};
use serde::Serialize;
use super::*;
use crate::api::v1::auth::{Login, Register};
use crate::api::v1::services as v1_services;
use crate::data::Data;
use crate::errors::*;
#[macro_export]
macro_rules! get_cookie {
@@ -17,15 +19,13 @@ macro_rules! get_cookie {
}
pub async fn delete_user(name: &str, data: &Data) {
let _ = sqlx::query!("DELETE FROM mcaptcha_users WHERE name = ($1)", name,)
.execute(&data.db)
.await;
}
pub async fn delete_domain_util(name: &str, data: &Data) {
let _ = sqlx::query!("DELETE FROM mcaptcha_domains WHERE name = ($1)", name,)
let r = sqlx::query!("DELETE FROM mcaptcha_users WHERE name = ($1)", name,)
.execute(&data.db)
.await;
println!();
println!();
println!();
println!("Deleting user: {:?}", &r);
}
#[macro_export]
@@ -51,16 +51,20 @@ macro_rules! get_app {
}
/// register and signin utility
pub async fn signin_util<'a>(
pub async fn register_and_signin<'a>(
name: &'a str,
email: &str,
password: &str,
) -> (data::Data, Login, ServiceResponse) {
register(name, email, password).await;
signin(name, password).await
}
/// register and signin utility
pub async fn register<'a>(name: &'a str, email: &str, password: &str) {
let data = Data::new().await;
let mut app = get_app!(data).await;
delete_user(&name, &data).await;
// 1. Register
let msg = Register {
username: name.into(),
@@ -70,6 +74,12 @@ pub async fn signin_util<'a>(
let resp =
test::call_service(&mut app, post_request!(&msg, "/api/v1/signup").to_request()).await;
assert_eq!(resp.status(), StatusCode::OK);
}
/// signin util
pub async fn signin<'a>(name: &'a str, password: &str) -> (data::Data, Login, ServiceResponse) {
let data = Data::new().await;
let mut app = get_app!(data).await;
// 2. signin
let creds = Login {
@@ -85,3 +95,57 @@ pub async fn signin_util<'a>(
(data, creds, signin_resp)
}
/// register and signin and domain
pub async fn add_domain_util(
name: &str,
password: &str,
domain: &str,
) -> (data::Data, Login, ServiceResponse) {
use crate::api::v1::mcaptcha::Domain;
let (data, creds, signin_resp) = signin(name, password).await;
let cookies = get_cookie!(signin_resp);
let mut app = get_app!(data).await;
// 1. add domain
let domain = Domain {
name: domain.into(),
};
let add_domain_resp = test::call_service(
&mut app,
post_request!(&domain, "/api/v1/mcaptcha/domain/add")
.cookie(cookies.clone())
.to_request(),
)
.await;
assert_eq!(add_domain_resp.status(), StatusCode::OK);
(data, creds, signin_resp)
}
/// pub duplicate test
pub async fn bad_post_req_test<T: Serialize>(
name: &str,
password: &str,
url: &str,
payload: &T,
dup_err: ServiceError,
s: StatusCode,
) {
let (data, _, signin_resp) = signin(name, password).await;
let cookies = get_cookie!(signin_resp);
let mut app = get_app!(data).await;
let dup_token_resp = test::call_service(
&mut app,
post_request!(&payload, url)
.cookie(cookies.clone())
.to_request(),
)
.await;
assert_eq!(dup_token_resp.status(), s);
let txt: ErrorToResponse = test::read_body_json(dup_token_resp).await;
assert_eq!(txt.error, format!("{}", dup_err));
}