1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package com.jcabi.github;
31
32 import com.jcabi.http.Request;
33 import com.jcabi.http.mock.MkAnswer;
34 import com.jcabi.http.mock.MkContainer;
35 import com.jcabi.http.mock.MkGrizzlyContainer;
36 import com.jcabi.http.request.ApacheRequest;
37 import java.net.HttpURLConnection;
38 import java.util.Iterator;
39 import java.util.NoSuchElementException;
40 import javax.json.Json;
41 import javax.json.JsonArray;
42 import javax.json.JsonObject;
43 import org.hamcrest.MatcherAssert;
44 import org.hamcrest.Matchers;
45 import org.junit.Rule;
46 import org.junit.Test;
47
48
49
50
51
52
53 public final class RtValuePaginationTest {
54
55
56
57
58 @Rule
59 public final transient RandomPort resource = new RandomPort();
60
61
62
63
64
65 @Test
66 public void jumpNextPage() throws Exception {
67 final String jeff = "Jeff";
68 final String mark = "Mark";
69 final String judy = "Judy";
70 final String jessy = "Jessy";
71 final MkContainer container = new MkGrizzlyContainer().next(
72 RtValuePaginationTest.simple(jeff, mark)
73 .withHeader("Link", "</s?page=3&per_page=100>; rel=\"next\"")
74 ).next(RtValuePaginationTest.simple(judy, jessy))
75 .start(this.resource.port());
76 final Request request = new ApacheRequest(container.home());
77 final RtValuePagination<JsonObject, JsonArray> page =
78 new RtValuePagination<>(
79 request,
80 object -> Json.createObjectBuilder()
81 .add("id1", object.getString(0))
82 .add("id2", object.getString(1))
83 .build()
84 );
85 final Iterator<JsonObject> iterator = page.iterator();
86 MatcherAssert.assertThat(
87 iterator.next().toString(),
88 Matchers.allOf(
89 Matchers.containsString(jeff),
90 Matchers.containsString(mark)
91 )
92 );
93 MatcherAssert.assertThat(
94 iterator.next().toString(),
95 Matchers.allOf(
96 Matchers.containsString(judy),
97 Matchers.containsString(jessy)
98 )
99 );
100 container.stop();
101 }
102
103
104
105
106
107 @Test(expected = NoSuchElementException.class)
108 public void throwsIfNoMoreElement() throws Exception {
109 final String jeff = "other Jeff";
110 final String mark = "other Mark";
111 final MkContainer container = new MkGrizzlyContainer().next(
112 RtValuePaginationTest.simple(jeff, mark)
113 ).start(this.resource.port());
114 try {
115 final Request request = new ApacheRequest(container.home());
116 final RtValuePagination<JsonObject, JsonArray> page =
117 new RtValuePagination<>(
118 request,
119 object -> Json.createObjectBuilder()
120 .add("id3", object.getString(0))
121 .add("id4", object.getString(1))
122 .build()
123 );
124 final Iterator<JsonObject> iterator = page.iterator();
125 iterator.next();
126 MatcherAssert.assertThat(
127 iterator.next(),
128 Matchers.notNullValue()
129 );
130 } finally {
131 container.stop();
132 }
133 }
134
135
136
137
138
139
140
141 private static MkAnswer.Simple simple(final String one,
142 final String another
143 ) {
144 final String message = Json.createArrayBuilder()
145 .add(Json.createArrayBuilder().add(one).add(another))
146 .build().toString();
147 return new MkAnswer.Simple(HttpURLConnection.HTTP_OK, message);
148 }
149 }