1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- use backend::{
- application::{get_connection_pool, Application},
- config::{get_configuration, DatabaseSettings},
- };
- use flowy_net::request::HttpRequestBuilder;
- use flowy_user::prelude::*;
- use sqlx::{Connection, Executor, PgConnection, PgPool};
- use uuid::Uuid;
- pub struct TestApp {
- pub address: String,
- pub port: u16,
- pub pg_pool: PgPool,
- }
- impl TestApp {
- pub async fn register_user(&self, params: SignUpParams) -> SignUpResponse {
- let url = format!("{}/api/register", self.address);
- let resp = user_sign_up(params, &url).await.unwrap();
- resp
- }
- pub async fn sign_in(&self, params: SignInParams) -> SignInResponse {
- let url = format!("{}/api/auth", self.address);
- let resp = user_sign_in(params, &url).await.unwrap();
- resp
- }
- }
- pub async fn spawn_app() -> TestApp {
- let configuration = {
- let mut c = get_configuration().expect("Failed to read configuration.");
- c.database.database_name = Uuid::new_v4().to_string();
- // Use a random OS port
- c.application.port = 0;
- c
- };
- let _ = configure_database(&configuration.database).await;
- let application = Application::build(configuration.clone())
- .await
- .expect("Failed to build application.");
- let application_port = application.port();
- let _ = tokio::spawn(application.run_until_stopped());
- TestApp {
- address: format!("http://localhost:{}", application_port),
- port: application_port,
- pg_pool: get_connection_pool(&configuration.database)
- .await
- .expect("Failed to connect to the database"),
- }
- }
- async fn configure_database(config: &DatabaseSettings) -> PgPool {
- // Create database
- let mut connection = PgConnection::connect_with(&config.without_db())
- .await
- .expect("Failed to connect to Postgres");
- connection
- .execute(&*format!(r#"CREATE DATABASE "{}";"#, config.database_name))
- .await
- .expect("Failed to create database.");
- // Migrate database
- let connection_pool = PgPool::connect_with(config.with_db())
- .await
- .expect("Failed to connect to Postgres.");
- sqlx::migrate!("./migrations")
- .run(&connection_pool)
- .await
- .expect("Failed to migrate the database");
- connection_pool
- }
|