From 8bc88525286e26849106e7ea1b5c2d27718b1f84 Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Tue, 10 Dec 2024 17:47:14 +0000 Subject: [PATCH] feat(trello): add command 'trello attachement save' --- README.md | 1 + src/lib.rs | 10 +- src/main.rs | 2 +- src/nextcloud/tests.rs | 32 +++--- src/tests/mod.rs | 7 +- .../responses/trello-attachment-save.png | Bin 0 -> 184198 bytes src/trello/attachment.rs | 28 ++++- src/trello/client.rs | 38 +++++++ src/trello/tests.rs | 103 ++++++++++++++++-- 9 files changed, 178 insertions(+), 43 deletions(-) create mode 100644 src/tests/responses/trello-attachment-save.png diff --git a/README.md b/README.md index 7abe42f..9a03ccf 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,7 @@ As part of building the import server, the following commands exercise each oper - [x] trello stack get - includes list of cards - [x] trello card get - includes list of attachments - [x] trello attachment get - includes download url +- [x] trello attachment save - saves to disk - [ ] nextcloud deck get (was board list) - [ ] nextcloud board get (was stack list) - [ ] nextcloud stack get (was card list) diff --git a/src/lib.rs b/src/lib.rs index b49aac8..8aec10c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -67,10 +67,10 @@ pub struct Ctx { pub net: Net, pub prt: Printer, } -impl Default for Ctx { - fn default() -> Self { +impl Ctx { + pub fn new(base: impl Into) -> Self { Self { - fs: kxio::fs::new(PathBuf::default()), + fs: kxio::fs::new(base), net: kxio::net::new(), prt: kxio::print::standard(), } @@ -79,7 +79,7 @@ impl Default for Ctx { #[derive(Clone)] pub(crate) struct FullCtx { - // pub fs: FileSystem, + pub fs: FileSystem, pub net: Net, pub prt: Printer, pub cfg: AppConfig, @@ -121,7 +121,7 @@ pub async fn run(ctx: Ctx) -> color_eyre::Result<()> { commands .command .execute(FullCtx { - // fs: ctx.fs, + fs: ctx.fs, net: ctx.net, prt: ctx.prt, cfg, diff --git a/src/main.rs b/src/main.rs index d253395..7b8210e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,5 +6,5 @@ use trello_to_deck::{run, Ctx}; #[tokio::main] #[cfg_attr(test, mutants::skip)] async fn main() -> Result<()> { - run(Ctx::default()).await + run(Ctx::new(std::env::current_dir()?)).await } diff --git a/src/nextcloud/tests.rs b/src/nextcloud/tests.rs index 883a6bf..893e4f8 100644 --- a/src/nextcloud/tests.rs +++ b/src/nextcloud/tests.rs @@ -118,8 +118,8 @@ mod commands { .body(include_str!("../tests/responses/nextcloud-board-list.json")) .expect("mock request"); - // let fs = given::a_filesystem(); - let ctx = given::a_full_context(mock_net); + let fs = given::a_filesystem(); + let ctx = given::a_full_context(mock_net, fs); let prt = ctx.prt.clone(); let prt = prt.as_test().unwrap(); @@ -151,8 +151,8 @@ mod commands { .body(include_str!("../tests/responses/nextcloud-board-list.json")) .expect("mock request"); - // let fs = given::a_filesystem(); - let ctx = given::a_full_context(mock_net); + let fs = given::a_filesystem(); + let ctx = given::a_full_context(mock_net, fs); let prt = ctx.prt.clone(); let prt = prt.as_test().unwrap(); @@ -195,8 +195,8 @@ mod commands { )) .expect("mock request"); - // let fs = given::a_filesystem(); - let ctx = given::a_full_context(mock_net); + let fs = given::a_filesystem(); + let ctx = given::a_full_context(mock_net, fs); //when let result = ctx @@ -220,8 +220,8 @@ mod commands { .body(include_str!("../tests/responses/nextcloud-stack-list.json")) .expect("mock request"); - // let fs = given::a_filesystem(); - let ctx = given::a_full_context(mock_net); + let fs = given::a_filesystem(); + let ctx = given::a_full_context(mock_net, fs); //when let result = ctx @@ -332,8 +332,8 @@ mod commands { .body(include_str!("../tests/responses/nextcloud-card-list.json")) .expect("mock request"); - // let fs = given::a_filesystem(); - let ctx = given::a_full_context(mock_net); + let fs = given::a_filesystem(); + let ctx = given::a_full_context(mock_net, fs); //when let result = ctx @@ -378,8 +378,8 @@ mod commands { .body(include_str!("../tests/responses/nextcloud-card-get.json")) .expect("mock request"); - // let fs = given::a_filesystem(); - let ctx = given::a_full_context(mock_net); + let fs = given::a_filesystem(); + let ctx = given::a_full_context(mock_net, fs); //when let result = ctx @@ -432,8 +432,8 @@ mod commands { )) .expect("mock request"); - // let fs = given::a_filesystem(); - let ctx = given::a_full_context(mock_net); + let fs = given::a_filesystem(); + let ctx = given::a_full_context(mock_net, fs); //when let result = ctx @@ -484,8 +484,8 @@ mod commands { .mock() .expect("mock request"); - // let fs = given::a_filesystem(); - let ctx = given::a_full_context(mock_net); + let fs = given::a_filesystem(); + let ctx = given::a_full_context(mock_net, fs); //when let result = ctx diff --git a/src/tests/mod.rs b/src/tests/mod.rs index e12f7e6..c93f685 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -131,12 +131,9 @@ pub(crate) mod given { Ctx { fs, net, prt } } - pub(crate) fn a_full_context( - mock_net: MockNet, - // fs: TempFileSystem - ) -> FullCtx { + pub(crate) fn a_full_context(mock_net: MockNet, fs: TempFileSystem) -> FullCtx { FullCtx { - // fs: fs.as_real(), + fs: fs.as_real(), net: mock_net.into(), prt: a_printer(), cfg: AppConfig { diff --git a/src/tests/responses/trello-attachment-save.png b/src/tests/responses/trello-attachment-save.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1020141eddb45ed79b90d041ee3c117bef4bd2 GIT binary patch literal 184198 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�wQYM~wya6f`QF9iSmq%Nc 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 R1Nna!&MBQuJ7aMF{{o5PVpsqG literal 0 HcmV?d00001 diff --git a/src/trello/attachment.rs b/src/trello/attachment.rs index cbd661b..4ec8644 100644 --- a/src/trello/attachment.rs +++ b/src/trello/attachment.rs @@ -1,3 +1,5 @@ +use std::path::PathBuf; + // use clap::Parser; use color_eyre::Result; @@ -15,6 +17,11 @@ pub(crate) enum TrelloAttachmentCommand { card_id: String, attachment_id: String, }, + Save { + card_id: String, + attachment_id: String, + file_name: Option, // will use file name from attachment if not provided. + }, } impl Execute for TrelloAttachmentCommand { @@ -25,12 +32,11 @@ impl Execute for TrelloAttachmentCommand { card_id, attachment_id, } => { + let trello_card_id = TrelloCardId::new(card_id); + let trello_attachment_id = TrelloAttachmentId::new(attachment_id); let api_result = ctx .trello_client() - .card_attachment( - &TrelloCardId::new(card_id), - &TrelloAttachmentId::new(attachment_id), - ) + .card_attachment(&trello_card_id, &trello_attachment_id) .await; if dump { p!(ctx.prt, "{}", api_result.text); @@ -40,6 +46,20 @@ impl Execute for TrelloAttachmentCommand { } Ok(()) } + Self::Save { + card_id, + attachment_id, + file_name, + } => { + let trello_card_id = TrelloCardId::new(card_id); + let trello_attachment_id = TrelloAttachmentId::new(attachment_id); + let file_name = ctx + .trello_client() + .save_attachment(&trello_card_id, &trello_attachment_id, file_name) + .await?; + p!(ctx.prt, "Wrote: {}", file_name.display()); + Ok(()) + } } } } diff --git a/src/trello/client.rs b/src/trello/client.rs index d6f5573..f0d2739 100644 --- a/src/trello/client.rs +++ b/src/trello/client.rs @@ -1,6 +1,8 @@ // use std::collections::HashMap; +use std::path::PathBuf; +use color_eyre::eyre::Context; use kxio::net::{Net, ReqBuilder}; use crate::trello::model::{TrelloAttachment, TrelloAttachmentId}; @@ -26,6 +28,14 @@ impl<'ctx> TrelloClient<'ctx> { f!("https://api.trello.com/1{path}") } + fn auth_headers(&self) -> HashMap { + let api_key = &self.ctx.cfg.trello.api_key; + let api_secret = &self.ctx.cfg.trello.api_secret; + HashMap::from([( + s!("Authorization"), + f!(r#"OAuth oauth_consumer_key="{api_key}", oauth_token="{api_secret}""#,), + )]) + } fn common_headers(&self) -> HashMap { let api_key = &self.ctx.cfg.trello.api_key; let api_secret = &self.ctx.cfg.trello.api_secret; @@ -53,6 +63,34 @@ impl<'ctx> TrelloClient<'ctx> { ) .await } + + pub(crate) async fn save_attachment( + &self, + card_id: &TrelloCardId, + attachment_id: &TrelloAttachmentId, + file_name: Option, + ) -> color_eyre::Result { + let attachment = self.card_attachment(card_id, attachment_id).await.result?; + let url = attachment.url; + let file_name = file_name.unwrap_or_else(|| attachment.file_name.into()); + crate::e!(self.ctx.prt, "file_name: {}", file_name.display()); + crate::e!(self.ctx.prt, "base: {}", self.ctx.fs.base().display()); + let file_name = self.ctx.fs.base().join(file_name); + crate::e!(self.ctx.prt, "file_name: {}", file_name.display()); + let resp = self + .ctx + .net + .get(url) + .headers(self.auth_headers()) + .header("accept", "application/octet") + .send() + .await? + .bytes() + .await?; + let file = self.ctx.fs.file(&file_name); + file.write(resp).context("writing to disk")?; + Ok(file_name) + } } impl<'ctx> TrelloClient<'ctx> { diff --git a/src/trello/tests.rs b/src/trello/tests.rs index 9c95ce0..f80bf49 100644 --- a/src/trello/tests.rs +++ b/src/trello/tests.rs @@ -75,8 +75,8 @@ mod commands { .body(include_str!("../tests/responses/trello-board-get.json")) .expect("mock request"); - // let fs = given::a_filesystem(); - let ctx = given::a_full_context(mock_net); + let fs = given::a_filesystem(); + let ctx = given::a_full_context(mock_net, fs); //when let result = ctx @@ -123,8 +123,8 @@ mod commands { prep_mock_get(&mock_net); - // let fs = given::a_filesystem(); - let ctx = given::a_full_context(mock_net); + let fs = given::a_filesystem(); + let ctx = given::a_full_context(mock_net, fs); let prt = ctx.prt.clone(); let prt = prt.as_test().unwrap(); let command = Command::Trello(TrelloCommand::Card(TrelloCardCommand::Get { @@ -147,8 +147,8 @@ mod commands { prep_mock_get(&mock_net); - // let fs = given::a_filesystem(); - let ctx = given::a_full_context(mock_net); + let fs = given::a_filesystem(); + let ctx = given::a_full_context(mock_net, fs); let prt = ctx.prt.clone(); let prt = prt.as_test().unwrap(); let command = Command::Trello(TrelloCommand::Card(TrelloCardCommand::Get { @@ -195,8 +195,8 @@ mod commands { prep_mock_get(&mock_net); - // let fs = given::a_filesystem(); - let ctx = given::a_full_context(mock_net); + let fs = given::a_filesystem(); + let ctx = given::a_full_context(mock_net, fs); let prt = ctx.prt.clone(); let prt = prt.as_test().unwrap(); let command = @@ -207,7 +207,7 @@ mod commands { })); //when - command.execute(ctx).await; + command.execute(ctx).await.expect("execute"); //then let output = prt.output(); @@ -221,8 +221,8 @@ mod commands { prep_mock_get(&mock_net); - // let fs = given::a_filesystem(); - let ctx = given::a_full_context(mock_net); + let fs = given::a_filesystem(); + let ctx = given::a_full_context(mock_net, fs); let prt = ctx.prt.clone(); let prt = prt.as_test().unwrap(); let command = @@ -233,7 +233,7 @@ mod commands { })); //when - command.execute(ctx).await; + command.execute(ctx).await.expect("execute"); //then let output = prt.output(); @@ -255,6 +255,85 @@ mod commands { .expect("mock request"); } } + + mod save { + use super::*; + use bytes::Bytes; + + #[tokio::test] + async fn save_writes_file() { + //given + let mock_net = kxio::net::mock(); + + prep_mock_get(&mock_net); + + let fs = given::a_filesystem(); + let test_fs = fs.clone(); + let ctx = given::a_full_context(mock_net, fs); + let command = + Command::Trello(TrelloCommand::Attachment(TrelloAttachmentCommand::Save { + card_id: s!("65ad94865aed24f70ecdcebb"), + attachment_id: s!("65ad94875aed24f70ecdd037"), + file_name: None, + })); + + //when + command.execute(ctx).await.expect("execute"); + + //then + let file = test_fs.base().join("Backlog.png"); + assert!(file.exists()); + } + + #[tokio::test] + async fn save_log_output() { + //given + let mock_net = kxio::net::mock(); + + prep_mock_get(&mock_net); + + let fs = given::a_filesystem(); + let test_fs = fs.clone(); + let ctx = given::a_full_context(mock_net, fs); + let prt = ctx.prt.clone(); + let prt = prt.as_test().unwrap(); + let command = + Command::Trello(TrelloCommand::Attachment(TrelloAttachmentCommand::Save { + card_id: s!("65ad94865aed24f70ecdcebb"), + attachment_id: s!("65ad94875aed24f70ecdd037"), + file_name: None, + })); + + //when + command.execute(ctx).await.expect("execute"); + + //then + let file = test_fs.base().join("Backlog.png"); + drop(test_fs); + let output = prt.output(); + assert_eq!(output.trim(), crate::f!("Wrote: {}", file.display())); + } + + fn prep_mock_get(mock_net: &MockNet) { + mock_net + .on() + .get("https://api.trello.com/1/cards/65ad94865aed24f70ecdcebb/attachments/65ad94875aed24f70ecdd037") + .header("authorization", "OAuth oauth_consumer_key=\"trello-api-key\", oauth_token=\"trello-api-secret\"") + .header("accept", "application/json") + .header("content-type", "application/json") + .respond(StatusCode::OK) + .body(include_str!("../tests/responses/trello-attachment-get.json")) + .expect("mock request 1"); + + mock_net + .on() + .get("https://trello.com/1/cards/65ad94865aed24f70ecdcebb/attachments/65ad94875aed24f70ecdd037/download/Backlog.png") + .header("authorization", "OAuth oauth_consumer_key=\"trello-api-key\", oauth_token=\"trello-api-secret\"") + .respond(StatusCode::OK) + .body(Bytes::from(include_bytes!("../tests/responses/trello-attachment-save.png").as_slice())) + .expect("mock request 2"); + } + } } }