Skip to content

Commit 6765615

Browse files
chore(multiInvoices): add new methods for multiinvoice receipts
1 parent 94e170a commit 6765615

3 files changed

Lines changed: 77 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [1.2.0] - 2026-04-27
9+
10+
### Added
11+
12+
- Add `receipts.multiInvoice(Map<String, Object> data)` for `POST /receipts/multi-invoice`.
13+
- Add `receipts.previewMultiInvoicePdf(Map<String, Object> data)` for `POST /receipts/multi-invoice/preview/pdf`.
14+
815
## [1.2.0] - 2026-04-23
916

1017
### Added

src/main/java/io/facturapi/resources/ReceiptsResource.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,27 @@ public Invoice createGlobalInvoice(Map<String, Object> data) {
7575
return post("/receipts/global-invoice", data, null, Invoice.class);
7676
}
7777

78+
/**
79+
* Creates a multi-invoice from a list of receipt keys.
80+
* Supports both invoice response and dry-run summary response.
81+
*
82+
* @param data Multi-invoice payload.
83+
* @return Invoice/summary response as a generic map.
84+
*/
85+
public Map<String, Object> multiInvoice(Map<String, Object> data) {
86+
return post("/receipts/multi-invoice", data, null, new TypeReference<Map<String, Object>>() {});
87+
}
88+
89+
/**
90+
* Generates a PDF preview for a multi-invoice payload.
91+
*
92+
* @param data Multi-invoice preview payload.
93+
* @return PDF bytes.
94+
*/
95+
public byte[] previewMultiInvoicePdf(Map<String, Object> data) {
96+
return client.postBytes("/receipts/multi-invoice/preview/pdf", data);
97+
}
98+
7899
/**
79100
* Cancels a receipt.
80101
*

src/test/java/io/facturapi/FacturapiResourcesTest.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,55 @@ void invoiceCreateUsesExpectedPath() {
4444
assertEquals("/v2/invoices?test=true", request.uri().getPath() + "?" + request.uri().getQuery());
4545
}
4646

47+
@Test
48+
void receiptsMultiInvoiceUsesExpectedPath() {
49+
StubHttpClient httpClient = new StubHttpClient();
50+
httpClient.enqueueJson(200, "{\"id\":\"inv_multi_1\"}");
51+
52+
Facturapi sdk = new Facturapi(
53+
FacturapiConfig.builder("sk_test")
54+
.httpClient(httpClient.client())
55+
.build()
56+
);
57+
58+
var response = sdk.receipts().multiInvoice(
59+
Map.of(
60+
"keys", java.util.List.of("rec_1", "rec_2"),
61+
"use", "G03"
62+
)
63+
);
64+
65+
assertEquals("inv_multi_1", response.get("id"));
66+
var request = httpClient.requests().get(0);
67+
assertEquals("POST", request.method());
68+
assertEquals("/v2/receipts/multi-invoice", request.uri().getPath());
69+
assertTrue(request.bodyUtf8().contains("\"keys\":[\"rec_1\",\"rec_2\"]"));
70+
}
71+
72+
@Test
73+
void receiptsPreviewMultiInvoicePdfReturnsBytes() {
74+
StubHttpClient httpClient = new StubHttpClient();
75+
httpClient.enqueueBinary(200, "PDF-MULTI".getBytes(StandardCharsets.UTF_8), "application/pdf");
76+
77+
Facturapi sdk = new Facturapi(
78+
FacturapiConfig.builder("sk_test")
79+
.httpClient(httpClient.client())
80+
.build()
81+
);
82+
83+
var pdfBytes = sdk.receipts().previewMultiInvoicePdf(
84+
Map.of(
85+
"keys", java.util.List.of("rec_1"),
86+
"use", "G03"
87+
)
88+
);
89+
90+
assertEquals("PDF-MULTI", new String(pdfBytes, StandardCharsets.UTF_8));
91+
var request = httpClient.requests().get(0);
92+
assertEquals("POST", request.method());
93+
assertEquals("/v2/receipts/multi-invoice/preview/pdf", request.uri().getPath());
94+
}
95+
4796
@Test
4897
void invoicePdfCanBeStreamed() throws Exception {
4998
StubHttpClient httpClient = new StubHttpClient();

0 commit comments

Comments
 (0)