diff --git a/src/main/java/seatsio/events/Channel.java b/src/main/java/seatsio/events/Channel.java index 9e6d0c7..a088ba2 100644 --- a/src/main/java/seatsio/events/Channel.java +++ b/src/main/java/seatsio/events/Channel.java @@ -2,11 +2,16 @@ import com.google.gson.JsonObject; +import java.util.Map; import java.util.Set; import static seatsio.json.JsonObjectBuilder.aJsonObject; -public record Channel(String key, String name, String color, Integer index, Set objects) { +public record Channel(String key, String name, String color, Integer index, Set objects, Map areaPlaces) { + + public Channel(String key, String name, String color, Integer index, Set objects) { + this(key, name, color, index, objects, Map.of()); + } public JsonObject toJson() { return aJsonObject() @@ -15,6 +20,7 @@ public JsonObject toJson() { .withProperty("color", color) .withPropertyIfNotNull("index", index) .withPropertyIfNotNull("objects", objects) + .withPropertyIfNotNull("areaPlaces", areaPlaces) .build(); } } diff --git a/src/main/java/seatsio/events/ChannelCreationParams.java b/src/main/java/seatsio/events/ChannelCreationParams.java index b5e2baa..795f710 100644 --- a/src/main/java/seatsio/events/ChannelCreationParams.java +++ b/src/main/java/seatsio/events/ChannelCreationParams.java @@ -2,11 +2,16 @@ import com.google.gson.JsonObject; +import java.util.Map; import java.util.Set; import static seatsio.json.JsonObjectBuilder.aJsonObject; -public record ChannelCreationParams(String key, String name, String color, Integer index, Set objects) { +public record ChannelCreationParams(String key, String name, String color, Integer index, Set objects, Map areaPlaces) { + + public ChannelCreationParams(String key, String name, String color, Integer index, Set objects) { + this(key, name, color, index, objects, null); + } public JsonObject toJson() { return aJsonObject() @@ -15,6 +20,7 @@ public JsonObject toJson() { .withProperty("color", color) .withPropertyIfNotNull("index", index) .withPropertyIfNotNull("objects", objects) + .withPropertyIfNotNull("areaPlaces", areaPlaces) .build(); } @@ -25,6 +31,7 @@ public static class Builder { private String color; private Integer index; private Set objects; + private Map areaPlaces; public Builder withKey(String channelKey) { this.key = channelKey; @@ -51,13 +58,19 @@ public Builder withObjects(Set objectLabels) { return this; } + public Builder withAreaPlaces(Map areaPlaces) { + this.areaPlaces = areaPlaces; + return this; + } + public ChannelCreationParams build() { return new ChannelCreationParams( this.key, this.name, this.color, this.index, - this.objects + this.objects, + this.areaPlaces ); } } diff --git a/src/main/java/seatsio/events/Channels.java b/src/main/java/seatsio/events/Channels.java index b501776..470dc3c 100644 --- a/src/main/java/seatsio/events/Channels.java +++ b/src/main/java/seatsio/events/Channels.java @@ -5,6 +5,7 @@ import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.Set; import static java.util.stream.Collectors.toList; @@ -22,7 +23,11 @@ public Channels(String baseUrl, UnirestWrapper unirest) { } public void add(String eventKey, String channelKey, String name, String color, Integer index, Set objects) { - this.add(eventKey, List.of(new ChannelCreationParams(channelKey, name, color, index, objects))); + add(eventKey, channelKey, name, color, index, objects, null); + } + + public void add(String eventKey, String channelKey, String name, String color, Integer index, Set objects, Map areaPlaces) { + this.add(eventKey, List.of(new ChannelCreationParams(channelKey, name, color, index, objects, areaPlaces))); } public void add(String eventKey, Collection paramsList) { @@ -40,6 +45,10 @@ public void remove(String eventKey, String channelKey) { } public void update(String eventKey, String channelKey, String name, String color, Set objects) { + update(eventKey, channelKey, name, color, objects, null); + } + + public void update(String eventKey, String channelKey, String name, String color, Set objects, Map areaPlaces) { unirest.stringResponse(UnirestWrapper.post(baseUrl + "/events/{eventKey}/channels/{channelKey}") .routeParam("eventKey", eventKey) .routeParam("channelKey", channelKey) @@ -47,26 +56,37 @@ public void update(String eventKey, String channelKey, String name, String color .withPropertyIfNotNull("name", name) .withPropertyIfNotNull("color", color) .withPropertyIfNotNull("objects", objects) + .withPropertyIfNotNull("areaPlaces", areaPlaces) .buildAsString()) ); } public void addObjects(String eventKey, String channelKey, Set objects) { + addObjects(eventKey, channelKey, objects, null); + } + + public void addObjects(String eventKey, String channelKey, Set objects, Map areaPlaces) { unirest.stringResponse(UnirestWrapper.post(baseUrl + "/events/{eventKey}/channels/{channelKey}/objects") .routeParam("eventKey", eventKey) .routeParam("channelKey", channelKey) .body(aJsonObject() - .withProperty("objects", objects) + .withPropertyIfNotNull("objects", objects) + .withPropertyIfNotNull("areaPlaces", areaPlaces) .buildAsString()) ); } public void removeObjects(String eventKey, String channelKey, Set objects) { + removeObjects(eventKey, channelKey, objects, null); + } + + public void removeObjects(String eventKey, String channelKey, Set objects, Map areaPlaces) { unirest.stringResponse(UnirestWrapper.delete(baseUrl + "/events/{eventKey}/channels/{channelKey}/objects") .routeParam("eventKey", eventKey) .routeParam("channelKey", channelKey) .body(aJsonObject() - .withProperty("objects", objects) + .withPropertyIfNotNull("objects", objects) + .withPropertyIfNotNull("areaPlaces", areaPlaces) .buildAsString()) ); } diff --git a/src/test/java/seatsio/events/CreateEventTest.java b/src/test/java/seatsio/events/CreateEventTest.java index 1f402b3..3598ce5 100644 --- a/src/test/java/seatsio/events/CreateEventTest.java +++ b/src/test/java/seatsio/events/CreateEventTest.java @@ -102,14 +102,14 @@ public void categoriesCanBePassedIn() { public void channelsCanBePassedIn() { String chartKey = createTestChart(); List channels = List.of( - new Channel("channelKey1", "channel 1", "#FFFF99", 1, Set.of("A-1")), + new Channel("channelKey1", "channel 1", "#FFFF99", 1, Set.of("A-1"), Map.of("GA1", 3)), new Channel("channelKey2", "channel 2", "#FFFF99", 2, Set.of("A-2")) ); Event event = client.events.create(chartKey, new CreateEventParams().withChannels(channels)); assertThat(event.channels()).containsExactly( - new Channel("channelKey1", "channel 1", "#FFFF99", 1, Set.of("A-1")), + new Channel("channelKey1", "channel 1", "#FFFF99", 1, Set.of("A-1"), Map.of("GA1", 3)), new Channel("channelKey2", "channel 2", "#FFFF99", 2, Set.of("A-2")) ); } diff --git a/src/test/java/seatsio/events/CreateEventsTest.java b/src/test/java/seatsio/events/CreateEventsTest.java index 726cf9e..f0d70cb 100644 --- a/src/test/java/seatsio/events/CreateEventsTest.java +++ b/src/test/java/seatsio/events/CreateEventsTest.java @@ -118,7 +118,7 @@ public void dateCanBePassedIn() { public void channelsCanBePassedIn() { String chartKey = createTestChart(); List channels = List.of( - new Channel("channelKey1", "channel 1", "#FFFF99", 1, Set.of("A-1")), + new Channel("channelKey1", "channel 1", "#FFFF99", 1, Set.of("A-1"), Map.of("GA1", 3)), new Channel("channelKey2", "channel 2", "#FFFF99", 2, Set.of("A-2")) ); @@ -129,7 +129,7 @@ public void channelsCanBePassedIn() { assertThat(events) .extracting("channels") .containsExactly(List.of( - new Channel("channelKey1", "channel 1", "#FFFF99", 1, Set.of("A-1")), + new Channel("channelKey1", "channel 1", "#FFFF99", 1, Set.of("A-1"), Map.of("GA1", 3)), new Channel("channelKey2", "channel 2", "#FFFF99", 2, Set.of("A-2")) )); } diff --git a/src/test/java/seatsio/events/channels/AddChannelTest.java b/src/test/java/seatsio/events/channels/AddChannelTest.java index a52ff6f..8502234 100644 --- a/src/test/java/seatsio/events/channels/AddChannelTest.java +++ b/src/test/java/seatsio/events/channels/AddChannelTest.java @@ -7,6 +7,7 @@ import seatsio.events.Event; import java.util.List; +import java.util.Map; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; @@ -48,6 +49,24 @@ public void addChannels() { ); } + @Test + public void addChannelsWithAreaPlaces() { + String chartKey = createTestChart(); + Event event = client.events.create(chartKey); + + client.events.channels.add( + event.key(), + List.of( + new ChannelCreationParams.Builder().withKey("channelKey1").withName("channel 1").withColor("#FFFF98").withIndex(1).withAreaPlaces(Map.of("GA1", 3)).build() + ) + ); + + Event retrievedEvent = client.events.retrieve(event.key()); + assertThat(retrievedEvent.channels()).containsExactly( + new Channel("channelKey1", "channel 1", "#FFFF98", 1, Set.of(), Map.of("GA1", 3)) + ); + } + @Test public void indexIsOptional() { String chartKey = createTestChart(); @@ -62,7 +81,7 @@ public void indexIsOptional() { } @Test - public void objectsAreOptional() { + public void objectsAndAreaPlacesAreOptional() { String chartKey = createTestChart(); Event event = client.events.create(chartKey); @@ -74,4 +93,30 @@ public void objectsAreOptional() { ); } + @Test + public void areaPlaces() { + String chartKey = createTestChart(); + Event event = client.events.create(chartKey); + + client.events.channels.add(event.key(), "channelKey1", "channel 1", "#FFFF98", 1, null, Map.of("GA1", 3)); + + Event retrievedEvent = client.events.retrieve(event.key()); + assertThat(retrievedEvent.channels()).containsExactly( + new Channel("channelKey1", "channel 1", "#FFFF98", 1, Set.of(), Map.of("GA1", 3)) + ); + } + + @Test + public void objectsAndAreaPlaces() { + String chartKey = createTestChart(); + Event event = client.events.create(chartKey); + + client.events.channels.add(event.key(), "channelKey1", "channel 1", "#FFFF98", 1, Set.of("A-1", "A-2"), Map.of("GA1", 3)); + + Event retrievedEvent = client.events.retrieve(event.key()); + assertThat(retrievedEvent.channels()).containsExactly( + new Channel("channelKey1", "channel 1", "#FFFF98", 1, Set.of("A-1", "A-2"), Map.of("GA1", 3)) + ); + } + } diff --git a/src/test/java/seatsio/events/channels/AddObjectsToChannelTest.java b/src/test/java/seatsio/events/channels/AddObjectsToChannelTest.java index a550b30..7870ed4 100644 --- a/src/test/java/seatsio/events/channels/AddObjectsToChannelTest.java +++ b/src/test/java/seatsio/events/channels/AddObjectsToChannelTest.java @@ -5,6 +5,7 @@ import seatsio.events.Channel; import seatsio.events.Event; +import java.util.Map; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; @@ -12,7 +13,7 @@ public class AddObjectsToChannelTest extends SeatsioClientTest { @Test - public void test() { + public void addObjects() { String chartKey = createTestChart(); Event event = client.events.create(chartKey); client.events.channels.add(event.key(), "channelKey1", "channel 1", "#FFFF98", 1, Set.of("A-1", "A-2")); @@ -26,4 +27,34 @@ public void test() { new Channel("channelKey2", "channel 2", "#FFFF99", 2, Set.of()) ); } + + @Test + public void addAreaPlaces() { + String chartKey = createTestChart(); + Event event = client.events.create(chartKey); + client.events.channels.add(event.key(), "channelKey1", "channel 1", "#FFFF98", 1, Set.of(), Map.of("GA1", 10)); + client.events.channels.add(event.key(), "channelKey2", "channel 2", "#FFFF99", 2, Set.of(), Map.of("GA1", 5)); + + client.events.channels.addObjects(event.key(), "channelKey1", null, Map.of("GA1", 20)); + + Event retrievedEvent = client.events.retrieve(event.key()); + assertThat(retrievedEvent.channels()).containsExactly( + new Channel("channelKey1", "channel 1", "#FFFF98", 1, Set.of(), Map.of("GA1", 30)), + new Channel("channelKey2", "channel 2", "#FFFF99", 2, Set.of(), Map.of("GA1", 5)) + ); + } + + @Test + public void addBothObjectsAndAreaPlaces() { + String chartKey = createTestChart(); + Event event = client.events.create(chartKey); + client.events.channels.add(event.key(), "channelKey1", "channel 1", "#FFFF98", 1, Set.of("A-1"), Map.of("GA1", 10)); + + client.events.channels.addObjects(event.key(), "channelKey1", Set.of("A-2", "A-3"), Map.of("GA1", 5)); + + Event retrievedEvent = client.events.retrieve(event.key()); + assertThat(retrievedEvent.channels()).containsExactly( + new Channel("channelKey1", "channel 1", "#FFFF98", 1, Set.of("A-1", "A-2", "A-3"), Map.of("GA1", 15)) + ); + } } diff --git a/src/test/java/seatsio/events/channels/RemoveObjectsFromChannelTest.java b/src/test/java/seatsio/events/channels/RemoveObjectsFromChannelTest.java index db94ddb..8356577 100644 --- a/src/test/java/seatsio/events/channels/RemoveObjectsFromChannelTest.java +++ b/src/test/java/seatsio/events/channels/RemoveObjectsFromChannelTest.java @@ -5,6 +5,7 @@ import seatsio.events.Channel; import seatsio.events.Event; +import java.util.Map; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; @@ -12,7 +13,7 @@ public class RemoveObjectsFromChannelTest extends SeatsioClientTest { @Test - public void test() { + public void removeObjects() { String chartKey = createTestChart(); Event event = client.events.create(chartKey); client.events.channels.add(event.key(), "channelKey1", "channel 1", "#FFFF98", 1, Set.of("A-1", "A-2", "A-3", "A-4")); @@ -24,4 +25,32 @@ public void test() { new Channel("channelKey1", "channel 1", "#FFFF98", 1, Set.of("A-1", "A-2")) ); } + + @Test + public void removeAreaPlaces() { + String chartKey = createTestChart(); + Event event = client.events.create(chartKey); + client.events.channels.add(event.key(), "channelKey1", "channel 1", "#FFFF98", 1, Set.of(), Map.of("GA1", 30)); + + client.events.channels.removeObjects(event.key(), "channelKey1", null, Map.of("GA1", 10)); + + Event retrievedEvent = client.events.retrieve(event.key()); + assertThat(retrievedEvent.channels()).containsExactly( + new Channel("channelKey1", "channel 1", "#FFFF98", 1, Set.of(), Map.of("GA1", 20)) + ); + } + + @Test + public void removeBothObjectsAndAreaPlaces() { + String chartKey = createTestChart(); + Event event = client.events.create(chartKey); + client.events.channels.add(event.key(), "channelKey1", "channel 1", "#FFFF98", 1, Set.of("A-1", "A-2", "A-3"), Map.of("GA1", 30)); + + client.events.channels.removeObjects(event.key(), "channelKey1", Set.of("A-2", "A-3"), Map.of("GA1", 10)); + + Event retrievedEvent = client.events.retrieve(event.key()); + assertThat(retrievedEvent.channels()).containsExactly( + new Channel("channelKey1", "channel 1", "#FFFF98", 1, Set.of("A-1"), Map.of("GA1", 20)) + ); + } } diff --git a/src/test/java/seatsio/events/channels/ReplaceChannelsTest.java b/src/test/java/seatsio/events/channels/ReplaceChannelsTest.java index 73c6e8b..13cb8c6 100644 --- a/src/test/java/seatsio/events/channels/ReplaceChannelsTest.java +++ b/src/test/java/seatsio/events/channels/ReplaceChannelsTest.java @@ -8,6 +8,7 @@ import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; @@ -31,6 +32,21 @@ public void replaceChannels() { ); } + @Test + public void replaceChannelsWithAreaPlaces() { + String chartKey = createTestChart(); + Event event = client.events.create(chartKey); + + client.events.channels.replace(event.key(), List.of( + new Channel("channelKey1", "channel 1", "#FFFF99", 1, null, Map.of("GA1", 3)) + )); + + Event retrievedEvent = client.events.retrieve(event.key()); + assertThat(retrievedEvent.channels()).containsExactly( + new Channel("channelKey1", "channel 1", "#FFFF99", 1, Set.of(), Map.of("GA1", 3)) + ); + } + @Test public void replaceChannelsWithOnlyRequiredFields() { Chart chart = client.charts.create(); diff --git a/src/test/java/seatsio/events/channels/UpdateChannelTest.java b/src/test/java/seatsio/events/channels/UpdateChannelTest.java index 1074d07..ee8aa6a 100644 --- a/src/test/java/seatsio/events/channels/UpdateChannelTest.java +++ b/src/test/java/seatsio/events/channels/UpdateChannelTest.java @@ -5,6 +5,7 @@ import seatsio.events.Channel; import seatsio.events.Event; +import java.util.Map; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; @@ -52,4 +53,18 @@ public void updateObjects() { new Channel("channelKey1", "channel 1", "#FFFF98", 1, Set.of("A-3")) ); } + + @Test + public void updateAreaPlaces() { + String chartKey = createTestChart(); + Event event = client.events.create(chartKey); + client.events.channels.add(event.key(), "channelKey1", "channel 1", "#FFFF98", 1, null); + + client.events.channels.update(event.key(), "channelKey1", null, null, null, Map.of("GA1", 3)); + + Event retrievedEvent = client.events.retrieve(event.key()); + assertThat(retrievedEvent.channels()).containsExactly( + new Channel("channelKey1", "channel 1", "#FFFF98", 1, Set.of(), Map.of("GA1", 3)) + ); + } }