diff options
author | Quentin Dufour <quentin@deuxfleurs.fr> | 2024-03-01 18:33:46 +0100 |
---|---|---|
committer | Quentin Dufour <quentin@deuxfleurs.fr> | 2024-03-01 18:33:46 +0100 |
commit | 9200b449415abc08a7db21d146f380a8999eda14 (patch) | |
tree | 512ae755e4f2ce3df77aa8bc77a36a05400ca6ba /src/dav/encoder.rs | |
parent | 4490afb1bfef7af4afe8ada9c99f9bf7925ad40e (diff) | |
download | aerogramme-9200b449415abc08a7db21d146f380a8999eda14.tar.gz aerogramme-9200b449415abc08a7db21d146f380a8999eda14.zip |
Fix some logic on locked
Diffstat (limited to 'src/dav/encoder.rs')
-rw-r--r-- | src/dav/encoder.rs | 35 |
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"); + } } |