mirror of
https://github.com/mCaptcha/mCaptcha.git
synced 2025-06-07 14:46:40 +00:00
fix and chore: refactor tests to minimize initializing DB connections
SUMMARY The test suite was spinning up way too many database connections that what's strictly needed and so the test suite was failing with[0]: code: "53300", message: "sorry, too many clients already" EXPERIMENTS Tried sharing database connection pool across all tests with async_once[0] but faced: - IO errors The connections were probably getting dropped in between tests - actix Actor errors The actor was probably not getting initialized before a a reference to the async_once initialized app context(crate::data::Data) is retrieved and used FIX crate::tests was spinning up an App context instance(crate::data::Data) for most utility functions, which was unnecessarily excessive. Each test now creates an instance of the application context at the beginning and shared a reference with all test utility functions. So number of database connections/app context instance = number of unit tests. [0]: permanently fixes #22 [1]: https://docs.rs/async_once/latest/async_once/
This commit is contained in:
parent
176df3c7a7
commit
a971d4209d
42
Cargo.lock
generated
42
Cargo.lock
generated
@ -1727,25 +1727,14 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mio"
|
name = "mio"
|
||||||
version = "0.8.2"
|
version = "0.8.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9"
|
checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
"miow",
|
|
||||||
"ntapi",
|
|
||||||
"wasi 0.11.0+wasi-snapshot-preview1",
|
"wasi 0.11.0+wasi-snapshot-preview1",
|
||||||
"winapi",
|
"windows-sys",
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "miow"
|
|
||||||
version = "0.3.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
|
|
||||||
dependencies = [
|
|
||||||
"winapi",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -1793,15 +1782,6 @@ dependencies = [
|
|||||||
"minimal-lexical",
|
"minimal-lexical",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ntapi"
|
|
||||||
version = "0.3.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f"
|
|
||||||
dependencies = [
|
|
||||||
"winapi",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num"
|
name = "num"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
@ -2892,9 +2872,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.92"
|
version = "1.0.94"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52"
|
checksum = "a07e33e919ebcd69113d5be0e4d70c5707004ff45188910106854f38b960df4a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -3028,9 +3008,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio"
|
name = "tokio"
|
||||||
version = "1.18.1"
|
version = "1.18.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dce653fb475565de9f6fb0614b28bca8df2c430c0cf84bcd9c843f15de5414cc"
|
checksum = "4903bf0427cf68dddd5aa6a93220756f8be0c34fcfa9f5e6191e103e15a31395"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"libc",
|
"libc",
|
||||||
@ -3491,18 +3471,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zstd"
|
name = "zstd"
|
||||||
version = "0.10.0+zstd.1.5.2"
|
version = "0.10.2+zstd.1.5.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3b1365becbe415f3f0fcd024e2f7b45bacfb5bdd055f0dc113571394114e7bdd"
|
checksum = "5f4a6bd64f22b5e3e94b4e238669ff9f10815c27a5180108b849d24174a83847"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"zstd-safe",
|
"zstd-safe",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zstd-safe"
|
name = "zstd-safe"
|
||||||
version = "4.1.4+zstd.1.5.2"
|
version = "4.1.6+zstd.1.5.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2f7cd17c9af1a4d6c24beb1cc54b17e2ef7b593dc92f19e9d9acad8b182bbaee"
|
checksum = "94b61c51bb270702d6167b8ce67340d2754b088d0c091b06e593aa772c3ee9bb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"zstd-sys",
|
"zstd-sys",
|
||||||
|
4
Makefile
4
Makefile
@ -97,8 +97,8 @@ test: frontend-test frontend ## Run all available tests
|
|||||||
cd db/db-sqlx-postgres &&\
|
cd db/db-sqlx-postgres &&\
|
||||||
DATABASE_URL=${POSTGRES_DATABASE_URL}\
|
DATABASE_URL=${POSTGRES_DATABASE_URL}\
|
||||||
cargo test --no-fail-fast
|
cargo test --no-fail-fast
|
||||||
./scripts/tests.sh
|
cargo test --all-features --no-fail-fast
|
||||||
# cargo test --all-features --no-fail-fast
|
# ./scripts/tests.sh
|
||||||
|
|
||||||
xml-test-coverage: migrate ## Generate code coverage report in XML format
|
xml-test-coverage: migrate ## Generate code coverage report in XML format
|
||||||
cargo tarpaulin -t 1200 --out Xml
|
cargo tarpaulin -t 1200 --out Xml
|
||||||
|
@ -96,28 +96,27 @@ pub fn services(cfg: &mut actix_web::web::ServiceConfig) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
pub mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
use actix_web::http::StatusCode;
|
use actix_web::http::StatusCode;
|
||||||
use actix_web::test;
|
use actix_web::test;
|
||||||
|
|
||||||
use crate::api::v1::ROUTES;
|
use crate::api::v1::ROUTES;
|
||||||
use crate::data::Data;
|
|
||||||
use crate::tests::*;
|
use crate::tests::*;
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn update_password_works() {
|
pub async fn update_password_works() {
|
||||||
const NAME: &str = "updatepassuser";
|
const NAME: &str = "updatepassuser";
|
||||||
const PASSWORD: &str = "longpassword2";
|
const PASSWORD: &str = "longpassword2";
|
||||||
const EMAIL: &str = "updatepassuser@a.com";
|
const EMAIL: &str = "updatepassuser@a.com";
|
||||||
|
|
||||||
{
|
let data = crate::data::Data::new().await;
|
||||||
let data = Data::new().await;
|
let data = &data;
|
||||||
delete_user(NAME, &data).await;
|
|
||||||
}
|
|
||||||
|
|
||||||
let (data, _, signin_resp) = register_and_signin(NAME, EMAIL, PASSWORD).await;
|
delete_user(data, NAME).await;
|
||||||
|
|
||||||
|
let (_, signin_resp) = register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
@ -129,7 +128,7 @@ mod tests {
|
|||||||
confirm_new_password: PASSWORD.into(),
|
confirm_new_password: PASSWORD.into(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let res = update_password_runner(NAME, update_password.into(), &data).await;
|
let res = update_password_runner(NAME, update_password.into(), data).await;
|
||||||
assert!(res.is_err());
|
assert!(res.is_err());
|
||||||
assert_eq!(res, Err(ServiceError::PasswordsDontMatch));
|
assert_eq!(res, Err(ServiceError::PasswordsDontMatch));
|
||||||
|
|
||||||
@ -139,7 +138,7 @@ mod tests {
|
|||||||
confirm_new_password: new_password.into(),
|
confirm_new_password: new_password.into(),
|
||||||
};
|
};
|
||||||
|
|
||||||
assert!(update_password_runner(NAME, update_password.into(), &data)
|
assert!(update_password_runner(NAME, update_password.into(), data)
|
||||||
.await
|
.await
|
||||||
.is_ok());
|
.is_ok());
|
||||||
|
|
||||||
@ -150,6 +149,7 @@ mod tests {
|
|||||||
};
|
};
|
||||||
|
|
||||||
bad_post_req_test(
|
bad_post_req_test(
|
||||||
|
data,
|
||||||
NAME,
|
NAME,
|
||||||
new_password,
|
new_password,
|
||||||
ROUTES.account.update_password,
|
ROUTES.account.update_password,
|
||||||
@ -165,6 +165,7 @@ mod tests {
|
|||||||
};
|
};
|
||||||
|
|
||||||
bad_post_req_test(
|
bad_post_req_test(
|
||||||
|
data,
|
||||||
NAME,
|
NAME,
|
||||||
new_password,
|
new_password,
|
||||||
ROUTES.account.update_password,
|
ROUTES.account.update_password,
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2022 Aravinth Manivannan <realaravinth@batsense.net>
|
* Copyright (C) 2022 Aravinth Manivannan <realaravinth@batsense.net>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU Affero General Public License as
|
* it under the terms of the GNU Affero General Public License as
|
||||||
* published by the Free Software Foundation, either version 3 of the
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
* License, or (at your option) any later version.
|
* License, or (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU Affero General Public License for more details.
|
* GNU Affero General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use actix_web::http::StatusCode;
|
use actix_web::http::StatusCode;
|
||||||
use actix_web::test;
|
use actix_web::test;
|
||||||
@ -23,24 +23,21 @@ use super::username::Username;
|
|||||||
use super::*;
|
use super::*;
|
||||||
use crate::api::v1::auth::runners::Password;
|
use crate::api::v1::auth::runners::Password;
|
||||||
use crate::api::v1::ROUTES;
|
use crate::api::v1::ROUTES;
|
||||||
use crate::data::Data;
|
|
||||||
use crate::*;
|
use crate::*;
|
||||||
|
|
||||||
use crate::errors::*;
|
use crate::errors::*;
|
||||||
use crate::tests::*;
|
use crate::tests::*;
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn uname_email_exists_works() {
|
pub async fn uname_email_exists_works() {
|
||||||
const NAME: &str = "testuserexists";
|
const NAME: &str = "testuserexists";
|
||||||
const PASSWORD: &str = "longpassword2";
|
const PASSWORD: &str = "longpassword2";
|
||||||
const EMAIL: &str = "testuserexists@a.com2";
|
const EMAIL: &str = "testuserexists@a.com2";
|
||||||
|
let data = crate::data::Data::new().await;
|
||||||
|
let data = &data;
|
||||||
|
delete_user(data, NAME).await;
|
||||||
|
|
||||||
{
|
let (_, signin_resp) = register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
let data = Data::new().await;
|
|
||||||
delete_user(NAME, &data).await;
|
|
||||||
}
|
|
||||||
|
|
||||||
let (data, _, signin_resp) = register_and_signin(NAME, EMAIL, PASSWORD).await;
|
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
@ -118,21 +115,20 @@ async fn uname_email_exists_works() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn email_udpate_password_validation_del_userworks() {
|
pub async fn email_udpate_password_validation_del_userworks() {
|
||||||
const NAME: &str = "testuser2";
|
const NAME: &str = "testuser2";
|
||||||
const PASSWORD: &str = "longpassword2";
|
const PASSWORD: &str = "longpassword2";
|
||||||
const EMAIL: &str = "testuser1@a.com2";
|
const EMAIL: &str = "testuser1@a.com2";
|
||||||
const NAME2: &str = "eupdauser";
|
const NAME2: &str = "eupdauser";
|
||||||
const EMAIL2: &str = "eupdauser@a.com";
|
const EMAIL2: &str = "eupdauser@a.com";
|
||||||
|
|
||||||
{
|
let data = crate::data::Data::new().await;
|
||||||
let data = Data::new().await;
|
let data = &data;
|
||||||
delete_user(NAME, &data).await;
|
delete_user(data, NAME).await;
|
||||||
delete_user(NAME2, &data).await;
|
delete_user(data, NAME2).await;
|
||||||
}
|
|
||||||
|
|
||||||
let _ = register_and_signin(NAME2, EMAIL2, PASSWORD).await;
|
let _ = register_and_signin(data, NAME2, EMAIL2, PASSWORD).await;
|
||||||
let (data, _creds, signin_resp) = register_and_signin(NAME, EMAIL, PASSWORD).await;
|
let (_creds, signin_resp) = register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
@ -153,6 +149,7 @@ async fn email_udpate_password_validation_del_userworks() {
|
|||||||
// check duplicate email while duplicate email
|
// check duplicate email while duplicate email
|
||||||
email_payload.email = EMAIL2.into();
|
email_payload.email = EMAIL2.into();
|
||||||
bad_post_req_test(
|
bad_post_req_test(
|
||||||
|
data,
|
||||||
NAME,
|
NAME,
|
||||||
PASSWORD,
|
PASSWORD,
|
||||||
ROUTES.account.update_email,
|
ROUTES.account.update_email,
|
||||||
@ -166,6 +163,7 @@ async fn email_udpate_password_validation_del_userworks() {
|
|||||||
password: NAME.into(),
|
password: NAME.into(),
|
||||||
};
|
};
|
||||||
bad_post_req_test(
|
bad_post_req_test(
|
||||||
|
data,
|
||||||
NAME,
|
NAME,
|
||||||
PASSWORD,
|
PASSWORD,
|
||||||
ROUTES.account.delete,
|
ROUTES.account.delete,
|
||||||
@ -200,7 +198,7 @@ async fn email_udpate_password_validation_del_userworks() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn username_update_works() {
|
pub async fn username_update_works() {
|
||||||
const NAME: &str = "testuserupda";
|
const NAME: &str = "testuserupda";
|
||||||
const EMAIL: &str = "testuserupda@sss.com";
|
const EMAIL: &str = "testuserupda@sss.com";
|
||||||
const EMAIL2: &str = "testuserupda2@sss.com";
|
const EMAIL2: &str = "testuserupda2@sss.com";
|
||||||
@ -208,18 +206,17 @@ async fn username_update_works() {
|
|||||||
const NAME2: &str = "terstusrtds";
|
const NAME2: &str = "terstusrtds";
|
||||||
const NAME_CHANGE: &str = "terstusrtdsxx";
|
const NAME_CHANGE: &str = "terstusrtdsxx";
|
||||||
|
|
||||||
{
|
let data = crate::data::Data::new().await;
|
||||||
let data = Data::new().await;
|
let data = &data;
|
||||||
|
|
||||||
futures::join!(
|
futures::join!(
|
||||||
delete_user(NAME, &data),
|
delete_user(data, NAME),
|
||||||
delete_user(NAME2, &data),
|
delete_user(data, NAME2),
|
||||||
delete_user(NAME_CHANGE, &data)
|
delete_user(data, NAME_CHANGE),
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
let _ = register_and_signin(NAME2, EMAIL2, PASSWORD).await;
|
let _ = register_and_signin(data, NAME2, EMAIL2, PASSWORD).await;
|
||||||
let (data, _creds, signin_resp) = register_and_signin(NAME, EMAIL, PASSWORD).await;
|
let (_creds, signin_resp) = register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
@ -239,6 +236,7 @@ async fn username_update_works() {
|
|||||||
// check duplicate username with duplicate username
|
// check duplicate username with duplicate username
|
||||||
username_udpate.username = NAME2.into();
|
username_udpate.username = NAME2.into();
|
||||||
bad_post_req_test(
|
bad_post_req_test(
|
||||||
|
data,
|
||||||
NAME_CHANGE,
|
NAME_CHANGE,
|
||||||
PASSWORD,
|
PASSWORD,
|
||||||
ROUTES.account.update_username,
|
ROUTES.account.update_username,
|
||||||
|
@ -216,7 +216,7 @@ async fn update(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
pub mod tests {
|
||||||
use actix_web::http::StatusCode;
|
use actix_web::http::StatusCode;
|
||||||
use actix_web::test;
|
use actix_web::test;
|
||||||
use actix_web::web::Bytes;
|
use actix_web::web::Bytes;
|
||||||
@ -227,7 +227,6 @@ mod tests {
|
|||||||
use crate::tests::*;
|
use crate::tests::*;
|
||||||
use crate::*;
|
use crate::*;
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod isoloated_test {
|
mod isoloated_test {
|
||||||
use super::{LevelBuilder, TrafficPattern};
|
use super::{LevelBuilder, TrafficPattern};
|
||||||
|
|
||||||
@ -303,18 +302,17 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn easy_works() {
|
pub async fn easy_works() {
|
||||||
const NAME: &str = "defaultuserconfgworks";
|
const NAME: &str = "defaultuserconfgworks";
|
||||||
const PASSWORD: &str = "longpassworddomain";
|
const PASSWORD: &str = "longpassworddomain";
|
||||||
const EMAIL: &str = "defaultuserconfgworks@a.com";
|
const EMAIL: &str = "defaultuserconfgworks@a.com";
|
||||||
|
let data = crate::data::Data::new().await;
|
||||||
|
let data = &data;
|
||||||
|
|
||||||
{
|
delete_user(data, NAME).await;
|
||||||
let data = Data::new().await;
|
|
||||||
delete_user(NAME, &data).await;
|
|
||||||
}
|
|
||||||
|
|
||||||
let (data, _creds, signin_resp) =
|
let (_creds, signin_resp) =
|
||||||
register_and_signin(NAME, EMAIL, PASSWORD).await;
|
register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
|
@ -23,7 +23,6 @@ use libmcaptcha::defense::Level;
|
|||||||
|
|
||||||
use crate::api::v1::mcaptcha::update::UpdateCaptcha;
|
use crate::api::v1::mcaptcha::update::UpdateCaptcha;
|
||||||
use crate::api::v1::ROUTES;
|
use crate::api::v1::ROUTES;
|
||||||
use crate::data::Data;
|
|
||||||
use crate::errors::*;
|
use crate::errors::*;
|
||||||
use crate::tests::*;
|
use crate::tests::*;
|
||||||
use crate::*;
|
use crate::*;
|
||||||
@ -38,19 +37,18 @@ const L2: Level = Level {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn level_routes_work() {
|
pub async fn level_routes_work() {
|
||||||
const NAME: &str = "testuserlevelroutes";
|
const NAME: &str = "testuserlevelroutes";
|
||||||
const PASSWORD: &str = "longpassworddomain";
|
const PASSWORD: &str = "longpassworddomain";
|
||||||
const EMAIL: &str = "testuserlevelrouts@a.com";
|
const EMAIL: &str = "testuserlevelrouts@a.com";
|
||||||
|
let data = crate::data::Data::new().await;
|
||||||
|
let data = &data;
|
||||||
|
|
||||||
{
|
delete_user(data, NAME).await;
|
||||||
let data = Data::new().await;
|
|
||||||
delete_user(NAME, &data).await;
|
|
||||||
}
|
|
||||||
|
|
||||||
register_and_signin(NAME, EMAIL, PASSWORD).await;
|
register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
// create captcha
|
// create captcha
|
||||||
let (data, _, signin_resp, key) = add_levels_util(NAME, PASSWORD).await;
|
let (_, signin_resp, key) = add_levels_util(data, NAME, PASSWORD).await;
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
@ -103,6 +101,7 @@ async fn level_routes_work() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
bad_post_req_test(
|
bad_post_req_test(
|
||||||
|
data,
|
||||||
NAME,
|
NAME,
|
||||||
PASSWORD,
|
PASSWORD,
|
||||||
ROUTES.captcha.delete,
|
ROUTES.captcha.delete,
|
||||||
|
@ -123,7 +123,7 @@ pub mod runner {
|
|||||||
description: &payload.description,
|
description: &payload.description,
|
||||||
};
|
};
|
||||||
|
|
||||||
data.dblib.update_captcha_metadata(&username, &m).await?;
|
data.dblib.update_captcha_metadata(username, &m).await?;
|
||||||
|
|
||||||
data.dblib
|
data.dblib
|
||||||
.add_captcha_levels(username, &payload.key, &payload.levels)
|
.add_captcha_levels(username, &payload.key, &payload.levels)
|
||||||
@ -159,15 +159,13 @@ mod tests {
|
|||||||
const NAME: &str = "updateusermcaptcha";
|
const NAME: &str = "updateusermcaptcha";
|
||||||
const PASSWORD: &str = "longpassworddomain";
|
const PASSWORD: &str = "longpassworddomain";
|
||||||
const EMAIL: &str = "testupdateusermcaptcha@a.com";
|
const EMAIL: &str = "testupdateusermcaptcha@a.com";
|
||||||
|
let data = crate::data::Data::new().await;
|
||||||
{
|
let data = &data;
|
||||||
let data = Data::new().await;
|
delete_user(data, NAME).await;
|
||||||
delete_user(NAME, &data).await;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 1. add mcaptcha token
|
// 1. add mcaptcha token
|
||||||
register_and_signin(NAME, EMAIL, PASSWORD).await;
|
register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
let (data, _, signin_resp, token_key) = add_levels_util(NAME, PASSWORD).await;
|
let (_, signin_resp, token_key) = add_levels_util(data, NAME, PASSWORD).await;
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ pub fn services(cfg: &mut web::ServiceConfig) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
pub mod tests {
|
||||||
use actix_web::{http::StatusCode, test, App};
|
use actix_web::{http::StatusCode, test, App};
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
@ -121,9 +121,10 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn health_works() {
|
pub async fn health_works() {
|
||||||
println!("{}", V1_API_ROUTES.meta.health);
|
println!("{}", V1_API_ROUTES.meta.health);
|
||||||
let data = Data::new().await;
|
let data = crate::data::Data::new().await;
|
||||||
|
let data = &data;
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
let resp = test::call_service(
|
let resp = test::call_service(
|
||||||
|
@ -60,7 +60,7 @@ pub async fn add_notification(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
pub mod tests {
|
||||||
use actix_web::http::StatusCode;
|
use actix_web::http::StatusCode;
|
||||||
use actix_web::test;
|
use actix_web::test;
|
||||||
|
|
||||||
@ -69,22 +69,22 @@ mod tests {
|
|||||||
use crate::*;
|
use crate::*;
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn notification_works() {
|
pub async fn notification_works() {
|
||||||
const NAME1: &str = "notifuser1";
|
const NAME1: &str = "notifuser1";
|
||||||
const NAME2: &str = "notiuser2";
|
const NAME2: &str = "notiuser2";
|
||||||
const PASSWORD: &str = "longpassworddomain";
|
const PASSWORD: &str = "longpassworddomain";
|
||||||
const EMAIL1: &str = "testnotification1@a.com";
|
const EMAIL1: &str = "testnotification1@a.com";
|
||||||
const EMAIL2: &str = "testnotification2@a.com";
|
const EMAIL2: &str = "testnotification2@a.com";
|
||||||
|
|
||||||
{
|
let data = crate::data::Data::new().await;
|
||||||
let data = Data::new().await;
|
let data = &data;
|
||||||
delete_user(NAME1, &data).await;
|
|
||||||
delete_user(NAME2, &data).await;
|
|
||||||
}
|
|
||||||
|
|
||||||
register_and_signin(NAME1, EMAIL1, PASSWORD).await;
|
delete_user(data, NAME1).await;
|
||||||
register_and_signin(NAME2, EMAIL2, PASSWORD).await;
|
delete_user(data, NAME2).await;
|
||||||
let (data, _creds, signin_resp) = signin(NAME1, PASSWORD).await;
|
|
||||||
|
register_and_signin(data, NAME1, EMAIL1, PASSWORD).await;
|
||||||
|
register_and_signin(data, NAME2, EMAIL2, PASSWORD).await;
|
||||||
|
let (_creds, signin_resp) = signin(data, NAME1, PASSWORD).await;
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ pub mod runner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
pub mod tests {
|
||||||
use actix_web::http::StatusCode;
|
use actix_web::http::StatusCode;
|
||||||
use actix_web::test;
|
use actix_web::test;
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ mod tests {
|
|||||||
use crate::*;
|
use crate::*;
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn notification_get_works() {
|
pub async fn notification_get_works() {
|
||||||
const NAME1: &str = "notifuser12";
|
const NAME1: &str = "notifuser12";
|
||||||
const NAME2: &str = "notiuser22";
|
const NAME2: &str = "notiuser22";
|
||||||
const PASSWORD: &str = "longpassworddomain";
|
const PASSWORD: &str = "longpassworddomain";
|
||||||
@ -116,16 +116,16 @@ mod tests {
|
|||||||
const HEADING: &str = "testing notifications get";
|
const HEADING: &str = "testing notifications get";
|
||||||
const MESSAGE: &str = "testing notifications get message";
|
const MESSAGE: &str = "testing notifications get message";
|
||||||
|
|
||||||
{
|
let data = crate::data::Data::new().await;
|
||||||
let data = Data::new().await;
|
let data = &data;
|
||||||
delete_user(NAME1, &data).await;
|
|
||||||
delete_user(NAME2, &data).await;
|
|
||||||
}
|
|
||||||
|
|
||||||
register_and_signin(NAME1, EMAIL1, PASSWORD).await;
|
delete_user(data, NAME1).await;
|
||||||
register_and_signin(NAME2, EMAIL2, PASSWORD).await;
|
delete_user(data, NAME2).await;
|
||||||
let (data, _creds, signin_resp) = signin(NAME1, PASSWORD).await;
|
|
||||||
let (_data, _creds2, signin_resp2) = signin(NAME2, PASSWORD).await;
|
register_and_signin(data, NAME1, EMAIL1, PASSWORD).await;
|
||||||
|
register_and_signin(data, NAME2, EMAIL2, PASSWORD).await;
|
||||||
|
let (_creds, signin_resp) = signin(data, NAME1, PASSWORD).await;
|
||||||
|
let (_creds2, signin_resp2) = signin(data, NAME2, PASSWORD).await;
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
let cookies2 = get_cookie!(signin_resp2);
|
let cookies2 = get_cookie!(signin_resp2);
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
@ -62,7 +62,7 @@ pub async fn mark_read(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
pub mod tests {
|
||||||
use actix_web::http::StatusCode;
|
use actix_web::http::StatusCode;
|
||||||
use actix_web::test;
|
use actix_web::test;
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ mod tests {
|
|||||||
use crate::*;
|
use crate::*;
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn notification_mark_read_works() {
|
pub async fn notification_mark_read_works() {
|
||||||
const NAME1: &str = "notifuser122";
|
const NAME1: &str = "notifuser122";
|
||||||
const NAME2: &str = "notiuser222";
|
const NAME2: &str = "notiuser222";
|
||||||
const PASSWORD: &str = "longpassworddomain";
|
const PASSWORD: &str = "longpassworddomain";
|
||||||
@ -80,17 +80,16 @@ mod tests {
|
|||||||
const EMAIL2: &str = "testnotification222@a.com";
|
const EMAIL2: &str = "testnotification222@a.com";
|
||||||
const HEADING: &str = "testing notifications get";
|
const HEADING: &str = "testing notifications get";
|
||||||
const MESSAGE: &str = "testing notifications get message";
|
const MESSAGE: &str = "testing notifications get message";
|
||||||
|
let data = crate::data::Data::new().await;
|
||||||
|
let data = &data;
|
||||||
|
|
||||||
{
|
delete_user(data, NAME1).await;
|
||||||
let data = Data::new().await;
|
delete_user(data, NAME2).await;
|
||||||
delete_user(NAME1, &data).await;
|
|
||||||
delete_user(NAME2, &data).await;
|
|
||||||
}
|
|
||||||
|
|
||||||
register_and_signin(NAME1, EMAIL1, PASSWORD).await;
|
register_and_signin(data, NAME1, EMAIL1, PASSWORD).await;
|
||||||
register_and_signin(NAME2, EMAIL2, PASSWORD).await;
|
register_and_signin(data, NAME2, EMAIL2, PASSWORD).await;
|
||||||
let (data, _creds, signin_resp) = signin(NAME1, PASSWORD).await;
|
let (_creds, signin_resp) = signin(data, NAME1, PASSWORD).await;
|
||||||
let (_data, _creds2, signin_resp2) = signin(NAME2, PASSWORD).await;
|
let (_creds2, signin_resp2) = signin(data, NAME2, PASSWORD).await;
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
let cookies2 = get_cookie!(signin_resp2);
|
let cookies2 = get_cookie!(signin_resp2);
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
@ -159,11 +159,12 @@ async fn init_mcaptcha(data: &AppData, key: &str) -> ServiceResult<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
pub mod tests {
|
||||||
|
use crate::*;
|
||||||
use libmcaptcha::pow::PoWConfig;
|
use libmcaptcha::pow::PoWConfig;
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn get_pow_config_works() {
|
pub async fn get_pow_config_works() {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::tests::*;
|
use crate::tests::*;
|
||||||
use crate::*;
|
use crate::*;
|
||||||
@ -173,13 +174,13 @@ mod tests {
|
|||||||
const PASSWORD: &str = "testingpas";
|
const PASSWORD: &str = "testingpas";
|
||||||
const EMAIL: &str = "randomuser@a.com";
|
const EMAIL: &str = "randomuser@a.com";
|
||||||
|
|
||||||
{
|
let data = crate::data::Data::new().await;
|
||||||
let data = Data::new().await;
|
let data = &data;
|
||||||
delete_user(NAME, &data).await;
|
|
||||||
}
|
|
||||||
|
|
||||||
register_and_signin(NAME, EMAIL, PASSWORD).await;
|
delete_user(data, NAME).await;
|
||||||
let (data, _, _signin_resp, token_key) = add_levels_util(NAME, PASSWORD).await;
|
|
||||||
|
register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
|
let (_, _signin_resp, token_key) = add_levels_util(data, NAME, PASSWORD).await;
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
let get_config_payload = GetConfigPayload {
|
let get_config_payload = GetConfigPayload {
|
||||||
|
@ -49,7 +49,7 @@ pub async fn verify_pow(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
pub mod tests {
|
||||||
use actix_web::http::StatusCode;
|
use actix_web::http::StatusCode;
|
||||||
use actix_web::test;
|
use actix_web::test;
|
||||||
use libmcaptcha::pow::PoWConfig;
|
use libmcaptcha::pow::PoWConfig;
|
||||||
@ -60,18 +60,17 @@ mod tests {
|
|||||||
use crate::*;
|
use crate::*;
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn verify_pow_works() {
|
pub async fn verify_pow_works() {
|
||||||
const NAME: &str = "powverifyusr";
|
const NAME: &str = "powverifyusr";
|
||||||
const PASSWORD: &str = "testingpas";
|
const PASSWORD: &str = "testingpas";
|
||||||
const EMAIL: &str = "verifyuser@a.com";
|
const EMAIL: &str = "verifyuser@a.com";
|
||||||
|
let data = crate::data::Data::new().await;
|
||||||
|
let data = &data;
|
||||||
|
|
||||||
{
|
delete_user(data, NAME).await;
|
||||||
let data = Data::new().await;
|
|
||||||
delete_user(NAME, &data).await;
|
|
||||||
}
|
|
||||||
|
|
||||||
register_and_signin(NAME, EMAIL, PASSWORD).await;
|
register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
let (data, _, _signin_resp, token_key) = add_levels_util(NAME, PASSWORD).await;
|
let (_, _signin_resp, token_key) = add_levels_util(data, NAME, PASSWORD).await;
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
let get_config_payload = GetConfigPayload {
|
let get_config_payload = GetConfigPayload {
|
||||||
|
@ -50,7 +50,7 @@ pub async fn validate_captcha_token(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
pub mod tests {
|
||||||
use actix_web::http::StatusCode;
|
use actix_web::http::StatusCode;
|
||||||
use actix_web::test;
|
use actix_web::test;
|
||||||
use libmcaptcha::pow::PoWConfig;
|
use libmcaptcha::pow::PoWConfig;
|
||||||
@ -63,7 +63,7 @@ mod tests {
|
|||||||
use crate::*;
|
use crate::*;
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn validate_captcha_token_works() {
|
pub async fn validate_captcha_token_works() {
|
||||||
const NAME: &str = "enterprisetken";
|
const NAME: &str = "enterprisetken";
|
||||||
const PASSWORD: &str = "testingpas";
|
const PASSWORD: &str = "testingpas";
|
||||||
const EMAIL: &str = "verifyuser@enter.com";
|
const EMAIL: &str = "verifyuser@enter.com";
|
||||||
@ -72,13 +72,12 @@ mod tests {
|
|||||||
const VERIFY_TOKEN_URL: &str = "/api/v1/pow/siteverify";
|
const VERIFY_TOKEN_URL: &str = "/api/v1/pow/siteverify";
|
||||||
// const UPDATE_URL: &str = "/api/v1/mcaptcha/domain/token/duration/update";
|
// const UPDATE_URL: &str = "/api/v1/mcaptcha/domain/token/duration/update";
|
||||||
|
|
||||||
{
|
let data = crate::data::Data::new().await;
|
||||||
let data = Data::new().await;
|
let data = &data;
|
||||||
delete_user(NAME, &data).await;
|
delete_user(data, NAME).await;
|
||||||
}
|
|
||||||
|
|
||||||
register_and_signin(NAME, EMAIL, PASSWORD).await;
|
register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
let (data, _, _signin_resp, token_key) = add_levels_util(NAME, PASSWORD).await;
|
let (_, _signin_resp, token_key) = add_levels_util(data, NAME, PASSWORD).await;
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
let get_config_payload = GetConfigPayload {
|
let get_config_payload = GetConfigPayload {
|
||||||
|
@ -20,22 +20,23 @@ use actix_web::test;
|
|||||||
|
|
||||||
use crate::api::v1::auth::runners::{Login, Register};
|
use crate::api::v1::auth::runners::{Login, Register};
|
||||||
use crate::api::v1::ROUTES;
|
use crate::api::v1::ROUTES;
|
||||||
use crate::data::Data;
|
|
||||||
use crate::errors::*;
|
use crate::errors::*;
|
||||||
use crate::*;
|
use crate::*;
|
||||||
|
|
||||||
use crate::tests::*;
|
use crate::tests::*;
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn auth_works() {
|
pub async fn auth_works() {
|
||||||
let data = Data::new().await;
|
|
||||||
const NAME: &str = "testuser";
|
const NAME: &str = "testuser";
|
||||||
const PASSWORD: &str = "longpassword";
|
const PASSWORD: &str = "longpassword";
|
||||||
const EMAIL: &str = "testuser1@a.com";
|
const EMAIL: &str = "testuser1@a.com";
|
||||||
|
|
||||||
|
let data = crate::data::Data::new().await;
|
||||||
|
let data = &data;
|
||||||
|
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
delete_user(NAME, &data).await;
|
delete_user(data, NAME).await;
|
||||||
|
|
||||||
// 1. Register with email == None
|
// 1. Register with email == None
|
||||||
let msg = Register {
|
let msg = Register {
|
||||||
@ -49,14 +50,14 @@ async fn auth_works() {
|
|||||||
.await;
|
.await;
|
||||||
assert_eq!(resp.status(), StatusCode::OK);
|
assert_eq!(resp.status(), StatusCode::OK);
|
||||||
// delete user
|
// delete user
|
||||||
delete_user(NAME, &data).await;
|
delete_user(data, NAME).await;
|
||||||
|
|
||||||
// 1. Register and signin
|
// 1. Register and signin
|
||||||
let (_, _, signin_resp) = register_and_signin(NAME, EMAIL, PASSWORD).await;
|
let (_, signin_resp) = register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
|
|
||||||
// Sign in with email
|
// Sign in with email
|
||||||
signin(EMAIL, PASSWORD).await;
|
signin(data, EMAIL, PASSWORD).await;
|
||||||
|
|
||||||
// 2. check if duplicate username is allowed
|
// 2. check if duplicate username is allowed
|
||||||
let mut msg = Register {
|
let mut msg = Register {
|
||||||
@ -66,6 +67,7 @@ async fn auth_works() {
|
|||||||
email: Some(EMAIL.into()),
|
email: Some(EMAIL.into()),
|
||||||
};
|
};
|
||||||
bad_post_req_test(
|
bad_post_req_test(
|
||||||
|
data,
|
||||||
NAME,
|
NAME,
|
||||||
PASSWORD,
|
PASSWORD,
|
||||||
ROUTES.auth.register,
|
ROUTES.auth.register,
|
||||||
@ -77,6 +79,7 @@ async fn auth_works() {
|
|||||||
let name = format!("{}dupemail", NAME);
|
let name = format!("{}dupemail", NAME);
|
||||||
msg.username = name;
|
msg.username = name;
|
||||||
bad_post_req_test(
|
bad_post_req_test(
|
||||||
|
data,
|
||||||
NAME,
|
NAME,
|
||||||
PASSWORD,
|
PASSWORD,
|
||||||
ROUTES.auth.register,
|
ROUTES.auth.register,
|
||||||
@ -91,6 +94,7 @@ async fn auth_works() {
|
|||||||
password: msg.password.clone(),
|
password: msg.password.clone(),
|
||||||
};
|
};
|
||||||
bad_post_req_test(
|
bad_post_req_test(
|
||||||
|
data,
|
||||||
NAME,
|
NAME,
|
||||||
PASSWORD,
|
PASSWORD,
|
||||||
ROUTES.auth.login,
|
ROUTES.auth.login,
|
||||||
@ -101,6 +105,7 @@ async fn auth_works() {
|
|||||||
|
|
||||||
creds.login = "nonexistantuser@example.com".into();
|
creds.login = "nonexistantuser@example.com".into();
|
||||||
bad_post_req_test(
|
bad_post_req_test(
|
||||||
|
data,
|
||||||
NAME,
|
NAME,
|
||||||
PASSWORD,
|
PASSWORD,
|
||||||
ROUTES.auth.login,
|
ROUTES.auth.login,
|
||||||
@ -114,6 +119,7 @@ async fn auth_works() {
|
|||||||
creds.password = NAME.into();
|
creds.password = NAME.into();
|
||||||
|
|
||||||
bad_post_req_test(
|
bad_post_req_test(
|
||||||
|
data,
|
||||||
NAME,
|
NAME,
|
||||||
PASSWORD,
|
PASSWORD,
|
||||||
ROUTES.auth.login,
|
ROUTES.auth.login,
|
||||||
@ -137,12 +143,13 @@ async fn auth_works() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn serverside_password_validation_works() {
|
pub async fn serverside_password_validation_works() {
|
||||||
const NAME: &str = "testuser542";
|
const NAME: &str = "testuser542";
|
||||||
const PASSWORD: &str = "longpassword2";
|
const PASSWORD: &str = "longpassword2";
|
||||||
|
|
||||||
let data = Data::new().await;
|
let data = crate::data::Data::new().await;
|
||||||
delete_user(NAME, &data).await;
|
let data = &data;
|
||||||
|
delete_user(data, NAME).await;
|
||||||
|
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
use actix_web::http::StatusCode;
|
use actix_web::http::StatusCode;
|
||||||
use actix_web::test;
|
use actix_web::test;
|
||||||
|
|
||||||
use crate::data::Data;
|
|
||||||
use crate::*;
|
use crate::*;
|
||||||
|
|
||||||
use crate::tests::*;
|
use crate::tests::*;
|
||||||
@ -28,6 +27,8 @@ async fn protected_routes_work() {
|
|||||||
const NAME: &str = "testuser619";
|
const NAME: &str = "testuser619";
|
||||||
const PASSWORD: &str = "longpassword2";
|
const PASSWORD: &str = "longpassword2";
|
||||||
const EMAIL: &str = "testuser119@a.com2";
|
const EMAIL: &str = "testuser119@a.com2";
|
||||||
|
let data = crate::data::Data::new().await;
|
||||||
|
let data = &data;
|
||||||
|
|
||||||
let _post_protected_urls = [
|
let _post_protected_urls = [
|
||||||
"/api/v1/account/secret/",
|
"/api/v1/account/secret/",
|
||||||
@ -47,12 +48,9 @@ async fn protected_routes_work() {
|
|||||||
|
|
||||||
let get_protected_urls = ["/logout"];
|
let get_protected_urls = ["/logout"];
|
||||||
|
|
||||||
{
|
delete_user(data, NAME).await;
|
||||||
let data = Data::new().await;
|
|
||||||
delete_user(NAME, &data).await;
|
|
||||||
}
|
|
||||||
|
|
||||||
let (data, _, signin_resp) = register_and_signin(NAME, EMAIL, PASSWORD).await;
|
let (_, signin_resp) = register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
|
15
src/demo.rs
15
src/demo.rs
@ -115,11 +115,10 @@ mod tests {
|
|||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn demo_account_works() {
|
async fn demo_account_works() {
|
||||||
{
|
let data_inner = crate::data::Data::new().await;
|
||||||
let data = Data::new().await;
|
let data_inner = &data_inner;
|
||||||
crate::tests::delete_user(DEMO_USER, &data).await;
|
let data = AppData::new(data_inner.clone());
|
||||||
}
|
crate::tests::delete_user(data_inner, DEMO_USER).await;
|
||||||
let data = AppData::new(Data::new().await);
|
|
||||||
let duration = Duration::from_secs(DURATION);
|
let duration = Duration::from_secs(DURATION);
|
||||||
|
|
||||||
// register works
|
// register works
|
||||||
@ -128,7 +127,7 @@ mod tests {
|
|||||||
val: DEMO_USER.into(),
|
val: DEMO_USER.into(),
|
||||||
};
|
};
|
||||||
assert!(username_exists(&payload, &data).await.unwrap().exists);
|
assert!(username_exists(&payload, &data).await.unwrap().exists);
|
||||||
signin(DEMO_USER, DEMO_PASSWORD).await;
|
signin(data_inner, DEMO_USER, DEMO_PASSWORD).await;
|
||||||
|
|
||||||
// deletion works
|
// deletion works
|
||||||
assert!(DemoUser::delete_demo_user(&data).await.is_ok());
|
assert!(DemoUser::delete_demo_user(&data).await.is_ok());
|
||||||
@ -136,8 +135,8 @@ mod tests {
|
|||||||
|
|
||||||
// test the runner
|
// test the runner
|
||||||
let user = DemoUser::spawn(data, duration).await.unwrap();
|
let user = DemoUser::spawn(data, duration).await.unwrap();
|
||||||
let (data_inner, _, signin_resp, token_key) =
|
let (_, signin_resp, token_key) =
|
||||||
add_levels_util(DEMO_USER, DEMO_PASSWORD).await;
|
add_levels_util(data_inner, DEMO_USER, DEMO_PASSWORD).await;
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
let app = get_app!(data_inner).await;
|
let app = get_app!(data_inner).await;
|
||||||
|
|
||||||
|
@ -94,7 +94,8 @@ pub const PKG_HOMEPAGE: &str = env!("CARGO_PKG_HOMEPAGE");
|
|||||||
|
|
||||||
pub const CACHE_AGE: u32 = 604800;
|
pub const CACHE_AGE: u32 = 604800;
|
||||||
|
|
||||||
pub type AppData = actix_web::web::Data<Arc<crate::data::Data>>;
|
pub type ArcData = Arc<crate::data::Data>;
|
||||||
|
pub type AppData = actix_web::web::Data<ArcData>;
|
||||||
|
|
||||||
#[cfg(not(tarpaulin_include))]
|
#[cfg(not(tarpaulin_include))]
|
||||||
#[actix_web::main]
|
#[actix_web::main]
|
||||||
|
@ -51,13 +51,12 @@ mod tests {
|
|||||||
const PASSWORD: &str = "longpassword";
|
const PASSWORD: &str = "longpassword";
|
||||||
const EMAIL: &str = "templateuser@a.com";
|
const EMAIL: &str = "templateuser@a.com";
|
||||||
|
|
||||||
{
|
let data = crate::data::Data::new().await;
|
||||||
let data = Data::new().await;
|
let data = &data;
|
||||||
delete_user(NAME, &data).await;
|
delete_user(data, NAME).await;
|
||||||
}
|
|
||||||
|
|
||||||
register_and_signin(NAME, EMAIL, PASSWORD).await;
|
register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
let (data, _, signin_resp, token_key) = add_levels_util(NAME, PASSWORD).await;
|
let (_, signin_resp, token_key) = add_levels_util(data, NAME, PASSWORD).await;
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
|
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
@ -95,7 +94,7 @@ mod tests {
|
|||||||
assert_eq!(authenticated_resp.status(), StatusCode::OK);
|
assert_eq!(authenticated_resp.status(), StatusCode::OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete_user(NAME, &data).await;
|
delete_user(data, NAME).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
|
@ -225,14 +225,12 @@ mod test {
|
|||||||
const NAME: &str = "editsitekeyuser";
|
const NAME: &str = "editsitekeyuser";
|
||||||
const PASSWORD: &str = "longpassworddomain";
|
const PASSWORD: &str = "longpassworddomain";
|
||||||
const EMAIL: &str = "editsitekeyuser@a.com";
|
const EMAIL: &str = "editsitekeyuser@a.com";
|
||||||
|
let data = crate::data::Data::new().await;
|
||||||
|
let data = &data;
|
||||||
|
delete_user(data, NAME).await;
|
||||||
|
|
||||||
{
|
register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
let data = Data::new().await;
|
let (_, signin_resp, key) = add_levels_util(data, NAME, PASSWORD).await;
|
||||||
delete_user(NAME, &data).await;
|
|
||||||
}
|
|
||||||
|
|
||||||
register_and_signin(NAME, EMAIL, PASSWORD).await;
|
|
||||||
let (data, _, signin_resp, key) = add_levels_util(NAME, PASSWORD).await;
|
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
|
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
@ -81,13 +81,12 @@ mod test {
|
|||||||
const PASSWORD: &str = "longpassworddomain";
|
const PASSWORD: &str = "longpassworddomain";
|
||||||
const EMAIL: &str = "listsitekeyuser@a.com";
|
const EMAIL: &str = "listsitekeyuser@a.com";
|
||||||
|
|
||||||
{
|
let data = crate::data::Data::new().await;
|
||||||
let data = Data::new().await;
|
let data = &data;
|
||||||
delete_user(NAME, &data).await;
|
delete_user(data, NAME).await;
|
||||||
}
|
|
||||||
|
|
||||||
register_and_signin(NAME, EMAIL, PASSWORD).await;
|
register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
let (data, _, signin_resp, key) = add_levels_util(NAME, PASSWORD).await;
|
let (_, signin_resp, key) = add_levels_util(data, NAME, PASSWORD).await;
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
|
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
@ -126,13 +126,12 @@ mod test {
|
|||||||
const PASSWORD: &str = "longpassworddomain";
|
const PASSWORD: &str = "longpassworddomain";
|
||||||
const EMAIL: &str = "viewsitekeyuser@a.com";
|
const EMAIL: &str = "viewsitekeyuser@a.com";
|
||||||
|
|
||||||
{
|
let data = crate::data::Data::new().await;
|
||||||
let data = Data::new().await;
|
let data = &data;
|
||||||
delete_user(NAME, &data).await;
|
delete_user(data, NAME).await;
|
||||||
}
|
|
||||||
|
|
||||||
register_and_signin(NAME, EMAIL, PASSWORD).await;
|
register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
let (data, _, signin_resp, key) = add_levels_util(NAME, PASSWORD).await;
|
let (_, signin_resp, key) = add_levels_util(data, NAME, PASSWORD).await;
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
|
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
@ -178,7 +178,6 @@ mod tests {
|
|||||||
use super::*;
|
use super::*;
|
||||||
use crate::stats::record::*;
|
use crate::stats::record::*;
|
||||||
use crate::tests::*;
|
use crate::tests::*;
|
||||||
use crate::*;
|
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn stats_works() {
|
async fn stats_works() {
|
||||||
@ -186,11 +185,13 @@ mod tests {
|
|||||||
const PASSWORD: &str = "testingpas";
|
const PASSWORD: &str = "testingpas";
|
||||||
const EMAIL: &str = "statsuser@a.com";
|
const EMAIL: &str = "statsuser@a.com";
|
||||||
|
|
||||||
let data = Data::new().await;
|
let data = crate::data::Data::new().await;
|
||||||
delete_user(NAME, &data).await;
|
let data = &data;
|
||||||
|
let data = &data;
|
||||||
|
delete_user(data, NAME).await;
|
||||||
|
|
||||||
register_and_signin(NAME, EMAIL, PASSWORD).await;
|
register_and_signin(data, NAME, EMAIL, PASSWORD).await;
|
||||||
let (_, _, _, token_key) = add_levels_util(NAME, PASSWORD).await;
|
let (_, _, token_key) = add_levels_util(data, NAME, PASSWORD).await;
|
||||||
let key = token_key.key.clone();
|
let key = token_key.key.clone();
|
||||||
|
|
||||||
let stats = Stats::new(NAME, &key, &data.db).await.unwrap();
|
let stats = Stats::new(NAME, &key, &data.db).await.unwrap();
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
use std::sync::Arc;
|
|
||||||
|
|
||||||
use actix_web::test;
|
use actix_web::test;
|
||||||
use actix_web::{
|
use actix_web::{
|
||||||
body::{BoxBody, EitherBody},
|
body::{BoxBody, EitherBody},
|
||||||
@ -16,8 +14,8 @@ use crate::api::v1::auth::runners::{Login, Register};
|
|||||||
use crate::api::v1::mcaptcha::create::CreateCaptcha;
|
use crate::api::v1::mcaptcha::create::CreateCaptcha;
|
||||||
use crate::api::v1::mcaptcha::create::MCaptchaDetails;
|
use crate::api::v1::mcaptcha::create::MCaptchaDetails;
|
||||||
use crate::api::v1::ROUTES;
|
use crate::api::v1::ROUTES;
|
||||||
use crate::data::Data;
|
|
||||||
use crate::errors::*;
|
use crate::errors::*;
|
||||||
|
use crate::ArcData;
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! get_cookie {
|
macro_rules! get_cookie {
|
||||||
@ -26,14 +24,6 @@ macro_rules! get_cookie {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn delete_user(name: &str, data: &Data) {
|
|
||||||
let x = data.dblib.delete_user(name).await;
|
|
||||||
println!();
|
|
||||||
println!();
|
|
||||||
println!();
|
|
||||||
println!("Deleting user: {:?}", &x);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! post_request {
|
macro_rules! post_request {
|
||||||
($uri:expr) => {
|
($uri:expr) => {
|
||||||
@ -81,19 +71,27 @@ macro_rules! get_app {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn delete_user(data: &ArcData, name: &str) {
|
||||||
|
let x = data.dblib.delete_user(name).await;
|
||||||
|
println!();
|
||||||
|
println!();
|
||||||
|
println!();
|
||||||
|
println!("Deleting user: {:?}", &x);
|
||||||
|
}
|
||||||
|
|
||||||
/// register and signin utility
|
/// register and signin utility
|
||||||
pub async fn register_and_signin(
|
pub async fn register_and_signin(
|
||||||
|
data: &ArcData,
|
||||||
name: &str,
|
name: &str,
|
||||||
email: &str,
|
email: &str,
|
||||||
password: &str,
|
password: &str,
|
||||||
) -> (Arc<data::Data>, Login, ServiceResponse<EitherBody<BoxBody>>) {
|
) -> (Login, ServiceResponse<EitherBody<BoxBody>>) {
|
||||||
register(name, email, password).await;
|
register(data, name, email, password).await;
|
||||||
signin(name, password).await
|
signin(data, name, password).await
|
||||||
}
|
}
|
||||||
|
|
||||||
/// register utility
|
/// register utility
|
||||||
pub async fn register(name: &str, email: &str, password: &str) {
|
pub async fn register(data: &ArcData, name: &str, email: &str, password: &str) {
|
||||||
let data = Data::new().await;
|
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
// 1. Register
|
// 1. Register
|
||||||
@ -111,10 +109,10 @@ pub async fn register(name: &str, email: &str, password: &str) {
|
|||||||
|
|
||||||
/// signin util
|
/// signin util
|
||||||
pub async fn signin(
|
pub async fn signin(
|
||||||
|
data: &ArcData,
|
||||||
name: &str,
|
name: &str,
|
||||||
password: &str,
|
password: &str,
|
||||||
) -> (Arc<Data>, Login, ServiceResponse<EitherBody<BoxBody>>) {
|
) -> (Login, ServiceResponse<EitherBody<BoxBody>>) {
|
||||||
let data = Data::new().await;
|
|
||||||
let app = get_app!(data.clone()).await;
|
let app = get_app!(data.clone()).await;
|
||||||
|
|
||||||
// 2. signin
|
// 2. signin
|
||||||
@ -126,18 +124,19 @@ pub async fn signin(
|
|||||||
test::call_service(&app, post_request!(&creds, ROUTES.auth.login).to_request())
|
test::call_service(&app, post_request!(&creds, ROUTES.auth.login).to_request())
|
||||||
.await;
|
.await;
|
||||||
assert_eq!(signin_resp.status(), StatusCode::OK);
|
assert_eq!(signin_resp.status(), StatusCode::OK);
|
||||||
(data, creds, signin_resp)
|
(creds, signin_resp)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// pub duplicate test
|
/// pub duplicate test
|
||||||
pub async fn bad_post_req_test<T: Serialize>(
|
pub async fn bad_post_req_test<T: Serialize>(
|
||||||
|
data: &ArcData,
|
||||||
name: &str,
|
name: &str,
|
||||||
password: &str,
|
password: &str,
|
||||||
url: &str,
|
url: &str,
|
||||||
payload: &T,
|
payload: &T,
|
||||||
err: ServiceError,
|
err: ServiceError,
|
||||||
) {
|
) {
|
||||||
let (data, _, signin_resp) = signin(name, password).await;
|
let (_, signin_resp) = signin(data, name, password).await;
|
||||||
let cookies = get_cookie!(signin_resp);
|
let cookies = get_cookie!(signin_resp);
|
||||||
let app = get_app!(data).await;
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
@ -158,6 +157,31 @@ pub async fn bad_post_req_test<T: Serialize>(
|
|||||||
assert_eq!(resp_err.error, format!("{}", err));
|
assert_eq!(resp_err.error, format!("{}", err));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn add_levels_util(
|
||||||
|
data: &ArcData,
|
||||||
|
name: &str,
|
||||||
|
password: &str,
|
||||||
|
) -> (Login, ServiceResponse<EitherBody<BoxBody>>, MCaptchaDetails) {
|
||||||
|
let (creds, signin_resp) = signin(data, name, password).await;
|
||||||
|
let cookies = get_cookie!(signin_resp);
|
||||||
|
let app = get_app!(data).await;
|
||||||
|
|
||||||
|
let add_level = get_level_data();
|
||||||
|
|
||||||
|
// 1. add level
|
||||||
|
let add_token_resp = test::call_service(
|
||||||
|
&app,
|
||||||
|
post_request!(&add_level, ROUTES.captcha.create)
|
||||||
|
.cookie(cookies.clone())
|
||||||
|
.to_request(),
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
assert_eq!(add_token_resp.status(), StatusCode::OK);
|
||||||
|
let token_key: MCaptchaDetails = test::read_body_json(add_token_resp).await;
|
||||||
|
|
||||||
|
(creds, signin_resp, token_key)
|
||||||
|
}
|
||||||
|
|
||||||
pub const L1: Level = Level {
|
pub const L1: Level = Level {
|
||||||
difficulty_factor: 50,
|
difficulty_factor: 50,
|
||||||
visitor_threshold: 50,
|
visitor_threshold: 50,
|
||||||
@ -176,32 +200,3 @@ pub fn get_level_data() -> CreateCaptcha {
|
|||||||
description: "dummy".into(),
|
description: "dummy".into(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn add_levels_util(
|
|
||||||
name: &str,
|
|
||||||
password: &str,
|
|
||||||
) -> (
|
|
||||||
Arc<data::Data>,
|
|
||||||
Login,
|
|
||||||
ServiceResponse<EitherBody<BoxBody>>,
|
|
||||||
MCaptchaDetails,
|
|
||||||
) {
|
|
||||||
let (data, creds, signin_resp) = signin(name, password).await;
|
|
||||||
let cookies = get_cookie!(signin_resp);
|
|
||||||
let app = get_app!(data).await;
|
|
||||||
|
|
||||||
let add_level = get_level_data();
|
|
||||||
|
|
||||||
// 1. add level
|
|
||||||
let add_token_resp = test::call_service(
|
|
||||||
&app,
|
|
||||||
post_request!(&add_level, ROUTES.captcha.create)
|
|
||||||
.cookie(cookies.clone())
|
|
||||||
.to_request(),
|
|
||||||
)
|
|
||||||
.await;
|
|
||||||
assert_eq!(add_token_resp.status(), StatusCode::OK);
|
|
||||||
let token_key: MCaptchaDetails = test::read_body_json(add_token_resp).await;
|
|
||||||
|
|
||||||
(data, creds, signin_resp, token_key)
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user