Add buffer integration test

Rearrange channel crate structure
Get channel buffer from database

co-authored-by: Max <max@zed.dev>
This commit is contained in:
Mikayla 2023-08-21 16:30:57 -07:00
parent ff5035ea37
commit a7a4e2e369
No known key found for this signature in database
33 changed files with 403 additions and 39 deletions

View file

@ -9,6 +9,3 @@ pub mod rooms;
pub mod servers;
pub mod signups;
pub mod users;
#[cfg(test)]
pub mod buffer_tests;

View file

@ -689,6 +689,34 @@ impl Database {
})
.await
}
pub async fn get_or_create_buffer_for_channel(
&self,
channel_id: ChannelId,
) -> Result<BufferId> {
self.transaction(|tx| async move {
let tx = tx;
let channel = channel::Entity::find_by_id(channel_id)
.one(&*tx)
.await?
.ok_or_else(|| anyhow!("invalid channel"))?;
if let Some(id) = channel.main_buffer_id {
return Ok(id);
} else {
let buffer = buffer::ActiveModel::new().insert(&*tx).await?;
channel::ActiveModel {
id: ActiveValue::Unchanged(channel_id),
main_buffer_id: ActiveValue::Set(Some(buffer.id)),
..Default::default()
}
.update(&*tx)
.await?;
Ok(buffer.id)
}
})
.await
}
}
#[derive(Copy, Clone, Debug, EnumIter, DeriveColumn)]

View file

@ -1,4 +1,4 @@
use crate::db::ChannelId;
use crate::db::{BufferId, ChannelId};
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, Default, PartialEq, Eq, DeriveEntityModel)]
@ -7,6 +7,7 @@ pub struct Model {
#[sea_orm(primary_key)]
pub id: ChannelId,
pub name: String,
pub main_buffer_id: Option<BufferId>,
}
impl ActiveModelBehavior for ActiveModel {}

View file

@ -1,3 +1,6 @@
mod buffer_tests;
mod db_tests;
use super::*;
use gpui::executor::Background;
use parking_lot::Mutex;
@ -96,7 +99,7 @@ macro_rules! test_both_dbs {
($test_name:ident, $postgres_test_name:ident, $sqlite_test_name:ident) => {
#[gpui::test]
async fn $postgres_test_name() {
let test_db = crate::db::test_db::TestDb::postgres(
let test_db = crate::db::TestDb::postgres(
gpui::executor::Deterministic::new(0).build_background(),
);
$test_name(test_db.db()).await;
@ -104,9 +107,8 @@ macro_rules! test_both_dbs {
#[gpui::test]
async fn $sqlite_test_name() {
let test_db = crate::db::test_db::TestDb::sqlite(
gpui::executor::Deterministic::new(0).build_background(),
);
let test_db =
crate::db::TestDb::sqlite(gpui::executor::Deterministic::new(0).build_background());
$test_name(test_db.db()).await;
}
};

View file

@ -3,7 +3,7 @@ use crate::test_both_dbs;
use gpui::executor::{Background, Deterministic};
use pretty_assertions::{assert_eq, assert_ne};
use std::sync::Arc;
use test_db::TestDb;
use tests::TestDb;
test_both_dbs!(
test_get_users,
@ -1329,6 +1329,35 @@ async fn test_channel_renames(db: &Arc<Database>) {
assert!(bad_name_rename.is_err())
}
test_both_dbs!(
test_get_or_create_channel_buffer,
test_get_or_create_channel_buffer_postgres,
test_get_or_create_channel_buffer_sqlite
);
async fn test_get_or_create_channel_buffer(db: &Arc<Database>) {
let a_id = db
.create_user(
"user1@example.com",
false,
NewUserParams {
github_login: "user1".into(),
github_user_id: 5,
invite_count: 0,
},
)
.await
.unwrap()
.user_id;
let zed_id = db.create_root_channel("zed", "1", a_id).await.unwrap();
let first_buffer_id = db.get_or_create_buffer_for_channel(zed_id).await.unwrap();
let second_buffer_id = db.get_or_create_buffer_for_channel(zed_id).await.unwrap();
assert_eq!(first_buffer_id, second_buffer_id);
}
#[gpui::test]
async fn test_multiple_signup_overwrite() {
let test_db = TestDb::postgres(build_background_executor());