diff --git a/app/uk/gov/hmrc/apidocumentation/controllers/DownloadController.scala b/app/uk/gov/hmrc/apidocumentation/controllers/DownloadController.scala index 80f302db..4a365023 100644 --- a/app/uk/gov/hmrc/apidocumentation/controllers/DownloadController.scala +++ b/app/uk/gov/hmrc/apidocumentation/controllers/DownloadController.scala @@ -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 diff --git a/app/uk/gov/hmrc/apidocumentation/views/helpers/Helpers.scala b/app/uk/gov/hmrc/apidocumentation/views/helpers/Helpers.scala index 0cd1c35f..e133710f 100644 --- a/app/uk/gov/hmrc/apidocumentation/views/helpers/Helpers.scala +++ b/app/uk/gov/hmrc/apidocumentation/views/helpers/Helpers.scala @@ -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 } } diff --git a/app/uk/gov/hmrc/apidocumentation/views/openapispec/ParentPageView.scala.html b/app/uk/gov/hmrc/apidocumentation/views/openapispec/ParentPageView.scala.html index 4db68ca0..60183d75 100644 --- a/app/uk/gov/hmrc/apidocumentation/views/openapispec/ParentPageView.scala.html +++ b/app/uk/gov/hmrc/apidocumentation/views/openapispec/ParentPageView.scala.html @@ -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) => Request access + case _ => "" + }} +} +
@@ -118,13 +125,21 @@

@ShowAvailabilityInEnvironment(EndpointsAvailable(version.sandboxAvailability), EndpointsAvailable(version.productionAvailability), applicationConfig) - @if(visibility == DocsVisibility.VISIBLE) { - - @version.version.toString() - endpoints + + + + + + + +
+ View endpoints +
+ @requestAccess(version) +
} else { @if(visibility == DocsVisibility.OVERVIEW_ONLY & loggedIn) { - Request access + Request access } else { Sign in to request access }} diff --git a/test/uk/gov/hmrc/apidocumentation/controllers/ApiDocumentationControllerSpec.scala b/test/uk/gov/hmrc/apidocumentation/controllers/ApiDocumentationControllerSpec.scala index f95016d7..d32f20b5 100644 --- a/test/uk/gov/hmrc/apidocumentation/controllers/ApiDocumentationControllerSpec.scala +++ b/test/uk/gov/hmrc/apidocumentation/controllers/ApiDocumentationControllerSpec.scala @@ -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( @@ -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(