Skip to content
Snippets Groups Projects
Commit a2f59ed4 authored by Felix Reichenbach's avatar Felix Reichenbach
Browse files

Merge branch 'OZG-7615-Leitfaden-link' into 'main'

Ozg 7615 leitfaden link

See merge request !6
parents 2f5e4cf5 b2fb30f0
No related branches found
No related tags found
1 merge request!6Ozg 7615 leitfaden link
......@@ -31,7 +31,7 @@
<parent>
<groupId>de.ozgcloud.common</groupId>
<artifactId>ozgcloud-common-parent</artifactId>
<version>4.9.0</version>
<version>4.11.0-SNAPSHOT</version>
<relativePath />
</parent>
......
......@@ -70,6 +70,10 @@ spec:
value: {{ include "app.ssoClientName" . }}
- name: ozgcloud_oauth2_auth-server-url
value: {{ include "app.ssoServerUrl" . }}
{{- if (((.Values.ozgcloud).user_assistance).documentation).url }}
- name: ozgcloud_user-assistance_documentation_url
value: {{ .Values.ozgcloud.user_assistance.documentation.url }}
{{- end }}
{{- if not (.Values.database).useExternal }}
- name: spring_data_mongodb_uri
valueFrom:
......
package de.ozgcloud.admin;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@Configuration
@ConfigurationProperties(prefix = DocumentationProperties.DOCUMENTATION_PROPERTIES_PREFIX)
public class DocumentationProperties {
static final String DOCUMENTATION_PROPERTIES_PREFIX = "ozgcloud.user-assistance.documentation";
/*
* Url pointing to the documentation (Benutzerleitfaden fuer die
* Administration).
*/
private String url;
}
......@@ -23,8 +23,7 @@
*/
package de.ozgcloud.admin;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import org.springframework.boot.autoconfigure.data.rest.RepositoryRestProperties;
import org.springframework.hateoas.EntityModel;
......@@ -40,24 +39,23 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class RootModelAssembler implements RepresentationModelAssembler<Root, EntityModel<Root>> {
static final String REL_CONFIGURATION = "configuration";
static final String REL_DOCUMENTATIONS = "documentations";
private final RepositoryRestProperties restProperties;
private final CurrentUserService currentUserService;
private final DocumentationProperties documentationProperties;
@Override
public EntityModel<Root> toModel(Root root) {
List<Link> links = buildRootModelLinks();
return EntityModel.of(root, links);
var rootModel = EntityModel.of(root);
addLinks(rootModel);
return rootModel;
}
List<Link> buildRootModelLinks() {
List<Link> links = new ArrayList<>();
var rootLinkBuilder = WebMvcLinkBuilder.linkTo(RootController.class);
links.add(rootLinkBuilder.withSelfRel());
if (currentUserService.hasConfigurationPermission()) {
links.add(buildConfigLink());
}
return links;
private void addLinks(EntityModel<Root> rootModel) {
rootModel.add(WebMvcLinkBuilder.linkTo(RootController.class).withSelfRel());
rootModel.addIf(currentUserService.hasConfigurationPermission(), this::buildConfigLink);
rootModel.addIf(Objects.nonNull(documentationProperties.getUrl()), () -> Link.of(documentationProperties.getUrl(), REL_DOCUMENTATIONS));
}
private Link buildConfigLink() {
......
......@@ -54,5 +54,15 @@ tests:
content:
name: ozgcloud_administration_sync_organisationseinheiten_cron
value: "*/15 * * * *"
- it: should have user assistance documentation url
set:
ozgcloud:
user_assistance:
documentation:
url: http://hier/geht/es/zum/benutzerleitfaden.de
asserts:
- contains:
path: spec.template.spec.containers[0].env
content:
name: ozgcloud_user-assistance_documentation_url
value: http://hier/geht/es/zum/benutzerleitfaden.de
......@@ -27,8 +27,6 @@ import static de.ozgcloud.admin.RootModelAssembler.*;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
......@@ -37,8 +35,11 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.springframework.boot.autoconfigure.data.rest.RepositoryRestProperties;
import org.springframework.hateoas.IanaLinkRelations;
import org.springframework.hateoas.Link;
import com.thedeanda.lorem.LoremIpsum;
import de.ozgcloud.admin.common.user.CurrentUserService;
class RootModelAssemblerTest {
......@@ -53,42 +54,35 @@ class RootModelAssemblerTest {
private RepositoryRestProperties restProperties;
@Mock
private CurrentUserService currentUserService;
@Mock
private DocumentationProperties documentationProperties;
@DisplayName("Entity Model")
@Nested
class TestEntityModel {
class TestToModel {
private final List<Link> links = List.of(Link.of(RootController.PATH));
@BeforeEach
void beforeEach() {
doReturn(links).when(modelAssembler).buildRootModelLinks();
}
private final Root root = RootTestFactory.create();
@Test
void shouldHaveRoot() {
var givenRoot = RootTestFactory.create();
var resultRoot = modelAssembler.toModel(givenRoot).getContent();
void shouldHaveRootContent() {
var resultRoot = modelAssembler.toModel(root).getContent();
assertThat(resultRoot).isEqualTo(givenRoot);
assertThat(resultRoot).isEqualTo(root);
}
@Test
void shouldHaveLinks() {
var modelLinks = modelAssembler.toModel(RootTestFactory.create()).getLinks();
void shouldHaveSelfLink() {
var model = modelAssembler.toModel(root);
assertThat(modelLinks).containsAll(links);
}
assertThat(model.getLink(IanaLinkRelations.SELF)).get().extracting(Link::getHref).isEqualTo(RootController.PATH);
}
@DisplayName("Root Model Links")
@Nested
class TestBuildRootModelLinks {
class TestConfigurationLink {
@Test
void shouldCheckConfigurationPermission() {
modelAssembler.buildRootModelLinks();
void shouldCallHasConfigurationPermission() {
modelAssembler.toModel(root);
verify(currentUserService).hasConfigurationPermission();
}
......@@ -97,38 +91,79 @@ class RootModelAssemblerTest {
class TestOnHasConfigurationPermission {
@BeforeEach
void hasConfigurationPermission() {
void mock() {
when(currentUserService.hasConfigurationPermission()).thenReturn(true);
when(restProperties.getBasePath()).thenReturn(BASE_PATH);
}
@Test
void shouldHaveHrefToConfiguration() {
var links = modelAssembler.buildRootModelLinks();
var model = modelAssembler.toModel(root);
assertThat(links).containsExactly(
Link.of(RootController.PATH),
Link.of(BASE_PATH, REL_CONFIGURATION));
assertThat(model.getLink(REL_CONFIGURATION)).get().extracting(Link::getHref).isEqualTo(BASE_PATH);
}
}
@Nested
class TestOnNotHasConfigurationPermission {
class TestOnHasNotConfigurationPermission {
@BeforeEach
void hasNotConfigurationPermission() {
void mock() {
when(currentUserService.hasConfigurationPermission()).thenReturn(false);
}
@Test
void shouldHaveOnlySelfLink() {
var links = modelAssembler.buildRootModelLinks();
void shouldNotHaveConfigurationLink() {
var model = modelAssembler.toModel(root);
assertThat(links).containsExactly(
Link.of(RootController.PATH));
assertThat(model.getLink(REL_CONFIGURATION)).isEmpty();
}
}
}
@Nested
class TestDocumentationLink {
@Test
void shouldGetDocumentationUrl() {
modelAssembler.toModel(root);
verify(documentationProperties).getUrl();
}
@Nested
class TestOnDocumentationUrlGiven {
private final String documentationUrl = LoremIpsum.getInstance().getUrl();
@BeforeEach
void mock() {
when(documentationProperties.getUrl()).thenReturn(documentationUrl);
}
@Test
void shouldHaveDocumentationLink() {
var model = modelAssembler.toModel(root);
assertThat(model.getLink(REL_DOCUMENTATIONS)).get().extracting(Link::getHref).isEqualTo(documentationUrl);
}
}
@Nested
class TestOnDocumentationUrlNotGiven {
@BeforeEach
void mock() {
when(documentationProperties.getUrl()).thenReturn(null);
}
@Test
void shouldNotHaveDocumentationLink() {
var model = modelAssembler.toModel(root);
assertThat(model.getLink(REL_DOCUMENTATIONS)).isEmpty();
}
}
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment