diff --git a/app/models/admin/FeatureFlag.scala b/app/models/admin/FeatureFlag.scala index a82e2896..96c30990 100644 --- a/app/models/admin/FeatureFlag.scala +++ b/app/models/admin/FeatureFlag.scala @@ -32,9 +32,12 @@ sealed trait FeatureFlagName { object FeatureFlagName { implicit val writes: Writes[FeatureFlagName] = (o: FeatureFlagName) => JsString(o.toString) - implicit val reads: Reads[FeatureFlagName] = { - case name if name == JsString(PertaxBackendToggle.toString) => JsSuccess(PertaxBackendToggle) - case _ => JsError("Unknown FeatureFlagName") + implicit val reads: Reads[FeatureFlagName] = new Reads[FeatureFlagName] { + override def reads(json: JsValue): JsResult[FeatureFlagName] = + allFeatureFlags + .find(flag => JsString(flag.toString) == json) + .map(JsSuccess(_)) + .getOrElse(JsError(s"Unknown FeatureFlagName `${json.toString}`")) } implicit val formats: Format[FeatureFlagName] = diff --git a/app/views/Main.scala b/app/views/Main.scala index 2f9aa814..a108302e 100644 --- a/app/views/Main.scala +++ b/app/views/Main.scala @@ -94,14 +94,15 @@ class MainImpl @Inject() ( keepAliveUrl = "/keep-alive", showBackLinkJS = !disableBackLink, backLinkUrl = backLinkHref, - showSignOutInHeader = true, + showSignOutInHeader = false, + hideMenuBar = !BaseUserRequest.isAuthenticated, scripts = Seq(additionalScripts(scripts)), styleSheets = Seq( additionalStyles() ), bannerConfig = BannerConfig( showAlphaBanner = false, - showBetaBanner = false, + showBetaBanner = true, showHelpImproveBanner = true ), optTrustedHelper = trustedHelper, diff --git a/test/models/admin/FeatureFlagSpec.scala b/test/models/admin/FeatureFlagSpec.scala new file mode 100644 index 00000000..77c64c82 --- /dev/null +++ b/test/models/admin/FeatureFlagSpec.scala @@ -0,0 +1,55 @@ +/* + * Copyright 2023 HM Revenue & Customs + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package models.admin + +import play.api.libs.json.{JsResultException, JsString, Json} +import utils.UnitSpec + +class FeatureFlagSpec extends UnitSpec { + + val testFlag: FeatureFlagName = SCAWrapperToggle + + "read json" in { + JsString(testFlag.toString).as[FeatureFlagName] shouldBe testFlag + } + + "throw an exception if name is invalid" in { + val result = intercept[JsResultException] { + JsString("invalid").as[FeatureFlagName] + } + + result.getMessage should include("Unknown FeatureFlagName `\"invalid\"`") + } + + "write json" in { + Json.toJson(testFlag).toString shouldBe s""""${testFlag.toString}"""" + } + + "String binds to a Right(FeatureFlagName)" in { + FeatureFlagName.pathBindable.bind("key", testFlag.toString) shouldBe Right(testFlag) + } + + "Invalid string binds to a Left" in { + val name = "invalid" + FeatureFlagName.pathBindable.bind("key", name) shouldBe Left(s"The feature flag `$name` does not exist") + } + + "FeatureFlagName unbinds to a string" in { + FeatureFlagName.pathBindable.unbind("aa", testFlag) shouldBe testFlag.toString + } + +} \ No newline at end of file