Add test infrastructure for integration tests.
This commit is contained in:
parent
0c8c4fe623
commit
13cd960b9b
|
@ -42,3 +42,4 @@ vergen = "3"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
num_cpus = "1.0"
|
num_cpus = "1.0"
|
||||||
|
fs_extra = "1.0"
|
||||||
|
|
|
@ -33,6 +33,9 @@ extern crate structopt;
|
||||||
extern crate tempfile;
|
extern crate tempfile;
|
||||||
extern crate pathdiff;
|
extern crate pathdiff;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
extern crate fs_extra;
|
||||||
|
|
||||||
mod database;
|
mod database;
|
||||||
mod mail;
|
mod mail;
|
||||||
mod types;
|
mod types;
|
||||||
|
|
|
@ -643,3 +643,68 @@ fn rocket_factory(rocket: rocket::Rocket, db: Polymorphic) -> rocket::Rocket {
|
||||||
.mount("/", routes)
|
.mount("/", routes)
|
||||||
.manage(db)
|
.manage(db)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use fs_extra;
|
||||||
|
use tempfile::{tempdir, TempDir};
|
||||||
|
use super::rocket;
|
||||||
|
use rocket::local::Client;
|
||||||
|
use rocket::http::Status;
|
||||||
|
use rocket::http::ContentType;
|
||||||
|
|
||||||
|
use database::*;
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
/// Creates a configuration and empty state dir for testing purposes.
|
||||||
|
///
|
||||||
|
/// Note that you need to keep the returned TempDir alive for the
|
||||||
|
/// duration of your test. To debug the test, mem::forget it to
|
||||||
|
/// prevent cleanup.
|
||||||
|
fn configuration() -> Result<(TempDir, rocket::Config)> {
|
||||||
|
use rocket::config::{Config, Environment};
|
||||||
|
|
||||||
|
let root = tempdir()?;
|
||||||
|
fs_extra::copy_items(&vec!["dist/templates"], &root,
|
||||||
|
&fs_extra::dir::CopyOptions::new())?;
|
||||||
|
|
||||||
|
let config = Config::build(Environment::Staging)
|
||||||
|
.root(root.path().to_path_buf())
|
||||||
|
.extra(
|
||||||
|
"template_dir",
|
||||||
|
root.path().join("templates").to_str()
|
||||||
|
.ok_or(failure::err_msg("Template path invalid"))?,
|
||||||
|
)
|
||||||
|
.extra(
|
||||||
|
"static_dir",
|
||||||
|
root.path().join("public").to_str()
|
||||||
|
.ok_or(failure::err_msg("Static path invalid"))?,
|
||||||
|
)
|
||||||
|
.extra("domain", "domain")
|
||||||
|
.extra("from", "from")
|
||||||
|
.finalize()?;
|
||||||
|
Ok((root, config))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn basics() {
|
||||||
|
let (_tmpdir, config) = configuration().unwrap();
|
||||||
|
|
||||||
|
let db = Polymorphic::Filesystem(
|
||||||
|
Filesystem::new(config.root().unwrap().to_path_buf()).unwrap());
|
||||||
|
let rocket = rocket_factory(rocket::custom(config), db);
|
||||||
|
let client = Client::new(rocket).expect("valid rocket instance");
|
||||||
|
|
||||||
|
// Check that we see the landing page.
|
||||||
|
let mut response = client.get("/").dispatch();
|
||||||
|
assert_eq!(response.status(), Status::Ok);
|
||||||
|
assert_eq!(response.content_type(), Some(ContentType::HTML));
|
||||||
|
assert!(response.body_string().unwrap().contains("Hagrid"));
|
||||||
|
|
||||||
|
// Check that we see the privacy policy.
|
||||||
|
let mut response = client.get("/about").dispatch();
|
||||||
|
assert_eq!(response.status(), Status::Ok);
|
||||||
|
assert_eq!(response.content_type(), Some(ContentType::HTML));
|
||||||
|
assert!(response.body_string().unwrap().contains("Public Key Data"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue