Skip to content

Commit 6f04ec1

Browse files
committed
test(codegen): add multipart/related test coverage
Add comprehensive test suite for multipart/related support including: - New OpenAPI spec (multipart-related-test.json) with three test endpoints demonstrating different patterns: single file with metadata, raw multipart/related body, and multiple files with metadata - Generated test outputs for all variants (builder, tagged, CLI, httpmock, positional) showing proper Vec<u8> types for binary fields and MultipartRelatedBody trait implementations - Registered spec in test_output.rs for expectorate-based snapshot testing The test validates the builder API from #1240 works as expected: client.upload_file() .file(file_bytes) .metadata(metadata) .send() Also includes regenerated builder outputs with improved error messages as a beneficial side effect of builder generation improvements.
1 parent 991b540 commit 6f04ec1

18 files changed

+3580
-2376
lines changed

progenitor-impl/tests/output/src/buildomat_builder.rs

Lines changed: 24 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -3002,43 +3002,31 @@ pub mod builder {
30023002
#[derive(Debug, Clone)]
30033003
pub struct TaskSubmit<'a> {
30043004
client: &'a super::Client,
3005-
body: Result<types::builder::TaskSubmit, String>,
3005+
body: Result<types::TaskSubmit, String>,
30063006
}
30073007

30083008
impl<'a> TaskSubmit<'a> {
30093009
pub fn new(client: &'a super::Client) -> Self {
30103010
Self {
30113011
client: client,
3012-
body: Ok(::std::default::Default::default()),
3012+
body: Err("body was not initialized".to_string()),
30133013
}
30143014
}
30153015

30163016
pub fn body<V>(mut self, value: V) -> Self
30173017
where
30183018
V: std::convert::TryInto<types::TaskSubmit>,
3019-
<V as std::convert::TryInto<types::TaskSubmit>>::Error: std::fmt::Display,
30203019
{
30213020
self.body = value
30223021
.try_into()
3023-
.map(From::from)
3024-
.map_err(|s| format!("conversion to `TaskSubmit` for body failed: {}", s));
3025-
self
3026-
}
3027-
3028-
pub fn body_map<F>(mut self, f: F) -> Self
3029-
where
3030-
F: std::ops::FnOnce(types::builder::TaskSubmit) -> types::builder::TaskSubmit,
3031-
{
3032-
self.body = self.body.map(f);
3022+
.map_err(|_| "conversion to `TaskSubmit` for body failed".to_string());
30333023
self
30343024
}
30353025

30363026
///Sends a `POST` request to `/v1/tasks`
30373027
pub async fn send(self) -> Result<ResponseValue<types::TaskSubmitResult>, Error<()>> {
30383028
let Self { client, body } = self;
3039-
let body = body
3040-
.and_then(|v| types::TaskSubmit::try_from(v).map_err(|e| e.to_string()))
3041-
.map_err(Error::InvalidRequest)?;
3029+
let body = body.map_err(Error::InvalidRequest)?;
30423030
let url = format!("{}/v1/tasks", client.baseurl,);
30433031
let mut header_map = ::reqwest::header::HeaderMap::with_capacity(1usize);
30443032
header_map.append(
@@ -3304,43 +3292,31 @@ pub mod builder {
33043292
#[derive(Debug, Clone)]
33053293
pub struct UserCreate<'a> {
33063294
client: &'a super::Client,
3307-
body: Result<types::builder::UserCreate, String>,
3295+
body: Result<types::UserCreate, String>,
33083296
}
33093297

33103298
impl<'a> UserCreate<'a> {
33113299
pub fn new(client: &'a super::Client) -> Self {
33123300
Self {
33133301
client: client,
3314-
body: Ok(::std::default::Default::default()),
3302+
body: Err("body was not initialized".to_string()),
33153303
}
33163304
}
33173305

33183306
pub fn body<V>(mut self, value: V) -> Self
33193307
where
33203308
V: std::convert::TryInto<types::UserCreate>,
3321-
<V as std::convert::TryInto<types::UserCreate>>::Error: std::fmt::Display,
33223309
{
33233310
self.body = value
33243311
.try_into()
3325-
.map(From::from)
3326-
.map_err(|s| format!("conversion to `UserCreate` for body failed: {}", s));
3327-
self
3328-
}
3329-
3330-
pub fn body_map<F>(mut self, f: F) -> Self
3331-
where
3332-
F: std::ops::FnOnce(types::builder::UserCreate) -> types::builder::UserCreate,
3333-
{
3334-
self.body = self.body.map(f);
3312+
.map_err(|_| "conversion to `UserCreate` for body failed".to_string());
33353313
self
33363314
}
33373315

33383316
///Sends a `POST` request to `/v1/users`
33393317
pub async fn send(self) -> Result<ResponseValue<types::UserCreateResult>, Error<()>> {
33403318
let Self { client, body } = self;
3341-
let body = body
3342-
.and_then(|v| types::UserCreate::try_from(v).map_err(|e| e.to_string()))
3343-
.map_err(Error::InvalidRequest)?;
3319+
let body = body.map_err(Error::InvalidRequest)?;
33443320
let url = format!("{}/v1/users", client.baseurl,);
33453321
let mut header_map = ::reqwest::header::HeaderMap::with_capacity(1usize);
33463322
header_map.append(
@@ -3487,43 +3463,31 @@ pub mod builder {
34873463
#[derive(Debug, Clone)]
34883464
pub struct WorkerBootstrap<'a> {
34893465
client: &'a super::Client,
3490-
body: Result<types::builder::WorkerBootstrap, String>,
3466+
body: Result<types::WorkerBootstrap, String>,
34913467
}
34923468

34933469
impl<'a> WorkerBootstrap<'a> {
34943470
pub fn new(client: &'a super::Client) -> Self {
34953471
Self {
34963472
client: client,
3497-
body: Ok(::std::default::Default::default()),
3473+
body: Err("body was not initialized".to_string()),
34983474
}
34993475
}
35003476

35013477
pub fn body<V>(mut self, value: V) -> Self
35023478
where
35033479
V: std::convert::TryInto<types::WorkerBootstrap>,
3504-
<V as std::convert::TryInto<types::WorkerBootstrap>>::Error: std::fmt::Display,
35053480
{
35063481
self.body = value
35073482
.try_into()
3508-
.map(From::from)
3509-
.map_err(|s| format!("conversion to `WorkerBootstrap` for body failed: {}", s));
3510-
self
3511-
}
3512-
3513-
pub fn body_map<F>(mut self, f: F) -> Self
3514-
where
3515-
F: std::ops::FnOnce(types::builder::WorkerBootstrap) -> types::builder::WorkerBootstrap,
3516-
{
3517-
self.body = self.body.map(f);
3483+
.map_err(|_| "conversion to `WorkerBootstrap` for body failed".to_string());
35183484
self
35193485
}
35203486

35213487
///Sends a `POST` request to `/v1/worker/bootstrap`
35223488
pub async fn send(self) -> Result<ResponseValue<types::WorkerBootstrapResult>, Error<()>> {
35233489
let Self { client, body } = self;
3524-
let body = body
3525-
.and_then(|v| types::WorkerBootstrap::try_from(v).map_err(|e| e.to_string()))
3526-
.map_err(Error::InvalidRequest)?;
3490+
let body = body.map_err(Error::InvalidRequest)?;
35273491
let url = format!("{}/v1/worker/bootstrap", client.baseurl,);
35283492
let mut header_map = ::reqwest::header::HeaderMap::with_capacity(1usize);
35293493
header_map.append(
@@ -3608,15 +3572,15 @@ pub mod builder {
36083572
pub struct WorkerTaskAppend<'a> {
36093573
client: &'a super::Client,
36103574
task: Result<::std::string::String, String>,
3611-
body: Result<types::builder::WorkerAppendTask, String>,
3575+
body: Result<types::WorkerAppendTask, String>,
36123576
}
36133577

36143578
impl<'a> WorkerTaskAppend<'a> {
36153579
pub fn new(client: &'a super::Client) -> Self {
36163580
Self {
36173581
client: client,
36183582
task: Err("task was not initialized".to_string()),
3619-
body: Ok(::std::default::Default::default()),
3583+
body: Err("body was not initialized".to_string()),
36203584
}
36213585
}
36223586

@@ -3633,32 +3597,18 @@ pub mod builder {
36333597
pub fn body<V>(mut self, value: V) -> Self
36343598
where
36353599
V: std::convert::TryInto<types::WorkerAppendTask>,
3636-
<V as std::convert::TryInto<types::WorkerAppendTask>>::Error: std::fmt::Display,
36373600
{
36383601
self.body = value
36393602
.try_into()
3640-
.map(From::from)
3641-
.map_err(|s| format!("conversion to `WorkerAppendTask` for body failed: {}", s));
3642-
self
3643-
}
3644-
3645-
pub fn body_map<F>(mut self, f: F) -> Self
3646-
where
3647-
F: std::ops::FnOnce(
3648-
types::builder::WorkerAppendTask,
3649-
) -> types::builder::WorkerAppendTask,
3650-
{
3651-
self.body = self.body.map(f);
3603+
.map_err(|_| "conversion to `WorkerAppendTask` for body failed".to_string());
36523604
self
36533605
}
36543606

36553607
///Sends a `POST` request to `/v1/worker/task/{task}/append`
36563608
pub async fn send(self) -> Result<ResponseValue<()>, Error<()>> {
36573609
let Self { client, task, body } = self;
36583610
let task = task.map_err(Error::InvalidRequest)?;
3659-
let body = body
3660-
.and_then(|v| types::WorkerAppendTask::try_from(v).map_err(|e| e.to_string()))
3661-
.map_err(Error::InvalidRequest)?;
3611+
let body = body.map_err(Error::InvalidRequest)?;
36623612
let url = format!(
36633613
"{}/v1/worker/task/{}/append",
36643614
client.baseurl,
@@ -3780,15 +3730,15 @@ pub mod builder {
37803730
pub struct WorkerTaskComplete<'a> {
37813731
client: &'a super::Client,
37823732
task: Result<::std::string::String, String>,
3783-
body: Result<types::builder::WorkerCompleteTask, String>,
3733+
body: Result<types::WorkerCompleteTask, String>,
37843734
}
37853735

37863736
impl<'a> WorkerTaskComplete<'a> {
37873737
pub fn new(client: &'a super::Client) -> Self {
37883738
Self {
37893739
client: client,
37903740
task: Err("task was not initialized".to_string()),
3791-
body: Ok(::std::default::Default::default()),
3741+
body: Err("body was not initialized".to_string()),
37923742
}
37933743
}
37943744

@@ -3805,32 +3755,18 @@ pub mod builder {
38053755
pub fn body<V>(mut self, value: V) -> Self
38063756
where
38073757
V: std::convert::TryInto<types::WorkerCompleteTask>,
3808-
<V as std::convert::TryInto<types::WorkerCompleteTask>>::Error: std::fmt::Display,
38093758
{
38103759
self.body = value
38113760
.try_into()
3812-
.map(From::from)
3813-
.map_err(|s| format!("conversion to `WorkerCompleteTask` for body failed: {}", s));
3814-
self
3815-
}
3816-
3817-
pub fn body_map<F>(mut self, f: F) -> Self
3818-
where
3819-
F: std::ops::FnOnce(
3820-
types::builder::WorkerCompleteTask,
3821-
) -> types::builder::WorkerCompleteTask,
3822-
{
3823-
self.body = self.body.map(f);
3761+
.map_err(|_| "conversion to `WorkerCompleteTask` for body failed".to_string());
38243762
self
38253763
}
38263764

38273765
///Sends a `POST` request to `/v1/worker/task/{task}/complete`
38283766
pub async fn send(self) -> Result<ResponseValue<()>, Error<()>> {
38293767
let Self { client, task, body } = self;
38303768
let task = task.map_err(Error::InvalidRequest)?;
3831-
let body = body
3832-
.and_then(|v| types::WorkerCompleteTask::try_from(v).map_err(|e| e.to_string()))
3833-
.map_err(Error::InvalidRequest)?;
3769+
let body = body.map_err(Error::InvalidRequest)?;
38343770
let url = format!(
38353771
"{}/v1/worker/task/{}/complete",
38363772
client.baseurl,
@@ -3869,15 +3805,15 @@ pub mod builder {
38693805
pub struct WorkerTaskAddOutput<'a> {
38703806
client: &'a super::Client,
38713807
task: Result<::std::string::String, String>,
3872-
body: Result<types::builder::WorkerAddOutput, String>,
3808+
body: Result<types::WorkerAddOutput, String>,
38733809
}
38743810

38753811
impl<'a> WorkerTaskAddOutput<'a> {
38763812
pub fn new(client: &'a super::Client) -> Self {
38773813
Self {
38783814
client: client,
38793815
task: Err("task was not initialized".to_string()),
3880-
body: Ok(::std::default::Default::default()),
3816+
body: Err("body was not initialized".to_string()),
38813817
}
38823818
}
38833819

@@ -3894,30 +3830,18 @@ pub mod builder {
38943830
pub fn body<V>(mut self, value: V) -> Self
38953831
where
38963832
V: std::convert::TryInto<types::WorkerAddOutput>,
3897-
<V as std::convert::TryInto<types::WorkerAddOutput>>::Error: std::fmt::Display,
38983833
{
38993834
self.body = value
39003835
.try_into()
3901-
.map(From::from)
3902-
.map_err(|s| format!("conversion to `WorkerAddOutput` for body failed: {}", s));
3903-
self
3904-
}
3905-
3906-
pub fn body_map<F>(mut self, f: F) -> Self
3907-
where
3908-
F: std::ops::FnOnce(types::builder::WorkerAddOutput) -> types::builder::WorkerAddOutput,
3909-
{
3910-
self.body = self.body.map(f);
3836+
.map_err(|_| "conversion to `WorkerAddOutput` for body failed".to_string());
39113837
self
39123838
}
39133839

39143840
///Sends a `POST` request to `/v1/worker/task/{task}/output`
39153841
pub async fn send(self) -> Result<ResponseValue<()>, Error<()>> {
39163842
let Self { client, task, body } = self;
39173843
let task = task.map_err(Error::InvalidRequest)?;
3918-
let body = body
3919-
.and_then(|v| types::WorkerAddOutput::try_from(v).map_err(|e| e.to_string()))
3920-
.map_err(Error::InvalidRequest)?;
3844+
let body = body.map_err(Error::InvalidRequest)?;
39213845
let url = format!(
39223846
"{}/v1/worker/task/{}/output",
39233847
client.baseurl,

0 commit comments

Comments
 (0)