diff --git a/src/main/java/seatsio/seasons/SeasonParams.java b/src/main/java/seatsio/seasons/SeasonParams.java index 830323a..6297630 100644 --- a/src/main/java/seatsio/seasons/SeasonParams.java +++ b/src/main/java/seatsio/seasons/SeasonParams.java @@ -1,11 +1,14 @@ package seatsio.seasons; import com.google.gson.JsonObject; +import seatsio.charts.Category; +import seatsio.charts.CategoryKey; import seatsio.events.Channel; import seatsio.events.ForSaleConfigParams; import seatsio.events.TableBookingConfig; import java.util.List; +import java.util.Map; import static java.util.stream.Collectors.toList; @@ -18,6 +21,8 @@ public abstract class SeasonParams> { private Integer numberOfEvents; private TableBookingConfig tableBookingConfig; private List channels; + private Map objectCategories; + private List categories; private ForSaleConfigParams forSaleConfigParams; private Boolean forSalePropagated; @@ -71,6 +76,31 @@ public T channels(List channels) { return (T) this; } + public Map objectCategories() { + return objectCategories; + } + + public T withObjectCategories(Map objectCategories) { + this.objectCategories = objectCategories; + return (T) this; + } + + public List categoriesAsJson() { + if (categories == null) { + return null; + } + return categories.stream().map(Category::toJson).collect(toList()); + } + + public List categories() { + return categories; + } + + public T withCategories(List categories) { + this.categories = categories; + return (T) this; + } + public T forSaleConfigParams(ForSaleConfigParams forSaleConfigParams) { this.forSaleConfigParams = forSaleConfigParams; return (T) this; diff --git a/src/main/java/seatsio/seasons/Seasons.java b/src/main/java/seatsio/seasons/Seasons.java index d3823cc..1767822 100644 --- a/src/main/java/seatsio/seasons/Seasons.java +++ b/src/main/java/seatsio/seasons/Seasons.java @@ -1,6 +1,7 @@ package seatsio.seasons; import seatsio.SeatsioClient; +import seatsio.charts.CategoryKey; import seatsio.events.Event; import seatsio.events.EventCreationResult; import seatsio.json.JsonObjectBuilder; @@ -37,6 +38,8 @@ public Season create(String chartKey, CreateSeasonParams seasonParams) { .withPropertyIfNotNull("numberOfEvents", seasonParams.numberOfEvents()) .withPropertyIfNotNull("tableBookingConfig", seasonParams.tableBookingConfig()) .withPropertyIfNotNull("channels", seasonParams.getChannelsAsJson()) + .withPropertyIfNotNull("objectCategories", seasonParams.objectCategories(), CategoryKey::toJson) + .withPropertyIfNotNull("categories", seasonParams.categoriesAsJson()) .withPropertyIfNotNull("forSaleConfig", seasonParams.getForSaleConfigAsJson()) .withPropertyIfNotNull("forSalePropagated", seasonParams.forSalePropagated()); String response = unirest.stringResponse(UnirestWrapper.post(baseUrl + "/seasons") @@ -99,7 +102,9 @@ public void update(String eventKey, UpdateSeasonParams params) { .withPropertyIfNotNull("eventKey", params.key()) .withPropertyIfNotNull("tableBookingConfig", params.tableBookingConfig()) .withPropertyIfNotNull("name", params.name()) - .withPropertyIfNotNull("forSalePropagated", params.forSalePropagated()); + .withPropertyIfNotNull("forSalePropagated", params.forSalePropagated()) + .withPropertyIfNotNull("objectCategories", params.objectCategories(), CategoryKey::toJson) + .withPropertyIfNotNull("categories", params.categoriesAsJson()); unirest.stringResponse(post(baseUrl + "/events/{key}") .routeParam("key", eventKey) .body(request.build().toString())); diff --git a/src/test/java/seatsio/seasons/UpdateSeasonTest.java b/src/test/java/seatsio/seasons/UpdateSeasonTest.java index 130eedf..a40e216 100644 --- a/src/test/java/seatsio/seasons/UpdateSeasonTest.java +++ b/src/test/java/seatsio/seasons/UpdateSeasonTest.java @@ -1,10 +1,14 @@ package seatsio.seasons; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import seatsio.SeatsioClientTest; +import seatsio.charts.Category; +import seatsio.charts.CategoryKey; import seatsio.charts.Chart; import seatsio.events.TableBookingConfig; +import java.util.List; import java.util.Map; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; @@ -48,6 +52,42 @@ public void updateTableBookingConfig() { assertThat(retrievedSeason.tableBookingConfig()).isEqualTo(newTableBookingConfig); } + @Test + public void updateObjectCategories() { + String chartKey = createTestChart(); + Map objectCategories = Map.of( + "A-1", CategoryKey.of(9L) + ); + Season season = client.seasons.create(chartKey, new CreateSeasonParams().withObjectCategories(objectCategories)); + + Map newObjectCategories = Map.of( + "A-2", CategoryKey.of(10L) + ); + client.seasons.update(season.key(), new UpdateSeasonParams().withObjectCategories(newObjectCategories)); + + Season retrievedSeason = client.seasons.retrieve(season.key()); + Assertions.assertThat(retrievedSeason.objectCategories()).isEqualTo(newObjectCategories); + } + + @Test + public void updateCategories() { + String chartKey = createTestChart(); + Season season = client.seasons.create(chartKey); + + Category category = new Category("eventCategory", "event-level category", "#AAABBB"); + List categories = List.of( + category + ); + + client.seasons.update(season.key(), new UpdateSeasonParams().withCategories(categories)); + + Season retrievedSeason = client.seasons.retrieve(season.key()); + int numberOfCategoriesOnChart = 3; // see sampleChart.json + Assertions.assertThat(retrievedSeason.categories()) + .hasSize(numberOfCategoriesOnChart + categories.size()) + .contains(category); + } + @Test public void updateForSalePropagated() { String chartKey = createTestChartWithTables();