aboutsummaryrefslogtreecommitdiff
path: root/src/dav/encoder.rs
diff options
context:
space:
mode:
authorQuentin Dufour <quentin@deuxfleurs.fr>2024-03-01 18:33:46 +0100
committerQuentin Dufour <quentin@deuxfleurs.fr>2024-03-01 18:33:46 +0100
commit9200b449415abc08a7db21d146f380a8999eda14 (patch)
tree512ae755e4f2ce3df77aa8bc77a36a05400ca6ba /src/dav/encoder.rs
parent4490afb1bfef7af4afe8ada9c99f9bf7925ad40e (diff)
downloadaerogramme-9200b449415abc08a7db21d146f380a8999eda14.tar.gz
aerogramme-9200b449415abc08a7db21d146f380a8999eda14.zip
Fix some logic on locked
Diffstat (limited to 'src/dav/encoder.rs')
-rw-r--r--src/dav/encoder.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/dav/encoder.rs b/src/dav/encoder.rs
index 41e93f3..6bccc78 100644
--- a/src/dav/encoder.rs
+++ b/src/dav/encoder.rs
@@ -647,6 +647,9 @@ impl<C: Context> QuickWritable<C> for Violation<C> {
async fn write(&self, xml: &mut Writer<impl AsyncWrite+Unpin>, ctx: C) -> Result<(), QError> {
match self {
Violation::LockTokenMatchesRequestUri => xml.write_event_async(Event::Empty(ctx.create_dav_element("lock-token-matches-request-uri"))).await?,
+ Violation::LockTokenSubmitted(hrefs) if hrefs.is_empty() => {
+ xml.write_event_async(Event::Empty(ctx.create_dav_element("lock-token-submitted"))).await?
+ },
Violation::LockTokenSubmitted(hrefs) => {
let start = ctx.create_dav_element("lock-token-submitted");
let end = start.to_end();
@@ -657,6 +660,9 @@ impl<C: Context> QuickWritable<C> for Violation<C> {
}
xml.write_event_async(Event::End(end)).await?;
},
+ Violation::NoConflictingLock(hrefs) if hrefs.is_empty() => {
+ xml.write_event_async(Event::Empty(ctx.create_dav_element("no-conflicting-lock"))).await?
+ },
Violation::NoConflictingLock(hrefs) => {
let start = ctx.create_dav_element("no-conflicting-lock");
let end = start.to_end();
@@ -1059,4 +1065,33 @@ mod tests {
assert_eq!(&got, expected, "\n---GOT---\n{got}\n---EXP---\n{expected}\n");
}
+
+ #[tokio::test]
+ async fn rfc_delete_locked2() {
+ let got = serialize(
+ NoExtension { root: true },
+ &Multistatus {
+ responses: vec![Response {
+ href: Href("http://www.example.com/container/resource3".into()),
+ status_or_propstat: StatusOrPropstat::Status(Status(http::status::StatusCode::from_u16(423).unwrap())),
+ error: Some(Error(vec![Violation::LockTokenSubmitted(vec![])])),
+ responsedescription: None,
+ location: None,
+ }],
+ responsedescription: None,
+ },
+ ).await;
+
+ let expected = r#"<D:multistatus xmlns:D="DAV:">
+ <D:response>
+ <D:href>http://www.example.com/container/resource3</D:href>
+ <D:status>HTTP/1.1 423 Locked</D:status>
+ <D:error>
+ <D:lock-token-submitted/>
+ </D:error>
+ </D:response>
+</D:multistatus>"#;
+
+ assert_eq!(&got, expected, "\n---GOT---\n{got}\n---EXP---\n{expected}\n");
+ }
}