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 @@ -21,8 +21,9 @@
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.zowe.apiml.config.ApplicationInfo;
import org.zowe.apiml.product.version.BuildInfo;
import org.zowe.apiml.product.version.BuildInfoDetails;
import org.zowe.apiml.product.version.VersionInfo;
import org.zowe.apiml.product.version.VersionInfoDetails;
import org.zowe.apiml.product.version.VersionService;
import org.zowe.apiml.zaas.security.login.Providers;
import org.zowe.apiml.zaas.security.service.JwtSecurity;

Expand All @@ -40,12 +41,13 @@ public class ApimlHomepageController {
private static final String WARNING_ICON_NAME = "warning";

private final DiscoveryClient discoveryClient;
private final BuildInfo buildInfo;
private final VersionService versionService;

private final ApplicationInfo applicationInfo;
private final ApplicationContext applicationContext;

private String buildString;
private String zoweVersionText;

@PostConstruct
public void init() {
Expand All @@ -61,10 +63,15 @@ public String home(Model model) {
}

private void initializeBuildInfos() {
BuildInfoDetails buildInfoDetails = buildInfo.getBuildInfoDetails();
VersionInfo versionInfo = versionService.getVersion();
VersionInfoDetails apiml = versionInfo.getApiml();
buildString = "Build information is not available";
if (!buildInfoDetails.getVersion().equalsIgnoreCase("unknown")) {
buildString = String.format("Version %s build # %s", buildInfoDetails.getVersion(), buildInfoDetails.getNumber());
if (apiml != null && apiml.getVersion() != null && !apiml.getVersion().equalsIgnoreCase("unknown")) {
buildString = String.format("API ML Version %s build # %s", apiml.getVersion(), apiml.getBuildNumber());
}
VersionInfoDetails zowe = versionInfo.getZowe();
if (zowe != null && zowe.getVersion() != null && !zowe.getVersion().equalsIgnoreCase("unknown")) {
zoweVersionText = String.format("Zowe Version %s build # %s", zowe.getVersion(), zowe.getBuildNumber());
}
}

Expand All @@ -86,6 +93,7 @@ private void initializeParameters(Model model) {
model.addAttribute("catalogLinkEnabled", true);
model.addAttribute("catalogStatusText", "The API Catalog");
model.addAttribute("buildInfoText", buildString);
model.addAttribute("zoweVersionText", zoweVersionText);
}

private boolean isAuthReady() {
Expand Down
5 changes: 4 additions & 1 deletion apiml/src/main/resources/templates/home.html
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,10 @@ <h1>API Mediation Layer</h1>
</ul>
</div>
<footer>
<p class="footer" th:text="${buildInfoText}"/>
<div class="footer">
<p th:text="${buildInfoText}"/>
<p th:if="${zoweVersionText != null}" th:text="${zoweVersionText}"/>
</div>
</footer>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
/*
* This program and the accompanying materials are made available under the terms of the
* Eclipse Public License v2.0 which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-v20.html
*
* SPDX-License-Identifier: EPL-2.0
*
* Copyright Contributors to the Zowe Project.
*/

package org.zowe.apiml.controller;

import org.hamcrest.collection.IsMapContaining;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.context.ApplicationContext;
import org.springframework.ui.ConcurrentModel;
import org.springframework.ui.Model;
import org.zowe.apiml.config.ApplicationInfo;
import org.zowe.apiml.product.constants.CoreService;
import org.zowe.apiml.product.version.VersionInfo;
import org.zowe.apiml.product.version.VersionInfoDetails;
import org.zowe.apiml.product.version.VersionService;
import org.zowe.apiml.zaas.security.login.Providers;
import org.zowe.apiml.zaas.security.service.JwtSecurity;

import java.util.Map;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

class ApimlHomepageControllerTest {

private DiscoveryClient discoveryClient;
private VersionService versionService;
private ApplicationContext applicationContext;
private ApimlHomepageController apimlHomepageController;

@BeforeEach
void setup() {
discoveryClient = mock(DiscoveryClient.class);
applicationContext = mock(ApplicationContext.class);

Providers providers = mock(Providers.class);
when(providers.isZosfmUsed()).thenReturn(false);
when(applicationContext.getBean(Providers.class)).thenReturn(providers);
when(applicationContext.getBean(JwtSecurity.class)).thenReturn(mock(JwtSecurity.class));

versionService = mock(VersionService.class);
when(versionService.getVersion()).thenReturn(new VersionInfo(null, new VersionInfoDetails("unknown", "000", "abc")));

ApplicationInfo applicationInfo = ApplicationInfo.builder()
.isModulith(false)
.authServiceId(CoreService.ZAAS.getServiceId()).build();

apimlHomepageController = new ApimlHomepageController(discoveryClient, versionService, applicationInfo, applicationContext);
}

@Test
void givenBuildVersionUnknown_whenHomePageCalled_thenBuildInfoShouldBeStaticText() {
Model model = new ConcurrentModel();
apimlHomepageController.init();
apimlHomepageController.home(model);

Map<String, Object> actualModelMap = model.asMap();
assertThat(actualModelMap, IsMapContaining.hasEntry("buildInfoText", "Build information is not available"));
}

@Test
void givenSpecificBuildVersion_whenHomePageCalled_thenBuildInfoShouldBeGivenVersionAndNumber() {
VersionService versionService = mock(VersionService.class);

Check warning on line 74 in apiml/src/test/java/org/zowe/apiml/controller/ApimlHomepageControllerTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename "versionService" which hides the field declared at line 38.

See more on https://sonarcloud.io/project/issues?id=zowe_api-layer&issues=AZ2qW9ojkfIFbBBkJGO3&open=AZ2qW9ojkfIFbBBkJGO3&pullRequest=4569
when(versionService.getVersion()).thenReturn(new VersionInfo(null, new VersionInfoDetails("test-version", "test-number", "abc")));

ApplicationInfo applicationInfo = ApplicationInfo.builder()
.isModulith(false)
.authServiceId(CoreService.ZAAS.getServiceId()).build();
ApimlHomepageController controller = new ApimlHomepageController(discoveryClient, versionService, applicationInfo, applicationContext);

Model model = new ConcurrentModel();
controller.init();
controller.home(model);

Map<String, Object> actualModelMap = model.asMap();
assertThat(actualModelMap, IsMapContaining.hasEntry("buildInfoText", "API ML Version test-version build # test-number"));
}

@Test
void givenZoweVersion_whenHomePageCalled_thenZoweVersionTextShouldBeIncluded() {
VersionService versionService = mock(VersionService.class);

Check warning on line 92 in apiml/src/test/java/org/zowe/apiml/controller/ApimlHomepageControllerTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename "versionService" which hides the field declared at line 38.

See more on https://sonarcloud.io/project/issues?id=zowe_api-layer&issues=AZ2qW9ojkfIFbBBkJGO4&open=AZ2qW9ojkfIFbBBkJGO4&pullRequest=4569
when(versionService.getVersion()).thenReturn(new VersionInfo(
new VersionInfoDetails("2.0.0", "500", "def"),
new VersionInfoDetails("test-version", "test-number", "abc")
));

ApplicationInfo applicationInfo = ApplicationInfo.builder()
.isModulith(false)
.authServiceId(CoreService.ZAAS.getServiceId()).build();
ApimlHomepageController controller = new ApimlHomepageController(discoveryClient, versionService, applicationInfo, applicationContext);

Model model = new ConcurrentModel();
controller.init();
controller.home(model);

Map<String, Object> actualModelMap = model.asMap();
assertThat(actualModelMap, IsMapContaining.hasEntry("zoweVersionText", "Zowe Version 2.0.0 build # 500"));
}

@Test
void givenHomePageCalled_thenHomePageShouldReturnHomeLiteral() {
String redirectedPage = apimlHomepageController.home(new ConcurrentModel());
assertEquals("home", redirectedPage, "Expected page is not 'home'");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.zowe.apiml.config.ApplicationInfo;
import org.zowe.apiml.product.version.BuildInfo;
import org.zowe.apiml.product.version.BuildInfoDetails;
import org.zowe.apiml.product.version.VersionInfo;
import org.zowe.apiml.product.version.VersionInfoDetails;
import org.zowe.apiml.product.version.VersionService;

import java.util.List;

Expand All @@ -43,12 +44,13 @@ public class GatewayHomepageController {
private static final String UI_V1_ROUTE = "%s.ui-v1.%s";

private final DiscoveryClient discoveryClient;
private final BuildInfo buildInfo;
private final VersionService versionService;
@Value("${apiml.catalog.serviceId:}")
private String apiCatalogServiceId;

private final ApplicationInfo applicationInfo;
private String buildString;
private String zoweVersionText;

@PostConstruct
public void init() {
Expand All @@ -63,14 +65,20 @@ public String home(Model model) {
initializeAuthenticationAttributes(model);

model.addAttribute("buildInfoText", buildString);
model.addAttribute("zoweVersionText", zoweVersionText);
return "home";
}

private void initializeBuildInfos() {
BuildInfoDetails buildInfoDetails = buildInfo.getBuildInfoDetails();
VersionInfo versionInfo = versionService.getVersion();
VersionInfoDetails apiml = versionInfo.getApiml();
buildString = "Build information is not available";
if (!buildInfoDetails.getVersion().equalsIgnoreCase("unknown")) {
buildString = String.format("Version %s build # %s", buildInfoDetails.getVersion(), buildInfoDetails.getNumber());
if (apiml != null && apiml.getVersion() != null && !apiml.getVersion().equalsIgnoreCase("unknown")) {
buildString = String.format("API ML Version %s build # %s", apiml.getVersion(), apiml.getBuildNumber());
}
VersionInfoDetails zowe = versionInfo.getZowe();
if (zowe != null && zowe.getVersion() != null && !zowe.getVersion().equalsIgnoreCase("unknown")) {
zoweVersionText = String.format("Zowe Version %s build # %s", zowe.getVersion(), zowe.getBuildNumber());
}
}

Expand Down
5 changes: 4 additions & 1 deletion gateway-service/src/main/resources/templates/home.html
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,10 @@ <h1>API Mediation Layer</h1>
</ul>
</div>
<footer>
<p class="footer" th:text="${buildInfoText}"/>
<div class="footer">
<p th:text="${buildInfoText}"/>
<p th:if="${zoweVersionText != null}" th:text="${zoweVersionText}"/>
</div>
</footer>
</body>
</html>
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@
import org.springframework.ui.Model;
import org.zowe.apiml.config.ApplicationInfo;
import org.zowe.apiml.product.constants.CoreService;
import org.zowe.apiml.product.version.BuildInfo;
import org.zowe.apiml.product.version.BuildInfoDetails;
import org.zowe.apiml.product.version.VersionInfo;
import org.zowe.apiml.product.version.VersionInfoDetails;
import org.zowe.apiml.product.version.VersionService;

import java.util.*;

Expand All @@ -36,7 +37,7 @@
private DiscoveryClient discoveryClient;

private GatewayHomepageController gatewayHomepageController;
private BuildInfo buildInfo;
private VersionService versionService;

private final String API_CATALOG_ID = "apicatalog";
private final String AUTHORIZATION_SERVICE_ID = "zaas";
Expand All @@ -45,15 +46,14 @@
void setup() {
discoveryClient = mock(DiscoveryClient.class);

buildInfo = mock(BuildInfo.class);
versionService = mock(VersionService.class);
when(versionService.getVersion()).thenReturn(new VersionInfo(null, new VersionInfoDetails("unknown", "000", "abc")));

BuildInfoDetails buildInfoDetails = new BuildInfoDetails(new Properties(), new Properties());
when(buildInfo.getBuildInfoDetails()).thenReturn(buildInfoDetails);
ApplicationInfo applicationInfo = ApplicationInfo.builder()
.isModulith(false)
.authServiceId(CoreService.ZAAS.getServiceId()).build();
gatewayHomepageController = new GatewayHomepageController(
discoveryClient, buildInfo, applicationInfo);
discoveryClient, versionService, applicationInfo);
ReflectionTestUtils.setField(gatewayHomepageController, "apiCatalogServiceId", "apicatalog");
}

Expand All @@ -69,19 +69,14 @@

@Test
void givenSpecificBuildVersion_whenHomePageCalled_thenBuildInfoShouldBeGivenVersionAndNumber() {
BuildInfo buildInfo = mock(BuildInfo.class);

Properties buildProperties = new Properties();
buildProperties.setProperty("build.version", "test-version");
buildProperties.setProperty("build.number", "test-number");
BuildInfoDetails buildInfoDetails = new BuildInfoDetails(buildProperties, new Properties());
when(buildInfo.getBuildInfoDetails()).thenReturn(buildInfoDetails);
VersionService versionService = mock(VersionService.class);

Check warning on line 72 in gateway-service/src/test/java/org/zowe/apiml/gateway/controllers/GatewayHomepageControllerTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename "versionService" which hides the field declared at line 40.

See more on https://sonarcloud.io/project/issues?id=zowe_api-layer&issues=AZ2WimyL6QkuPrAXcROx&open=AZ2WimyL6QkuPrAXcROx&pullRequest=4569
when(versionService.getVersion()).thenReturn(new VersionInfo(null, new VersionInfoDetails("test-version", "test-number", "abc")));

ApplicationInfo applicationInfo = ApplicationInfo.builder()
.isModulith(false)
.authServiceId(CoreService.ZAAS.getServiceId()).build();
GatewayHomepageController gatewayHomepageController = new GatewayHomepageController(
discoveryClient, buildInfo, applicationInfo);
discoveryClient, versionService, applicationInfo);

Model model = new ConcurrentModel();

Expand All @@ -90,7 +85,29 @@

Map<String, Object> actualModelMap = model.asMap();

assertThat(actualModelMap, IsMapContaining.hasEntry("buildInfoText", "Version test-version build # test-number"));
assertThat(actualModelMap, IsMapContaining.hasEntry("buildInfoText", "API ML Version test-version build # test-number"));
}

@Test
void givenZoweVersion_whenHomePageCalled_thenZoweVersionTextShouldBeIncluded() {
VersionService versionService = mock(VersionService.class);

Check warning on line 93 in gateway-service/src/test/java/org/zowe/apiml/gateway/controllers/GatewayHomepageControllerTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename "versionService" which hides the field declared at line 40.

See more on https://sonarcloud.io/project/issues?id=zowe_api-layer&issues=AZ2WimyL6QkuPrAXcROy&open=AZ2WimyL6QkuPrAXcROy&pullRequest=4569
when(versionService.getVersion()).thenReturn(new VersionInfo(
new VersionInfoDetails("2.0.0", "500", "def"),
new VersionInfoDetails("test-version", "test-number", "abc")
));

ApplicationInfo applicationInfo = ApplicationInfo.builder()
.isModulith(false)
.authServiceId(CoreService.ZAAS.getServiceId()).build();
GatewayHomepageController gatewayHomepageController = new GatewayHomepageController(

Check warning on line 102 in gateway-service/src/test/java/org/zowe/apiml/gateway/controllers/GatewayHomepageControllerTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename "gatewayHomepageController" which hides the field declared at line 39.

See more on https://sonarcloud.io/project/issues?id=zowe_api-layer&issues=AZ2WimyL6QkuPrAXcROz&open=AZ2WimyL6QkuPrAXcROz&pullRequest=4569
discoveryClient, versionService, applicationInfo);

Model model = new ConcurrentModel();
gatewayHomepageController.init();
gatewayHomepageController.home(model);

Map<String, Object> actualModelMap = model.asMap();
assertThat(actualModelMap, IsMapContaining.hasEntry("zoweVersionText", "Zowe Version 2.0.0 build # 500"));
}


Expand All @@ -114,7 +131,7 @@
.isModulith(false)
.authServiceId(CoreService.GATEWAY.getServiceId()).build();

GatewayHomepageController underTest = new GatewayHomepageController(discoveryClient, buildInfo, applicationInfo);
GatewayHomepageController underTest = new GatewayHomepageController(discoveryClient, versionService, applicationInfo);
Model model = new ConcurrentModel();
underTest.home(model);

Expand Down
Loading