test: buffer fixture
Some checks are pending
test / test-beta (beta) (push) Blocked by required conditions
test / test-beta (nightly) (push) Blocked by required conditions
test / test-unit (push) Waiting to run
test / test-functional (push) Blocked by required conditions
test / test-build (java, macos-latest) (push) Blocked by required conditions
test / test-build (java, ubuntu-latest) (push) Blocked by required conditions
test / test-build (java, windows-latest) (push) Blocked by required conditions
test / test-build (js, macos-latest) (push) Blocked by required conditions
test / test-build (js, ubuntu-latest) (push) Blocked by required conditions
test / test-build (js, windows-latest) (push) Blocked by required conditions
test / test-build (luajit, macos-latest) (push) Blocked by required conditions
test / test-build (luajit, ubuntu-latest) (push) Blocked by required conditions
test / test-build (luajit, windows-latest) (push) Blocked by required conditions
test / test-build (py, macos-latest) (push) Blocked by required conditions
test / test-build (py, ubuntu-latest) (push) Blocked by required conditions
test / test-build (py, windows-latest) (push) Blocked by required conditions

This commit is contained in:
zaaarf 2024-11-02 23:26:42 +01:00
parent cd4e09c1cd
commit 111020afd8
No known key found for this signature in database
GPG key ID: 102E445F4C3F829B

View file

@ -1,7 +1,5 @@
use std::{error::Error, future::Future}; use std::{error::Error, future::Future};
// TODO create a BufferFixture too
#[allow(async_fn_in_trait)] #[allow(async_fn_in_trait)]
pub trait ScopedFixture<T: Sized> { pub trait ScopedFixture<T: Sized> {
async fn setup(&mut self) -> Result<T, Box<dyn Error>>; async fn setup(&mut self) -> Result<T, Box<dyn Error>>;
@ -44,6 +42,7 @@ pub struct ClientFixture {
username: Option<String>, username: Option<String>,
password: Option<String>, password: Option<String>,
} }
impl ClientFixture { impl ClientFixture {
pub fn of(name: &str) -> Self { pub fn of(name: &str) -> Self {
Self { Self {
@ -77,14 +76,15 @@ impl ScopedFixture<crate::Client> for ClientFixture {
pub struct WorkspaceFixture { pub struct WorkspaceFixture {
user: String, user: String,
invite: Option<String>, invitee: Option<String>,
workspace: String, workspace: String,
} }
impl WorkspaceFixture { impl WorkspaceFixture {
pub fn of(user: &str, invite: &str, workspace: &str) -> Self { pub fn of(user: &str, invitee: &str, workspace: &str) -> Self {
Self { Self {
user: user.to_string(), user: user.to_string(),
invite: Some(invite.to_string()), invitee: Some(invitee.to_string()),
workspace: workspace.to_string(), workspace: workspace.to_string(),
} }
} }
@ -92,7 +92,7 @@ impl WorkspaceFixture {
pub fn one(user: &str, ws: &str) -> Self { pub fn one(user: &str, ws: &str) -> Self {
Self { Self {
user: user.to_string(), user: user.to_string(),
invite: None, invitee: None,
workspace: format!("{ws}-{}", uuid::Uuid::new_v4()), workspace: format!("{ws}-{}", uuid::Uuid::new_v4()),
} }
} }
@ -100,7 +100,7 @@ impl WorkspaceFixture {
pub fn two(user: &str, invite: &str, ws: &str) -> Self { pub fn two(user: &str, invite: &str, ws: &str) -> Self {
Self { Self {
user: user.to_string(), user: user.to_string(),
invite: Some(invite.to_string()), invitee: Some(invite.to_string()),
workspace: format!("{ws}-{}", uuid::Uuid::new_v4()), workspace: format!("{ws}-{}", uuid::Uuid::new_v4()),
} }
} }
@ -127,9 +127,9 @@ impl ScopedFixture<(crate::Client, crate::Workspace)> for WorkspaceFixture {
impl ScopedFixture<((crate::Client, crate::Workspace), (crate::Client, crate::Workspace))> for WorkspaceFixture { impl ScopedFixture<((crate::Client, crate::Workspace), (crate::Client, crate::Workspace))> for WorkspaceFixture {
async fn setup(&mut self) -> Result<((crate::Client, crate::Workspace), (crate::Client, crate::Workspace)), Box<dyn Error>> { async fn setup(&mut self) -> Result<((crate::Client, crate::Workspace), (crate::Client, crate::Workspace)), Box<dyn Error>> {
let client = ClientFixture::of(&self.user).setup().await?; let client = ClientFixture::of(&self.user).setup().await?;
let invite_client = ClientFixture::of( let invitee_client = ClientFixture::of(
&self &self
.invite .invitee
.clone() .clone()
.unwrap_or(uuid::Uuid::new_v4().to_string()), .unwrap_or(uuid::Uuid::new_v4().to_string()),
) )
@ -137,15 +137,88 @@ impl ScopedFixture<((crate::Client, crate::Workspace), (crate::Client, crate::Wo
.await?; .await?;
client.create_workspace(&self.workspace).await?; client.create_workspace(&self.workspace).await?;
client client
.invite_to_workspace(&self.workspace, invite_client.current_user().name.clone()) .invite_to_workspace(&self.workspace, invitee_client.current_user().name.clone())
.await?; .await?;
let workspace = client.attach_workspace(&self.workspace).await?; let workspace = client.attach_workspace(&self.workspace).await?;
let invite = invite_client.attach_workspace(&self.workspace).await?; let invitee_workspace = invitee_client.attach_workspace(&self.workspace).await?;
Ok(((client, workspace), (invite_client, invite))) Ok(((client, workspace), (invitee_client, invitee_workspace)))
} }
async fn cleanup(&mut self, resource: Option<((crate::Client, crate::Workspace), (crate::Client, crate::Workspace))>) { async fn cleanup(&mut self, resource: Option<((crate::Client, crate::Workspace), (crate::Client, crate::Workspace))>) {
if let Some(((client, _workspace), (_, _))) = resource { if let Some(((client, _), (_, _))) = resource {
client.leave_workspace(&self.workspace);
if let Err(e) = client.delete_workspace(&self.workspace).await {
eprintln!("could not delete workspace: {e}");
}
}
}
}
pub struct BufferFixture {
user: String,
invitee: Option<String>,
workspace: String,
buffer: String
}
impl BufferFixture {
pub fn of(user: &str, invitee: &str, workspace: &str, buffer: &str) -> Self {
Self {
user: user.to_string(),
invitee: Some(invitee.to_string()),
workspace: workspace.to_string(),
buffer: buffer.to_string()
}
}
pub fn one(user: &str, ws: &str, buf: &str) -> Self {
Self {
user: user.to_string(),
invitee: None,
workspace: format!("{ws}-{}", uuid::Uuid::new_v4()),
buffer: buf.to_string()
}
}
pub fn two(user: &str, invite: &str, ws: &str, buf: &str) -> Self {
Self {
user: user.to_string(),
invitee: Some(invite.to_string()),
workspace: format!("{ws}-{}", uuid::Uuid::new_v4()),
buffer: buf.to_string()
}
}
}
impl ScopedFixture<((crate::Client, crate::Workspace, crate::buffer::Controller), (crate::Client, crate::Workspace, crate::buffer::Controller))> for BufferFixture {
async fn setup(&mut self) -> Result<((crate::Client, crate::Workspace, crate::buffer::Controller), (crate::Client, crate::Workspace, crate::buffer::Controller)), Box<dyn Error>> {
let client = ClientFixture::of(&self.user).setup().await?;
let invitee_client = ClientFixture::of(
&self
.invitee
.clone()
.unwrap_or(uuid::Uuid::new_v4().to_string()),
)
.setup()
.await?;
client.create_workspace(&self.workspace).await?;
client
.invite_to_workspace(&self.workspace, invitee_client.current_user().name.clone())
.await?;
let workspace = client.attach_workspace(&self.workspace).await?;
workspace.create_buffer(&self.buffer).await?;
let buffer = workspace.attach_buffer(&self.buffer).await?;
let invitee_workspace = invitee_client.attach_workspace(&self.workspace).await?;
let invitee_buffer = invitee_workspace.attach_buffer(&self.buffer).await?;
Ok(((client, workspace, buffer), (invitee_client, invitee_workspace, invitee_buffer)))
}
async fn cleanup(&mut self, resource: Option<((crate::Client, crate::Workspace, crate::buffer::Controller), (crate::Client, crate::Workspace, crate::buffer::Controller))>) {
if let Some(((client, _, _), (_, _, _))) = resource {
// buffer deletion is implied in workspace deletion
client.leave_workspace(&self.workspace); client.leave_workspace(&self.workspace);
if let Err(e) = client.delete_workspace(&self.workspace).await { if let Err(e) = client.delete_workspace(&self.workspace).await {
eprintln!("could not delete workspace: {e}"); eprintln!("could not delete workspace: {e}");