mirror of
https://github.com/aljazceru/pubky-core.git
synced 2026-01-09 09:14:22 +01:00
feat(pubky): shallow list folder and files
This commit is contained in:
@@ -10,6 +10,7 @@ pub struct ListBuilder<'a> {
|
||||
limit: Option<u16>,
|
||||
cursor: Option<&'a str>,
|
||||
client: &'a PubkyClient,
|
||||
shallow: bool,
|
||||
}
|
||||
|
||||
impl<'a> ListBuilder<'a> {
|
||||
@@ -21,12 +22,13 @@ impl<'a> ListBuilder<'a> {
|
||||
limit: None,
|
||||
cursor: None,
|
||||
reverse: false,
|
||||
shallow: false,
|
||||
}
|
||||
}
|
||||
|
||||
/// Set the `reverse` option.
|
||||
pub fn reverse(mut self, reverse: bool) -> Self {
|
||||
self.reverse = reverse;
|
||||
pub fn reverse(mut self) -> Self {
|
||||
self.reverse = true;
|
||||
self
|
||||
}
|
||||
|
||||
@@ -44,6 +46,11 @@ impl<'a> ListBuilder<'a> {
|
||||
self
|
||||
}
|
||||
|
||||
pub fn shallow(mut self) -> Self {
|
||||
self.shallow = true;
|
||||
self
|
||||
}
|
||||
|
||||
/// Send the list request.
|
||||
///
|
||||
/// Returns a list of Pubky URLs of the files in the path of the `url`
|
||||
@@ -68,6 +75,10 @@ impl<'a> ListBuilder<'a> {
|
||||
query.append_key_only("reverse");
|
||||
}
|
||||
|
||||
if self.shallow {
|
||||
query.append_key_only("shallow");
|
||||
}
|
||||
|
||||
if let Some(limit) = self.limit {
|
||||
query.append_pair("limit", &limit.to_string());
|
||||
}
|
||||
|
||||
@@ -319,7 +319,7 @@ mod tests {
|
||||
let list = client
|
||||
.list(url.as_str())
|
||||
.unwrap()
|
||||
.reverse(true)
|
||||
.reverse()
|
||||
.send()
|
||||
.await
|
||||
.unwrap();
|
||||
@@ -340,7 +340,7 @@ mod tests {
|
||||
let list = client
|
||||
.list(url.as_str())
|
||||
.unwrap()
|
||||
.reverse(true)
|
||||
.reverse()
|
||||
.limit(2)
|
||||
.send()
|
||||
.await
|
||||
@@ -360,7 +360,7 @@ mod tests {
|
||||
let list = client
|
||||
.list(url.as_str())
|
||||
.unwrap()
|
||||
.reverse(true)
|
||||
.reverse()
|
||||
.limit(2)
|
||||
.cursor("d.txt")
|
||||
.send()
|
||||
@@ -377,4 +377,84 @@ mod tests {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn list_shallow() {
|
||||
let testnet = Testnet::new(10);
|
||||
let server = Homeserver::start_test(&testnet).await.unwrap();
|
||||
|
||||
let client = PubkyClient::test(&testnet);
|
||||
|
||||
let keypair = Keypair::random();
|
||||
|
||||
client.signup(&keypair, &server.public_key()).await.unwrap();
|
||||
|
||||
let urls = vec![
|
||||
format!("pubky://{}/pub/a.com/a.txt", keypair.public_key()),
|
||||
format!("pubky://{}/pub/example.com/a.txt", keypair.public_key()),
|
||||
format!("pubky://{}/pub/example.com/b.txt", keypair.public_key()),
|
||||
format!("pubky://{}/pub/example.com/c.txt", keypair.public_key()),
|
||||
format!("pubky://{}/pub/example.com/d.txt", keypair.public_key()),
|
||||
format!("pubky://{}/pub/example.con/d.txt", keypair.public_key()),
|
||||
format!("pubky://{}/pub/example.con", keypair.public_key()),
|
||||
format!("pubky://{}/pub/file", keypair.public_key()),
|
||||
format!("pubky://{}/pub/file2", keypair.public_key()),
|
||||
format!("pubky://{}/pub/z.com/a.txt", keypair.public_key()),
|
||||
];
|
||||
|
||||
for url in urls {
|
||||
client.put(url.as_str(), &[0]).await.unwrap();
|
||||
}
|
||||
|
||||
let url = format!("pubky://{}/pub/", keypair.public_key());
|
||||
|
||||
{
|
||||
let list = client
|
||||
.list(url.as_str())
|
||||
.unwrap()
|
||||
.shallow()
|
||||
.send()
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
list,
|
||||
vec![
|
||||
format!("pubky://{}/pub/a.com/", keypair.public_key()),
|
||||
format!("pubky://{}/pub/example.com/", keypair.public_key()),
|
||||
format!("pubky://{}/pub/example.con", keypair.public_key()),
|
||||
format!("pubky://{}/pub/example.con/", keypair.public_key()),
|
||||
format!("pubky://{}/pub/file", keypair.public_key()),
|
||||
format!("pubky://{}/pub/file2", keypair.public_key()),
|
||||
format!("pubky://{}/pub/z.com/", keypair.public_key()),
|
||||
],
|
||||
"normal list shallow"
|
||||
);
|
||||
}
|
||||
|
||||
{
|
||||
let list = client
|
||||
.list(url.as_str())
|
||||
.unwrap()
|
||||
.shallow()
|
||||
.reverse()
|
||||
.send()
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
list,
|
||||
vec![
|
||||
format!("pubky://{}/pub/z.com/", keypair.public_key()),
|
||||
format!("pubky://{}/pub/file2", keypair.public_key()),
|
||||
format!("pubky://{}/pub/file", keypair.public_key()),
|
||||
format!("pubky://{}/pub/example.con/", keypair.public_key()),
|
||||
format!("pubky://{}/pub/example.con", keypair.public_key()),
|
||||
format!("pubky://{}/pub/example.com/", keypair.public_key()),
|
||||
format!("pubky://{}/pub/a.com/", keypair.public_key()),
|
||||
],
|
||||
"reverse list shallow"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user