Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,10 @@ class DownloadController @Inject() (
))

findVersion(apiOption) match {
case Some((api, _, VersionVisibility(ApiAccessType.CONTROLLED | ApiAccessType.INTERNAL, false, _))) =>
case Some((api, _, VersionVisibility(ApiAccessType.INTERNAL, false, _))) =>
redirectToLoginPage(api.serviceName)

case Some((api, selectedVersion, VersionVisibility(_, _, true))) =>
case Some((api, selectedVersion, VersionVisibility(_, _, _))) =>
downloadConnector.fetch(api.serviceName, selectedVersion.version, validResource)
.map(_.fold(renderNotFoundPage)(Future.successful))
.flatten
Expand Down
16 changes: 8 additions & 8 deletions app/uk/gov/hmrc/apidocumentation/views/helpers/Helpers.scala
Original file line number Diff line number Diff line change
Expand Up @@ -97,17 +97,17 @@ object ShowBaseURL {
object VersionDocsVisible {

def apply(availability: Option[VersionVisibility]): DocsVisibility = availability match {
case Some(VersionVisibility(ApiAccessType.PUBLIC, _, _)) => DocsVisibility.VISIBLE // PUBLIC
case Some(VersionVisibility(_, true, true)) => DocsVisibility.VISIBLE // Not Public, logged in, authorised (subscribed)
case Some(VersionVisibility(ApiAccessType.CONTROLLED, _, false)) => DocsVisibility.OVERVIEW_ONLY // CONTROLLED but not authorised (not subscribed)
case _ => DocsVisibility.NOT_VISIBLE
case Some(VersionVisibility(ApiAccessType.PUBLIC | ApiAccessType.CONTROLLED, _, _)) => DocsVisibility.VISIBLE // PUBLIC or CONTROLLED(signed in or out), both can see API documentation
// case Some(VersionVisibility(ApiAccessType.CONTROLLED, _, _)) => DocsVisibility.VISIBLE // CONTROLLED but not authorised (not subscribed)
case Some(VersionVisibility(_, true, true)) => DocsVisibility.VISIBLE // Not Public, logged in, authorised (subscribed)
case _ => DocsVisibility.NOT_VISIBLE
}

def apply(version: ExtendedApiVersion): DocsVisibility = VersionVisibility(version) match {
case Some(VersionVisibility(ApiAccessType.PUBLIC, _, _)) => DocsVisibility.VISIBLE // PUBLIC
case Some(VersionVisibility(_, true, true)) => DocsVisibility.VISIBLE // Not Public, logged in, authorised (subscribed)
case Some(VersionVisibility(ApiAccessType.CONTROLLED, _, false)) => DocsVisibility.OVERVIEW_ONLY // CONTROLLED but not authorised (not subscribed)
case _ => DocsVisibility.NOT_VISIBLE
case Some(VersionVisibility(ApiAccessType.PUBLIC | ApiAccessType.CONTROLLED, _, _)) => DocsVisibility.VISIBLE // PUBLIC or CONTROLLED(signed in or out), both can see API documentation
// case Some(VersionVisibility(ApiAccessType.CONTROLLED, _, _)) => DocsVisibility.VISIBLE // CONTROLLED but not authorised (not subscribed)
case Some(VersionVisibility(_, true, true)) => DocsVisibility.VISIBLE // Not Public, logged in, authorised (subscribed)
case _ => DocsVisibility.NOT_VISIBLE
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,13 @@
@(markdownBlocks: List[DocumentationItem], title: String, maybeVersion: Option[ExtendedApiVersion], maybeApi: Option[ExtendedApiDefinition], loggedIn: Boolean = false
)(implicit requestHeader: RequestHeader)

@requestAccess(version: ExtendedApiVersion) = {
@{version.sandboxAvailability.orElse(version.productionAvailability).map(x => x.access) match {
case Some(ApiAccessType.CONTROLLED) => <a id="version-@version.version.toString()-request-access" href="/devhub-support/flow/private-api-documentation">Request access</a>
case _ => ""
}}
}


<div data-spy="scroll" data-sticky-left-nav data-state="subsection" class="section" aria-busy="false">
<div id="section">
Expand Down Expand Up @@ -118,13 +125,21 @@ <h2 id="endpoints-title" class="govuk-heading-m">
<td class="govuk-table__cell govuk-table__cell--numeric"
id="environments">@ShowAvailabilityInEnvironment(EndpointsAvailable(version.sandboxAvailability), EndpointsAvailable(version.productionAvailability), applicationConfig)</td>
<td class="govuk-table__cell govuk-table__cell--numeric" id="endpoints">

@if(visibility == DocsVisibility.VISIBLE) {
<a href="@controllers.routes.OpenApiDocumentationController.renderApiDocumentation(api.serviceName, version.version).url">
@version.version.toString()
endpoints</a>
<table class="govuk-table">
<tr class="govuk-table__row">
<td>
<a href="@controllers.routes.OpenApiDocumentationController.renderApiDocumentation(api.serviceName, version.version).url">View endpoints</a>
</td>
</tr>
<tr class="govuk-table__row">
<td>
@requestAccess(version)
</td>
</tr>
</table>
} else { @if(visibility == DocsVisibility.OVERVIEW_ONLY & loggedIn) {
<a class="govuk-button govuk-button--secondary" id="version-@version.version.toString()-request-access" href="/devhub-support/flow/private-api-documentation">Request access</a>
<a class="govuk-button govuk-button--secondary" id="version-@version.version.toString()-request-access" href="/devhub-support/flow/private-api-documentation">Request access</a>
} else {
Sign in to request access
}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ class ApiDocumentationControllerSpec extends CommonControllerBaseSpec with PageR
verifyPageRendered(pageTitle("Hello World"), bodyContains = Seq("> stable"))(result)
}

"display the API landing page with 'Request access' button for private trial when logged in" in new Setup {
"display the API landing page with 'Request access' button for CONTROLLED APIs" in new Setup {
theUserIsLoggedIn()
theDefinitionServiceWillReturnAnApiDefinition(
extendedApiDefinitionWithPrincipalAndSubordinateAPIAvailability(
Expand All @@ -231,25 +231,6 @@ class ApiDocumentationControllerSpec extends CommonControllerBaseSpec with PageR
verifyPageRendered(pageTitle("Hello World"), bodyContains = Seq("> stable", "Request access"))(result)
}

"display the API landing page with NO 'Request access' button for private trial when not logged in" in new Setup {
theUserIsNotLoggedIn()
theDefinitionServiceWillReturnAnApiDefinition(
extendedApiDefinitionWithPrincipalAndSubordinateAPIAvailability(
serviceName,
versionOne,
Some(ApiAvailability(true, ApiAccessType.CONTROLLED, false, false)),
Some(ApiAvailability(true, ApiAccessType.CONTROLLED, false, false))
)
)
DownloadConnectorMock.Fetch.returnsNoneIfNotFound()

val result = underTest.renderApiDocumentation(serviceName, versionOne)(request)

verifyApiDocumentationPageRendered(result)
verifyPageRendered(pageTitle("Hello World"), bodyContains = Seq("> stable"))(result)
verifyPageDoesNotContain(texts = Seq("Request access"))(result)
}

"display the not found page when invalid version specified" in new Setup {
theUserIsLoggedIn()
theDefinitionServiceWillReturnAnApiDefinition(
Expand Down