• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

DataBiosphere / consent / #5692

18 Apr 2025 02:50PM UTC coverage: 78.932% (-0.02%) from 78.955%
#5692

push

web-flow
DT-1497: Add code to auto-set institution on user creation (#2485)

Institution is no longer selected by user but is assigned based on a user's email address and the DUOS configured domain-to-institution mapping.

52 of 68 new or added lines in 8 files covered. (76.47%)

1 existing line in 1 file now uncovered.

10183 of 12901 relevant lines covered (78.93%)

0.79 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

84.06
/src/main/java/org/broadinstitute/consent/http/service/InstitutionService.java
1
package org.broadinstitute.consent.http.service;
2

3
import com.google.api.client.http.HttpStatusCodes;
4
import com.google.inject.Inject;
5
import jakarta.ws.rs.NotFoundException;
6
import jakarta.ws.rs.ServerErrorException;
7
import java.io.IOException;
8
import java.util.Date;
9
import java.util.List;
10
import java.util.Objects;
11
import java.util.stream.Collectors;
12
import org.broadinstitute.consent.http.cloudstore.GCSService;
13
import org.broadinstitute.consent.http.db.InstitutionDAO;
14
import org.broadinstitute.consent.http.db.UserDAO;
15
import org.broadinstitute.consent.http.models.Institution;
16
import org.broadinstitute.consent.http.models.InstitutionDomainMap;
17
import org.broadinstitute.consent.http.service.UserService.SimplifiedUser;
18

19
public class InstitutionService {
20

21
  private final InstitutionDAO institutionDAO;
22
  private final UserDAO userDAO;
23
  private final GCSService store;
24

25
  @Inject
26
  public InstitutionService(InstitutionDAO institutionDAO, UserDAO userDAO, GCSService store) {
1✔
27
    this.institutionDAO = institutionDAO;
1✔
28
    this.userDAO = userDAO;
1✔
29
    this.store = store;
1✔
30
  }
1✔
31

32
  public Institution createInstitution(Institution institution, Integer userId) {
33
    checkForEmptyName(institution);
1✔
34
    checkUserId(userId);
1✔
35
    Date createTimestamp = new Date();
1✔
36
    Integer id = institutionDAO.insertInstitution(
1✔
37
        institution.getName(),
1✔
38
        institution.getItDirectorName(),
1✔
39
        institution.getItDirectorEmail(),
1✔
40
        institution.getInstitutionUrl(),
1✔
41
        institution.getDunsNumber(),
1✔
42
        institution.getOrgChartUrl(),
1✔
43
        institution.getVerificationUrl(),
1✔
44
        institution.getVerificationFilename(),
1✔
45
        (Objects.nonNull(institution.getOrganizationType()) ? institution.getOrganizationType()
1✔
46
            .getValue() : null),
1✔
47
        userId,
48
        createTimestamp
49
    );
50
    return institutionDAO.findInstitutionById(id);
1✔
51
  }
52

53
  public Institution updateInstitutionById(Institution institutionPayload, Integer id,
54
      Integer userId) {
55
    Institution targetInstitution = institutionDAO.findInstitutionById(id);
1✔
56
    isInstitutionNull(targetInstitution);
1✔
57
    checkUserId(userId);
1✔
58
    checkForEmptyName(institutionPayload);
1✔
59
    Date updateDate = new Date();
1✔
60
    institutionDAO.updateInstitutionById(
1✔
61
        id,
62
        institutionPayload.getName(),
1✔
63
        institutionPayload.getItDirectorEmail(),
1✔
64
        institutionPayload.getItDirectorName(),
1✔
65
        institutionPayload.getInstitutionUrl(),
1✔
66
        institutionPayload.getDunsNumber(),
1✔
67
        institutionPayload.getOrgChartUrl(),
1✔
68
        institutionPayload.getVerificationUrl(),
1✔
69
        institutionPayload.getVerificationFilename(),
1✔
70
        (Objects.nonNull(institutionPayload.getOrganizationType())
1✔
71
            ? institutionPayload.getOrganizationType().getValue() : null),
1✔
72
        userId,
73
        updateDate
74
    );
75
    return institutionDAO.findInstitutionById(id);
1✔
76
  }
77

78
  public void deleteInstitutionById(Integer id) {
79
    Institution institution = institutionDAO.findInstitutionById(id);
1✔
80
    isInstitutionNull(institution);
1✔
81
    institutionDAO.deleteInstitutionById(id);
1✔
82
  }
1✔
83

84
  public Institution findInstitutionById(Integer id) {
85
    Institution institution = institutionDAO.findInstitutionById(id);
1✔
86
    isInstitutionNull(institution);
1✔
87

88
    List<SimplifiedUser> signingOfficials = userDAO.getSOsByInstitution(id).stream()
1✔
89
        .map(SimplifiedUser::new)
1✔
90
        .collect(Collectors.toList());
1✔
91
    institution.setSigningOfficials(signingOfficials);
1✔
92

93
    return institution;
1✔
94
  }
95

96
  private InstitutionDomainMap getInstitutionDomainMap() {
97
    try {
NEW
98
      return store.readJsonFileFromBucket("institution-domain/allowlist.json",
×
99
          InstitutionDomainMap.class);
NEW
100
    } catch (IOException e) {
×
NEW
101
      throw new ServerErrorException("Could not load institution configuration",
×
102
          HttpStatusCodes.STATUS_CODE_SERVER_ERROR, e);
103
    }
104
  }
105

106
  public Institution findInstitutionForEmail(String email) {
NEW
107
    String name = getInstitutionDomainMap().getInstitutionForEmail(email);
×
NEW
108
    if (name != null) {
×
NEW
109
      var institutions = institutionDAO.findInstitutionsByName(name);
×
NEW
110
      if (institutions.size() == 1) {
×
NEW
111
        return institutions.get(0);
×
112
      }
113
    }
NEW
114
    return null;
×
115
  }
116

117
  public List<Institution> findAllInstitutions() {
118
    return institutionDAO.findAllInstitutions();
1✔
119
  }
120

121
  public List<Institution> findAllInstitutionsByName(String name) {
122
    return institutionDAO.findInstitutionsByName(name);
×
123
  }
124

125
  private void checkForEmptyName(Institution institution) {
126
    String name = institution.getName();
1✔
127
    if (Objects.isNull(name) || name.isBlank()) {
1✔
128
      throw new IllegalArgumentException("Institution name cannot be null or empty");
1✔
129
    }
130
  }
1✔
131

132
  private void checkUserId(Integer userId) {
133
    if (Objects.isNull(userId)) {
1✔
134
      throw new IllegalArgumentException("User ID is a required parameter");
×
135
    }
136
  }
1✔
137

138
  private void isInstitutionNull(Institution institution) {
139
    if (Objects.isNull(institution)) {
1✔
140
      throw new NotFoundException("Institution not found");
1✔
141
    }
142
  }
1✔
143
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc