bug5353: event base URL with trailing slash no longer leads to incorrect race viewer URLs;

also, race name and regatta name are now properly URL encoded for link
construction
This commit is contained in:
Axel Uhl
2024-01-26 11:32:06 +01:00
parent 9e5f0e3a0d
commit 5b224dd7af
3 changed files with 53 additions and 17 deletions
@@ -1,6 +1,7 @@
package com.sap.sailing.server.test;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -9,6 +10,7 @@ import java.net.URL;
import java.util.Locale;
import java.util.UUID;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.domain.base.Event;
@@ -19,19 +21,40 @@ import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.server.util.RaceBoardLinkFactory;
public class TrailingSlashInEventBaseNameTest {
private TrackedRace trackedRace;
private Leaderboard leaderboard;
private Event event;
private LeaderboardGroup leaderboardGroup;
private static final String raceboardMode = "PLAYER";
private static final String eventBaseUrlWithoutTrailingSlash = "https://myevent.example.com";
@Before
public void setUp() throws MalformedURLException {
trackedRace = mock(TrackedRace.class);
when(trackedRace.getRaceIdentifier()).thenReturn(new RegattaNameAndRaceName("Regatta with spaces", "Race with spaces"));
leaderboard = mock(Leaderboard.class);
when(leaderboard.getName()).thenReturn("Leaderboard");
event = mock(Event.class);
when(event.getId()).thenReturn(UUID.randomUUID());
leaderboardGroup = mock(LeaderboardGroup.class);
when(leaderboardGroup.getId()).thenReturn(UUID.randomUUID());
}
@Test
public void testTrailingSlashInEventBaseNameCausesNoHarmInRaceBoardLinks() throws MalformedURLException {
final TrackedRace trackedRace = mock(TrackedRace.class);
when(trackedRace.getRaceIdentifier()).thenReturn(new RegattaNameAndRaceName("Regatta", "Race"));
final Leaderboard leaderboard = mock(Leaderboard.class);
when(leaderboard.getName()).thenReturn("Leaderboard");
final Event event = mock(Event.class);
when(event.getId()).thenReturn(UUID.randomUUID());
when(event.getBaseURL()).thenReturn(new URL("https://myevent.example.com/"));
final LeaderboardGroup leaderboardGroup = mock(LeaderboardGroup.class);
when(leaderboardGroup.getId()).thenReturn(UUID.randomUUID());
final String raceboardMode = "PLAYER";
when(event.getBaseURL()).thenReturn(new URL(eventBaseUrlWithoutTrailingSlash+"/"));
final String link = RaceBoardLinkFactory.createRaceBoardLink(trackedRace, leaderboard, event, leaderboardGroup, raceboardMode, Locale.US);
assertFalse(link.contains("//"));
assertTrue(link.contains(eventBaseUrlWithoutTrailingSlash+"/"));
assertFalse(link.contains(eventBaseUrlWithoutTrailingSlash+"//"));
assertFalse(link.contains(" "));
}
@Test
public void testNoTrailingSlashInEventBaseNameCausesNoHarmInRaceBoardLinks() throws MalformedURLException {
when(event.getBaseURL()).thenReturn(new URL(eventBaseUrlWithoutTrailingSlash));
final String link = RaceBoardLinkFactory.createRaceBoardLink(trackedRace, leaderboard, event, leaderboardGroup, raceboardMode, Locale.US);
assertTrue(link.contains(eventBaseUrlWithoutTrailingSlash+"/"));
assertFalse(link.contains(eventBaseUrlWithoutTrailingSlash+"//"));
assertFalse(link.contains(" "));
}
}