@@ -112,6 +112,100 @@ void invoicePdfCanBeStreamed() throws Exception {
112112 assertEquals ("/v2/invoices/inv_1/pdf" , request .uri ().getPath ());
113113 }
114114
115+ @ Test
116+ void retentionDraftCreateSupportsDraftStatus () {
117+ StubHttpClient httpClient = new StubHttpClient ();
118+ httpClient .enqueueJson (200 , "{\" id\" :\" ret_draft_1\" ,\" status\" :\" draft\" }" );
119+
120+ Facturapi sdk = new Facturapi (
121+ FacturapiConfig .builder ("sk_test" )
122+ .httpClient (httpClient .client ())
123+ .build ()
124+ );
125+
126+ Map <String , Object > payload = new java .util .HashMap <>();
127+ payload .put ("status" , "draft" );
128+ payload .put ("customer" , null );
129+
130+ var response = sdk .retentions ().create (payload );
131+
132+ assertEquals ("ret_draft_1" , response .getId ());
133+ assertEquals ("draft" , response .getStatus ());
134+ var request = httpClient .requests ().get (0 );
135+ assertEquals ("POST" , request .method ());
136+ assertEquals ("/v2/retentions" , request .uri ().getPath ());
137+ assertTrue (request .bodyUtf8 ().contains ("\" status\" :\" draft\" " ));
138+ assertTrue (request .bodyUtf8 ().contains ("\" customer\" :null" ));
139+ }
140+
141+ @ Test
142+ void retentionDraftUpdateUsesExpectedPath () {
143+ StubHttpClient httpClient = new StubHttpClient ();
144+ httpClient .enqueueJson (200 , "{\" id\" :\" ret_1\" ,\" folio_int\" :\" R-2026-001\" }" );
145+
146+ Facturapi sdk = new Facturapi (
147+ FacturapiConfig .builder ("sk_test" )
148+ .httpClient (httpClient .client ())
149+ .build ()
150+ );
151+
152+ var response = sdk .retentions ().updateDraft ("ret_1" , Map .of ("folio_int" , "R-2026-001" ));
153+
154+ assertEquals ("ret_1" , response .getId ());
155+ assertEquals ("R-2026-001" , response .getFolioInt ());
156+ var request = httpClient .requests ().get (0 );
157+ assertEquals ("PUT" , request .method ());
158+ assertEquals ("/v2/retentions/ret_1" , request .uri ().getPath ());
159+ assertTrue (request .bodyUtf8 ().contains ("\" folio_int\" :\" R-2026-001\" " ));
160+ }
161+
162+ @ Test
163+ void retentionDraftCopyAndStampUseExpectedPaths () {
164+ StubHttpClient httpClient = new StubHttpClient ();
165+ httpClient .enqueueJson (200 , "{\" id\" :\" ret_copy_1\" ,\" status\" :\" draft\" }" );
166+ httpClient .enqueueJson (200 , "{\" id\" :\" ret_1\" ,\" status\" :\" valid\" }" );
167+
168+ Facturapi sdk = new Facturapi (
169+ FacturapiConfig .builder ("sk_test" )
170+ .httpClient (httpClient .client ())
171+ .build ()
172+ );
173+
174+ var draft = sdk .retentions ().copyToDraft ("ret_1" );
175+ var stamped = sdk .retentions ().stampDraft ("ret_copy_1" );
176+
177+ assertEquals ("ret_copy_1" , draft .getId ());
178+ assertEquals ("ret_1" , stamped .getId ());
179+ assertEquals ("POST" , httpClient .requests ().get (0 ).method ());
180+ assertEquals ("/v2/retentions/ret_1/copy" , httpClient .requests ().get (0 ).uri ().getPath ());
181+ assertEquals ("POST" , httpClient .requests ().get (1 ).method ());
182+ assertEquals ("/v2/retentions/ret_copy_1/stamp" , httpClient .requests ().get (1 ).uri ().getPath ());
183+ }
184+
185+ @ Test
186+ void retentionDraftCancelAndListUseExpectedPaths () {
187+ StubHttpClient httpClient = new StubHttpClient ();
188+ httpClient .enqueueJson (200 , "{\" id\" :\" ret_draft_1\" ,\" status\" :\" canceled\" }" );
189+ httpClient .enqueueJson (200 , "{\" data\" :[{\" id\" :\" ret_draft_2\" ,\" status\" :\" draft\" }]}" );
190+
191+ Facturapi sdk = new Facturapi (
192+ FacturapiConfig .builder ("sk_test" )
193+ .httpClient (httpClient .client ())
194+ .build ()
195+ );
196+
197+ var deleted = sdk .retentions ().cancel ("ret_draft_1" );
198+ var drafts = sdk .retentions ().list (Map .of ("status" , "draft" ));
199+
200+ assertEquals ("ret_draft_1" , deleted .getId ());
201+ assertEquals (1 , drafts .getData ().size ());
202+ assertEquals ("DELETE" , httpClient .requests ().get (0 ).method ());
203+ assertEquals ("/v2/retentions/ret_draft_1" , httpClient .requests ().get (0 ).uri ().getPath ());
204+ var listRequest = httpClient .requests ().get (1 );
205+ assertEquals ("GET" , listRequest .method ());
206+ assertEquals ("/v2/retentions?status=draft" , listRequest .uri ().getPath () + "?" + listRequest .uri ().getQuery ());
207+ }
208+
115209 @ Test
116210 void organizationUploadsAcceptBytes () {
117211 StubHttpClient httpClient = new StubHttpClient ();
0 commit comments