Skip to content
Merged
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
26 changes: 26 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Run Maven Tests

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

jobs:
test:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Set up JDK 21
uses: actions/setup-java@v3
with:
java-version: '21'
distribution: 'temurin'

- name: Run tests with Maven
working-directory: backend
run: mvn clean test

28 changes: 27 additions & 1 deletion backend/pom.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
Expand Down Expand Up @@ -59,6 +59,24 @@
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.12.664</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
Expand Down Expand Up @@ -102,6 +120,14 @@

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
<configuration>
<useModulePath>false</useModulePath>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
package hr.algebra.socialnetwork.service;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import hr.algebra.socialnetwork.dto.UserSummaryDTO;
import hr.algebra.socialnetwork.mapper.UserSummaryDTOMapper;
import hr.algebra.socialnetwork.model.FriendRequest;
import hr.algebra.socialnetwork.model.RequestStatus;
import hr.algebra.socialnetwork.model.User;
import hr.algebra.socialnetwork.repository.FriendRequestRepository;
import hr.algebra.socialnetwork.repository.UserRepository;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

class FriendsServiceTest {

@Mock private UserRepository userRepository;
@Mock private FriendRequestRepository friendRequestRepository;
@Mock private UserSummaryDTOMapper userSummaryDTOMapper;

@InjectMocks private FriendService friendService;

@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
}

@Test
void sendFriendRequest_WillSave_WhenValid() {
// GIVEN
String senderEmail = "milica@krmpotich.com";
Long receiverId = 2L;

User sender = new User();
sender.setId(1L);
sender.setFriends(new HashSet<>());

User receiver = new User();
receiver.setId(receiverId);

when(userRepository.findByEmail(senderEmail)).thenReturn(Optional.of(sender));
when(userRepository.findById(receiverId)).thenReturn(Optional.of(receiver));
when(friendRequestRepository.existsBySenderAndReceiverAndStatus(
sender, receiver, RequestStatus.PENDING))
.thenReturn(false);

// WHEN
friendService.sendFriendRequest(senderEmail, receiverId);

// THEN
verify(friendRequestRepository).save(any(FriendRequest.class));
}

@Test
void approveRequest_WillAddUsersAsFriends_WhenAuthorized() {
// GIVEN
String receiverEmail = "branko@example.com";
Long requestId = 1L;

User receiver = new User();
receiver.setId(2L);
receiver.setFriends(new HashSet<>());

User sender = new User();
sender.setId(1L);
sender.setFriends(new HashSet<>());

FriendRequest request = new FriendRequest();
request.setId(requestId);
request.setSender(sender);
request.setReceiver(receiver);
request.setStatus(RequestStatus.PENDING);

when(userRepository.findByEmail(receiverEmail)).thenReturn(Optional.of(receiver));
when(friendRequestRepository.findById(requestId)).thenReturn(Optional.of(request));

// WHEN
friendService.approveRequest(receiverEmail, requestId);

// THEN
assertTrue(sender.getFriends().contains(receiver));
verify(userRepository).save(sender);
verify(friendRequestRepository).save(request);
}

@Test
void removeFriend_WillMutuallyRemove_WhenUsersExist() {
// GIVEN
String requesterEmail = "milicah@example-svima.com";
Long otherUserId = 2L;

User requester = new User();
requester.setId(1L);
User other = new User();
other.setId(otherUserId);

requester.setFriends(new HashSet<>(Set.of(other)));
other.setFriends(new HashSet<>(Set.of(requester)));

when(userRepository.findByEmail(requesterEmail)).thenReturn(Optional.of(requester));
when(userRepository.findById(otherUserId)).thenReturn(Optional.of(other));

// WHEN
friendService.removeFriend(requesterEmail, otherUserId);

// THEN
assertFalse(requester.getFriends().contains(other));
assertFalse(other.getFriends().contains(requester));
verify(userRepository, times(2)).save(any());
}

@Test
void getFriends_WillReturnMappedFriends_WhenUserExists() {
// GIVEN
String email = "milicah@example.com";

User user = new User();
user.setId(1L);

User friend1 = new User();
friend1.setId(2L);
friend1.setEmail("branko@example.com");
friend1.setFirstName("Branko");
friend1.setLastName("Mamic");

user.setFriends(Set.of(friend1));

UserSummaryDTO dto =
new UserSummaryDTO(
friend1.getId(), friend1.getFirstName(), friend1.getLastName(), friend1.getEmail());

when(userRepository.findByEmail(email)).thenReturn(Optional.of(user));
when(userSummaryDTOMapper.apply(friend1)).thenReturn(dto);

// WHEN
List<UserSummaryDTO> result = friendService.getFriends(email);

// THEN
assertEquals(1, result.size());
assertEquals(dto, result.getFirst());
}

@Test
void declineRequest_WillMarkAsRejected_WhenAuthorized() {
// GIVEN
String receiverEmail = "milica@example-svima.com";
Long requestId = 1L;

User receiver = new User();
receiver.setId(2L);

User sender = new User();
sender.setId(1L);

FriendRequest request = new FriendRequest();
request.setId(requestId);
request.setReceiver(receiver);
request.setSender(sender);
request.setStatus(RequestStatus.PENDING);

when(userRepository.findByEmail(receiverEmail)).thenReturn(Optional.of(receiver));
when(friendRequestRepository.findById(requestId)).thenReturn(Optional.of(request));

// WHEN
friendService.declineRequest(receiverEmail, requestId);

// THEN
assertEquals(RequestStatus.REJECTED, request.getStatus());
verify(friendRequestRepository).save(request);
}
}
Loading