Skip to content

Commit

Permalink
Merge pull request #4 from virtualidentityag/fix-missing-tenant-conte…
Browse files Browse the repository at this point in the history
…xt-for-video-reject

fix: provide tenant id for message service call
  • Loading branch information
mebo4b authored Apr 29, 2022
2 parents 53f684a + 094525d commit 436bd03
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public class RejectVideoCallService {

private final @NonNull MessageControllerApi messageControllerApi;
private final @NonNull SecurityHeaderSupplier securityHeaderSupplier;
private final @NonNull TenantHeaderSupplier tenantHeaderSupplier;

/**
* Sends a system message with rejection type to the message service.
Expand All @@ -34,6 +35,7 @@ public void rejectVideoCall(RejectVideoCallDTO rejectVideoCallDto) {

private void addDefaultHeaders(ApiClient apiClient) {
var headers = this.securityHeaderSupplier.getKeycloakAndCsrfHttpHeaders();
tenantHeaderSupplier.addTenantHeader(headers);
headers.forEach((key, value) -> apiClient.addDefaultHeader(key, value.iterator().next()));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import de.caritas.cob.videoservice.api.tenant.TenantContext;
import java.util.Optional;
import javax.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
Expand Down Expand Up @@ -33,17 +32,17 @@ public void addTenantHeader(HttpHeaders headers) {
/**
* Resolve tenantID from current request.
*
* @return
* @return the id of the tenant
*/
public Optional<Long> getTenantFromHeader() {
HttpServletRequest request =
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
.getRequest();
var request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
.getRequest();
try {
return Optional.of(Long.parseLong(request.getHeader("tenantId")));
} catch (NumberFormatException exception) {
log.debug("No tenantId provided via headers.");
return Optional.empty();
}
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package de.caritas.cob.videoservice.api.service;

import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.times;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

Expand Down Expand Up @@ -31,24 +30,29 @@ public class RejectVideoCallServiceTest {
@Mock
private SecurityHeaderSupplier securityHeaderSupplier;

@Mock
private TenantHeaderSupplier tenantHeaderSupplier;

@Mock
private ApiClient apiClient;

@Test
public void rejectVideoCall_Should_useServicesCorrectly() {
var securityHeaders = new HttpHeaders();
when(this.messageControllerApi.getApiClient()).thenReturn(this.apiClient);
when(this.securityHeaderSupplier.getKeycloakAndCsrfHttpHeaders()).thenReturn(new HttpHeaders());
RejectVideoCallDTO rejectVideoCallDto = new EasyRandom().nextObject(RejectVideoCallDTO.class);
when(this.securityHeaderSupplier.getKeycloakAndCsrfHttpHeaders()).thenReturn(securityHeaders);
var rejectVideoCallDto = new EasyRandom().nextObject(RejectVideoCallDTO.class);

this.rejectVideoCallService.rejectVideoCall(rejectVideoCallDto);

VideoCallMessageDTO expectedMessage = new VideoCallMessageDTO()
.eventType(EventTypeEnum.IGNORED_CALL)
.initiatorUserName(rejectVideoCallDto.getInitiatorUsername())
.initiatorRcUserId(rejectVideoCallDto.getInitiatorRcUserId());
verify(this.securityHeaderSupplier, times(1)).getKeycloakAndCsrfHttpHeaders();
verify(this.messageControllerApi, times(1))
.createVideoHintMessage(eq(rejectVideoCallDto.getRcGroupId()), eq(expectedMessage));
verify(this.securityHeaderSupplier).getKeycloakAndCsrfHttpHeaders();
verify(this.tenantHeaderSupplier).addTenantHeader(securityHeaders);
verify(this.messageControllerApi)
.createVideoHintMessage(rejectVideoCallDto.getRcGroupId(), expectedMessage);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package de.caritas.cob.videoservice.api.service;


import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.nullValue;
import static org.hamcrest.core.Is.is;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.springframework.test.util.ReflectionTestUtils.setField;

import de.caritas.cob.videoservice.api.tenant.TenantContext;
import javax.servlet.http.HttpServletRequest;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpHeaders;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

class TenantHeaderSupplierTest {

private final TenantHeaderSupplier tenantHeaderSupplier = new TenantHeaderSupplier();

@Test
void addTenantHeader_Should_addTenantIdToHeaders_When_multiTenancyIsEnabled() {
setField(tenantHeaderSupplier, "multitenancy", true);
var httpHeaders = new HttpHeaders();
TenantContext.setCurrentTenant(1L);

tenantHeaderSupplier.addTenantHeader(httpHeaders);

assertThat(httpHeaders.get("tenantId").get(0), is("1"));
}

@Test
void addTenantHeader_Should_notAddTenantIdToHeaders_When_multiTenancyIsDisabled() {
setField(tenantHeaderSupplier, "multitenancy", false);
var httpHeaders = new HttpHeaders();

tenantHeaderSupplier.addTenantHeader(httpHeaders);

assertThat(httpHeaders.get("tenantId"), nullValue());
}

@Test
void getTenantFromHeader_Should_returnTenantId_When_tenantIdExistsInHeader() {
givenMockedServletRequestWithTenandIdHeaderValue("1");

var result = tenantHeaderSupplier.getTenantFromHeader();

assertThat(result.isPresent(), is(true));
assertThat(result.get(), is(1L));
}

@Test
void getTenantFromHeader_Should_returnOptionalEmpty_When_tenantIdIsNoNumber() {
givenMockedServletRequestWithTenandIdHeaderValue("no number");

var result = tenantHeaderSupplier.getTenantFromHeader();

assertThat(result.isPresent(), is(false));
}

private void givenMockedServletRequestWithTenandIdHeaderValue(String tenantIdValue) {
var mockedServletRequest = mock(HttpServletRequest.class);
when(mockedServletRequest.getHeader("tenantId")).thenReturn(tenantIdValue);
var requestAttributes = new ServletRequestAttributes(mockedServletRequest);
RequestContextHolder.setRequestAttributes(requestAttributes);
}

}

0 comments on commit 436bd03

Please sign in to comment.