Skip to content

Commit 4ee5446

Browse files
committed
Integration tests for connection requests
1 parent 9bbb11a commit 4ee5446

9 files changed

Lines changed: 285 additions & 22 deletions

File tree

server/src/main/java/access/api/IdentityProviderController.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import org.springframework.http.MediaType;
1717
import org.springframework.http.ResponseEntity;
1818
import org.springframework.transaction.annotation.Transactional;
19+
import org.springframework.util.CollectionUtils;
20+
import org.springframework.util.StringUtils;
1921
import org.springframework.validation.annotation.Validated;
2022
import org.springframework.web.bind.annotation.PutMapping;
2123
import org.springframework.web.bind.annotation.RequestBody;
@@ -60,15 +62,15 @@ public IdentityProviderController(UserRepository userRepository,
6062
public ResponseEntity<Map<String, Object>> connect(User user, @RequestBody @Validated ConnectionRequest connectionRequest) {
6163
LOG.debug("/connect SP to IdP connection for " + user.getEmail());
6264

65+
String idpManageIdentifier = connectionRequest.getIdpManageIdentifier();
66+
Organization organization = organizationRepository.findByManageIdentifier(idpManageIdentifier)
67+
.orElseThrow(() -> new NotFoundException("Organization with manageIdentifier not found: " + idpManageIdentifier));
68+
6369
Map<String, Object> serviceProvider = manage.providerById(connectionRequest.getEntityType(),
6470
connectionRequest.getApplicationManageIdentifier(), Environment.PROD);
6571

66-
String idpManageIdentifier = connectionRequest.getIdpManageIdentifier();
6772
Map<String, Object> identityProvider = manage.providerById(EntityType.saml20_idp, idpManageIdentifier, Environment.PROD);
6873

69-
Organization organization = organizationRepository.findByManageIdentifier(idpManageIdentifier)
70-
.orElseThrow(() -> new NotFoundException("Organization with manageIdentifier not found: " + idpManageIdentifier));
71-
7274
User userFromDB = reinitializeUser(user, userRepository);
7375
//See https://github.com/OpenConext/OpenConext-access/wiki/Service-Connect-Flow
7476
boolean memberRequest = !userFromDB.isSuperUser();
@@ -105,14 +107,17 @@ public ResponseEntity<Map<String, Object>> connect(User user, @RequestBody @Vali
105107
.equals(idpInstitutionGUID);
106108
boolean connectWithoutInteraction = idpAndSpShareInstitution || !connectOption.equals(DashBoardConnectionOption.connectWithInteraction);
107109
if (connectWithoutInteraction) {
108-
manage.connectWithoutInteraction(identityProvider, serviceProvider, userFromDB);
110+
manage.connectWithoutInteraction(identityProvider, serviceProvider, userFromDB);
109111
if (connectOption.equals(DashBoardConnectionOption.connectWithoutInteractionWithEmail)) {
110-
mailBox.sendNewConnectionCreated(
111-
userFromDB,
112-
contactPersons(serviceProvider),
113-
getProviderName(identityProvider),
114-
getProviderName(serviceProvider),
115-
(String) getData(serviceProvider).get("entityid"));
112+
List<String> recipients = contactPersons(serviceProvider);
113+
if (!CollectionUtils.isEmpty(recipients)) {
114+
mailBox.sendNewConnectionCreated(
115+
userFromDB,
116+
recipients,
117+
getProviderName(identityProvider),
118+
getProviderName(serviceProvider),
119+
(String) getData(serviceProvider).get("entityid"));
120+
}
116121
}
117122
return Results.createResult();
118123
}

server/src/main/java/access/mail/MailBox.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public void sendConnectionRequest(User requester,
9393
variables.put("serviceProviderName", serviceProviderName);
9494
variables.put("organization", organization);
9595
variables.put("requester", requester);
96-
variables.put("deepLink", String.format("%s/%s", clientUrl, deepLink));
96+
variables.put("deepLink", String.format("%s%s", clientUrl, deepLink));
9797
if (!environment.equalsIgnoreCase("prod")) {
9898
variables.put("environment", environment);
9999
}

server/src/main/java/access/model/ConnectionRequest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package access.model;
22

3+
import lombok.AllArgsConstructor;
34
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
46
import lombok.Setter;
57

68
import java.io.Serializable;
79

810
@Getter
911
@Setter
12+
@AllArgsConstructor
13+
@NoArgsConstructor
1014
public class ConnectionRequest implements Serializable {
1115

1216
private String applicationManageIdentifier;

server/src/main/resources/manage/oidc10_rp.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212
"OrganizationName:en": "SURF bv",
1313
"logo:0:url": "https://static.surfconext.nl/media/idp/surfconext.png",
1414
"coin:institution_guid": "ad93daef-0911-e511-80d0-005056956c1a",
15-
"coin:application_url": "https://default-url-calendar.org"
15+
"coin:application_url": "https://default-url-calendar.org",
16+
"coin:dashboard_connect_option": "connect_without_interaction_with_email",
17+
"contacts:0:contactType": "support",
18+
"contacts:0:emailAddress": "support@cal.com"
1619
}
1720
}
1821
},
@@ -28,7 +31,8 @@
2831
"name:nl": "Cloud NL",
2932
"OrganizationName:en": "SURF bv",
3033
"logo:0:url": "https://static.surfconext.nl/media/idp/surfconext.png",
31-
"coin:application_url": "https://default-url-cloud.org"
34+
"coin:application_url": "https://default-url-cloud.org",
35+
"coin:dashboard_connect_option": "connect_without_interaction_without_email"
3236
}
3337
}
3438
},

server/src/main/resources/templates/connection_request_en.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<p class="title" style="">Hello,</p>
1919

2020
<p><strong>{{requester.name}}</strong>
21-
has requested to connect service {{serviceProviderName} to your organization {{organization.name}}.</p>
21+
has requested to connect service {{serviceProviderName}} to your organization {{organization.name}}.</p>
2222

2323
{{#message}}
2424
<p style="margin: 20px 0 0 0;">Personal message from {{invitation.invitee.name}}</p>

server/src/test/java/access/AbstractMailTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,14 @@
99
import org.junit.jupiter.api.extension.RegisterExtension;
1010
import org.springframework.boot.test.context.SpringBootTest;
1111

12+
import java.time.Duration;
1213
import java.util.List;
1314
import java.util.stream.Collectors;
1415
import java.util.stream.Stream;
1516

1617
import static org.awaitility.Awaitility.await;
18+
import static org.junit.jupiter.api.Assertions.assertEquals;
19+
import static org.junit.jupiter.api.Assertions.assertTrue;
1720

1821
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
1922
properties = {
@@ -54,12 +57,9 @@ protected MimeMessageParser mailMessage() {
5457
return parser.parse();
5558
}
5659

57-
protected List<MimeMessageParser> allMailMessages(int expectedLength) {
58-
await().until(() -> greenMail.getReceivedMessages().length == expectedLength);
59-
MimeMessage[] receivedMessages = greenMail.getReceivedMessages();
60-
return Stream.of(receivedMessages)
61-
.map(this::mimeMessageParser)
62-
.collect(Collectors.toList());
60+
protected void confirmNoMailMessages() {
61+
await().atLeast(Duration.ofSeconds(1L));
62+
assertEquals(0, greenMail.getReceivedMessages().length);
6363
}
6464

6565
@SneakyThrows

server/src/test/java/access/AbstractTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import org.springframework.util.StringUtils;
4848
import org.springframework.web.util.UriComponentsBuilder;
4949

50+
import javax.sql.DataSource;
5051
import java.io.IOException;
5152
import java.net.URLDecoder;
5253
import java.nio.charset.StandardCharsets;
@@ -152,6 +153,9 @@ public abstract class AbstractTest {
152153
@Autowired
153154
protected OrganizationMembershipRepository organizationMembershipRepository;
154155

156+
@Autowired
157+
protected DataSource dataSource;
158+
155159
protected LocalManage localManage;
156160

157161
protected final Map<String, Long> seedIdentifiers = new HashMap<>();

0 commit comments

Comments
 (0)