Chapter 3.9

+ Update tests to incorporate new structure.
+ Adjust tests to connect to database
This commit is contained in:
Nick Bland 2023-09-04 21:47:49 +10:00
parent 6322ed3f5f
commit 3c97b96cf1
8 changed files with 22 additions and 21 deletions

1
.gitignore vendored
View File

@ -2,6 +2,7 @@
.vscode
#.env
.gitlab-ci-local
.DS_Store
# Added by cargo
#

View File

@ -1,4 +1,3 @@
#[derive(serde::Deserialize)]
pub struct Settings {
pub database: DatabaseSettings,
@ -17,9 +16,10 @@ pub struct DatabaseSettings {
pub fn get_configuration() -> Result<Settings, config::ConfigError> {
// initialise config reader
let settings = config::Config::builder()
.add_source(
config::File::new("configuration.yaml", config::FileFormat::Yaml)
)
.add_source(config::File::new(
"configuration.yaml",
config::FileFormat::Yaml,
))
.build()?;
settings.try_deserialize::<Settings>()
}

View File

@ -1,3 +1,3 @@
pub mod configuration;
pub mod routes;
pub mod startup;
pub mod startup;

View File

@ -1,6 +1,6 @@
use std::net::TcpListener;
use mail_app::startup::run;
use mail_app::configuration::get_configuration;
use mail_app::startup::run;
use std::net::TcpListener;
#[tokio::main]
async fn main() -> Result<(), std::io::Error> {

View File

@ -2,4 +2,4 @@ mod health_check;
mod subscriptions;
pub use health_check::*;
pub use subscriptions::*;
pub use subscriptions::*;

View File

@ -2,8 +2,8 @@ use actix_web::{web, HttpResponse};
#[derive(serde::Deserialize)]
pub struct FormData {
email: String,
name: String,
// email: String,
// name: String,
}
pub async fn subscribe(_form: web::Form<FormData>) -> HttpResponse {

View File

@ -1,15 +1,15 @@
use actix_web::{web, App, HttpServer};
use actix_web::dev::Server;
use std::net::TcpListener;
use crate::routes::{health_check, subscribe};
use actix_web::dev::Server;
use actix_web::{web, App, HttpServer};
use std::net::TcpListener;
pub fn run(listener: TcpListener) -> Result<Server, std::io::Error> {
let server = HttpServer::new(|| {
App::new()
.route("/health_check", web::get().to(health_check))
.route("/subscriptions", web::post().to(subscribe))
})
.listen(listener)?
.run();
})
.listen(listener)?
.run();
Ok(server)
}
}

View File

@ -1,7 +1,7 @@
use std::net::TcpListener;
use sqlx::{PgConnection, Connection};
use mail_app::startup::run;
use mail_app::configuration::get_configuration;
use mail_app::startup::run;
use sqlx::{Connection, PgConnection};
use std::net::TcpListener;
fn spawn_app() -> String {
let listener = TcpListener::bind("127.0.0.1:0").expect("Failed to bind to random port.");
@ -59,7 +59,7 @@ async fn subscribe_returns_a_200_for_valid_form_data() {
.fetch_one(&mut connection)
.await
.expect("Failed to fetch saved subscription.");
assert_eq!(saved.email, "ursula_le_guin@gmail.com");
assert_eq!(saved.name, "le guin");
}