Allow invoice to be marked even when new

fixes #2019
This commit is contained in:
Kukks 2021-02-23 13:18:16 +01:00 committed by nicolas.dorier
parent 2fd8c831c0
commit e3e65878aa
No known key found for this signature in database
GPG key ID: 6618763EF09186FE
4 changed files with 17 additions and 13 deletions

View file

@ -968,25 +968,28 @@ namespace BTCPayServer.Tests
//update //update
invoice = await viewOnly.GetInvoice(user.StoreId, newInvoice.Id); newInvoice = await client.CreateInvoice(user.StoreId,
new CreateInvoiceRequest() { Currency = "USD", Amount = 1 });
await AssertValidationError(new[] { nameof(MarkInvoiceStatusRequest.Status) }, async () => await client.MarkInvoiceStatus(user.StoreId, newInvoice.Id, new MarkInvoiceStatusRequest()
{
await client.MarkInvoiceStatus(user.StoreId, invoice.Id, new MarkInvoiceStatusRequest()
{ {
Status = InvoiceStatus.Settled Status = InvoiceStatus.Settled
}); });
newInvoice = await client.CreateInvoice(user.StoreId,
new CreateInvoiceRequest() { Currency = "USD", Amount = 1 });
await client.MarkInvoiceStatus(user.StoreId, newInvoice.Id, new MarkInvoiceStatusRequest()
{
Status = InvoiceStatus.Invalid
}); });
await AssertHttpError(403, async () => await AssertHttpError(403, async () =>
{ {
await viewOnly.UpdateInvoice(user.StoreId, newInvoice.Id, await viewOnly.UpdateInvoice(user.StoreId, invoice.Id,
new UpdateInvoiceRequest() new UpdateInvoiceRequest()
{ {
Metadata = JObject.Parse("{\"itemCode\": \"updated\", newstuff: [1,2,3,4,5]}") Metadata = JObject.Parse("{\"itemCode\": \"updated\", newstuff: [1,2,3,4,5]}")
}); });
}); });
invoice = await client.UpdateInvoice(user.StoreId, newInvoice.Id, invoice = await client.UpdateInvoice(user.StoreId, invoice.Id,
new UpdateInvoiceRequest() new UpdateInvoiceRequest()
{ {
Metadata = JObject.Parse("{\"itemCode\": \"updated\", newstuff: [1,2,3,4,5]}") Metadata = JObject.Parse("{\"itemCode\": \"updated\", newstuff: [1,2,3,4,5]}")
@ -996,7 +999,7 @@ namespace BTCPayServer.Tests
Assert.Equal(15,((JArray) invoice.Metadata["newstuff"]).Values<int>().Sum()); Assert.Equal(15,((JArray) invoice.Metadata["newstuff"]).Values<int>().Sum());
//also test the the metadata actually got saved //also test the the metadata actually got saved
invoice = await client.GetInvoice(user.StoreId, newInvoice.Id); invoice = await client.GetInvoice(user.StoreId, invoice.Id);
Assert.Equal("updated",invoice.Metadata["itemCode"].Value<string>()); Assert.Equal("updated",invoice.Metadata["itemCode"].Value<string>());
Assert.Equal(15,((JArray) invoice.Metadata["newstuff"]).Values<int>().Sum()); Assert.Equal(15,((JArray) invoice.Metadata["newstuff"]).Values<int>().Sum());

View file

@ -212,7 +212,7 @@ namespace BTCPayServer.Controllers.GreenField
if (!await _invoiceRepository.MarkInvoiceStatus(invoice.Id, request.Status)) if (!await _invoiceRepository.MarkInvoiceStatus(invoice.Id, request.Status))
{ {
ModelState.AddModelError(nameof(request.Status), ModelState.AddModelError(nameof(request.Status),
"Status can only be marked to invalid or complete within certain conditions."); "Status can only be marked to invalid or settled within certain conditions.");
} }
if (!ModelState.IsValid) if (!ModelState.IsValid)

View file

@ -665,6 +665,7 @@ namespace BTCPayServer.Services.Invoices
public bool CanMarkComplete() public bool CanMarkComplete()
{ {
return (Status == InvoiceStatusLegacy.Paid) || return (Status == InvoiceStatusLegacy.Paid) ||
(Status == InvoiceStatusLegacy.New) ||
((Status == InvoiceStatusLegacy.New || Status == InvoiceStatusLegacy.Expired) && ExceptionStatus == InvoiceExceptionStatus.PaidPartial) || ((Status == InvoiceStatusLegacy.New || Status == InvoiceStatusLegacy.Expired) && ExceptionStatus == InvoiceExceptionStatus.PaidPartial) ||
((Status == InvoiceStatusLegacy.New || Status == InvoiceStatusLegacy.Expired) && ExceptionStatus == InvoiceExceptionStatus.PaidLate) || ((Status == InvoiceStatusLegacy.New || Status == InvoiceStatusLegacy.Expired) && ExceptionStatus == InvoiceExceptionStatus.PaidLate) ||
(Status != InvoiceStatusLegacy.Complete && ExceptionStatus == InvoiceExceptionStatus.Marked) || (Status != InvoiceStatusLegacy.Complete && ExceptionStatus == InvoiceExceptionStatus.Marked) ||

View file

@ -433,7 +433,7 @@
} }
} }
], ],
"description": "Mark an invoice as invalid or completed.", "description": "Mark an invoice as invalid or settled.",
"operationId": "Invoices_MarkInvoiceStatus", "operationId": "Invoices_MarkInvoiceStatus",
"responses": { "responses": {
"200": { "200": {