Skip to content

Commit

Permalink
junit
Browse files Browse the repository at this point in the history
  • Loading branch information
codingPF committed Feb 25, 2024
1 parent 2e58fbf commit bd3fd54
Show file tree
Hide file tree
Showing 13 changed files with 9,206 additions and 18,568 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,9 @@ private Optional<Set<URL>> buildOrResolveSubs(JsonElement jsonElement) {
JsonElement newRequestForSubs = null;
try {
newRequestForSubs = crawler.getConnection().requestBodyAsJsonElement(subtitleSource.get().toString(), myMap);
setOfSubs = parseSubtitleUrls(newRequestForSubs);
if (newRequestForSubs != null) {
setOfSubs = parseSubtitleUrls(newRequestForSubs);
}
} catch (IOException e) {
LOG.error("Failed to resolve subtitle from {} error {}", subtitleSource, e);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package de.mediathekview.mserver.crawler.orfon;

import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertIterableEquals;

import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.ConcurrentLinkedQueue;

import org.junit.Test;

import de.mediathekview.mserver.crawler.orfon.task.OrfOnAZTask;
import de.mediathekview.mserver.testhelper.WireMockTestBase;

import static java.util.Arrays.asList;


public class OrfOnAZTaskTest extends WireMockTestBase {

@Test
public void test() {
setupSuccessfulJsonResponse("/azTask", "/orfOn/letter_1.json");
Set<OrfOnBreadCrumsUrlDTO> result = executeTask("/azTask");
List<OrfOnBreadCrumsUrlDTO> expectedResult = generateExpectedResult();
assertTrue(result.size() == 9);
assertIterableEquals(result, expectedResult);
}

private Set<OrfOnBreadCrumsUrlDTO> executeTask(String... requestUrl) {
final Queue<OrfOnBreadCrumsUrlDTO> input = new ConcurrentLinkedQueue<>();
for (String url : requestUrl) {
input.add(new OrfOnBreadCrumsUrlDTO("",getWireMockBaseUrlSafe() + url));
}
return new OrfOnAZTask(OrfOnEpisodeTaskTest.createCrawler(), input).invoke();
}

private List<OrfOnBreadCrumsUrlDTO> generateExpectedResult() {
ArrayList<OrfOnBreadCrumsUrlDTO> expectedResult = new ArrayList<>(asList(
new OrfOnBreadCrumsUrlDTO("", "https://api-tvthek.orf.at/api/v4.3/profile/13892414/episodes?limit=200"),
new OrfOnBreadCrumsUrlDTO("", "https://api-tvthek.orf.at/api/v4.3/profile/8850620/episodes?limit=200"),
new OrfOnBreadCrumsUrlDTO("", "https://api-tvthek.orf.at/api/v4.3/profile/13895942/episodes?limit=200"),
new OrfOnBreadCrumsUrlDTO("", "https://api-tvthek.orf.at/api/v4.3/profile/8850612/episodes?limit=200"),
new OrfOnBreadCrumsUrlDTO("", "https://api-tvthek.orf.at/api/v4.3/profile/13890803/episodes?limit=200"),
new OrfOnBreadCrumsUrlDTO("", "https://api-tvthek.orf.at/api/v4.3/profile/13894465/episodes?limit=200"),
new OrfOnBreadCrumsUrlDTO("", "https://api-tvthek.orf.at/api/v4.3/profile/13732047/episodes?limit=200"),
new OrfOnBreadCrumsUrlDTO("", "https://api-tvthek.orf.at/api/v4.3/profile/13895899/episodes?limit=200"),
new OrfOnBreadCrumsUrlDTO("", "https://api-tvthek.orf.at/api/v4.3/profile/13887359/episodes?limit=200")));
return expectedResult;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
package de.mediathekview.mserver.crawler.orfon;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;


import java.net.MalformedURLException;
import java.net.URL;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ForkJoinPool;

import org.junit.Test;

import de.mediathekview.mlib.daten.FilmUrl;
import de.mediathekview.mlib.daten.GeoLocations;
import de.mediathekview.mlib.daten.Resolution;
import de.mediathekview.mlib.messages.listener.MessageListener;
import de.mediathekview.mserver.base.config.MServerConfigManager;
import de.mediathekview.mserver.crawler.orfon.task.OrfOnEpisodeTask;
import de.mediathekview.mserver.progress.listeners.SenderProgressListener;


public class OrfOnEpisodeTaskTest extends OrfOnEpisodesTaskTest {

@Test
public void test() {
setupSuccessfulJsonResponse("/episode1", "/orfOn/episode_1.json");
setupSuccessfulJsonResponse("/episode2", "/orfOn/episode_2.json");
Set<OrfOnVideoInfoDTO> result = executeTask("/episode1", "/episode2");
Map<String, OrfOnVideoInfoDTO> expectedResult = generateExpectedResult();
assertTrue(result.size() == 2);
for (OrfOnVideoInfoDTO actual : result) {
OrfOnVideoInfoDTO expected = expectedResult.get(actual.getId().get());
assertNotNull(expected);
assertVideoInfoDto(expected, actual);
}
}

private Set<OrfOnVideoInfoDTO> executeTask(String... requestUrl) {
final Queue<OrfOnBreadCrumsUrlDTO> input = new ConcurrentLinkedQueue<>();
for (String url : requestUrl) {
input.add(new OrfOnBreadCrumsUrlDTO("",getWireMockBaseUrlSafe() + url));
}
return new OrfOnEpisodeTask(OrfOnEpisodeTaskTest.createCrawler(), input).invoke();
}

private Map<String, OrfOnVideoInfoDTO> generateExpectedResult() {
try {
Map<String,OrfOnVideoInfoDTO> expectedResult = Map.of(
"14207792", new OrfOnVideoInfoDTO(
Optional.of("14207792"),
Optional.of("ORF 1"),
Optional.of("Servus Kasperl: Kasperl & Strolchi: Koko und Maximilian"),
Optional.of("Servus Kasperl: Kasperl und Strolchi: Koko und Maximilian vom 04.01.2024 um 07:07 Uhr"),
Optional.of("Servus Kasperl"),
Optional.of("ORF Kids | Servus Kasperl"),
Optional.of(LocalDateTime.of(2024,01,04,07,07,38)),
Optional.of(java.time.Duration.parse("PT21M56S")),
Optional.of("Kasperl und Strolchi besuchen den Zirkusdirektor des Zirkus Kindleroni. Dieser ist verzweifelt, weil sein Stallbursche krank ist und er die ganze Arbeit alleine kaum schaffen kann. Doch da kommt Hilfe durch Maximilian, der Arbeit sucht. Sofort darf Maximilian die Stelle als Stallbursche antreten. Eine seiner Aufgaben ist es auch auf Koko, den Papagei des Direktors, aufzupassen. Dieser ist in Gefahr, weil ein Räuber vor hat ihn zu stehlen.\r\n"
+ "Bildquelle: ORF"),
Optional.of(new URL("https://tvthek.orf.at/profile/Servus-Kasperl/3272601/Servus-Kasperl-Kasperl-Strolchi-Koko-und-Maximilian/14207792")),
Optional.of(List.of(GeoLocations.GEO_NONE)),
Optional.of(new URL("https://api-tvthek.orf.at/api/v4.3/subtitle/885340")),
Optional.of(Map.of(Resolution.NORMAL, new FilmUrl("https://apasfiis.sf.apa.at/ipad/cms-worldwide/2024-01-04_0707_tl_01_Servus-Kasperl-_____14207792__o__6332192865__s15543049_9__ORF1HD_07081012P_07300711P_QXB.mp4/playlist.m3u8", 0L))),
Optional.of(Set.of(
new URL("https://api-tvthek.orf.at/assets/subtitles/0166/92/07aead27b4c0b09b36750db54b8ce15ff9b8499c.ttml"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0166/92/4dd6932d7cf6ceaad90a536c3e03981267e32941.vtt"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0166/92/09477f02c5e0392ecd2f717461ed136237d70050.srt"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0166/92/808e2453d38fd8a5e4fab4794cc034ee89fcfd9c.xml"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0166/92/8547597f31429d87a5418918ae471b44fcf9ab55.smi")
))),
"14207790", new OrfOnVideoInfoDTO(
Optional.of("14207790"),
Optional.of("ORF Kids"),
Optional.of("ABC Bär"),
Optional.of("ABC Bär vom 04.01.2024 um 06:45 Uhr"),
Optional.of("ABC-Bär"),
Optional.of("ORF Kids | Lernen mit Spaß"),
Optional.of(LocalDateTime.of(2024,01,04,06,45)),
Optional.of(java.time.Duration.parse("PT13M29S")),
Optional.of("Der ABC Bär und seine Tierfreunde reisen mit ihrem lustigen Baumhaus durch das Land, um ihre Zahl- und Buchstabenspiele aufzuführen und erleben dabei jede Menge spannender Geschichten.\r\n"
+ "Bildquelle: ORF"),
Optional.of(new URL("https://tvthek.orf.at/profile/ABC-Baer/4611813/ABC-Baer/14207790")),
Optional.of(List.of(GeoLocations.GEO_AT)),
Optional.of(new URL("https://api-tvthek.orf.at/api/v4.3/subtitle/885332")),
Optional.of(Map.of(Resolution.NORMAL, new FilmUrl("https://apasfiis.sf.apa.at/ipad/cms-austria/2024-01-04_0645_tl_00_ABC-Baer_____14207790__o__4346842346__s15542921_1__KIDS1_06363007P_06500003P_QXB.mp4/playlist.m3u8", 0L))),
Optional.of(Set.of(
new URL("https://api-tvthek.orf.at/assets/subtitles/0166/92/b682365a2a3fd1d45a2f029a597735a9df5b7524.ttml"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0166/92/20c53ed98f58a5045da663191516bc7fbf09e3d2.srt"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0166/92/c50d4ed5c4f912e8d7f7b5e94cd9155bd31b247d.vtt"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0166/92/1f178ebeae4aea09e03697e85082701de6df436c.xml"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0166/92/7096926d900006d0d196e1dab952a62200118c2c.smi")
)))
);
return expectedResult;
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}

protected static void assertVideoInfoDto(OrfOnVideoInfoDTO expected, OrfOnVideoInfoDTO actual) {
assertEquals(expected.getAired(), actual.getAired());
assertEquals(expected.getChannel(), actual.getChannel());
assertEquals(expected.getDescription(), actual.getDescription());
assertEquals(expected.getDuration(), actual.getDuration());
assertEquals(expected.getGeorestriction(), actual.getGeorestriction());
assertEquals(expected.getId(), actual.getId());
assertEquals(expected.getTitle(), actual.getTitle());
assertEquals(expected.getTitleWithDate(), actual.getTitleWithDate());
assertEquals(expected.getTopic(), actual.getTopic());
assertEquals(expected.getTopicForArchive(), actual.getTopicForArchive());
assertEquals(expected.getWebsite(), actual.getWebsite());
assertEquals(expected.getVideoUrls().get(), actual.getVideoUrls().get());
assertEquals(expected.getSubtitleUrls(), actual.getSubtitleUrls());
if (expected.getSubtitleSource().isPresent()) {
int subtitleSourceExpectedStringlength = expected.getSubtitleSource().get().toString().indexOf("subtitle");
int subtitleSourceActStringlength = actual.getSubtitleSource().get().toString().indexOf("subtitle");
assertTrue(subtitleSourceExpectedStringlength > 0 && subtitleSourceActStringlength > 0);
assertEquals(expected.getSubtitleSource().get().toString().substring(subtitleSourceExpectedStringlength), actual.getSubtitleSource().get().toString().substring(subtitleSourceActStringlength)); // ignore localhost+port
}
}

protected static OrfOnCrawler createCrawler() {
final ForkJoinPool forkJoinPool = new ForkJoinPool();
final Collection<MessageListener> nachrichten = new ArrayList<>();
final Collection<SenderProgressListener> fortschritte = new ArrayList<>();
return new OrfOnCrawler(forkJoinPool, nachrichten, fortschritte, new MServerConfigManager("MServer-JUnit-Config.yaml"));
}



}
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
package de.mediathekview.mserver.crawler.orfon;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.net.MalformedURLException;
import java.net.URL;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.ConcurrentLinkedQueue;

import org.junit.Test;

import de.mediathekview.mlib.daten.FilmUrl;
import de.mediathekview.mlib.daten.GeoLocations;
import de.mediathekview.mlib.daten.Resolution;
import de.mediathekview.mserver.crawler.orfon.task.OrfOnEpisodesTask;
import de.mediathekview.mserver.testhelper.WireMockTestBase;

public class OrfOnEpisodesTaskTest extends WireMockTestBase {

@Test
public void test() {
setupSuccessfulJsonResponse("/episodes", "/orfOn/episodes_3.json");
setupSuccessfulJsonResponse("/api/v4.3/subtitle/868782", "/orfOn/subtitle_868782.json");
Set<OrfOnVideoInfoDTO> result = executeTask("/episodes");
Map<String, OrfOnVideoInfoDTO> expectedResult = generateExpectedResult();
assertTrue(result.size() == 3);
for (OrfOnVideoInfoDTO actual : result) {
OrfOnVideoInfoDTO expected = expectedResult.get(actual.getId().get());
assertNotNull(expected);
OrfOnEpisodeTaskTest.assertVideoInfoDto(expected, actual);
}
}

private Set<OrfOnVideoInfoDTO> executeTask(String... requestUrl) {
final Queue<OrfOnBreadCrumsUrlDTO> input = new ConcurrentLinkedQueue<>();
for (String url : requestUrl) {
input.add(new OrfOnBreadCrumsUrlDTO("",getWireMockBaseUrlSafe() + url));
}
return new OrfOnEpisodesTask(OrfOnEpisodeTaskTest.createCrawler(), input).invoke();
}

private Map<String, OrfOnVideoInfoDTO> generateExpectedResult() {
try {
Map<String,OrfOnVideoInfoDTO> expectedResult = Map.of(
"14201133", new OrfOnVideoInfoDTO(
Optional.of("14201133"),
Optional.of("ORF 1"),
Optional.of("Wischen ist Macht: Alles für den Hugo"),
Optional.of("Wischen ist Macht: Alles für den Hugo vom 14.11.2023 um 00:33 Uhr"),
Optional.of("Wischen ist Macht"),
Optional.of("Serie"),
Optional.of(LocalDateTime.of(2023,11,14,00,33,03)),
Optional.of(java.time.Duration.parse("PT24M50S")),
Optional.of("Spezialauftrag für \"Dreck.Weg.Sendracek\": Die russische Botschafterin lädt zu einer Gala und"),
Optional.of(new URL("https://tvthek.orf.at/profile/Wischen-ist-Macht/13891227/Wischen-ist-Macht-Alles-fuer-den-Hugo/14201133")),
Optional.of(List.of(GeoLocations.GEO_AT)),
Optional.of(new URL("https://api-tvthek.orf.at/api/v4.3/subtitle/868782")),
Optional.of(Map.of(Resolution.NORMAL, new FilmUrl("https://apasfiis.sf.apa.at/ipad/cms-austria/2023-11-14_0033_in_01_Wischen-ist-Mac_____14201133__o__1340615864__s15523109_QXB.mp4/playlist.m3u8", 0L))),
Optional.of(Set.of(
new URL("https://api-tvthek.orf.at/assets/subtitles/0162/100/a1ab1313ca03ba35c75d39e08c59840bc97aba76.ttml"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0162/100/6cd8a1899f5b56f919a6d809fe001ce3acaf4ce8.smi"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0162/100/79738b7eb874c151cde04ec6367a444bd5999db1.srt"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0162/100/a0467e2fdfb637c00fe6a450f003cedcf70128fa.xml"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0162/100/4b1c81a007271ee90224a9555494148e3116a00e.vtt")
))
),
"14202094", new OrfOnVideoInfoDTO(
Optional.of("14202094"),
Optional.of("ORF 1"),
Optional.of("Wischen ist Macht: Shit Happens"),
Optional.of("Wischen ist Macht: Shit Happens vom 21.11.2023 um 00:04 Uhr"),
Optional.of("Wischen ist Macht"),
Optional.of("Wischen ist Macht"),
Optional.of(LocalDateTime.of(2023,11,21,00,04,21)),
Optional.of(java.time.Duration.parse("PT22M12S")),
Optional.of("Dass Ex-Rockstar Johnny Woody gerade seinen Abgang ins Jenseits plant, passt Michelle gar nicht in den Kram - hat er ihr doch immer noch nicht die ausstehenden Honorare überwiesen. Johnny fängt sich jedoch wieder und \"Dreck:Weg.Sendracek\" treten ihren Dienst an. Bei der Arbeit findet Michelle heraus, dass Johnny eine 10.000 Dollar-Gitarre besitzt und er vielleicht doch nicht so knapp bei Kasse ist, woraufhin sie einen Plan schmiedet. Dann aber wird Michelle in die Beziehungskrise zwischen Johnny und seine Freundin Pamela hineingezogen, während seine Frau Janis gewohnt alkoholisiert durchs Haus geistert.\r\n"
+ "Mit Ursula Strauss (Michelle Sendracek), Stefano Bernardin (Fernando Pablo Rigoberto Sanchez de la Luz), Zeynep Buyrac (Mira Petrenko), Manuel Sefciuc (Valentin Gradischnig), Lilian Jane Gartner (Zoe), Wolfram Berger (Johnny), Eva Maria Marold (Janis), Doris Hindinger (Pamela), Helmut Bohatsch (Bertram) u.a.\r\n"
+ "Bildquelle: ORF/Fabio Eppensteiner"),
Optional.of(new URL("https://tvthek.orf.at/profile/Wischen-ist-Macht/13891227/Wischen-ist-Macht-Shit-Happens/14202094")),
Optional.of(List.of(GeoLocations.GEO_AT)),
Optional.of(new URL("https://api-tvthek.orf.at/api/v4.3/subtitle/868782")),
Optional.of(Map.of(Resolution.NORMAL, new FilmUrl("https://apasfiis.sf.apa.at/ipad/cms-austria/2023-11-21_0004_in_01_Wischen-ist-Mac_____14202094__o__1166314613__s15511282_QXB.mp4/playlist.m3u8", 0L))),
Optional.of(Set.of(
new URL("https://api-tvthek.orf.at/assets/subtitles/0162/100/a1ab1313ca03ba35c75d39e08c59840bc97aba76.ttml"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0162/100/6cd8a1899f5b56f919a6d809fe001ce3acaf4ce8.smi"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0162/100/79738b7eb874c151cde04ec6367a444bd5999db1.srt"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0162/100/a0467e2fdfb637c00fe6a450f003cedcf70128fa.xml"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0162/100/4b1c81a007271ee90224a9555494148e3116a00e.vtt")
))
),
"14202095", new OrfOnVideoInfoDTO(
Optional.of("14202095"),
Optional.of("ORF 1"),
Optional.of("Wischen ist Macht: Fußball ist meine Religion"),
Optional.of("Wischen ist Macht: Fußball ist meine Religion vom 21.11.2023 um 00:27 Uhr"),
Optional.of("Wischen ist Macht"),
Optional.of("Serie"),
Optional.of(LocalDateTime.of(2023,11,21,00,27,17)),
Optional.of(java.time.Duration.parse("PT25M49S")),
Optional.of("Michelle und ihr Team rücken im Fußballstadion an"),
Optional.of(new URL("https://tvthek.orf.at/profile/Wischen-ist-Macht/13891227/Wischen-ist-Macht-Fussball-ist-meine-Religion/14202095")),
Optional.of(List.of(GeoLocations.GEO_AT)),
Optional.of(new URL("https://api-tvthek.orf.at/api/v4.3/subtitle/868782")),
Optional.of(Map.of(Resolution.NORMAL, new FilmUrl("https://apasfiis.sf.apa.at/ipad/cms-austria/2023-11-21_0027_in_01_Wischen-ist-Mac_____14202095__o__7468851165__s15511283_QXB.mp4/playlist.m3u8", 0L))),
Optional.of(Set.of(
new URL("https://api-tvthek.orf.at/assets/subtitles/0162/100/a1ab1313ca03ba35c75d39e08c59840bc97aba76.ttml"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0162/100/6cd8a1899f5b56f919a6d809fe001ce3acaf4ce8.smi"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0162/100/79738b7eb874c151cde04ec6367a444bd5999db1.srt"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0162/100/a0467e2fdfb637c00fe6a450f003cedcf70128fa.xml"),
new URL("https://api-tvthek.orf.at/assets/subtitles/0162/100/4b1c81a007271ee90224a9555494148e3116a00e.vtt")
))
));
return expectedResult;
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}


}
Loading

0 comments on commit bd3fd54

Please sign in to comment.