From 177bd0054639600e53f87170468f1162ee34fff0 Mon Sep 17 00:00:00 2001 From: Thomas Wiese Date: Tue, 12 Nov 2019 11:50:30 +0100 Subject: [PATCH] Bug5085: add selenium test for leaderboard starttime API --- .../selenium/api/event/LeaderboardApi.java | 58 +++++++++++++++++++ .../selenium/api/test/LeaderboardApiTest.java | 18 ++++++ 2 files changed, 76 insertions(+) diff --git a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/event/LeaderboardApi.java b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/event/LeaderboardApi.java index 01d5e4ae103..04bdddf4f15 100644 --- a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/event/LeaderboardApi.java +++ b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/event/LeaderboardApi.java @@ -1,5 +1,6 @@ package com.sap.sailing.selenium.api.event; +import java.util.HashMap; import java.util.Map; import java.util.TreeMap; import java.util.UUID; @@ -8,6 +9,7 @@ import java.util.logging.Logger; import org.json.simple.JSONArray; import org.json.simple.JSONObject; +import com.sap.sailing.domain.common.racelog.RacingProcedureType; import com.sap.sailing.selenium.api.core.ApiContext; import com.sap.sailing.selenium.api.core.JsonWrapper; @@ -28,6 +30,14 @@ public class LeaderboardApi { private static final String START_TRACKING_URL = LEADERBOARDS_V1_RESOURCE_URL + "/{leaderboardname}/starttracking"; private static final String GET_MARK_URL = LEADERBOARDS_V1_RESOURCE_URL + "/{leaderboardname}/marks/"; + private static final String START_TIME_URL = LEADERBOARDS_V1_RESOURCE_URL + "/{leaderboardname}/starttime"; + private static final String PARAM_RACE_COLUMN_NAME = "race_column"; + private static final String PARAM_RACE_FLEET_NAME = "fleet"; + private static final String PARAM_FIELD_AUTHOR_NAME = "authorName"; + private static final String PARAM_FIELD_AUTHOR_PRIORITY = "authorPriority"; + private static final String PARAM_START_TIME = "startTime"; + private static final String PARAM_START_PROCEDURE_TYPE = "startProcedureType"; + private static final String PARAM_PASS_ID = "passId"; public JSONArray getLeaderboards(ApiContext ctx) { return ctx.get(LEADERBOARDS_LIST_URL); @@ -61,6 +71,30 @@ public class LeaderboardApi { return ctx.post(toUrl(START_TRACKING_URL, leaderboardName), queryParams); } + public StartTime getStartTime(final ApiContext ctx, final String leaderboardName, final String raceColumnName, + final String fleetName) { + final Map queryParams = new TreeMap<>(); + queryParams.put(PARAM_RACE_COLUMN_NAME, raceColumnName); + queryParams.put(PARAM_RACE_FLEET_NAME, fleetName); + return new StartTime(ctx.get(toUrl(START_TIME_URL, leaderboardName), queryParams)); + } + + public Long setStartTime(final ApiContext ctx, final String leaderboardName, final String raceColumnName, + final String fleetName, final Long startTime, final Integer passId, + final RacingProcedureType startProcedureType, final String authorName, final Integer authorPriortity) { + final Map queryParams = new TreeMap<>(); + queryParams.put(PARAM_RACE_COLUMN_NAME, raceColumnName); + queryParams.put(PARAM_RACE_FLEET_NAME, fleetName); + queryParams.put(PARAM_FIELD_AUTHOR_NAME, authorName); + queryParams.put(PARAM_FIELD_AUTHOR_PRIORITY, authorPriortity != null ? authorPriortity.toString() : null); + queryParams.put(PARAM_START_TIME, startTime != null ? startTime.toString() : null); + queryParams.put(PARAM_START_PROCEDURE_TYPE, startProcedureType != null ? startProcedureType.name() : null); + queryParams.put(PARAM_PASS_ID, passId != null ? passId.toString() : null); + final JSONObject result = ctx.put(toUrl(START_TIME_URL, leaderboardName), queryParams, + new HashMap()); + return (Long) result.get("startTimeAsMillis"); + } + private String toUrl(final String urlTemplate, final String leaderboardName) { return urlTemplate.replace("{leaderboardname}", leaderboardName); } @@ -138,4 +172,28 @@ public class LeaderboardApi { } } + public class StartTime extends JsonWrapper { + + private static final String START_TIME_AS_MILLIS = "startTimeAsMillis"; + private static final String PASS_ID = "passId"; + private static final String RACING_PROCEDURE_TYPE = "racingProcedureType"; + + private StartTime(final JSONObject json) { + super(json); + } + + public Long getStartTimeAsMillis() { + return get(START_TIME_AS_MILLIS); + } + + public Integer getPassId() { + Long passID = (Long) get(PASS_ID); + return passID != null ? passID.intValue() : null; + } + + public RacingProcedureType getRacingProcedureType() { + return RacingProcedureType.valueOf(get(RACING_PROCEDURE_TYPE)); + } + } + } diff --git a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/test/LeaderboardApiTest.java b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/test/LeaderboardApiTest.java index 49c998d585e..90f3ea0e8c3 100644 --- a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/test/LeaderboardApiTest.java +++ b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/test/LeaderboardApiTest.java @@ -14,10 +14,12 @@ import org.json.simple.JSONObject; import org.junit.Before; import org.junit.Test; +import com.sap.sailing.domain.common.racelog.RacingProcedureType; import com.sap.sailing.selenium.api.core.ApiContext; import com.sap.sailing.selenium.api.event.EventApi; import com.sap.sailing.selenium.api.event.LeaderboardApi; import com.sap.sailing.selenium.api.event.LeaderboardApi.DeviceMappingRequest; +import com.sap.sailing.selenium.api.event.LeaderboardApi.StartTime; import com.sap.sailing.selenium.api.event.LeaderboardApi.TrackingTimes; import com.sap.sailing.selenium.api.regatta.Competitor; import com.sap.sailing.selenium.api.regatta.RaceColumn; @@ -89,4 +91,20 @@ public class LeaderboardApiTest extends AbstractSeleniumTest { assertEquals("read: startTime is different", startTime, trackingTimes.getStartOfTracking()); assertEquals("read: endTime is different", endTime, trackingTimes.getEndOfTracking()); } + + @Test + public void testRaceStartTime() throws Exception { + final ApiContext ctx = createAdminApiContext(getContextRoot(), SERVER_CONTEXT); + eventApi.createEvent(ctx, LEADERBOARD_NAME, BOATCLASSNAME, CLOSED, "default"); + final Integer passID = 1; + final RaceColumn race = regattaApi.addRaceColumn(ctx, LEADERBOARD_NAME, null, 1)[0]; + final Long startTime = currentTimeMillis(); + Long effectiveStartTime = leaderboardApi.setStartTime(ctx, LEADERBOARD_NAME, race.getRaceName(), "Default", startTime, 1, + RacingProcedureType.BASIC, "Administrator", passID); + assertNotNull(effectiveStartTime); + StartTime reloadedStartTime = leaderboardApi.getStartTime(ctx, LEADERBOARD_NAME, race.getRaceName(), "Default"); + assertEquals(reloadedStartTime.getStartTimeAsMillis(), effectiveStartTime); + assertEquals(reloadedStartTime.getPassId(), passID); + assertEquals(reloadedStartTime.getRacingProcedureType(), RacingProcedureType.BASIC); + } }