Skip to content

Commit

Permalink
Unit Tests
Browse files Browse the repository at this point in the history
  • Loading branch information
crazvan6 committed Jan 31, 2025
1 parent ad7f5a9 commit a4abd42
Show file tree
Hide file tree
Showing 4 changed files with 516 additions and 89 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ public ResponseEntity<List<Map<String, String>>> getAllContactsByUserId(@PathVar
if (userOptional.isPresent()) {
User user = userOptional.get();
// Prepare the list of contacts
List<Map<String, String>> contacts = user.getContacts().stream()
List<Map<String, String>> contacts = user.getAddedBy().stream()
.map(contact -> {
Map<String, String> contactInfo = new HashMap<>();
contactInfo.put("username", contact.getUsername());
Expand Down Expand Up @@ -286,7 +286,7 @@ public ResponseEntity<List<Map<String, String>>> getLocations(@PathVariable Stri
if (userOptional.isPresent()) {
User user = userOptional.get();

List<Map<String, String>> contacts = user.getContacts().stream()
List<Map<String, String>> contacts = user.getAddedBy().stream()
.map(contact -> {
Map<String, String> contactInfo = new HashMap<>();
contactInfo.put("username", contact.getUsername());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public class User {


public boolean getEmailVerified() { return this.emailVerified; }
public void setUserId(String id) { this.id = id; }

}

229 changes: 173 additions & 56 deletions backend/src/test/java/com/safezones/safezones/PointControllerTest.java
Original file line number Diff line number Diff line change
@@ -1,28 +1,29 @@
package com.safezones.safezones;

import com.safezones.safezones.Model.Point;
import com.safezones.safezones.Controller.PointController;
import com.safezones.safezones.Repository.PointRepository;
import com.safezones.safezones.Repository.UserRepository;
import com.safezones.safezones.Dto.PointRequest;
import com.safezones.safezones.Model.Point;
import com.safezones.safezones.Model.User;
import com.safezones.safezones.Repository.PointRepository;
import com.safezones.safezones.Repository.UserRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.*;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;

@ExtendWith(MockitoExtension.class)
class PointControllerTest {

@Mock
Expand All @@ -34,70 +35,186 @@ class PointControllerTest {
@InjectMocks
private PointController pointController;

private PointRequest pointRequest;
private Point point;
private User user;

@BeforeEach
void setUp() {
MockitoAnnotations.initMocks(this);
pointRequest = new PointRequest();
pointRequest.setLatitude("40.7128");
pointRequest.setLongitude("-74.0060");
pointRequest.setDescription("Test Description");
pointRequest.setCategory("Hard");
pointRequest.setUserId("user1");
pointRequest.setEvent("Test Event");

point = new Point();
point.setId(1L);
point.setLatitude("40.7128");
point.setLongitude("-74.0060");
point.setDescription("Test Description");
point.setCategory("Hard");
point.setUserId("user1");
point.setEvent("Test Event");
point.setVotes(0L);
point.setTimestamp(LocalDateTime.now());

user = new User();
user.setUserId("user1");
}

// @Test
// void testAddNewPoint() {
// PointRequest pointRequest = new PointRequest("40.7128", "-74.0060", "Description", "Hard", "1", "Harassment");
// User user = new User();
// user.setId("1");
@Test
void addNewPoint_ValidRequest_SavesPoint() {
String response = pointController.addNewPoint(pointRequest);

assertEquals("Point added successfully", response);

ArgumentCaptor<Point> pointCaptor = ArgumentCaptor.forClass(Point.class);
verify(pointRepository).save(pointCaptor.capture());
Point savedPoint = pointCaptor.getValue();

assertEquals(pointRequest.getLatitude(), savedPoint.getLatitude());
assertEquals(pointRequest.getLongitude(), savedPoint.getLongitude());
assertEquals(pointRequest.getDescription(), savedPoint.getDescription());
assertEquals(pointRequest.getCategory(), savedPoint.getCategory());
assertEquals(pointRequest.getUserId(), savedPoint.getUserId());
assertEquals(pointRequest.getEvent(), savedPoint.getEvent());
assertEquals(0L, savedPoint.getVotes());
assertNotNull(savedPoint.getTimestamp());
}

@Test
void getAllPoints_FiltersCorrectly() {
LocalDateTime now = LocalDateTime.now();

// when(userRepository.findById("1")).thenReturn(Optional.of(user));
// when(pointRepository.save(any(Point.class))).thenReturn(new Point());
Point hardValid = new Point();
hardValid.setCategory("Hard");
hardValid.setTimestamp(now.minusHours(23));

// String response = pointController.addNewPoint(pointRequest);
Point hardInvalid = new Point();
hardInvalid.setCategory("Hard");
hardInvalid.setTimestamp(now.minusHours(25));

// assertEquals("Point added successfully", response);
// verify(userRepository, times(1)).findById("1");
// verify(pointRepository, times(1)).save(any(Point.class));
// }
Point mediumValid = new Point();
mediumValid.setCategory("Medium");
mediumValid.setTimestamp(now.minusHours(11));

@Test
void testGetAllPoints() {
List<Point> points = new ArrayList<Point>();
Point point1 = new Point();
point1.setId(1L);
point1.setLatitude("40.7128");
point1.setLongitude("-74.0060");
point1.setDescription("Description");
point1.setCategory("Hard");
point1.setUserId("1");
point1.setTimestamp(LocalDateTime.now());
point1.setEvent("Harassment");
Point point2 = new Point();
point2.setLatitude("140.6899");
point2.setLongitude("-74.0060");
point2.setDescription("Description");
point2.setCategory("Hard");
point2.setUserId("2");
point2.setTimestamp(LocalDateTime.now());
point2.setId(2L);
point2.setEvent("Harassment");

points.add(point1);
points.add(point2);

when(pointRepository.findAll()).thenReturn(points);
Point mediumInvalid = new Point();
mediumInvalid.setCategory("Medium");
mediumInvalid.setTimestamp(now.minusHours(13));

when(pointRepository.findAll()).thenReturn(Arrays.asList(hardValid, hardInvalid, mediumValid, mediumInvalid));

Iterable<PointRequest> result = pointController.getAllPoints();
List<PointRequest> resultList = (List<PointRequest>) result;

assertEquals(2, ((List<PointRequest>) result).size());
assertEquals(2, resultList.size());
List<String> categories = resultList.stream().map(PointRequest::getCategory).toList();
assertTrue(categories.contains("Hard"));
assertTrue(categories.contains("Medium"));
}

@Test
void testGetPointsByUserId() {
List<Point> points = new ArrayList<>();
points.add(new Point());
points.add(new Point());
void getPointsByUserId_UserExists_ReturnsPoints() {
String userId = "user1";
List<Point> points = Arrays.asList(point, new Point());

when(userRepository.findById("1")).thenReturn(Optional.of(new User()));
when(pointRepository.findByUserId("1")).thenReturn(points);
when(userRepository.findById(userId)).thenReturn(Optional.of(user));
when(pointRepository.findByUserId(userId)).thenReturn(points);

List<Point> result = pointController.getPointsByUserId("1");
List<Point> result = pointController.getPointsByUserId(userId);

assertEquals(2, result.size());
verify(userRepository).findById(userId);
verify(pointRepository).findByUserId(userId);
}

@Test
void getPointsByUserId_UserNotFound_ThrowsException() {
String userId = "nonExistentUser";
when(userRepository.findById(userId)).thenReturn(Optional.empty());

assertThrows(RuntimeException.class, () -> pointController.getPointsByUserId(userId));
}

@Test
void incrementVotes_PointAndUserExist_UserNotLiked_IncrementsVotes() {
when(pointRepository.findById(1)).thenReturn(Optional.of(point));
when(userRepository.findById("user1")).thenReturn(Optional.of(user));

ResponseEntity<String> response = pointController.incrementVotes(1, "user1");

assertEquals(HttpStatus.OK, response.getStatusCode());
assertEquals("Votes incremented successfully to 1", response.getBody());
assertEquals(1, point.getVotes());
assertTrue(point.getLikedByUsers().contains(user));
verify(pointRepository).save(point);
}

@Test
void incrementVotes_UserAlreadyLiked_ReturnsConflict() {
point.getLikedByUsers().add(user);
when(pointRepository.findById(1)).thenReturn(Optional.of(point));
when(userRepository.findById("user1")).thenReturn(Optional.of(user));

ResponseEntity<String> response = pointController.incrementVotes(1, "user1");

assertEquals(HttpStatus.CONFLICT, response.getStatusCode());
assertEquals("User has already liked this point", response.getBody());
assertEquals(0L, point.getVotes());
}

@Test
void incrementVotes_PointNotFound_ReturnsNotFound() {
when(pointRepository.findById(1)).thenReturn(Optional.empty());

ResponseEntity<String> response = pointController.incrementVotes(1, "user1");

assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
assertEquals("Point or user not found", response.getBody());
}

@Test
void getVotesById_PointExists_ReturnsVotes() {
when(pointRepository.findById(1)).thenReturn(Optional.of(point));

ResponseEntity<?> response = pointController.getVotesById(1);

assertEquals(HttpStatus.OK, response.getStatusCode());
assertEquals(0L, response.getBody());
}

@Test
void getVotesById_PointNotFound_ReturnsNotFound() {
when(pointRepository.findById(1)).thenReturn(Optional.empty());

ResponseEntity<?> response = pointController.getVotesById(1);

assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
assertEquals("Point not found", response.getBody());
}

@Test
void pointLikedByUser_UserLiked_ReturnsTrue() {
point.getLikedByUsers().add(user);
when(pointRepository.findById(1)).thenReturn(Optional.of(point));
when(userRepository.findById("user1")).thenReturn(Optional.of(user));

ResponseEntity<Boolean> response = pointController.pointLikedByUser(1, "user1");

assertEquals(HttpStatus.OK, response.getStatusCode());
assertTrue(response.getBody());
}

@Test
void pointLikedByUser_UserNotLiked_ReturnsFalse() {
when(pointRepository.findById(1)).thenReturn(Optional.of(point));
when(userRepository.findById("user1")).thenReturn(Optional.of(user));

ResponseEntity<Boolean> response = pointController.pointLikedByUser(1, "user1");

assertEquals(HttpStatus.OK, response.getStatusCode());
assertFalse(response.getBody());
}
}
}
Loading

0 comments on commit a4abd42

Please sign in to comment.