Skip to content

Commit 0fe1d01

Browse files
authored
Merge pull request #124 from hmrc/BDOG-421
Bdog 421
2 parents b6c926c + b1e4c03 commit 0fe1d01

File tree

7 files changed

+100
-116
lines changed

7 files changed

+100
-116
lines changed

app/uk/gov/hmrc/cataloguefrontend/connector/UserManagementConnector.scala

Lines changed: 24 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,18 @@ case class UserManagementConnector @Inject()(
5353
httpClient.GET[HttpResponse](url)(httpReads, newHeaderCarrier, ec)
5454
.map { response =>
5555
response.status match {
56-
case 200 => extractMembers(teamName, response)
57-
case httpCode => Left(HTTPError(httpCode))
56+
case 200 => (response.json \ "members").validate[List[TeamMember]].fold(
57+
errors => Left(UMPError.ConnectionError(s"Could not parse response from $url: $errors"))
58+
, Right.apply
59+
)
60+
case 404 => Left(UMPError.UnknownTeam)
61+
case httpCode => Left(UMPError.HTTPError(httpCode))
5862
}
5963
}
6064
.recover {
6165
case ex =>
62-
Logger.error(s"An error occurred when connecting to $userManagementBaseUrl: ${ex.getMessage}", ex)
63-
Left(ConnectionError(ex))
66+
Logger.error(s"An error occurred when connecting to $url", ex)
67+
Left(UMPError.ConnectionError(s"Could not connect to $url: ${ex.getMessage}"))
6468
}
6569
}
6670

@@ -70,14 +74,17 @@ case class UserManagementConnector @Inject()(
7074
httpClient.GET[HttpResponse](url)(httpReads, newHeaderCarrier, ec)
7175
.map { response =>
7276
response.status match {
73-
case 200 => Right(extractUsers(response))
74-
case httpCode => Left(HTTPError(httpCode))
77+
case 200 => (response.json \\ "users").headOption
78+
.map(_.as[Seq[TeamMember]])
79+
.fold[Either[UMPError, Seq[TeamMember]]](
80+
ifEmpty = Left(UMPError.ConnectionError(s"Could not parse response from $url")))(Right.apply)
81+
case httpCode => Left(UMPError.HTTPError(httpCode))
7582
}
7683
}
7784
.recover {
7885
case ex =>
79-
Logger.error(s"An error occurred when connecting to $url: ${ex.getMessage}", ex)
80-
Left(ConnectionError(ex))
86+
Logger.error(s"An error occurred when connecting to $url", ex)
87+
Left(UMPError.ConnectionError(s"Could not connect to $url: ${ex.getMessage}"))
8188
}
8289
}
8390

@@ -88,18 +95,17 @@ case class UserManagementConnector @Inject()(
8895
.map { response =>
8996
response.status match {
9097
case 200 => response.json.validate[TeamDetails].fold(
91-
errors => { Logger.error(s"Failed to get team details from $url: $errors")
92-
Left(NoData(umpMyTeamsPageUrl(teamName)))
93-
}
98+
errors => Left(UMPError.ConnectionError(s"Could not parse response from $url: $errors"))
9499
, Right.apply
95100
)
96-
case httpCode => Left(HTTPError(httpCode))
101+
case 404 => Left(UMPError.UnknownTeam)
102+
case httpCode => Left(UMPError.HTTPError(httpCode))
97103
}
98104
}
99105
.recover {
100106
case ex =>
101-
Logger.error(s"An error occurred when connecting to $userManagementBaseUrl: ${ex.getMessage}", ex)
102-
Left(ConnectionError(ex))
107+
Logger.error(s"An error occurred when connecting to $url", ex)
108+
Left(UMPError.ConnectionError(s"Could not connect to $url: ${ex.getMessage}"))
103109
}
104110
}
105111

@@ -115,34 +121,15 @@ case class UserManagementConnector @Inject()(
115121
}
116122
}
117123
}
118-
119-
private def extractMembers(team: String, response: HttpResponse): Either[UMPError, Seq[TeamMember]] = {
120-
val optList =
121-
(response.json \\ "members").headOption
122-
.map(_.as[List[TeamMember]])
123-
124-
optList match {
125-
case Some(teamMembers) if teamMembers.nonEmpty => Right(teamMembers)
126-
case _ => Left(NoData(umpMyTeamsPageUrl(team)))
127-
}
128-
}
129-
130-
private def extractUsers(response: HttpResponse): Seq[TeamMember] =
131-
(response.json \\ "users").headOption
132-
.map(_.as[Seq[TeamMember]])
133-
.getOrElse(throw new RuntimeException(s"Unable to parse or extract UMP users: ${response.json}"))
134-
135124
}
136125

137126
object UserManagementConnector {
138127
sealed trait UMPError
139128

140-
case class NoData(linkToRectify: String) extends UMPError
141-
142-
case class HTTPError(code: Int) extends UMPError
143-
144-
case class ConnectionError(exception: Throwable) extends UMPError {
145-
override def toString: String = exception.getMessage
129+
object UMPError {
130+
case object UnknownTeam extends UMPError
131+
case class HTTPError(code: Int) extends UMPError
132+
case class ConnectionError(error: String) extends UMPError
146133
}
147134

148135
case class TeamMember(

app/uk/gov/hmrc/cataloguefrontend/service/AuthService.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import uk.gov.hmrc.cataloguefrontend.actions.UmpAuthenticatedRequest
2424
import uk.gov.hmrc.cataloguefrontend.connector.model.Username
2525
import uk.gov.hmrc.cataloguefrontend.connector.{RepoType, Team, TeamsAndRepositoriesConnector, UserManagementAuthConnector, UserManagementConnector}
2626
import uk.gov.hmrc.cataloguefrontend.connector.UserManagementAuthConnector.{UmpToken, UmpUnauthorized, UmpUserId}
27-
import uk.gov.hmrc.cataloguefrontend.connector.UserManagementConnector.DisplayName
27+
import uk.gov.hmrc.cataloguefrontend.connector.UserManagementConnector.{DisplayName, UMPError}
2828
import uk.gov.hmrc.http.HeaderCarrier
2929

3030

@@ -68,7 +68,7 @@ class AuthService @Inject()(
6868
else
6969
userManagementConnector.getTeamMembersFromUMP(team.name)
7070
.map {
71-
case Left(UserManagementConnector.HTTPError(404))
71+
case Left(UMPError.UnknownTeam)
7272
=> // Not all teams returned from TeamsAndRepositories (github) exist in UMP
7373
Logger.debug(s"Team `${team.name}` not found in UMP")
7474
List.empty

app/views/DigitalServiceInfoPage.scala.html

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*@
1616

17-
@import uk.gov.hmrc.cataloguefrontend.connector.UserManagementConnector.{NoData, UMPError}
17+
@import uk.gov.hmrc.cataloguefrontend.connector.UserManagementConnector.UMPError
1818
@import uk.gov.hmrc.cataloguefrontend.{DigitalServiceDetails, ViewMessages}
1919
@import uk.gov.hmrc.cataloguefrontend.connector.RepoType
2020
@import uk.gov.hmrc.cataloguefrontend.connector.RepoType.RepoType
@@ -91,17 +91,29 @@ <h4 class="sub__heading"><a href="/teams/@teamName">@teamName</a></h4>
9191
<div class="board__body">
9292
<div>
9393
<ul class="list list--minimal" id="team_members">
94-
@if(errorOrMembers.isRight) {
95-
@for(teamMember <- errorOrMembers.right.get) {
96-
<li class="col-xs-3">
97-
<a href="@teamMember.umpLink" target="_blank">@teamMember.displayName<span class="glyphicon glyphicon-new-window"/></a>
94+
@errorOrMembers match {
95+
case Right(members) if members.isEmpty => {
96+
<li class="list list--minimal" id="ump-error-@{teamName}">
97+
@teamName has no members
98+
</li>
99+
}
100+
case Right(members) => {
101+
@for(teamMember <- members) {
102+
<li class="col-xs-3">
103+
<a href="@teamMember.umpLink" target="_blank">@teamMember.displayName<span class="glyphicon glyphicon-new-window"/></a>
104+
</li>
105+
}
106+
}
107+
case Left(UMPError.UnknownTeam) => {
108+
<li class="list list--minimal" id="ump-error-@{teamName}">
109+
@teamName is unknown to the User Management Portal. To add the team, please raise a TSR
110+
</li>
111+
}
112+
case Left(_) => {
113+
<li class="list list--minimal" id="ump-error-@{teamName}">
114+
Sorry, the User Management Portal is not available
98115
</li>
99116
}
100-
101-
} else {
102-
<li class="list list--minimal" id="ump-error-@{teamName}">
103-
@showUmpError(errorOrMembers.left.get, teamName)
104-
</li>
105117
}
106118
</ul>
107119

@@ -223,18 +235,6 @@ <h4 class="sub__heading"><a href="/teams/@teamName">@teamName</a></h4>
223235

224236
}
225237

226-
@showUmpError(error: UMPError, teamName: String) = {
227-
@error match {
228-
case NoData(linkToRectify) => {
229-
@teamName is unknown to the User Management Portal. To add the team, please raise a TSR
230-
}
231-
case _ => {
232-
Sorry, the User Management Portal is not available
233-
}
234-
}
235-
}
236-
237-
238238
@showRepositories(repos: Map[String, Seq[String]], repoType: RepoType, headerName: String, typeName: String, href: String) = {
239239
@repos.get(repoType.toString).map { repositories =>
240240
<div class="col-md-3">
@@ -257,4 +257,3 @@ <h3 class="board__heading">@headerName</h3>
257257
</div>
258258
}
259259
}
260-

app/views/OutOfDateTeamDependenciesPage.scala.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*@
1616

1717
@import uk.gov.hmrc.cataloguefrontend.DateHelper._
18-
@import uk.gov.hmrc.cataloguefrontend.connector.UserManagementConnector.{UMPError, NoData, TeamDetails}
18+
@import uk.gov.hmrc.cataloguefrontend.connector.UserManagementConnector.{UMPError, TeamDetails}
1919
@import uk.gov.hmrc.cataloguefrontend.{ChartDataRows, ViewMessages}
2020
@import uk.gov.hmrc.cataloguefrontend.TeamActivityDates
2121
@import uk.gov.hmrc.cataloguefrontend.connector.RepoType.RepoType

app/views/TeamInfoPage.scala.html

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616

1717
@import uk.gov.hmrc.cataloguefrontend.CatalogueFrontendSwitches
1818
@import uk.gov.hmrc.cataloguefrontend.DateHelper._
19-
@import uk.gov.hmrc.cataloguefrontend.connector.UserManagementConnector.{UMPError, NoData, TeamDetails}
19+
@import uk.gov.hmrc.cataloguefrontend.connector.UserManagementConnector.{UMPError, TeamDetails}
20+
2021
@import uk.gov.hmrc.cataloguefrontend.ViewMessages
2122
@import uk.gov.hmrc.cataloguefrontend.TeamActivityDates
2223
@import uk.gov.hmrc.cataloguefrontend.connector.RepoType.RepoType
@@ -101,8 +102,15 @@ <h3 class="board__heading">Details</h3>
101102
@teamDetails.location
102103
</li>
103104
}
105+
case Left(UMPError.HTTPError(404)) => {
106+
<div>
107+
@teamName is unknown to the User Management Portal. To add the team, please raise a TSR
108+
</div>
109+
}
104110
case Left(error) => {
105-
<div>@showError(error)</div>
111+
<div>
112+
Sorry, the User Management Portal is not available
113+
</div>
106114
}
107115
}
108116
</ul>
@@ -122,16 +130,22 @@ <h3 class="board__heading">Team Members</h3>
122130
<div>
123131
<ul class="list list--minimal" id="team_members">
124132
@errorOrTeamMembers match {
133+
case Right(teamMembers) if teamMembers.isEmpty => {
134+
@teamName has no members
135+
}
125136
case Right(teamMembers) => {
126137
@for(teamMember <- teamMembers) {
127138
<li class="col-xs-6">
128139
<a href="@teamMember.umpLink" target="_blank">@teamMember.displayName<span class="glyphicon glyphicon-new-window"/></a> @if(teamMember.isServiceOwner) { <span class="label label-success">Service Owner</span>}
129140
</li>
130141
}
131142
}
143+
case Left(UMPError.UnknownTeam) => {
144+
@teamName is unknown to the User Management Portal. To add the team, please raise a TSR
145+
}
132146
case Left(error) => {
133147
<li id="linkToRectify">
134-
@showError(error)
148+
Sorry, the User Management Portal is not available
135149
</li>
136150
}
137151
}
@@ -168,17 +182,6 @@ <h3 class="board__heading">Team Members</h3>
168182
</div>
169183
}
170184

171-
@showError(error: UMPError) = {
172-
@error match {
173-
case NoData(linkToRectify) => {
174-
@teamName is unknown to the User Management Portal. To add the team, please raise a TSR
175-
}
176-
case _ => {
177-
Sorry, the User Management Portal is not available
178-
}
179-
}
180-
}
181-
182185
@showRepositories(repos: Map[String, Seq[String]], repoType: RepoType, headerName: String, typeName: String, href: String) = {
183186
@repos.get(repoType.toString).map { repositories =>
184187
<div class="col-md-3">

test/uk/gov/hmrc/cataloguefrontend/DigitalServicePageSpec.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ import play.api.libs.ws._
2929
import play.api.test.FakeRequest
3030
import play.api.test.Helpers.{GET => _, _}
3131
import uk.gov.hmrc.cataloguefrontend.actions.{ActionsSupport, UmpVerifiedRequest}
32+
import uk.gov.hmrc.cataloguefrontend.connector.{DigitalService, UserManagementAuthConnector, UserManagementConnector, ServiceDependenciesConnector, TeamsAndRepositoriesConnector}
3233
import uk.gov.hmrc.cataloguefrontend.connector.UserManagementConnector.{TeamMember, UMPError}
33-
import uk.gov.hmrc.cataloguefrontend.connector._
3434
import uk.gov.hmrc.cataloguefrontend.events.{EventService, ReadModelService}
3535
import uk.gov.hmrc.cataloguefrontend.service.{CatalogueErrorHandler, ConfigService, DeploymentsService, LeakDetectionService, RouteRulesService}
3636
import uk.gov.hmrc.cataloguefrontend.shuttering.ShutterService
@@ -269,7 +269,7 @@ class DigitalServicePageSpec
269269
.thenReturn(Future.successful(Some(DigitalService(digitalServiceName, 1, Nil))))
270270
when(userManagementConnectorMock.getTeamMembersForTeams(any())(any())).thenReturn(
271271
Future.successful(
272-
Map(teamName -> Left(UserManagementConnector.ConnectionError(new RuntimeException("Boooom!"))))
272+
Map(teamName -> Left(UMPError.ConnectionError("Boooom!")))
273273
)
274274
)
275275

@@ -290,7 +290,7 @@ class DigitalServicePageSpec
290290
.thenReturn(Future.successful(Some(DigitalService(digitalServiceName, 1, Nil))))
291291
when(userManagementConnectorMock.getTeamMembersForTeams(any())(any())).thenReturn(
292292
Future.successful(
293-
Map(teamName -> Left(UserManagementConnector.NoData("https://some-link-to-rectify")))
293+
Map(teamName -> Left(UMPError.UnknownTeam))
294294
)
295295
)
296296

@@ -312,7 +312,7 @@ class DigitalServicePageSpec
312312
.thenReturn(Future.successful(Some(DigitalService(digitalServiceName, 1, Nil))))
313313
when(userManagementConnectorMock.getTeamMembersForTeams(any())(any())).thenReturn(
314314
Future.successful(
315-
Map(teamName -> Left(UserManagementConnector.HTTPError(404)))
315+
Map(teamName -> Left(UMPError.HTTPError(500)))
316316
)
317317
)
318318

0 commit comments

Comments
 (0)