mirror of
https://github.com/hexedtech/codemp.git
synced 2024-11-21 23:04:49 +01:00
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
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:
parent
cd4e09c1cd
commit
111020afd8
1 changed files with 86 additions and 13 deletions
|
@ -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}");
|
||||||
|
|
Loading…
Reference in a new issue