package de.geeksfactory.opacclient.apis; import org.json.JSONException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; import de.geeksfactory.opacclient.objects.DetailedItem; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; @RunWith(Parameterized.class) public class AdisReservationTest extends BaseHtmlTest { public static final String DIR = "/adis/reservation/"; private String file; private Adis adis; private DetailedItem item; public AdisReservationTest(String file) { this.file = file; } private static final String[] FILES = new String[]{"muenchen"}; @Parameterized.Parameters(name = "{0}") public static Collection<String[]> files() { List<String[]> files = new ArrayList<>(); for (String file : FILES) { files.add(new String[]{file}); } return files; } @Before public void setUp() throws IOException, OpacApi.OpacErrorException { adis = spy(Adis.class); String html = readResource(DIR + file + "_detail.html"); Document detailDoc = Jsoup.parse(html); item = adis.parseResult(getId(file), detailDoc); adis.updatePageform(detailDoc); } private String getId(String file) { switch (file) { case "muenchen": return "AK04076347"; default: return null; } } @Test public void testReservation() throws JSONException, IOException, OpacApi.OpacErrorException { testReservationStep1(); String selection = testReservationStep2(); selection = testReservationStep3(selection); testReservationStep4(selection); } public void testReservationStep1() throws OpacApi.OpacErrorException, JSONException, IOException { String html = readResource(DIR + file + "_1.html"); doReturn(Jsoup.parse(html)).when(adis).htmlPost(anyString(), any(List.class)); OpacApi.ReservationResult result = adis.reservation(item, null, 0, null); assertEquals(result.status, OpacApi.MultiStepResult.Status.CONFIRMATION_NEEDED); } public String testReservationStep2() throws OpacApi.OpacErrorException, JSONException, IOException { String html = readResource(DIR + file + "_1.html"); doReturn(Jsoup.parse(html)).when(adis).htmlPost(anyString(), any(List.class)); OpacApi.ReservationResult result = adis.reservation(item, null, 0, "confirmed"); assertEquals(result.status, OpacApi.MultiStepResult.Status.SELECTION_NEEDED); assertTrue(result.selection.size() > 0); assertEquals(result.message, "Ausgabeort"); return result.selection.get(0).get("key"); } public String testReservationStep3(String selection) throws OpacApi.OpacErrorException, JSONException, IOException { String html = readResource(DIR + file + "_1.html"); doReturn(Jsoup.parse(html)).when(adis).htmlPost(anyString(), any(List.class)); OpacApi.ReservationResult result = adis.reservation(item, null, 0, selection); assertEquals(result.status, OpacApi.MultiStepResult.Status.SELECTION_NEEDED); assertTrue(result.selection.size() == 2); assertEquals(result.message, "Benachrichting per Brief - kostenpflichtig"); // sic! assertEquals(result.selection.get(1).get("value"), "Nein"); assertTrue(result.selection.get(1).get("key").contains("_SEP_")); return result.selection.get(1).get("key"); } public void testReservationStep4(String selection) throws OpacApi.OpacErrorException, JSONException, IOException { String html = readResource(DIR + file + "_2.html"); doReturn(Jsoup.parse(html)).when(adis).htmlPost(anyString(), any(List.class)); OpacApi.ReservationResult result = adis.reservation(item, null, 0, selection); System.out.println(result.status); } }