👽️ Update Savoy ticket filter
[rhynodge.git] / src / test / java / net / pterodactylus / rhynodge / filters / webpages / savoy / MovieExtractorTest.java
index d1e9dc8..50d8884 100644 (file)
@@ -1,11 +1,11 @@
 package net.pterodactylus.rhynodge.filters.webpages.savoy;
 
-import static java.time.LocalDateTime.of;
-import static java.util.Optional.empty;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.containsInAnyOrder;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.jsoup.Jsoup.parse;
+import kotlin.Pair;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.hamcrest.TypeSafeDiagnosingMatcher;
+import org.jsoup.nodes.Document;
+import org.junit.Test;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -15,11 +15,11 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
 
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.hamcrest.TypeSafeDiagnosingMatcher;
-import org.jsoup.nodes.Document;
-import org.junit.Test;
+import static java.time.LocalDateTime.of;
+import static java.util.Optional.empty;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.jsoup.Jsoup.parse;
 
 /**
  * Unit test for {@link MovieExtractor}.
@@ -33,7 +33,7 @@ public class MovieExtractorTest {
        private Collection<Movie> movies;
 
        public MovieExtractorTest() throws IOException {
-               document = loadDocument("savoy.html", "http://foo");
+               document = loadDocument("savoy.html", "https://savoy.premiumkino.de/programmwoche");
                movies = movieExtractor.getMovies(document);
        }
 
@@ -44,23 +44,110 @@ public class MovieExtractorTest {
 
        @Test
        public void moviesAreLocated() throws IOException {
-               assertThat(movies, notNullValue());
                assertThat(movies, containsInAnyOrder(
-                               movie("22 Jump Street (OV)", of(2014, 7, 30, 20, 15), of(2014, 7, 31, 20, 15), of(2014, 8, 1, 22, 30), of(2014, 8, 2, 20, 0), of(2014, 8, 2, 22, 45), of(2014, 8, 3, 17, 30), of(2014, 8, 4, 17, 30), of(2014, 8, 5, 20, 0)),
-                               movie("How to Train Your Dragon 2 (3D/OV)", of(2014, 7, 30, 17, 45), of(2014, 8, 1, 14, 15), of(2014, 8, 2, 17, 30), of(2014, 8, 3, 15, 0), of(2014, 8, 4, 20, 0)),
-                               movie("Jersey Boys (OV)", of(2014, 7, 31, 17, 15), of(2014, 8, 1, 16, 30), of(2014, 8, 3, 20, 0), of(2014, 8, 5, 17, 0)),
-                               movie("FILM CLUB presents: Ghostbusters (OV)", of(2014, 8, 1, 19, 30)),
-                               movie("Transformers: Age of Extinction (3D/OV)", of(2014, 8, 2, 14, 0)),
-                               movie("Dawn of the Planet of the Apes (3D/OV)"),
-                               movie("Traumkino: Yves Saint Laurent (Deutsche Fassung)"),
-                               movie("Hector and the Search for Happiness (OV)"),
-                               movie("The Expendables 3 (OV)"),
-                               movie("Doctor Who: Deep Breath"),
-                               movie("Traumkino: Boyhood (Deutsche Sprachfassung)")
+                               movie("All of Us Strangers",
+                                               new Pair<>(of(2024, 2, 9, 16, 15), "https://savoy.premiumkino.de/vorstellung/all-of-us-strangers/20240209/1615/HkKdhlHMvtfSMy1fqYYtYuVdgGIKtnT7i7ddY5jzRfY~"),
+                                               new Pair<>(of(2024, 2, 10, 22, 15), "https://savoy.premiumkino.de/vorstellung/all-of-us-strangers/20240210/2215/znWqm8FQUNSbrODY_A0jw8Au2nW6uSqbFE7Co8UgQv0~"),
+                                               new Pair<>(of(2024, 2, 11, 20, 15), "https://savoy.premiumkino.de/vorstellung/all-of-us-strangers/20240211/2015/I642oTHBKpy7sz2RULHIQK6cykSCPi57_c0TApiKbUk~"),
+                                               new Pair<>(of(2024, 2, 12, 17, 15), "https://savoy.premiumkino.de/vorstellung/all-of-us-strangers/20240212/1715/2lEiqVP1hueXZhWwy9FSUfRgFKf8iTCKRMdJOTfBf8A~"),
+                                               new Pair<>(of(2024, 2, 13, 20, 30), "https://savoy.premiumkino.de/vorstellung/all-of-us-strangers/20240213/2030/M0mIWdKm5gZkan5na6zOVFBzsHWAHhqod8RCmG2Fr0Y~"),
+                                               new Pair<>(of(2024, 2, 14, 14, 30), "https://savoy.premiumkino.de/vorstellung/all-of-us-strangers/20240214/1430/VZhgxh4PZutWWlLPEAe9dfOUJkB3sLnXzWoduICJYTk~")
+                               ),
+                               movie("Dune",
+                                               new Pair<>(of(2024, 2, 9, 19, 0), "https://savoy.premiumkino.de/vorstellung/dune/20240209/1900/o9jDuan4yyxaW7-Jg3hCJpiAM4CLZei8J2IX-O5-hA0~"),
+                                               new Pair<>(of(2024, 2, 10, 15, 30), "https://savoy.premiumkino.de/vorstellung/dune/20240210/1530/jXbZnYD8R5djVnj3Ojjcsc9qdSJ0JBMVhn7PeP88HyY~"),
+                                               new Pair<>(of(2024, 2, 11, 13, 30), "https://savoy.premiumkino.de/vorstellung/dune/20240211/1330/aJmlM8wOaGl_jtuWDvWG9TF7RR1zRpNrSZeArCBhn90~"),
+                                               new Pair<>(of(2024, 2, 12, 20, 0), "https://savoy.premiumkino.de/vorstellung/dune/20240212/2000/2KLOCZy5zU060zKj-4zafxm3oalEyT4tNi2Fxnw5D7E~"),
+                                               new Pair<>(of(2024, 2, 13, 17, 0), "https://savoy.premiumkino.de/vorstellung/dune/20240213/1700/QCphOtH-WrZ2tRbENwaxXPskrN2gH3I8dHR0Y5L3l0Y~")
+                               ),
+                               movie("SAVOY Sneak-Preview",
+                                               new Pair<>(of(2024, 2, 9, 22, 30), "https://savoy.premiumkino.de/vorstellung/sneak-preview/20240209/2230/GtYBcOR_Jy7a8xDxwwPHI0wfY_v_Ep2P6rV0w4wJ7SM~"),
+                                               new Pair<>(of(2024, 2, 16, 22, 0), "https://savoy.premiumkino.de/vorstellung/sneak-preview/20240216/2200/ZRC7iir9Hu8nIpH1PsiA_UDvckcj7yGqgMEYXHAs9Qw~")
+                               ),
+                               movie("Der Junge und der Reiher",
+                                               new Pair<>(of(2024, 2, 10, 12, 30), "https://savoy.premiumkino.de/vorstellung/der-junge-und-der-reiher/20240210/1230/F0atZERI4Gssj3LGC-2fQlLF3rM9Uk8IbpOzHaXyx7w~")
+                               ),
+                               movie("Poor Things",
+                                               new Pair<>(of(2024, 2, 10, 19, 0), "https://savoy.premiumkino.de/vorstellung/poor-things/20240210/1900/SqolavKZAlBMZH_JAN-OqdZqowBv-aRqhPGHvPTphao~"),
+                                               new Pair<>(of(2024, 2, 11, 17, 0), "https://savoy.premiumkino.de/vorstellung/poor-things/20240211/1700/UrS33k-jY7_ZAsm4B7wydy0SBfdVjdd73On68HtIy9E~"),
+                                               new Pair<>(of(2024, 2, 13, 13, 45), "https://savoy.premiumkino.de/vorstellung/poor-things/20240213/1345/gma7KCzuaJQCSoBm8NMJb3ATjtMISm4M9IiwiVNpXpw~"),
+                                               new Pair<>(of(2024, 2, 14, 17, 15), "https://savoy.premiumkino.de/vorstellung/poor-things/20240214/1715/cBjQj4qRrJaSX3m_acvfxNL1Tclg0Rrt_X63Md0rkEw~")
+                               ),
+                               movie("Vergiss mein nicht- Eternal Sunshine of the Spotless Mind",
+                                               new Pair<>(of(2024, 2, 14, 20, 30), "https://savoy.premiumkino.de/vorstellung/vergiss-mein-nicht-eternal-sunshine-of-the-spotless-mind/20240214/2030/QqoCtd4ls09AD04rGSNh8qPkf02rcRzp2wFfF2BoobE~")
+                               ),
+                               movie("Bob Marley: One Love",
+                                               new Pair<>(of(2024, 2, 15, 20, 15), "https://savoy.premiumkino.de/vorstellung/bob-marley-one-love/20240215/2015/q4dxyPDNVvZDEeIuh1r9Y4OJ7UK36CKSr2d7p3h9LMs~")
+                               ),
+                               movie("The Hateful 8",
+                                               new Pair<>(of(2024, 2, 18, 19, 45), "https://savoy.premiumkino.de/vorstellung/the-hateful-8/20240218/1945/dusKDbTYgF79OipGmQO0Q4P5K02rclkjIV9At8qKfOA~")
+                               ),
+                               movie("Prinzessin Mononoke",
+                                               new Pair<>(of(2024, 2, 19, 20, 15), "https://savoy.premiumkino.de/vorstellung/prinzessin-mononoke/20240219/2015/LmbLtOrTZxBgPlBMzoRZ4_C-PfO64GeXNIKr5KGs-2M~"),
+                                               new Pair<>(of(2024, 2, 22, 20, 15), "https://savoy.premiumkino.de/vorstellung/prinzessin-mononoke/20240222/2015/mvbGK2fA5AgPbADOzm7sqFYYzm2qdqqdwqdLu4rMPrg~")
+                               ),
+                               movie("Das fünfte Element (Best of Cinema)",
+                                               new Pair<>(of(2024, 2, 20, 20, 30), "https://savoy.premiumkino.de/vorstellung/das-fuenfte-element-best-of-cinema/20240220/2030/QcJZ5Yh8P2j_HKLSP8cjcXsqkbdqYdYGTexCF3RF2R4~")
+                               ),
+                               movie("Heaven Can Wait - wir leben jetzt",
+                                               new Pair<>(of(2024, 2, 21, 11, 0), "https://savoy.premiumkino.de/vorstellung/heaven-can-wait-wir-leben-jetzt/20240221/1100/GW7pwEYabwN3-e8uTGmSPTfdbyXoKe4la-B2L1SI8XI~")
+                               ),
+                               movie("Demon Slayer: Kimetsu no yaiba - Zum Training der Säulen",
+                                               new Pair<>(of(2024, 2, 27, 20, 30), "https://savoy.premiumkino.de/vorstellung/demon-slayer-kimetsu-no-yaiba-zum-training-der-saeulen/20240227/2030/UsAsz9NQPZGfdyLelrAHZ50MXeoElhNIPcgg3unBR0o~")
+                               ),
+                               movie("Double Feature DUNE 1&2",
+                                               new Pair<>(of(2024, 2, 28, 17, 30), "https://savoy.premiumkino.de/vorstellung/double-feature-dune-1und2/20240228/1730/Ni6Yo0fA4k7gEZiJB8Cnq33Axjnw85JBG2lBIVRwYok~"),
+                                               new Pair<>(of(2024, 3, 3, 10, 0), "https://savoy.premiumkino.de/vorstellung/double-feature-dune-1und2/20240303/1000/AXcH4nnYJB9Ar0aR5zFl3Bfa238POna3UVY66_nHL6c~")
+                               ),
+                               movie("Dune: Part Two",
+                                               new Pair<>(of(2024, 2, 29, 12, 30), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240229/1230/Osq78ODtBKchFFx1HgAmEPAAIWLC6JgxWqC638UaRws~"),
+                                               new Pair<>(of(2024, 2, 29, 16, 15), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240229/1615/hJ3kXaFB-LjfZu2pYBVx0R_2UoqOJANwWX_AS4KW6FI~"),
+                                               new Pair<>(of(2024, 2, 29, 20, 0), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240229/2000/EwA7Z5KlKNnIr0e4o_tXGpYp6xN90juBl92wcTVIZ-Q~"),
+                                               new Pair<>(of(2024, 3, 1, 13, 45), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240301/1345/-kxmskcNJYhWCr9z5MfK0p2w2qlu3CDu8rVtDLmxSQA~"),
+                                               new Pair<>(of(2024, 3, 1, 17, 30), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240301/1730/yXQQSsMug0nRQGN1BNpBXEA3Udf_asggPHwk4a4zdBE~"),
+                                               new Pair<>(of(2024, 3, 1, 21, 15), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240301/2115/FN7huOUR4eLA-2EKxi9lTykJUFQNYc4LTHRHtyDlAgo~"),
+                                               new Pair<>(of(2024, 3, 2, 10, 0), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240302/1000/84ntwEOFY6aqexIEd9tXESW6qrl9aXk-x2l-LsHWvfk~"),
+                                               new Pair<>(of(2024, 3, 2, 13, 45), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240302/1345/9lxXFXQU6FHmyv1WpKX5ETpd24daZT16hNvXUJEUwik~"),
+                                               new Pair<>(of(2024, 3, 2, 17, 30), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240302/1730/ynmy2dsbgYygz2hPUS_vx-9YL13m2KZ0-9tw37XuBMQ~"),
+                                               new Pair<>(of(2024, 3, 2, 21, 15), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240302/2115/rH8i8BAFaaDjfNJBbZjj_7CV2dzOWcEOzyL618KYQVo~"),
+                                               new Pair<>(of(2024, 3, 3, 16, 30), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240303/1630/fU4VOzrp34B48KdsB1vpo2pi18sWSo2Tkknk03sO4HY~"),
+                                               new Pair<>(of(2024, 3, 3, 20, 15), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240303/2015/b1yBhvNosqm0nbWju1aCfb7LRBhRnMo_Y_h0VLZwmr0~"),
+                                               new Pair<>(of(2024, 3, 4, 12, 30), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240304/1230/DcGmb0KshRY0qv55Tuo4ydiJswd1H9wonrYGF1zGqQ0~"),
+                                               new Pair<>(of(2024, 3, 4, 16, 15), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240304/1615/BEd4wzePEH_Sxxuum4cXpsoOubN8fA6oecrWpwGJpcc~"),
+                                               new Pair<>(of(2024, 3, 4, 20, 0), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240304/2000/7Qldfc-0lDNALUw_lzuzM3KfarQWQAUi91qz2cMrNDk~"),
+                                               new Pair<>(of(2024, 3, 5, 12, 30), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240305/1230/QiP6Vvb9htMnFyTSUZRte1b_Ykw_n_yzaGpErBLFjOE~"),
+                                               new Pair<>(of(2024, 3, 5, 16, 15), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240305/1615/eY9ufKz1UM777apocN37PLvlsWwSJXc0xu7LMHecCbk~"),
+                                               new Pair<>(of(2024, 3, 5, 20, 0), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240305/2000/2gqVyU2_3NXv_fZiiAxV8Utom82nPW52kzVxzUDrMkI~"),
+                                               new Pair<>(of(2024, 3, 6, 16, 0), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240306/1600/Y8x2dIEq1QbEpZf7Td-6-3xqg-d4iDQU9p1fIjxJB0M~"),
+                                               new Pair<>(of(2024, 3, 6, 19, 45), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240306/1945/mSiOQk7DuM02IdmaVIvsv5nechCpRkWZwsK37hoXTyg~")
+                               ),
+                               movie("791 KM",
+                                               new Pair<>(of(2024, 3, 6, 11, 0), "https://savoy.premiumkino.de/vorstellung/791-km/20240306/1100/Mcvtz3tawhaIuyCtLtBkHwt6EI8b7oGXwh5OV4YWwNQ~")
+                               ),
+                               movie("Following",
+                                               new Pair<>(of(2024, 3, 9, 12, 0), "https://savoy.premiumkino.de/vorstellung/following/20240309/1200/-Aetrz3gC8l4rgVfGc98XXU7B87mTA4RCbWCgZuXHzc~")
+                               ),
+                               movie("Donnie Darko (Best of Cinema)",
+                                               new Pair<>(of(2024, 3, 16, 22, 15), "https://savoy.premiumkino.de/vorstellung/donnie-darko-best-of-cinema/20240316/2215/ZIBOwCyKuZ7A6OyYZWQ1AqF9O487dY_LAMmURYrGqUs~")
+                               ),
+                               movie("NT: Vanya",
+                                               new Pair<>(of(2024, 3, 18, 20, 30), "https://savoy.premiumkino.de/vorstellung/nt-vanya/20240318/2030/X9L2eAn_XElOtZRg7u4eiQ6kUCqcuJhrwQ5T76OAt2s~"),
+                                               new Pair<>(of(2024, 3, 23, 22, 15), "https://savoy.premiumkino.de/vorstellung/nt-vanya/20240323/2215/xXgXAH_I7xX3GsQ4eA4rZsOOrJqAtK0hCCXexFMj0Fk~"),
+                                               new Pair<>(of(2024, 4, 8, 20, 30), "https://savoy.premiumkino.de/vorstellung/nt-vanya/20240408/2030/PDQ-R_ltFWo8QAn-BbloxETvgegcTyaQyCZrG_MwQfo~")
+                               ),
+                               movie("No Country For Old Men",
+                                               new Pair<>(of(2024, 3, 26, 20, 15), "https://savoy.premiumkino.de/vorstellung/no-country-for-old-men/20240326/2015/jtZD6DfmChngY1mDGWlaaV8kZdUPL_QT2Fh-t0clBpU~")
+                               ),
+                               movie("Lisa Achatzi: Vom Traum zum Trauma - und zurück",
+                                               new Pair<>(of(2024, 4, 14, 12, 0), "https://savoy.premiumkino.de/vorstellung/lisa-achatzi-vom-traum-zum-trauma-und-zurueck/20240414/1200/MOLgymd988D7m8ZOvhM75aDc5suv3VO9aHobbLsaOgQ~")
+                               ),
+                               movie("Movie Quiz: Test Your Movie Knowledge",
+                                               new Pair<>(of(2024, 4, 15, 20, 15), "https://savoy.premiumkino.de/vorstellung/movie-quiz-test-your-movie-knowledge/20240415/2015/DMAaL86yGoobZhPTDdU2ksO9RUTFoPCiQKGOY7TO6tg~")
+                               )
                ));
        }
 
-       private Matcher<Movie> movie(String name, LocalDateTime... presentationTimes) {
+       private Matcher<Movie> movie(String name, Pair<LocalDateTime, String>... presentationTimesAndLinks) {
                return new TypeSafeDiagnosingMatcher<Movie>() {
                        @Override
                        protected boolean matchesSafely(Movie movie, Description mismatchDescription) {
@@ -69,20 +156,20 @@ public class MovieExtractorTest {
                                        return false;
                                }
                                List<TicketLink> ticketLinks = new ArrayList<>(movie.getTicketLinks());
-                               if (ticketLinks.size() != presentationTimes.length) {
+                               if (ticketLinks.size() != presentationTimesAndLinks.length) {
                                        mismatchDescription.appendText("has ").appendValue(ticketLinks.size()).appendText(" presentations");
                                        return false;
                                }
-                               for (LocalDateTime presentationTime : presentationTimes) {
+                               for (Pair<LocalDateTime, String> presentationTimeAndLink : presentationTimesAndLinks) {
                                        Optional<TicketLink> foundTicketLink = empty();
                                        for (TicketLink ticketLink : ticketLinks) {
-                                               if (ticketLink.getPresentationTime().equals(presentationTime)) {
+                                               if (ticketLink.getPresentationTime().equals(presentationTimeAndLink.getFirst()) && ticketLink.getLink().equals(presentationTimeAndLink.getSecond())) {
                                                        foundTicketLink = Optional.of(ticketLink);
                                                        break;
                                                }
                                        }
                                        if (!foundTicketLink.isPresent()) {
-                                               mismatchDescription.appendValue("has no presentation at ").appendValue(presentationTime);
+                                               mismatchDescription.appendValue("has no presentation at ").appendValue(presentationTimeAndLink.getFirst());
                                                return false;
                                        }
                                        ticketLinks.remove(foundTicketLink.get());
@@ -97,7 +184,7 @@ public class MovieExtractorTest {
                        @Override
                        public void describeTo(Description description) {
                                description.appendText("movie with name ").appendValue(name);
-                               description.appendText(" and ").appendValue(presentationTimes.length).appendText(" presentations");
+                               description.appendText(" and ").appendValue(presentationTimesAndLinks.length).appendText(" presentations");
                        }
                };
        }