Fix some logic on locked

This commit is contained in:
Quentin 2024-03-01 18:33:46 +01:00
parent 4490afb1bf
commit 9200b44941
Signed by: quentin
GPG Key ID: E9602264D639FF68
1 changed files with 35 additions and 0 deletions

View File

@ -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");
}
}