diff --git a/src/main/java/at/ac/uibk/gitsearch/service/ReviewService.java b/src/main/java/at/ac/uibk/gitsearch/service/ReviewService.java
index 37e7c713754532bf178d9f30316e8412a59f1427..b4907c5c41d2f1417b673edf6651fc306e3eeab4 100644
--- a/src/main/java/at/ac/uibk/gitsearch/service/ReviewService.java
+++ b/src/main/java/at/ac/uibk/gitsearch/service/ReviewService.java
@@ -16,6 +16,7 @@ import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
+import javax.transaction.Transactional;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,6 +24,7 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Service;
 
 @Service
+@Transactional
 public class ReviewService {
 
     private static final String REVIEW_UPDATED = "Review Updated";
@@ -110,6 +112,8 @@ public class ReviewService {
             .filter(reviewRating -> !review.getUsers().contains(reviewRating.getUser().getEmail()))
             .forEach(reviewRating -> reviewRatingRepository.delete(reviewRating));
         reviewEntity.setResource(review.getResource());
+        reviewEntity.setLink(review.getLink());
+
         Set<ReviewRating> reviewRatings = new HashSet<>();
         review
             .getUsers()
@@ -265,6 +269,8 @@ public class ReviewService {
         reviewDTO.setUsers(
             review.getComments().stream().map(reviewRating -> reviewRating.getUser().getEmail()).collect(Collectors.toList())
         );
+        reviewDTO.setLink(review.getLink());
+        reviewDTO.setRequestedBy(userService.getUserById(review.getRequestedBy()).get().getEmail());
         reviewDTO.setId(review.getId());
         reviewDTO.setStatus(review.getComments().stream().map(reviewRating -> reviewRating.getStatus()).collect(Collectors.toList()));
         reviewDTO.setComments(review.getComments().stream().map(reviewRating -> reviewRating.getComment()).collect(Collectors.toList()));
diff --git a/src/test/java/at/ac/uibk/gitsearch/service/ReviewServiceTest.java b/src/test/java/at/ac/uibk/gitsearch/service/ReviewServiceTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..8bd38873c35886f4089faa241a6dd9a781b8ba94
--- /dev/null
+++ b/src/test/java/at/ac/uibk/gitsearch/service/ReviewServiceTest.java
@@ -0,0 +1,212 @@
+package at.ac.uibk.gitsearch.service;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import at.ac.uibk.gitsearch.GitsearchApp;
+import at.ac.uibk.gitsearch.domain.Review;
+import at.ac.uibk.gitsearch.domain.ReviewRating;
+import at.ac.uibk.gitsearch.domain.Statistics;
+import at.ac.uibk.gitsearch.repository.jpa.ReviewRatingRepository;
+import at.ac.uibk.gitsearch.repository.jpa.ReviewRepository;
+import at.ac.uibk.gitsearch.repository.jpa.StatisticsRepository;
+import at.ac.uibk.gitsearch.security.AuthoritiesConstants;
+import at.ac.uibk.gitsearch.service.dto.ReviewDTO;
+import at.ac.uibk.gitsearch.service.dto.ReviewRequest;
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.security.test.context.support.WithMockUser;
+import org.springframework.test.web.servlet.MockMvc;
+
+@SpringBootTest(classes = GitsearchApp.class)
+@ExtendWith(MockitoExtension.class)
+@AutoConfigureMockMvc
+public class ReviewServiceTest {
+
+    @Autowired
+    private MockMvc mockMvc;
+
+    @Autowired
+    private ReviewRepository reviewRepository;
+
+    @Autowired
+    private ReviewRatingRepository reviewRatingRepository;
+
+    @Autowired
+    private ReviewService reviewService;
+
+    @Autowired
+    private StatisticsRepository statisticsRepository;
+
+    @BeforeEach
+    @WithMockUser(authorities = AuthoritiesConstants.ADMIN, username = "admin")
+    public void tearDown() {
+        reviewRatingRepository.deleteAll();
+        reviewRepository.deleteAll();
+        List<String> reviewers = new ArrayList<>();
+        reviewers.add("user@localhost");
+
+        reviewService.createReview(new ReviewRequest("resource", "codeability.at", "1", reviewers));
+    }
+
+    @Test
+    @WithMockUser(authorities = AuthoritiesConstants.ADMIN, username = "admin")
+    public void createReviewTest() {
+        List<String> reviewers = new ArrayList<>();
+        reviewers.add("user@localhost");
+
+        int size = reviewRepository.findAll().size();
+
+        reviewService.createReview(new ReviewRequest("resource1", "codeability1.at", "2", reviewers));
+
+        List<Review> reviewList = reviewRepository.findAll();
+        assertThat(reviewList).hasSize(size + 1);
+
+        Review testReview = reviewList.stream().filter(r -> r.getResource().equals("resource1")).findFirst().get();
+        assertThat(testReview.getResource()).isEqualTo("resource1");
+    }
+
+    @Test
+    @WithMockUser(authorities = AuthoritiesConstants.USER, username = "user")
+    public void updateReviewTest() {
+        List<Review> reviewList = reviewRepository.findAll();
+        Review testReview = reviewList.get(0);
+        testReview.setLink("newLink");
+        reviewService.updateReview(reviewService.reviewToDTO(testReview));
+
+        reviewList = reviewRepository.findAll();
+        assertThat(reviewList).hasSize(1);
+
+        testReview = reviewList.get(0);
+        assertThat(testReview.getLink()).isEqualTo("newLink");
+    }
+
+    @Test
+    @WithMockUser(authorities = AuthoritiesConstants.USER, username = "user")
+    public void updateStatusTest() {
+        List<Review> reviewList = reviewRepository.findAll();
+        Review testReview = reviewList.get(0);
+
+        reviewService.updateStatus(testReview.getId(), "TEST");
+
+        reviewList = reviewRepository.findAll();
+        testReview = reviewList.get(0);
+        testReview.getComments().forEach(c -> assertThat(c.getStatus()).isEqualTo("TEST"));
+    }
+
+    @Test
+    @WithMockUser(authorities = AuthoritiesConstants.ADMIN, username = "admin")
+    public void getAllReviewsTest() {
+        List<String> reviewers = new ArrayList<>();
+        reviewers.add("user@localhost");
+        reviewService.createReview(new ReviewRequest("resource1", "codeability1.at", "2", reviewers));
+
+        List<ReviewDTO> reviewList = reviewService.getAllReviews();
+        assertThat(reviewList).hasSize(2);
+
+        reviewList.forEach(r -> assertThat(r.getResource()).isIn("resource", "resource1"));
+    }
+
+    @Test
+    @WithMockUser(authorities = AuthoritiesConstants.ADMIN, username = "admin")
+    public void getAllReviewsWithStatisticsTest() {
+        List<ReviewDTO> reviewList = reviewService.getAllReviewsWithStatistics();
+        assertThat(reviewList).hasSize(1);
+        reviewList.forEach(r -> assertThat(r.getBadgeRewarded()).isFalse());
+    }
+
+    @Test
+    @WithMockUser(authorities = AuthoritiesConstants.USER, username = "admin")
+    public void getReviewsByUserTest() {
+        List<ReviewDTO> reviewList = reviewService.getReviewsByUser();
+        reviewList.forEach(r -> assertThat(r.getResource()).isEqualTo("resource"));
+        reviewList.forEach(r -> r.getUsers().stream().forEach(u -> assertEquals("ANNONYMIZED", u)));
+    }
+
+    @Test
+    @WithMockUser(authorities = AuthoritiesConstants.USER, username = "user")
+    public void updateReviewDeletionByUserTest() throws IllegalAccessException {
+        List<ReviewDTO> reviewList = reviewService.getReviewsByUser();
+        ReviewDTO reviewDTO = reviewList.get(0);
+
+        reviewDTO.getStatus().set(0, "DELETION REQUESTED");
+        reviewService.updateReviewRatingByUser(reviewDTO);
+        reviewList = reviewService.getReviewsByUser();
+        assertEquals(reviewList.size(), 0);
+    }
+
+    @Test
+    @WithMockUser(authorities = AuthoritiesConstants.ADMIN, username = "admin")
+    public void deleteReviewTest() {
+        List<Review> reviewList = reviewRepository.findAll();
+        Review testReview = reviewList.get(0);
+        reviewService.deleteReview(testReview.getId());
+
+        reviewList = reviewRepository.findAll();
+        assertThat(reviewList).hasSize(0);
+    }
+
+    @Test
+    @WithMockUser(authorities = AuthoritiesConstants.USER, username = "user")
+    public void reviewToDTOTest() {
+        List<String> reviewers = new ArrayList<>();
+        reviewers.add("user@localhost");
+
+        Review testReview = reviewService.createReview(new ReviewRequest("resource2", "codeability2.at", "2", reviewers));
+
+        ReviewDTO reviewDTO = reviewService.reviewToDTO(testReview);
+
+        assertEquals(reviewDTO.getResource(), testReview.getResource());
+        assertEquals(reviewDTO.getUsers(), testReview.getComments().stream().map(c -> c.getUser().getEmail()).toList());
+        assertEquals(reviewDTO.getComments(), testReview.getComments().stream().map(c -> c.getComment()).toList());
+        assertEquals(reviewDTO.getId(), testReview.getId());
+        assertEquals(reviewDTO.getStatus(), testReview.getComments().stream().map(reviewRating -> reviewRating.getStatus()).toList());
+        assertEquals(reviewDTO.getLink(), testReview.getLink());
+    }
+
+    @Test
+    @WithMockUser(authorities = AuthoritiesConstants.ADMIN, username = "admin")
+    public void getReviewTest() {
+        Review reviewTest = reviewRepository.findAll().get(0);
+
+        ReviewDTO review = reviewService.getReview(reviewTest.getId());
+
+        assertEquals(review.getId(), reviewTest.getId());
+        assertEquals(review.getResource(), reviewTest.getResource());
+        assertEquals(review.getLink(), reviewTest.getLink());
+    }
+
+    @Test
+    @WithMockUser(authorities = AuthoritiesConstants.ADMIN, username = "admin")
+    public void rewardBadgeTest() {
+        Review reviewTest = reviewRepository.findAll().get(0);
+        reviewService.rewardBadge(reviewTest.getId());
+
+        Statistics statistics = statisticsRepository.findByExerciseID(reviewTest.getResourceID()).get();
+
+        assertEquals(statistics.getBadgeRewarded(), true);
+    }
+
+    @Test
+    @WithMockUser(authorities = AuthoritiesConstants.ADMIN, username = "admin")
+    public void requestReviewForExerciseTest() {
+        List<String> reviewers = new ArrayList<>();
+        reviewers.add("user@localhost");
+
+        reviewService.requestReviewForExercise(new ReviewRequest("resource3", "codeability3.at", "2", reviewers));
+
+        List<Review> reviewList = reviewRepository.findAll();
+        assertThat(reviewList).hasSize(2);
+
+        Review testReview = reviewList.stream().filter(r -> r.getResource().equals("resource3")).findFirst().get();
+        assertThat(testReview.getResource()).isEqualTo("resource3");
+        testReview.getComments().forEach(c -> assertThat(c.getStatus()).isEqualTo("REQUESTED"));
+    }
+}