summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorØyvind Grønnesby <oyving@yahooinc.com>2023-03-03 13:46:39 +0100
committerGitHub <noreply@github.com>2023-03-03 13:46:39 +0100
commitc727f65d4f693de786b6b546eb58335b891f18bb (patch)
tree384fc590c5b1df28b3d42ee3df404c173400d30c
parentc2c07b3902ea6d894c6072d53c767028651c6cca (diff)
parent3609ab0c0574a8c6d05bef156e6ee28e92e826a9 (diff)
Merge pull request #26289 from vespa-engine/ogronnesby/add-line-item
Make it possible to specify billId when adding line item
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java2
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java24
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java5
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java3
4 files changed, 21 insertions, 13 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java
index 8b0f58c79d2..8b2f4187f65 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java
@@ -92,7 +92,7 @@ public interface BillingController {
void updateBillStatus(Bill.Id billId, String agent, String status);
/** Add a line item to the given bill */
- void addLineItem(TenantName tenant, String description, BigDecimal amount, String agent);
+ void addLineItem(TenantName tenant, String description, BigDecimal amount, Optional<Bill.Id> billId, String agent);
/** Delete a line item - only available for unused line items */
void deleteLineItem(String lineItemId);
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java
index 6ea4c7442d8..aa06e282e1c 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java
@@ -14,7 +14,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import java.util.stream.Collectors;
/**
* @author olaa
@@ -122,16 +121,19 @@ public class MockBillingController implements BillingController {
}
@Override
- public void addLineItem(TenantName tenant, String description, BigDecimal amount, String agent) {
- unusedLineItems.computeIfAbsent(tenant, l -> new ArrayList<>())
- .add(new Bill.LineItem(
- "line-item-id",
- description,
- amount,
- "some-plan",
- agent,
- ZonedDateTime.now()
- ));
+ public void addLineItem(TenantName tenant, String description, BigDecimal amount, Optional<Bill.Id> billId, String agent) {
+ if (billId.isPresent()) {
+ throw new UnsupportedOperationException();
+ } else {
+ unusedLineItems.computeIfAbsent(tenant, l -> new ArrayList<>())
+ .add(new Bill.LineItem(
+ "line-item-id",
+ description,
+ amount,
+ "some-plan",
+ agent,
+ ZonedDateTime.now()));
+ }
}
@Override
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java
index 307880682d9..6e012ba619d 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java
@@ -225,11 +225,16 @@ public class BillingApiHandler extends ThreadedHttpRequestHandler {
private HttpResponse addLineItem(HttpRequest request, String tenant, String userId) {
Inspector inspector = inspectorOrThrow(request);
+
+ Optional<Bill.Id> billId = SlimeUtils.optionalString(inspector.field("billId")).map(Bill.Id::of);
+
billingController.addLineItem(
TenantName.from(tenant),
getInspectorFieldOrThrow(inspector, "description"),
new BigDecimal(getInspectorFieldOrThrow(inspector, "amount")),
+ billId,
userId);
+
return new MessageResponse("Added line item for tenant " + tenant);
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java
index 79007a4439a..f247b0ed3b6 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java
@@ -22,6 +22,7 @@ import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import java.util.TreeMap;
@@ -170,7 +171,7 @@ public class BillingApiHandlerTest extends ControllerContainerCloudTest {
billingController.setPlan(tenant, PlanId.from("some-plan"), true, false);
billingController.setPlan(tenant2, PlanId.from("some-plan"), true, false);
billingController.addBill(tenant, bill, false);
- billingController.addLineItem(tenant, "support", new BigDecimal("42"), "Smith");
+ billingController.addLineItem(tenant, "support", new BigDecimal("42"), Optional.empty(), "Smith");
billingController.addBill(tenant2, bill, false);
var request = request("/billing/v1/billing?until=2020-05-28").roles(financeAdmin);