From e5f72711c5a17c5db24e209b14f82d426eceb86e Mon Sep 17 00:00:00 2001 From: Owen Jacobson Date: Thu, 19 Sep 2024 01:25:31 -0400 Subject: Write tests. --- src/channel/routes/test/on_create.rs | 58 ++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/channel/routes/test/on_create.rs (limited to 'src/channel/routes/test/on_create.rs') diff --git a/src/channel/routes/test/on_create.rs b/src/channel/routes/test/on_create.rs new file mode 100644 index 0000000..df23deb --- /dev/null +++ b/src/channel/routes/test/on_create.rs @@ -0,0 +1,58 @@ +use axum::extract::{Json, State}; + +use crate::{ + channel::{app, routes}, + test::fixtures, +}; + +#[tokio::test] +async fn new_channel() { + // Set up the environment + + let app = fixtures::scratch_app().await; + let creator = fixtures::login::create(&app).await; + + // Call the endpoint + + let name = fixtures::channel::propose(); + let request = routes::CreateRequest { name }; + let Json(response_channel) = + routes::on_create(State(app.clone()), creator, Json(request.clone())) + .await + .expect("new channel in an empty app"); + + // Verify the structure of the response + + assert_eq!(request.name, response_channel.name); + + // Verify the semantics + + let channels = app.channels().all().await.expect("always succeeds"); + + assert!(channels.contains(&response_channel)); +} + +#[tokio::test] +async fn duplicate_name() { + // Set up the environment + + let app = fixtures::scratch_app().await; + let creator = fixtures::login::create(&app).await; + let channel = fixtures::channel::create(&app).await; + + // Call the endpoint + + let request = routes::CreateRequest { name: channel.name }; + let routes::CreateError(error) = + routes::on_create(State(app.clone()), creator, Json(request.clone())) + .await + .expect_err("duplicate channel name"); + + // Verify the structure of the response + + fixtures::error::expected!( + error, + app::CreateError::DuplicateName(name), + assert_eq!(request.name, name), + ); +} -- cgit v1.2.3