Skip to content

Commit

Permalink
BE-#0: Fix guest cannot get list of granted events
Browse files Browse the repository at this point in the history
  • Loading branch information
Drumber committed May 30, 2024
1 parent a493f4d commit be1b00e
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ public EventDetailDto createEvent(
}

@GetMapping("/own")
public List<EventOverviewDto> getOwnEvents(@AuthenticationPrincipal OAuth2User principal) {
return eventService.getAllEventsFromUser(principal);
public List<EventOverviewDto> getOwnEvents(@AuthenticationPrincipal AuthenticatedPrincipal principal) {
return eventService.getAllEventsFromPrincipal(principal);
}

@GetMapping("/{eventId}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

import java.util.Collection;
import java.util.List;
import java.util.Optional;

Expand All @@ -12,5 +13,7 @@ public interface EventRepository extends MongoRepository<Event, String> {

List<Event> findEventsByParticipantIdsContainsOrderByDateDesc(String participantId);

List<Event> findAllByIdInOrderByDateDesc(Collection<String> id);

Optional<Event> findByInvitationLink(String invitationLink);
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,18 @@ public Event createEvent(AuthenticatedPrincipal principal, EventCreateCommand ev
return eventRepository.insert(event);
}

@PreAuthorize("hasRole('USER')")
public List<EventOverviewDto> getAllEventsFromUser(AuthenticatedPrincipal principal) {
// TODO: check if principal is guest and return granted events
List<Event> userEvents = userService
.findUserFromPrincipal(principal)
.map(user -> eventRepository.findEventsByParticipantIdsContainsOrderByDateDesc(user.getId()))
.orElse(List.of());
return userEvents.stream().map(eventMapper::toEventOverviewDto).toList();
@PreAuthorize("hasRole('GUEST')")
public List<EventOverviewDto> getAllEventsFromPrincipal(AuthenticatedPrincipal principal) {
List<Event> events;
if (principal instanceof GuestAuthenticationPrincipal guestPrincipal) {
events = eventRepository.findAllByIdInOrderByDateDesc(guestPrincipal.getGrantedEventIds());
} else {
events = userService
.findUserFromPrincipal(principal)
.map(user -> eventRepository.findEventsByParticipantIdsContainsOrderByDateDesc(user.getId()))
.orElse(List.of());
}
return events.stream().map(eventMapper::toEventOverviewDto).toList();
}

@PreAuthorize("hasRole('GUEST')")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,7 @@
import org.springframework.security.core.AuthenticatedPrincipal;
import org.springframework.security.core.context.SecurityContextHolder;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.*;

import static org.assertj.core.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
Expand Down Expand Up @@ -92,7 +89,7 @@ void shouldGetEventsFromUser() {
.thenReturn(Collections.singletonList(event));

// when
List<EventOverviewDto> events = eventService.getAllEventsFromUser(principal);
List<EventOverviewDto> events = eventService.getAllEventsFromPrincipal(principal);

// then
verify(eventRepository).findEventsByParticipantIdsContainsOrderByDateDesc(eq(user.getId()));
Expand All @@ -101,17 +98,22 @@ void shouldGetEventsFromUser() {

@Test
@WithMockGuestUser
void shouldNotGetEventsFromGuest() {
void shouldGetGrantedEventsFromGuest() {
// given
AuthenticatedPrincipal principal = (AuthenticatedPrincipal)
GuestAuthenticationPrincipal principal = (GuestAuthenticationPrincipal)
SecurityContextHolder.getContext().getAuthentication().getPrincipal();
principal.grantAccessToEvent("test");
Event event = Event.builder().id("test").build();

when(userService.findUserFromPrincipal(any())).thenReturn(Optional.empty());
when(eventRepository.findAllByIdInOrderByDateDesc(eq(principal.getGrantedEventIds())))
.thenReturn(Collections.singletonList(event));

// when
List<EventOverviewDto> events = eventService.getAllEventsFromPrincipal(principal);

// then
assertThatThrownBy(() -> eventService.getAllEventsFromUser(principal))
.isInstanceOf(AccessDeniedException.class);
verify(eventRepository).findAllByIdInOrderByDateDesc(eq(principal.getGrantedEventIds()));
assertThat(events).hasSize(1);
}

@Test
Expand Down

0 comments on commit be1b00e

Please sign in to comment.