Skip to content

Commit c448e55

Browse files
committed
Test findUserCalendars method in DavClient
- In DavServerExtension, code that uses Mockserver was migrated to Wiremock due to the former not supporting custom HTTP methods .e.g. PROPFIND
1 parent 0c96026 commit c448e55

File tree

8 files changed

+331
-165
lines changed

8 files changed

+331
-165
lines changed

tmail-backend/tmail-third-party/openpaas/pom.xml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,25 @@
107107
<artifactId>ez-vcard</artifactId>
108108
<version>0.12.1</version>
109109
</dependency>
110+
<dependency>
111+
<groupId>org.wiremock</groupId>
112+
<artifactId>wiremock</artifactId>
113+
<version>3.10.0</version>
114+
</dependency>
110115
</dependencies>
111116

117+
<dependencyManagement>
118+
<dependencies>
119+
<dependency>
120+
<groupId>org.eclipse.jetty</groupId>
121+
<artifactId>jetty-bom</artifactId>
122+
<version>11.0.18</version>
123+
<type>pom</type>
124+
<scope>import</scope>
125+
</dependency>
126+
</dependencies>
127+
</dependencyManagement>
128+
112129
<build>
113130
<plugins>
114131
<plugin>

tmail-backend/tmail-third-party/openpaas/src/main/java/com/linagora/tmail/dav/DavClient.java

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ public class DavClient {
6262

6363
private static final Duration DEFAULT_RESPONSE_TIMEOUT = Duration.ofSeconds(10);
6464
private static final String COLLECTED_ADDRESS_BOOK_PATH = "/addressbooks/%s/collected/%s.vcf";
65-
private static final String CALENDARS_BASE_PATH = "/calendars/%s";
6665
private static final Pattern CALENDAR_URI_PATTERN = Pattern.compile("/calendars/[^/]+/[^/]+/");
6766
private static final String ACCEPT_VCARD_JSON = "application/vcard+json";
6867
private static final String ACCEPT_XML = "application/xml";
@@ -151,22 +150,20 @@ private Mono<Void> handleContactCreationResponse(HttpClientResponse response, St
151150
};
152151
}
153152

154-
public Flux<VEvent> getCalendarVEventsByUid(String userId, String eventUid) {
153+
public Flux<VEvent> getCalendarVEventsByUid(String userId, String eventUid, String username) {
155154
Preconditions.checkArgument(StringUtils.isNotEmpty(eventUid), "VEvent id should not be empty");
156155
Preconditions.checkArgument(StringUtils.isNotEmpty(userId), "OpenPaas user id should not be empty");
157156

158-
return findUserCalendars(userId)
159-
.flatMap(calendarURI -> getCalendarVEventsByUidFromCalendar(calendarURI, eventUid));
157+
return findUserCalendars(userId, username)
158+
.flatMap(calendarURI -> getCalendarVEventsByUidFromCalendar(calendarURI, eventUid, username));
160159
}
161160

162-
public Flux<VEvent> getCalendarVEventsByUidFromCalendar(URI calendarURI, String eventUid) {
161+
public Flux<VEvent> getCalendarVEventsByUidFromCalendar(URI calendarURI, String eventUid, String username) {
163162
return client.headers(headers ->
164163
headers.add(HttpHeaderNames.ACCEPT, ACCEPT_XML)
165164
.add("Depth", "1")
166165
.add(HttpHeaderNames.AUTHORIZATION,
167-
HttpUtils.createBasicAuthenticationToken(
168-
config.adminCredential().getUserName(),
169-
config.adminCredential().getPassword())))
166+
HttpUtils.createBasicAuthenticationToken(createDelegatedCredentials(username))))
170167
.request(HttpMethod.valueOf("REPORT"))
171168
.uri(calendarURI.getPath())
172169
.send(Mono.just(new GetCalendarByEventIdRequestBody(eventUid).asByteBuf()))
@@ -196,15 +193,13 @@ private static Optional<Calendar> extractVCalendarFromResponse(DavMultistatus mu
196193
IOUtils.toInputStream(calendarData.getValue(), StandardCharsets.UTF_8)));
197194
}
198195

199-
public Flux<URI> findUserCalendars(String userId) {
196+
public Flux<URI> findUserCalendars(String userId, String username) {
200197
return client.headers(headers ->
201198
headers.add(HttpHeaderNames.ACCEPT, ACCEPT_XML)
202199
.add(HttpHeaderNames.AUTHORIZATION,
203-
HttpUtils.createBasicAuthenticationToken(
204-
config.adminCredential().getUserName(),
205-
config.adminCredential().getPassword())))
200+
HttpUtils.createBasicAuthenticationToken(createDelegatedCredentials(username))))
206201
.request(HttpMethod.valueOf("PROPFIND"))
207-
.uri(String.format(CALENDARS_BASE_PATH, userId))
202+
.uri("/calendars/" + userId)
208203
.responseSingle((response, byteBufMono) -> {
209204
if (response.status() == HttpResponseStatus.MULTI_STATUS) {
210205
return byteBufMono.asString(StandardCharsets.UTF_8)

tmail-backend/tmail-third-party/openpaas/src/test/java/com/linagora/tmail/CardDavCollectedContactIntegrationTest.java

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
package com.linagora.tmail;
2020

21+
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
2122
import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
2223
import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
2324
import static org.apache.james.mailets.configuration.Constants.PASSWORD;
@@ -54,13 +55,14 @@
5455
import org.junit.jupiter.api.extension.RegisterExtension;
5556
import org.junit.jupiter.api.io.TempDir;
5657

58+
import com.github.tomakehurst.wiremock.junit5.WireMockExtension;
5759
import com.google.inject.AbstractModule;
5860
import com.google.inject.Provides;
5961
import com.google.inject.util.Modules;
6062
import com.linagora.tmail.api.OpenPaasServerExtension;
63+
import com.linagora.tmail.configuration.OpenPaasConfiguration;
6164
import com.linagora.tmail.dav.CardDavUtils;
6265
import com.linagora.tmail.dav.DavServerExtension;
63-
import com.linagora.tmail.configuration.OpenPaasConfiguration;
6466
import com.linagora.tmail.james.jmap.contact.InMemoryEmailAddressContactSearchEngineModule;
6567
import com.linagora.tmail.mailet.CardDavCollectedContact;
6668

@@ -75,7 +77,9 @@ public class CardDavCollectedContactIntegrationTest {
7577
static OpenPaasServerExtension openPaasServerExtension = new OpenPaasServerExtension();
7678

7779
@RegisterExtension
78-
static DavServerExtension cardDavServerExtension = new DavServerExtension();
80+
static DavServerExtension davServerExtension = new DavServerExtension(
81+
WireMockExtension.extensionOptions()
82+
.options(wireMockConfig().dynamicPort()));
7983

8084
private TemporaryJamesServer jamesServer;
8185

@@ -105,7 +109,7 @@ public OpenPaasConfiguration provideOpenPaasConfiguration() {
105109
OpenPaasServerExtension.GOOD_USER(),
106110
OpenPaasServerExtension.GOOD_PASSWORD(),
107111
false,
108-
cardDavServerExtension.getCardDavConfiguration());
112+
davServerExtension.getCardDavConfiguration());
109113
}
110114
})
111115
.withMailetContainer(TemporaryJamesServer.defaultMailetContainerConfiguration()
@@ -137,14 +141,14 @@ void shouldPUTCreateCollectedContactWhenContactDoesNotExist() throws Exception {
137141
String openPassUid = UUID.randomUUID().toString();
138142
openPaasServerExtension.setSearchEmailExist(ALICE.asString(), openPassUid);
139143
// Contact does not exist
140-
cardDavServerExtension.setCollectedContactExists(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid, !COLLECTED_CONTACT_EXISTS);
141-
cardDavServerExtension.setCreateCollectedContact(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid);
144+
davServerExtension.setCollectedContactExists(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid, !COLLECTED_CONTACT_EXISTS);
145+
davServerExtension.setCreateCollectedContact(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid);
142146

143147
// when alice sends an email to bob
144148
aliceSendAnEmailToBob();
145149

146150
// then the endpoint createCollectedContact is called
147-
cardDavServerExtension.assertCreateCollectedContactWasCalled(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid, 1);
151+
davServerExtension.assertCreateCollectedContactWasCalled(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid, 1);
148152
}
149153

150154
@Test
@@ -154,14 +158,14 @@ void shouldNotPUTCreateCollectedContactWhenContactExists() throws Exception {
154158
String openPassUid = UUID.randomUUID().toString();
155159
openPaasServerExtension.setSearchEmailExist(ALICE.asString(), openPassUid);
156160
// Contact exists
157-
cardDavServerExtension.setCollectedContactExists(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid, COLLECTED_CONTACT_EXISTS);
158-
cardDavServerExtension.setCreateCollectedContact(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid);
161+
davServerExtension.setCollectedContactExists(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid, COLLECTED_CONTACT_EXISTS);
162+
davServerExtension.setCreateCollectedContact(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid);
159163

160164
// when alice sends an email to bob
161165
aliceSendAnEmailToBob();
162166

163167
// then the endpoint createCollectedContact is not called
164-
cardDavServerExtension.assertCreateCollectedContactWasCalled(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid, 0);
168+
davServerExtension.assertCreateCollectedContactWasCalled(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid, 0);
165169
}
166170

167171
@Test
@@ -170,14 +174,14 @@ void shouldNotPUTCreateCollectedContactWhenSearchEmailDoesNotExist() throws Exce
170174
String contactUid = CardDavUtils.createContactUid(BOB.asMailAddress());
171175
String openPassUid = UUID.randomUUID().toString();
172176
openPaasServerExtension.setSearchEmailNotFound(ALICE.asString());
173-
cardDavServerExtension.setCollectedContactExists(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid, !COLLECTED_CONTACT_EXISTS);
174-
cardDavServerExtension.setCreateCollectedContact(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid);
177+
davServerExtension.setCollectedContactExists(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid, !COLLECTED_CONTACT_EXISTS);
178+
davServerExtension.setCreateCollectedContact(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid);
175179

176180
// when alice sends an email to bob
177181
aliceSendAnEmailToBob();
178182

179-
cardDavServerExtension.assertCollectedContactExistsWasCalled(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid, 0);
180-
cardDavServerExtension.assertCreateCollectedContactWasCalled(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid, 0);
183+
davServerExtension.assertCollectedContactExistsWasCalled(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid, 0);
184+
davServerExtension.assertCreateCollectedContactWasCalled(ALICE_OPENPAAS_USER_NAME, openPassUid, contactUid, 0);
181185
}
182186

183187
@Test
@@ -187,10 +191,10 @@ void shouldPUTCreateCollectedContactMultipleTimesWhenMultipleRecipients() throws
187191
String cedricContactUid = CardDavUtils.createContactUid(CEDRIC.asMailAddress());
188192
String aliceOpenPassId = UUID.randomUUID().toString();
189193
openPaasServerExtension.setSearchEmailExist(ALICE.asString(), aliceOpenPassId);
190-
cardDavServerExtension.setCollectedContactExists(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, bobContactUid, !COLLECTED_CONTACT_EXISTS);
191-
cardDavServerExtension.setCreateCollectedContact(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, bobContactUid);
192-
cardDavServerExtension.setCollectedContactExists(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, cedricContactUid, !COLLECTED_CONTACT_EXISTS);
193-
cardDavServerExtension.setCreateCollectedContact(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, cedricContactUid);
194+
davServerExtension.setCollectedContactExists(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, bobContactUid, !COLLECTED_CONTACT_EXISTS);
195+
davServerExtension.setCreateCollectedContact(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, bobContactUid);
196+
davServerExtension.setCollectedContactExists(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, cedricContactUid, !COLLECTED_CONTACT_EXISTS);
197+
davServerExtension.setCreateCollectedContact(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, cedricContactUid);
194198

195199
// when alice sends an email to bob and cedric
196200
messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
@@ -217,8 +221,8 @@ void shouldPUTCreateCollectedContactMultipleTimesWhenMultipleRecipients() throws
217221
.awaitMessage(awaitAtMostOneMinute);
218222

219223
// then the endpoint createCollectedContact is called twice
220-
cardDavServerExtension.assertCreateCollectedContactWasCalled(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, bobContactUid, 1);
221-
cardDavServerExtension.assertCreateCollectedContactWasCalled(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, cedricContactUid, 1);
224+
davServerExtension.assertCreateCollectedContactWasCalled(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, bobContactUid, 1);
225+
davServerExtension.assertCreateCollectedContactWasCalled(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, cedricContactUid, 1);
222226
}
223227

224228
@Test
@@ -228,10 +232,10 @@ void shouldPUTCreateCollectedContactForContactDoesNotExistWhenMultipleRecipients
228232
String cedricContactUid = CardDavUtils.createContactUid(CEDRIC.asMailAddress());
229233
String aliceOpenPassId = UUID.randomUUID().toString();
230234
openPaasServerExtension.setSearchEmailExist(ALICE.asString(), aliceOpenPassId);
231-
cardDavServerExtension.setCollectedContactExists(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, bobContactUid, COLLECTED_CONTACT_EXISTS);
232-
cardDavServerExtension.setCreateCollectedContact(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, bobContactUid);
233-
cardDavServerExtension.setCollectedContactExists(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, cedricContactUid, !COLLECTED_CONTACT_EXISTS);
234-
cardDavServerExtension.setCreateCollectedContact(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, cedricContactUid);
235+
davServerExtension.setCollectedContactExists(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, bobContactUid, COLLECTED_CONTACT_EXISTS);
236+
davServerExtension.setCreateCollectedContact(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, bobContactUid);
237+
davServerExtension.setCollectedContactExists(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, cedricContactUid, !COLLECTED_CONTACT_EXISTS);
238+
davServerExtension.setCreateCollectedContact(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, cedricContactUid);
235239

236240
// when alice sends an email to bob and cedric
237241
messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
@@ -258,8 +262,8 @@ void shouldPUTCreateCollectedContactForContactDoesNotExistWhenMultipleRecipients
258262
.awaitMessage(awaitAtMostOneMinute);
259263

260264
// then the endpoint createCollectedContact is called once
261-
cardDavServerExtension.assertCreateCollectedContactWasCalled(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, bobContactUid, 0);
262-
cardDavServerExtension.assertCreateCollectedContactWasCalled(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, cedricContactUid, 1);
265+
davServerExtension.assertCreateCollectedContactWasCalled(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, bobContactUid, 0);
266+
davServerExtension.assertCreateCollectedContactWasCalled(ALICE_OPENPAAS_USER_NAME, aliceOpenPassId, cedricContactUid, 1);
263267
}
264268

265269
private void aliceSendAnEmailToBob() throws MessagingException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidKeySpecException {

0 commit comments

Comments
 (0)