mirror of
https://github.com/lennart-k/rustical.git
synced 2025-12-13 21:42:34 +00:00
dav root: Add some new tests
This commit is contained in:
@@ -1,3 +1,72 @@
|
|||||||
pub mod root;
|
pub mod root;
|
||||||
|
|
||||||
pub use root::{RootResource, RootResourceService};
|
pub use root::{RootResource, RootResourceService};
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
pub mod test {
|
||||||
|
use crate::{
|
||||||
|
Error, Principal,
|
||||||
|
extensions::{CommonPropertiesExtension, CommonPropertiesProp},
|
||||||
|
namespace::NS_DAV,
|
||||||
|
privileges::UserPrivilegeSet,
|
||||||
|
resource::{PrincipalUri, Resource},
|
||||||
|
xml::{Resourcetype, ResourcetypeInner},
|
||||||
|
};
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub struct TestPrincipal(pub String);
|
||||||
|
|
||||||
|
impl Principal for TestPrincipal {
|
||||||
|
fn get_id(&self) -> &str {
|
||||||
|
&self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Resource for TestPrincipal {
|
||||||
|
type Prop = CommonPropertiesProp;
|
||||||
|
type Error = Error;
|
||||||
|
type Principal = Self;
|
||||||
|
|
||||||
|
fn is_collection(&self) -> bool {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_resourcetype(&self) -> crate::xml::Resourcetype {
|
||||||
|
Resourcetype(&[ResourcetypeInner(Some(NS_DAV), "collection")])
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_prop(
|
||||||
|
&self,
|
||||||
|
principal_uri: &impl crate::resource::PrincipalUri,
|
||||||
|
principal: &Self::Principal,
|
||||||
|
prop: &<Self::Prop as rustical_xml::PropName>::Names,
|
||||||
|
) -> Result<Self::Prop, Self::Error> {
|
||||||
|
<Self as CommonPropertiesExtension>::get_prop(self, principal_uri, principal, prop)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_displayname(&self) -> Option<&str> {
|
||||||
|
Some(&self.0)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_user_privileges(
|
||||||
|
&self,
|
||||||
|
principal: &Self::Principal,
|
||||||
|
) -> Result<UserPrivilegeSet, Self::Error> {
|
||||||
|
Ok(UserPrivilegeSet::owner_only(
|
||||||
|
principal.get_id() == self.get_id(),
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub struct TestPrincipalUri;
|
||||||
|
|
||||||
|
impl PrincipalUri for TestPrincipalUri {
|
||||||
|
fn principal_collection(&self) -> String {
|
||||||
|
"/".to_owned()
|
||||||
|
}
|
||||||
|
fn principal_uri(&self, principal: &str) -> String {
|
||||||
|
format!("/{principal}/")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -105,3 +105,33 @@ impl<PRS: ResourceService<Principal = P> + Clone, P: Principal, PURI: PrincipalU
|
|||||||
for RootResourceService<PRS, P, PURI>
|
for RootResourceService<PRS, P, PURI>
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use crate::{
|
||||||
|
resource::Resource,
|
||||||
|
resources::{
|
||||||
|
RootResource,
|
||||||
|
test::{TestPrincipal, TestPrincipalUri},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_root_resource() {
|
||||||
|
let resource = RootResource::<TestPrincipal, TestPrincipal>::default();
|
||||||
|
let propfind = RootResource::<TestPrincipal, TestPrincipal>::parse_propfind(
|
||||||
|
r#"<?xml version="1.0" encoding="UTF-8"?><propfind xmlns="DAV:"><allprop/></propfind>"#,
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let _response = resource
|
||||||
|
.propfind(
|
||||||
|
"/",
|
||||||
|
&propfind.prop,
|
||||||
|
propfind.include.as_ref(),
|
||||||
|
&TestPrincipalUri,
|
||||||
|
&TestPrincipal("user".to_owned()),
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user