summaryrefslogtreecommitdiff
path: root/src/conversation
diff options
context:
space:
mode:
Diffstat (limited to 'src/conversation')
-rw-r--r--src/conversation/app.rs10
-rw-r--r--src/conversation/handlers/create/mod.rs8
-rw-r--r--src/conversation/handlers/create/test.rs66
-rw-r--r--src/conversation/handlers/delete/mod.rs9
-rw-r--r--src/conversation/handlers/delete/test.rs12
-rw-r--r--src/conversation/handlers/send/mod.rs11
-rw-r--r--src/conversation/handlers/send/test.rs6
7 files changed, 69 insertions, 53 deletions
diff --git a/src/conversation/app.rs b/src/conversation/app.rs
index 26886af..2b62e77 100644
--- a/src/conversation/app.rs
+++ b/src/conversation/app.rs
@@ -15,13 +15,13 @@ use crate::{
name::{self, Name},
};
-pub struct Conversations<'a> {
- db: &'a SqlitePool,
- events: &'a Broadcaster,
+pub struct Conversations {
+ db: SqlitePool,
+ events: Broadcaster,
}
-impl<'a> Conversations<'a> {
- pub const fn new(db: &'a SqlitePool, events: &'a Broadcaster) -> Self {
+impl Conversations {
+ pub const fn new(db: SqlitePool, events: Broadcaster) -> Self {
Self { db, events }
}
diff --git a/src/conversation/handlers/create/mod.rs b/src/conversation/handlers/create/mod.rs
index 18eca1f..2b7fa39 100644
--- a/src/conversation/handlers/create/mod.rs
+++ b/src/conversation/handlers/create/mod.rs
@@ -5,9 +5,8 @@ use axum::{
};
use crate::{
- app::App,
clock::RequestedAt,
- conversation::{Conversation, app},
+ conversation::{Conversation, app, app::Conversations},
error::Internal,
name::Name,
token::extract::Identity,
@@ -17,13 +16,12 @@ use crate::{
mod test;
pub async fn handler(
- State(app): State<App>,
+ State(conversations): State<Conversations>,
_: Identity, // requires auth, but doesn't actually care who you are
RequestedAt(created_at): RequestedAt,
Json(request): Json<Request>,
) -> Result<Response, Error> {
- let conversation = app
- .conversations()
+ let conversation = conversations
.create(&request.name, &created_at)
.await
.map_err(Error)?;
diff --git a/src/conversation/handlers/create/test.rs b/src/conversation/handlers/create/test.rs
index bc05b00..380bb13 100644
--- a/src/conversation/handlers/create/test.rs
+++ b/src/conversation/handlers/create/test.rs
@@ -22,10 +22,14 @@ async fn new_conversation() {
let name = fixtures::conversation::propose();
let request = super::Request { name: name.clone() };
- let super::Response(response) =
- super::handler(State(app.clone()), creator, fixtures::now(), Json(request))
- .await
- .expect("creating a conversation in an empty app succeeds");
+ let super::Response(response) = super::handler(
+ State(app.conversations()),
+ creator,
+ fixtures::now(),
+ Json(request),
+ )
+ .await
+ .expect("creating a conversation in an empty app succeeds");
// Verify the structure of the response
@@ -77,10 +81,14 @@ async fn duplicate_name() {
let request = super::Request {
name: conversation.name.clone(),
};
- let super::Error(error) =
- super::handler(State(app.clone()), creator, fixtures::now(), Json(request))
- .await
- .expect_err("duplicate conversation name should fail the request");
+ let super::Error(error) = super::handler(
+ State(app.conversations()),
+ creator,
+ fixtures::now(),
+ Json(request),
+ )
+ .await
+ .expect_err("duplicate conversation name should fail the request");
// Verify the structure of the response
@@ -110,10 +118,14 @@ async fn conflicting_canonical_name() {
let request = super::Request {
name: conflicting_name.clone(),
};
- let super::Error(error) =
- super::handler(State(app.clone()), creator, fixtures::now(), Json(request))
- .await
- .expect_err("duplicate conversation name should fail the request");
+ let super::Error(error) = super::handler(
+ State(app.conversations()),
+ creator,
+ fixtures::now(),
+ Json(request),
+ )
+ .await
+ .expect_err("duplicate conversation name should fail the request");
// Verify the structure of the response
@@ -135,7 +147,7 @@ async fn invalid_name() {
let name = fixtures::conversation::propose_invalid_name();
let request = super::Request { name: name.clone() };
let super::Error(error) = crate::conversation::handlers::create::handler(
- State(app.clone()),
+ State(app.conversations()),
creator,
fixtures::now(),
Json(request),
@@ -163,7 +175,7 @@ async fn name_reusable_after_delete() {
let request = super::Request { name: name.clone() };
let super::Response(response) = super::handler(
- State(app.clone()),
+ State(app.conversations()),
creator.clone(),
fixtures::now(),
Json(request),
@@ -181,10 +193,14 @@ async fn name_reusable_after_delete() {
// Call the endpoint (second time)
let request = super::Request { name: name.clone() };
- let super::Response(response) =
- super::handler(State(app.clone()), creator, fixtures::now(), Json(request))
- .await
- .expect("creation succeeds after original conversation deleted");
+ let super::Response(response) = super::handler(
+ State(app.conversations()),
+ creator,
+ fixtures::now(),
+ Json(request),
+ )
+ .await
+ .expect("creation succeeds after original conversation deleted");
// Verify the structure of the response
@@ -212,7 +228,7 @@ async fn name_reusable_after_expiry() {
let request = super::Request { name: name.clone() };
let super::Response(_) = super::handler(
- State(app.clone()),
+ State(app.conversations()),
creator.clone(),
fixtures::ancient(),
Json(request),
@@ -230,10 +246,14 @@ async fn name_reusable_after_expiry() {
// Call the endpoint (second time)
let request = super::Request { name: name.clone() };
- let super::Response(response) =
- super::handler(State(app.clone()), creator, fixtures::now(), Json(request))
- .await
- .expect("creation succeeds after original conversation expired");
+ let super::Response(response) = super::handler(
+ State(app.conversations()),
+ creator,
+ fixtures::now(),
+ Json(request),
+ )
+ .await
+ .expect("creation succeeds after original conversation expired");
// Verify the structure of the response
diff --git a/src/conversation/handlers/delete/mod.rs b/src/conversation/handlers/delete/mod.rs
index 272165a..231e433 100644
--- a/src/conversation/handlers/delete/mod.rs
+++ b/src/conversation/handlers/delete/mod.rs
@@ -5,9 +5,8 @@ use axum::{
};
use crate::{
- app::App,
clock::RequestedAt,
- conversation::{self, app, handlers::PathInfo},
+ conversation::{self, app, app::Conversations, handlers::PathInfo},
error::{Internal, NotFound},
token::extract::Identity,
};
@@ -16,14 +15,12 @@ use crate::{
mod test;
pub async fn handler(
- State(app): State<App>,
+ State(conversations): State<Conversations>,
Path(conversation): Path<PathInfo>,
RequestedAt(deleted_at): RequestedAt,
_: Identity,
) -> Result<Response, Error> {
- app.conversations()
- .delete(&conversation, &deleted_at)
- .await?;
+ conversations.delete(&conversation, &deleted_at).await?;
Ok(Response { id: conversation })
}
diff --git a/src/conversation/handlers/delete/test.rs b/src/conversation/handlers/delete/test.rs
index 2718d3b..e9e882a 100644
--- a/src/conversation/handlers/delete/test.rs
+++ b/src/conversation/handlers/delete/test.rs
@@ -14,7 +14,7 @@ pub async fn valid_conversation() {
let deleter = fixtures::identity::create(&app, &fixtures::now()).await;
let response = super::handler(
- State(app.clone()),
+ State(app.conversations()),
Path(conversation.id.clone()),
fixtures::now(),
deleter,
@@ -52,7 +52,7 @@ pub async fn invalid_conversation_id() {
let deleter = fixtures::identity::create(&app, &fixtures::now()).await;
let conversation = fixtures::conversation::fictitious();
let super::Error(error) = super::handler(
- State(app.clone()),
+ State(app.conversations()),
Path(conversation.clone()),
fixtures::now(),
deleter,
@@ -81,7 +81,7 @@ pub async fn conversation_deleted() {
let deleter = fixtures::identity::create(&app, &fixtures::now()).await;
let super::Error(error) = super::handler(
- State(app.clone()),
+ State(app.conversations()),
Path(conversation.id.clone()),
fixtures::now(),
deleter,
@@ -110,7 +110,7 @@ pub async fn conversation_expired() {
let deleter = fixtures::identity::create(&app, &fixtures::now()).await;
let super::Error(error) = super::handler(
- State(app.clone()),
+ State(app.conversations()),
Path(conversation.id.clone()),
fixtures::now(),
deleter,
@@ -144,7 +144,7 @@ pub async fn conversation_purged() {
let deleter = fixtures::identity::create(&app, &fixtures::now()).await;
let super::Error(error) = super::handler(
- State(app.clone()),
+ State(app.conversations()),
Path(conversation.id.clone()),
fixtures::now(),
deleter,
@@ -170,7 +170,7 @@ pub async fn conversation_not_empty() {
let deleter = fixtures::identity::create(&app, &fixtures::now()).await;
let super::Error(error) = super::handler(
- State(app.clone()),
+ State(app.conversations()),
Path(conversation.id.clone()),
fixtures::now(),
deleter,
diff --git a/src/conversation/handlers/send/mod.rs b/src/conversation/handlers/send/mod.rs
index c8be59c..ff63652 100644
--- a/src/conversation/handlers/send/mod.rs
+++ b/src/conversation/handlers/send/mod.rs
@@ -5,11 +5,13 @@ use axum::{
};
use crate::{
- app::App,
clock::RequestedAt,
conversation::handlers::PathInfo,
error::{Internal, NotFound},
- message::{Body, Message, app::SendError},
+ message::{
+ Body, Message,
+ app::{Messages, SendError},
+ },
token::extract::Identity,
};
@@ -17,14 +19,13 @@ use crate::{
mod test;
pub async fn handler(
- State(app): State<App>,
+ State(messages): State<Messages>,
Path(conversation): Path<PathInfo>,
RequestedAt(sent_at): RequestedAt,
identity: Identity,
Json(request): Json<Request>,
) -> Result<Response, Error> {
- let message = app
- .messages()
+ let message = messages
.send(&conversation, &identity.login, &sent_at, &request.body)
.await?;
diff --git a/src/conversation/handlers/send/test.rs b/src/conversation/handlers/send/test.rs
index 8863090..013aaa4 100644
--- a/src/conversation/handlers/send/test.rs
+++ b/src/conversation/handlers/send/test.rs
@@ -28,7 +28,7 @@ async fn messages_in_order() {
let request = super::Request { body: body.clone() };
let _ = super::handler(
- State(app.clone()),
+ State(app.messages()),
Path(conversation.id.clone()),
sent_at.clone(),
sender.clone(),
@@ -75,7 +75,7 @@ async fn nonexistent_conversation() {
body: fixtures::message::propose(),
};
let super::Error(error) = super::handler(
- State(app),
+ State(app.messages()),
Path(conversation.clone()),
sent_at,
sender,
@@ -112,7 +112,7 @@ async fn deleted_conversation() {
body: fixtures::message::propose(),
};
let super::Error(error) = super::handler(
- State(app),
+ State(app.messages()),
Path(conversation.id.clone()),
sent_at,
sender,