diff options
author | gjoranv <gjoranv@gmail.com> | 2023-10-13 15:34:36 +0200 |
---|---|---|
committer | gjoranv <gjoranv@gmail.com> | 2023-10-16 15:26:47 +0200 |
commit | 4c5b9679c983df07bb7d09d031f87e8d747c2d8c (patch) | |
tree | c157a1ea8cb75d6ea185f7adb61b72f1a3f3e1ee /controller-api/src/main/java/com/yahoo | |
parent | 692ce7164de73f2563ec231110041bde644e71ac (diff) |
Add test for invoice maintenance done by BillingReportMaintainer.
- Add a (mock) database client to the mock billing controller.
- Improve InvoiceUpdate class.
Diffstat (limited to 'controller-api/src/main/java/com/yahoo')
4 files changed, 30 insertions, 12 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingDatabaseClientMock.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingDatabaseClientMock.java index 300c1658c29..ee7679f54ca 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingDatabaseClientMock.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingDatabaseClientMock.java @@ -29,6 +29,7 @@ public class BillingDatabaseClientMock implements BillingDatabaseClient { private final Map<Bill.Id, Bill.StatusHistory> statuses = new HashMap<>(); private final Map<Bill.Id, ZonedDateTime> startTimes = new HashMap<>(); private final Map<Bill.Id, ZonedDateTime> endTimes = new HashMap<>(); + private final Map<Bill.Id, String> exportedInvoiceIds = new HashMap<>(); private final ZonedDateTime startTime = LocalDate.of(2020, 4, 1).atStartOfDay(ZoneId.of("UTC")); private final ZonedDateTime endTime = LocalDate.of(2020, 5, 1).atStartOfDay(ZoneId.of("UTC")); @@ -74,7 +75,8 @@ public class BillingDatabaseClientMock implements BillingDatabaseClient { var status = statuses.getOrDefault(billId, Bill.StatusHistory.open(clock)); var start = startTimes.getOrDefault(billId, startTime); var end = endTimes.getOrDefault(billId, endTime); - return invoice.map(tenant -> new Bill(billId, tenant, status, lines, start, end)); + var exportedId = exportedInvoiceId(billId); + return invoice.map(tenant -> new Bill(billId, tenant, status, lines, start, end, exportedId)); } @Override @@ -157,7 +159,7 @@ public class BillingDatabaseClientMock implements BillingDatabaseClient { var status = statuses.get(invoiceId); var start = startTimes.get(invoiceId); var end = endTimes.get(invoiceId); - return new Bill(invoiceId, tenant, status, items, start, end); + return new Bill(invoiceId, tenant, status, items, start, end, exportedInvoiceId(invoiceId)); }) .toList(); } @@ -171,7 +173,7 @@ public class BillingDatabaseClientMock implements BillingDatabaseClient { var status = statuses.get(invoiceId); var start = startTimes.get(invoiceId); var end = endTimes.get(invoiceId); - return new Bill(invoiceId, tenant, status, items, start, end); + return new Bill(invoiceId, tenant, status, items, start, end, exportedInvoiceId(invoiceId)); }) .toList(); } @@ -180,9 +182,14 @@ public class BillingDatabaseClientMock implements BillingDatabaseClient { public void maintain() {} @Override - public void setExportedInvoiceId(Bill.Id billId, String invoiceId) { } + public void setExportedInvoiceId(Bill.Id billId, String invoiceId) { + exportedInvoiceIds.put(billId, invoiceId); + } @Override public void setExportedInvoiceItemId(String lineItemId, String invoiceItemId) { } + private String exportedInvoiceId(Bill.Id billId) { + return exportedInvoiceIds.getOrDefault(billId, null); + } } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporterMock.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporterMock.java index 93bca72f05f..9531745556f 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporterMock.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporterMock.java @@ -21,7 +21,7 @@ public class BillingReporterMock implements BillingReporter { @Override public InvoiceUpdate maintainInvoice(Bill bill) { - return InvoiceUpdate.empty(); + return new InvoiceUpdate(0,0,1); } } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/InvoiceUpdate.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/InvoiceUpdate.java index 20d0dac02b6..6ca3cf6ebb1 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/InvoiceUpdate.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/InvoiceUpdate.java @@ -14,12 +14,6 @@ public record InvoiceUpdate(int itemsAdded, int itemsRemoved, int itemsModified) return new InvoiceUpdate(0, 0, 0); } - public InvoiceUpdate add(InvoiceUpdate other) { - return new InvoiceUpdate(itemsAdded + other.itemsAdded, - itemsRemoved + other.itemsRemoved, - itemsModified + other.itemsModified); - } - public static class Counter { private int itemsAdded = 0; private int itemsRemoved = 0; @@ -37,6 +31,12 @@ public record InvoiceUpdate(int itemsAdded, int itemsRemoved, int itemsModified) itemsModified++; } + public void add(InvoiceUpdate other) { + itemsAdded += other.itemsAdded; + itemsRemoved += other.itemsRemoved; + itemsModified += other.itemsModified; + } + public InvoiceUpdate finish() { return new InvoiceUpdate(itemsAdded, itemsRemoved, itemsModified); } 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 8ef14dd60ba..1b66fbb7bb4 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 @@ -2,6 +2,7 @@ package com.yahoo.vespa.hosted.controller.api.integration.billing; import com.yahoo.config.provision.TenantName; +import com.yahoo.vespa.hosted.controller.tenant.CloudTenant; import java.math.BigDecimal; import java.time.Clock; @@ -22,6 +23,7 @@ import java.util.stream.Stream; public class MockBillingController implements BillingController { private final Clock clock; + private final BillingDatabaseClient dbClient; PlanId defaultPlan = PlanId.from("trial"); List<TenantName> tenants = new ArrayList<>(); @@ -32,8 +34,9 @@ public class MockBillingController implements BillingController { Map<TenantName, List<Bill.LineItem>> unusedLineItems = new HashMap<>(); Map<TenantName, CollectionMethod> collectionMethod = new HashMap<>(); - public MockBillingController(Clock clock) { + public MockBillingController(Clock clock, BillingDatabaseClient dbClient) { this.clock = clock; + this.dbClient = dbClient; } @Override @@ -203,6 +206,14 @@ public class MockBillingController implements BillingController { return count < limit; } + @Override + public String exportBill(Bill bill, String exportMethod, CloudTenant tenant) { + // Replace bill with a copy with exportedId set + var exportedId = "EXT-ID-123"; + dbClient.setExportedInvoiceId(bill.id(), exportedId); + return exportedId; + } + public void setTenants(List<TenantName> tenants) { this.tenants = tenants; } |