Bug5085: add selenium test for leaderboard starttime API

This commit is contained in:
Thomas Wiese committed 2019-11-12 11:50:30 +01:00
1 parent c5b3211fb3
commit 177bd00546
2 files changed
+76

No files matched your search

@@ -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<String, String> 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<String, String> 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<String, String>());
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));
}
}
}
@@ -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);
}
}