Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Development: Adjust server tests to restructuring into modules #9314

Merged
merged 48 commits into from
Sep 28, 2024

Conversation

MaximilianAnzinger
Copy link
Contributor

@MaximilianAnzinger MaximilianAnzinger commented Sep 13, 2024

Checklist

General

Motivation and Context

After restructuring the server (prod) module structure, these changes adjust the test-code structure to the new prod-code structure.

Note: Most of the changes just come from moving files and methods.

Description

In detail, this includes:

  • Moving tests to the same modules in test code that exist in prod code incl. adjusting (file) paths
  • Adding test_repository subpackage to each module if this module uses a test repository
  • Each existing TestRepository implements the respective (prod) Repository. If such a test repository exists, the prod repository must not be used in any test (-> arch test)
  • Methods in prod repositories that are only used by test code must reside in the respective test repository (arch test)
  • Each TestRepository must be annotated with @primary as otherwise, this causes conflicts with the prod-repository (arch test)
  • AnswerMessageIntegrationTest#testCreateAnswerInExamChannel has been disabled. This test fails with JsonException No _valueDeserializer assigned but only if run as part of the whole test suite. The root cause for this issue is unclear.

Review Progress

Code Review

  • Code Review 1
  • Code Review 2

Summary by CodeRabbit

  • Bug Fixes

    • Removed several methods from various repository interfaces, which may affect how users retrieve specific data.
    • Adjusted the functionality for retrieving user and course-related data, streamlining the user experience.
  • Chores

    • Reorganized the AuditResource class into a more specific package for better project structure.

@MaximilianAnzinger MaximilianAnzinger requested a review from a team as a code owner September 13, 2024 11:19
Copy link

coderabbitai bot commented Sep 13, 2024

Walkthrough

The pull request involves the removal of several methods from various repository interfaces in the codebase. These changes affect how certain entities, such as CompetencyProgress, LearningPath, ScienceEvent, and User, can be queried. The modifications streamline the repository interfaces by eliminating methods that may no longer be necessary or relevant, thus simplifying the overall code structure.

Changes

File Change Summary
src/main/java/de/tum/cit/aet/artemis/atlas/repository/CompetencyProgressRepository.java Method removed: findByCompetencyIdAndUserIdOrElseThrow(long competencyId, long userId).
src/main/java/de/tum/cit/aet/artemis/atlas/repository/LearningPathRepository.java Method removed: findWithEagerCompetenciesByCourseIdAndUserIdElseThrow(long courseId, long userId).
src/main/java/de/tum/cit/aet/artemis/atlas/repository/ScienceEventRepository.java Method removed: findAllByType(ScienceEventType type).
src/main/java/de/tum/cit/aet/artemis/communication/repository/ConversationParticipantRepository.java Method removed: findConversationParticipantByConversationIdAndUserIdElseThrow(Long conversationId, Long userId).
src/main/java/de/tum/cit/aet/artemis/communication/repository/PostRepository.java Method removed: findPostsByAuthorIdAndCourseId(@Param("authorId") long authorId, @Param("courseId") long courseId).
src/main/java/de/tum/cit/aet/artemis/communication/repository/ReactionRepository.java Methods removed: findReactionsByPostId(Long postId), findReactionsByAnswerPostId(Long answerPostId).
src/main/java/de/tum/cit/aet/artemis/communication/repository/conversation/ChannelRepository.java Method removed: findCourseWideChannelsInCourse(@Param("courseId") long courseId).
src/main/java/de/tum/cit/aet/artemis/communication/repository/conversation/ConversationRepository.java Method removed: List<Conversation> findAllByCourseId(long courseId);.
src/main/java/de/tum/cit/aet/artemis/communication/repository/conversation/OneToOneChatRepository.java Method removed: findByIdWithConversationParticipantsAndUserGroups(@Param("oneToOneChatId") Long oneToOneChatId).
src/main/java/de/tum/cit/aet/artemis/core/repository/CourseRepository.java Methods removed: findWithEagerLearningPathsAndCompetenciesAndPrerequisitesById(long courseId), default Course findWithEagerLearningPathsAndCompetenciesAndPrerequisitesByIdElseThrow(long courseId).
src/main/java/de/tum/cit/aet/artemis/core/repository/DataExportRepository.java Method removed: findAllSuccessfullyCreatedDataExports().
src/main/java/de/tum/cit/aet/artemis/core/repository/UserRepository.java Multiple methods removed related to user learning paths and deletion status.

Possibly related PRs

Suggested labels

code quality, small, maintainer-approved

Suggested reviewers

  • JohannesStoehr
  • krusche
  • pzdr7
  • EneaGore
  • coolchock
  • Strohgelaender

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai or @coderabbitai title anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions github-actions bot added tests server Pull requests that update Java code. (Added Automatically!) labels Sep 13, 2024
coderabbitai[bot]
coderabbitai bot previously approved these changes Sep 13, 2024
coderabbitai[bot]
coderabbitai bot previously approved these changes Sep 13, 2024
SimonEntholzer
SimonEntholzer previously approved these changes Sep 28, 2024
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 17

🧹 Outside diff range comments (34)
src/test/java/de/tum/cit/aet/artemis/assessment/util/BonusFactory.java (1)

Line range hint 3-38: Approve implementation with minor suggestion

The BonusFactory class implementation is well-structured and follows the utility/factory pattern guideline. It provides a clear, static method for generating Bonus objects, which is useful for creating test data. The implementation also avoids potential circular dependencies in JSON serialization.

Good practices observed:

  1. Well-documented method with clear JavaDoc comments.
  2. Adherence to the fixed_data guideline for test data creation.
  3. No direct database access, following the avoid_db_access guideline.

Consider extracting the creation of GradingScale objects into a private helper method to improve readability:

 public class BonusFactory {

     public static Bonus generateBonus(BonusStrategy bonusStrategy, Double weight, long sourceGradingScaleId, long bonusToGradingScaleId) {
         Bonus bonus = new Bonus();
         bonus.setBonusStrategy(bonusStrategy);
         bonus.setWeight(weight);
-        // New object is created to avoid circular dependency on json serialization.
-        var sourceGradingScale = new GradingScale();
-        sourceGradingScale.setId(sourceGradingScaleId);
+        var sourceGradingScale = createGradingScale(sourceGradingScaleId);
         bonus.setSourceGradingScale(sourceGradingScale);

-        // New object is created to avoid circular dependency on json serialization.
-        var bonusToGradingScale = new GradingScale();
-        bonusToGradingScale.setId(bonusToGradingScaleId);
+        var bonusToGradingScale = createGradingScale(bonusToGradingScaleId);
         bonus.setBonusToGradingScale(bonusToGradingScale);

         return bonus;
     }

+    private static GradingScale createGradingScale(long id) {
+        // New object is created to avoid circular dependency on json serialization.
+        var gradingScale = new GradingScale();
+        gradingScale.setId(id);
+        return gradingScale;
+    }
 }

This change would make the generateBonus method more concise and easier to read while maintaining the same functionality.

src/test/java/de/tum/cit/aet/artemis/athena/service/connectors/AthenaHealthIndicatorTest.java (2)

Line range hint 23-45: Test methods comply with coding guidelines, with room for minor improvements.

The test methods (healthUp, healthUpExampleModuleDown, and healthDown) adhere to the specified coding guidelines:

  • Descriptive naming
  • Small and specific tests
  • Use of assertThat for assertions
  • Static mocks (athenaRequestMockProvider)

To further improve the tests, consider:

  1. Adding more specific assertions (assert_specificity: true).
  2. Utilizing JUnit 5 features like @DisplayName or @nested for better test organization.
  3. If applicable, add tests to track DB query count for performance (db_query_count_tests: track_performance).

Line range hint 1-45: Overall, the test class is well-structured and follows good practices.

The AthenaHealthIndicatorTest class is well-organized and adheres to the provided coding guidelines. It effectively tests the AthenaHealthIndicator using clear, focused test methods. The use of constants for module names and status indicators enhances readability and maintainability.

To further enhance the test class, consider:

  1. Adding a brief class-level Javadoc comment explaining the purpose of these tests.
  2. If applicable, use @DisplayName annotations to provide more descriptive test names in test reports.
  3. Consider grouping related tests using @nested classes if the test suite grows larger in the future.

These suggestions are minor and optional. The current implementation is already of good quality.

src/test/java/de/tum/cit/aet/artemis/assessment/util/StudentScoreUtilService.java (1)

Line range hint 23-59: Methods adhere to guidelines, but consider reducing duplication.

The createStudentScore methods follow the coding guidelines by using fixed data, being small and specific, and having descriptive names. However, there's some code duplication between the two methods.

Consider extracting the common logic into a private helper method to reduce duplication:

private StudentScore createBaseStudentScore(Exercise exercise, User user) {
    StudentScore studentScore = new StudentScore();
    studentScore.setExercise(exercise);
    studentScore.setUser(user);
    return studentScore;
}

Then, use this helper method in both createStudentScore methods to reduce duplication.

src/main/java/de/tum/cit/aet/artemis/core/web/admin/AuditResource.java (2)

Line range hint 66-78: Consider refactoring date handling in getByDates method.

While the method correctly implements pagination and access control, there are a few areas for improvement:

  1. The date conversion logic could be moved to a separate utility method or service to enhance reusability and maintain the single responsibility principle.
  2. Using ZoneId.systemDefault() might lead to inconsistencies in a distributed system. Consider using a fixed timezone or accepting the timezone as a parameter.

Here's a suggested refactoring:

@GetMapping(value = "audits", params = { "fromDate", "toDate" })
@EnforceAdmin
public ResponseEntity<List<AuditEvent>> getByDates(
        @RequestParam(value = "fromDate") LocalDate fromDate,
        @RequestParam(value = "toDate") LocalDate toDate,
        Pageable pageable) {

    Instant from = dateService.convertToInstant(fromDate, true);
    Instant to = dateService.convertToInstant(toDate, false);

    Page<AuditEvent> page = auditEventService.findByDates(from, to, pageable);
    HttpHeaders headers = generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page);
    return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK);
}

This refactoring assumes the creation of a DateService with methods to handle date conversions consistently across the application.


Line range hint 87-92: Consider simplifying path variable in get method.

The get method is well-implemented, following RESTful principles and using proper error handling. However, there's a minor point to consider:

The path variable pattern {id:.+} allows for IDs with dots, which is unnecessary for a Long ID. This could potentially lead to incorrect matching of IDs.

Consider simplifying the @GetMapping annotation:

@GetMapping("audits/{id}")

This change ensures that only valid Long values are matched as IDs, preventing potential issues with URL parsing.

src/test/java/de/tum/cit/aet/artemis/assessment/TutorParticipationResourceIntegrationTest.java (1)

Line range hint 1-99: Overall adherence to coding guidelines is good, with some potential improvements.

The test class largely follows the provided coding guidelines:

  • Test names are descriptive and specific.
  • JUnit 5 features are utilized.
  • AssertJ's assertThat is used for assertions.
  • The use of test repositories aligns with the guideline to avoid direct DB access.

However, there are a few areas where the guidelines could be more explicitly followed:

  1. Consider using ArchUnit to enforce package rules if not done elsewhere.
  2. If performance is a concern, implement DB query count tracking for relevant tests.
  3. Evaluate if static mocks could be beneficial for some of the dependencies.

These suggestions aim to further align the test class with the provided guidelines and potentially improve test quality and performance.

src/test/java/de/tum/cit/aet/artemis/assessment/TutorLeaderboardServiceIntegrationTest.java (1)

Line range hint 1-105: Good adherence to coding guidelines with room for improvement.

The test class generally follows the provided coding guidelines:

  1. Uses descriptive test names (e.g., testLeaderboardData_forCourseWithExercises).
  2. Employs JUnit 5 features (@BeforeEach, @Test).
  3. Uses assertThat for assertions, enhancing readability.
  4. Implements @WithMockUser for authentication in tests.

Suggestions for improvement:

  1. Consider adding ArchUnit tests to enforce package rules, as per the guideline "archunit_use: enforce_package_rules".
  2. If applicable, add tests to track database query count for performance monitoring (guideline: "db_query_count_tests: track_performance").
  3. Evaluate if the current tests can be made more specific or broken down into smaller, more focused tests (guideline: "test_size: small_specific").

To implement ArchUnit tests, consider adding a new test method:

@Test
void testPackageStructure() {
    JavaClasses importedClasses = new ClassFileImporter().importPackages("de.tum.cit.aet.artemis");
    
    ArchRule rule = classes()
        .that().resideInAPackage("..assessment..")
        .should().onlyBeAccessed().byAnyPackage("..assessment..", "..config..");

    rule.check(importedClasses);
}

Don't forget to add the necessary ArchUnit dependency to your project if not already present.

src/main/java/de/tum/cit/aet/artemis/iris/service/pyris/PyrisConnectorService.java (2)

Line range hint 108-108: Address the TODO comment.

There's a TODO comment regarding adding error ingestion UI. This should be addressed or tracked as a separate issue if it's not part of the current PR scope.

Would you like me to create a GitHub issue to track this TODO item?


Line range hint 78-91: Consider adding JavaDoc to public methods.

The executePipeline and executeLectureWebhook methods are public but lack JavaDoc. Adding documentation for these methods would improve code readability and maintainability.

Consider adding JavaDoc to these methods, following this template:

/**
 * Executes a pipeline with the given feature and variant.
 *
 * @param feature      The feature name of the pipeline to execute
 * @param variant      The variant of the feature to execute
 * @param executionDTO The DTO sent as a body for the execution
 * @throws PyrisConnectorException If there's an error connecting to Pyris
 * @throws IrisException If there's an error processing the request in Pyris
 */
public void executePipeline(String feature, String variant, Object executionDTO) {
    // ... existing implementation ...
}

/**
 * Executes a webhook and sends lectures to the webhook with the given variant.
 *
 * @param variant      The variant of the feature to execute
 * @param executionDTO The DTO sent as a body for the execution
 * @throws PyrisConnectorException If there's an error connecting to Pyris
 * @throws IrisException If there's an error processing the request in Pyris
 */
public void executeLectureWebhook(String variant, PyrisWebhookLectureIngestionExecutionDTO executionDTO) {
    // ... existing implementation ...
}

Also applies to: 93-106

src/main/java/de/tum/cit/aet/artemis/iris/web/open/PublicPyrisStatusUpdateResource.java (4)

Line range hint 84-97: LGTM: Method is well-implemented, but consider refactoring.

The setStatusOfCourseChatJob method follows the same secure and best practices as setStatusOfJob. However, there's a high degree of similarity between these methods, which suggests an opportunity for refactoring to reduce code duplication.

Consider creating a generic method that can handle both exercise and course chat jobs, parameterizing the job type. This would improve maintainability and reduce the risk of inconsistencies between similar methods.


Line range hint 112-126: LGTM: Well-implemented method, but reinforces need for refactoring.

The setCompetencyExtractionJobStatus method follows the same secure and best practices as the previous methods. This consistency is good for maintainability, but it also highlights the opportunity for refactoring to reduce code duplication across these similar methods.

Consider implementing a generic method that can handle different types of jobs (exercise chat, course chat, competency extraction) based on a parameter. This would significantly reduce code duplication and improve overall maintainability.


Line range hint 138-156: LGTM: Well-implemented method with additional type safety.

The setStatusOfIngestionJob method follows the same secure and best practices as the previous methods, with an additional type check for IngestionWebhookJob. This extra check enhances type safety, which is a good practice.

However, the overall similarity to other methods in this class continues to highlight the opportunity for refactoring. Consider creating a generic method that can handle different job types, including this additional type check where necessary. This would reduce code duplication while maintaining the required type safety for each job type.


Line range hint 1-158: Overall assessment: Well-implemented controller with opportunity for refactoring.

The PublicPyrisStatusUpdateResource class is generally well-structured and follows good practices:

  • Proper use of annotations and dependency injection
  • Consistent error handling and input validation
  • Secure authentication checks

However, there's significant code duplication across the status update methods. To improve maintainability and reduce the risk of inconsistencies:

  1. Consider implementing a generic method that can handle different job types.
  2. Use method parameters or a strategy pattern to accommodate job-specific behaviors.
  3. Extract common validation logic into a separate method.

This refactoring would make the code more DRY (Don't Repeat Yourself) and easier to maintain in the long run.

src/test/java/de/tum/cit/aet/artemis/assessment/util/ComplaintUtilService.java (2)

Line range hint 1-16: LGTM! Consider organizing imports.

The package change and the use of test repositories are appropriate for this test utility service. These changes align well with the PR objectives of restructuring into modules.

Consider organizing the imports alphabetically for better readability. For example:

import de.tum.cit.aet.artemis.assessment.domain.Complaint;
import de.tum.cit.aet.artemis.assessment.domain.ComplaintResponse;
import de.tum.cit.aet.artemis.assessment.domain.ComplaintType;
import de.tum.cit.aet.artemis.assessment.domain.Result;
import de.tum.cit.aet.artemis.assessment.dto.AssessmentUpdateDTO;
import de.tum.cit.aet.artemis.assessment.repository.ComplaintRepository;
import de.tum.cit.aet.artemis.assessment.test_repository.ComplaintResponseTestRepository;
import de.tum.cit.aet.artemis.assessment.test_repository.ResultTestRepository;
import de.tum.cit.aet.artemis.core.domain.User;
import de.tum.cit.aet.artemis.core.test_repository.UserTestRepository;
import de.tum.cit.aet.artemis.core.user.util.UserUtilService;
import de.tum.cit.aet.artemis.exercise.domain.Submission;
import de.tum.cit.aet.artemis.exercise.domain.Team;
import de.tum.cit.aet.artemis.exercise.domain.participation.Participation;

Line range hint 23-41: LGTM! Consider constructor injection for better testability.

The updates to use test repositories are consistent with the changes in import statements and align with the PR objectives.

Consider using constructor injection instead of field injection for better testability. This approach makes dependencies explicit and allows for easier mocking in unit tests. Here's an example of how you could refactor this:

@Service
public class ComplaintUtilService {

    private final UserUtilService userUtilService;
    private final ResultTestRepository resultTestRepository;
    private final ComplaintRepository complaintRepo;
    private final ComplaintResponseTestRepository complaintResponseRepo;
    private final UserTestRepository userRepo;

    @Autowired
    public ComplaintUtilService(UserUtilService userUtilService,
                                ResultTestRepository resultTestRepository,
                                ComplaintRepository complaintRepo,
                                ComplaintResponseTestRepository complaintResponseRepo,
                                UserTestRepository userRepo) {
        this.userUtilService = userUtilService;
        this.resultTestRepository = resultTestRepository;
        this.complaintRepo = complaintRepo;
        this.complaintResponseRepo = complaintResponseRepo;
        this.userRepo = userRepo;
    }

    // ... rest of the class
}
src/test/java/de/tum/cit/aet/artemis/assessment/RatingResourceIntegrationTest.java (1)

Missing ArchUnit Usage in Test Class

The RatingResourceIntegrationTest does not utilize ArchUnit for enforcing architectural rules, unlike other test classes in the project. To adhere to the coding guidelines, please incorporate ArchUnit tests into this class.

🔗 Analysis chain

Line range hint 1-191: Well-structured and comprehensive test suite.

The RatingResourceIntegrationTest class is well-implemented and adheres to the provided coding guidelines:

  1. Test naming is descriptive and follows conventions.
  2. Tests are small and specific, covering various scenarios.
  3. JUnit 5 features like @ParameterizedTest are utilized.
  4. Assertions use assertThat as required.
  5. The utility service factory pattern is employed (e.g., ParticipationFactory).
  6. Authentication is handled using @WithMockUser, aligning with the static mocks strategy.

To ensure complete adherence to the coding guidelines, please verify the following:

  1. ArchUnit usage for enforcing package rules.
  2. Tracking of DB query counts in tests.

You can run the following script to check for ArchUnit usage:

If the script doesn't return any results, consider adding ArchUnit tests to enforce package rules as per the coding guidelines.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for ArchUnit usage in test files
rg --type java 'import com.tngtech.archunit' src/test/java

Length of output: 8195

src/test/java/de/tum/cit/aet/artemis/athena/AthenaExerciseIntegrationTest.java (2)

Line range hint 1-32: LGTM! Consider organizing imports.

The package declaration and import statements have been updated correctly to reflect the new module structure. This aligns well with the PR objectives of adjusting server tests to the restructuring into modules.

Consider organizing the imports alphabetically within each group (static imports, java imports, and project-specific imports) for better readability. For example:

import static de.tum.cit.aet.artemis.core.connector.AthenaRequestMockProvider.*;
import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import java.time.ZonedDateTime;
import java.util.List;

import com.fasterxml.jackson.databind.ObjectMapper;

import de.tum.cit.aet.artemis.core.domain.Course;
import de.tum.cit.aet.artemis.core.util.CourseTestService;
import de.tum.cit.aet.artemis.exam.domain.ExerciseGroup;
import de.tum.cit.aet.artemis.exam.util.ExamUtilService;
// ... (rest of the imports)

Line range hint 1-231: Consider additional improvements for better alignment with coding guidelines.

The changes made to this file are good and align well with the PR objectives. However, to fully comply with the coding guidelines, consider the following suggestions:

  1. Test naming: Ensure all test method names are descriptive and follow a consistent naming convention (e.g., shouldDoSomethingWhenSomeCondition).

  2. Test size: Review each test to ensure it's focused on testing a specific behavior. Consider breaking down larger tests into smaller, more specific ones.

  3. JUnit 5 features: Utilize JUnit 5 features like @DisplayName, @Nested, or parameterized tests where appropriate to improve test organization and readability.

  4. AssertJ usage: Replace any remaining JUnit assertions with AssertJ's assertThat() for more readable and specific assertions.

  5. ArchUnit: Consider adding ArchUnit tests to enforce package rules, especially given the recent restructuring.

  6. DB query count tests: Add tests to track and assert on the number of database queries executed during test runs to ensure performance.

  7. Util/Service/Factory pattern: Ensure that utility classes, services, and factories are being used consistently throughout the tests.

  8. Mock strategy: Review the use of mocks and ensure that static mocks are being used where appropriate.

  9. Context restart minimization: Analyze if there are opportunities to minimize context restarts between tests for better performance.

Would you like me to provide specific examples for any of these suggestions?

src/test/java/de/tum/cit/aet/artemis/assessment/util/GradingScaleUtilService.java (2)

Line range hint 18-19: Consider using constructor injection instead of field injection.

While the current implementation using @Autowired for field injection works, consider switching to constructor injection for the GradingScaleRepository. This change would improve testability and make dependencies more explicit.

private final GradingScaleRepository gradingScaleRepository;

@Autowired
public GradingScaleUtilService(GradingScaleRepository gradingScaleRepository) {
    this.gradingScaleRepository = gradingScaleRepository;
}

This approach aligns better with the principle of making dependencies explicit and allows for easier mocking in unit tests.


Line range hint 134-214: Consider decomposing complex methods for improved readability and maintainability.

The methods generateGradingScale and generateGradingScaleWithStickyStep are quite long and complex. Consider breaking them down into smaller, more focused methods. This would improve readability, maintainability, and testability.

For example, you could extract the grade step creation logic into a separate method:

private GradeStep createGradeStep(double lowerBound, double upperBound, boolean isLowerBoundInclusive, 
                                  boolean isUpperBoundInclusive, boolean isPassingGrade, 
                                  String gradeName, GradingScale gradingScale) {
    GradeStep gradeStep = new GradeStep();
    gradeStep.setLowerBoundPercentage(lowerBound);
    gradeStep.setUpperBoundPercentage(upperBound);
    gradeStep.setLowerBoundInclusive(isLowerBoundInclusive);
    gradeStep.setUpperBoundInclusive(isUpperBoundInclusive);
    gradeStep.setIsPassingGrade(isPassingGrade);
    gradeStep.setGradeName(gradeName);
    gradeStep.setGradingScale(gradingScale);
    return gradeStep;
}

This would simplify the main methods and make the code more modular.

src/test/java/de/tum/cit/aet/artemis/assessment/ParticipantScoreIntegrationTest.java (1)

Line range hint 1-284: Overall adherence to coding guidelines is good, with room for minor improvements

The test file generally follows the provided coding guidelines:

  • Test names are descriptive
  • JUnit 5 features are used
  • assertThat() is used for assertions
  • Tests are small and specific
  • Fixed data is used (TEST_PREFIX)
  • Database access is minimized using test repositories

Suggestions for improvement:

  1. Consider adding more specific assertions in some cases. For example, in the getCourseScores_asInstructorOfCourse_shouldReturnCourseScores test, you could use assertThat(courseScores).extracting("studentLogin").contains(TEST_PREFIX + "student1") for a more precise assertion.
  2. Add ArchUnit tests to enforce package rules, as mentioned in the coding guidelines.
  3. Consider adding tests to track the number of database queries for performance monitoring.
src/test/java/de/tum/cit/aet/artemis/assessment/service/ComplaintResponseServiceTest.java (1)

Line range hint 65-232: Tests adhere to guidelines, with room for improvement.

The test methods generally follow the provided coding guidelines:

  • Descriptive test names are used.
  • Tests are small and specific.
  • JUnit 5 features are utilized.
  • assertThat is used for assertions.

However, consider the following improvements:

  1. Enhance assert specificity by providing more detailed error messages.
  2. Consider implementing database query count tracking for performance monitoring.

Example of improving assert specificity:

-assertThat(complaintResponseService.isUserAuthorizedToRespondToComplaint(textExerciseComplaint, instructor)).isTrue();
+assertThat(complaintResponseService.isUserAuthorizedToRespondToComplaint(textExerciseComplaint, instructor))
+    .as("Instructor should be authorized to respond to complaint")
+    .isTrue();

For database query count tracking, consider using a tool like Spring Test DBUnit or implementing a custom solution to monitor query execution during tests.

src/test/java/de/tum/cit/aet/artemis/assessment/TutorParticipationIntegrationTest.java (1)

Line range hint 1-269: Suggestions for improved compliance with coding guidelines

The test class generally adheres well to the provided coding guidelines. However, consider the following improvements:

  1. Some test methods, like testTutorParticipateInTextExerciseWithExampleSubmissionAddingUnnecessaryFeedbackBadRequest, are quite long. Consider breaking these down into smaller, more focused tests to improve readability and maintainability.

  2. The use of static mocks, as mentioned in the coding guidelines, is not evident in the changed code. If applicable, consider incorporating static mocks to improve test isolation.

  3. There's no clear evidence of tracking DB query counts for performance testing. Consider adding this to relevant test methods to ensure optimal database interaction.

These changes would further align the test class with the provided coding guidelines and potentially improve the overall quality and performance of the tests.

src/test/java/de/tum/cit/aet/artemis/assessment/service/ResultServiceTest.java (1)

Line range hint 1-265: Summary: Restructuring changes look good, consider additional test cases

The changes to ResultServiceTest.java align well with the PR objectives of restructuring the codebase into modules and using test repositories. Here's a summary of the key points:

  1. Package declaration and imports have been updated correctly.
  2. Repository variables now use test repository implementations, enhancing test isolation.
  3. Existing test methods remain unchanged, which maintains current test coverage.

Consider the following suggestions to further improve the test suite:

  1. Add new test cases to cover any new functionality introduced by the restructuring.
  2. Review and update test data setup in the reset() method if necessary to reflect any changes in data structure or relationships.
  3. Consider adding tests specifically for the new test repositories to ensure they behave as expected.

To implement these suggestions, you could start by adding a new test method like this:

@Test
@WithMockUser(username = TEST_PREFIX + "student1", roles = "STUDENT")
void testNewFunctionalityIntroducedByRestructuring() {
    // Setup test data
    // ...

    // Call the method under test
    // ...

    // Assert the expected outcome
    // ...
}

Remember to follow the existing patterns in the file for consistency, such as using assertThat for assertions and following the naming conventions for test methods.

src/test/java/de/tum/cit/aet/artemis/assessment/AssessmentTeamComplaintIntegrationTest.java (1)

Line range hint 1-324: LGTM: Test structure adheres to guidelines with room for improvement

The overall test structure adheres well to the provided guidelines:

  • Descriptive test names (test_naming guideline)
  • Focused test scenarios (test_size guideline)
  • Use of JUnit 5 features like @beforeeach (junit5_features guideline)
  • Proper authentication testing with @WithMockUser

To further improve the test suite:

  1. Consider using AssertJ's assertThat more consistently across all assertions (assert_use guideline).
  2. Explore opportunities to track database query counts in performance-critical tests (db_query_count_tests guideline).
  3. Evaluate if ArchUnit can be used to enforce package rules (archunit_use guideline).
src/test/java/de/tum/cit/aet/artemis/assessment/service/CourseScoreCalculationServiceTest.java (1)

Line range hint 3-42: Update imports to avoid star imports and use specific classes

The import statements have been updated to reflect the new package structure and the use of test repositories. However, there's a star import on line 3 that should be replaced with specific imports. According to the project's coding standards, star imports should be avoided.

Please replace the star import with specific imports for the classes you're using from the org.assertj.core.api.Assertions package.

Also, ensure that all necessary classes are imported and that there are no unused imports.

src/test/java/de/tum/cit/aet/artemis/assessment/service/GradingScaleServiceTest.java (2)

Line range hint 59-437: Test methods are well-structured, but some improvements could be made.

The test methods follow good practices such as descriptive names, parameterized tests, mocked authentication, and consistent use of AssertJ assertions. However, consider the following improvements:

  1. Add more edge cases to parameterized tests, especially for boundary conditions.
  2. Consider using @DisplayName for better test descriptions in test reports.
  3. Some test methods are quite long (e.g., testGradeStepMatchingForRoundingErrors1-12). Consider breaking these into smaller, more focused tests.
  4. Add comments explaining the purpose of complex test scenarios, especially for the rounding error tests.

Line range hint 1-437: Good compliance with coding guidelines, with minor improvement suggestions.

The test class generally follows the provided coding guidelines:

  • Proper naming convention with "Test" suffix
  • Use of JUnit 5 features
  • Consistent use of assertThat
  • Avoidance of direct database access

Consider the following minor improvements:

  1. Some test methods (e.g., testGradeStepMatchingForRoundingErrors1-12) could be more specific and smaller. Consider breaking these into separate, more focused tests.
  2. Add @DisplayName annotations to improve test readability in reports.
  3. Consider using @nested classes to group related tests, improving organization and readability.
src/test/java/de/tum/cit/aet/artemis/athena/AthenaResourceIntegrationTest.java (1)

Line range hint 51-486: LGTM: Test methods remain comprehensive and unchanged.

The test methods have not been significantly altered, which is good for maintaining consistency. They cover a wide range of scenarios including success cases, access control, and error handling. The use of appropriate annotations for user roles and mock data is commendable.

Consider adding new tests if the restructuring has introduced any new behaviors or edge cases that are not covered by the existing tests.

src/test/java/de/tum/cit/aet/artemis/assessment/BonusIntegrationTest.java (1)

Line range hint 1-435: Overall, the changes in BonusIntegrationTest.java are well-implemented and align with the PR objectives.

The file has been successfully restructured to fit the new package organization while maintaining comprehensive test coverage. The test methods, helper functions, and utility methods are well-designed and should effectively validate the bonus calculation functionality after the restructuring process.

To further improve the test suite, consider the following suggestions:

  1. Add comments to complex test scenarios to explain the expected behavior.
  2. Consider using parameterized tests for more edge cases in bonus calculations.
  3. Ensure that these tests are included in the CI/CD pipeline to catch any potential regressions during future development.
src/test/java/de/tum/cit/aet/artemis/assessment/GradingScaleIntegrationTest.java (1)

Line range hint 1-638: Consider a comprehensive review of the entire test class.

The changes made to this test class, while minimal, are part of a larger refactoring effort to improve test isolation and organization. The core functionality of the test methods remains unchanged, which is positive.

To ensure full alignment with the new structure:

  1. Review all test methods to verify they're using the appropriate test repositories and utility services.
  2. Check if any test methods need updates due to the removal of PageableSearchUtilService.
  3. Verify that the test class is fully compatible with the new AbstractSpringIntegrationIndependentTest base class.
  4. Consider adding more detailed comments or documentation to explain the purpose of each test method, especially if they've been affected by the restructuring.

This comprehensive review will help maintain the integrity and clarity of the test suite as the codebase evolves.

src/test/java/de/tum/cit/aet/artemis/assessment/ResultListenerIntegrationTest.java (1)

Line range hint 1-472: Overall assessment: Changes successfully implement the use of TestRepositories.

The modifications in this file consistently replace production repositories with their test counterparts, aligning with the PR objectives. These changes enhance test isolation by ensuring that test data is used instead of production data. The overall structure and logic of the test class remain intact, preserving the existing test scenarios while improving their reliability.

Consider adding a comment at the beginning of the class explaining the use of TestRepositories and their benefits in the context of these integration tests. This would help future developers understand the testing strategy employed in this class.

src/test/java/de/tum/cit/aet/artemis/assessment/ResultServiceIntegrationTest.java (1)

Line range hint 1-863: Consider refactoring common setup code to reduce duplication.

While the changes to use test-specific repositories are positive and consistent throughout the file, there might be an opportunity to refactor some common setup code. For instance, the creation of users, exercises, and participations is repeated in several test methods. Consider extracting these common setup operations into helper methods or using a more extensive @BeforeEach setup. This could help reduce code duplication and improve the overall maintainability of the test suite.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE

📥 Commits

Files that changed from the base of the PR and between 8b43b93 and a4d4947.

📒 Files selected for processing (82)
  • src/main/java/de/tum/cit/aet/artemis/assessment/repository/ComplaintRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/assessment/repository/ComplaintResponseRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/assessment/repository/ExampleSubmissionRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/assessment/repository/ParticipantScoreRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/assessment/repository/ResultRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/assessment/repository/TutorParticipationRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/atlas/repository/CompetencyProgressRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/atlas/repository/LearningPathRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/atlas/repository/ScienceEventRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/communication/repository/ConversationParticipantRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/communication/repository/PostRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/communication/repository/ReactionRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/communication/repository/conversation/ChannelRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/communication/repository/conversation/ConversationRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/communication/repository/conversation/OneToOneChatRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/core/config/CacheConfiguration.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/core/repository/CourseRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/core/repository/DataExportRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/core/repository/UserRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/core/web/admin/AuditResource.java (1 hunks)
  • src/main/java/de/tum/cit/aet/artemis/exam/repository/ExamLiveEventRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/exam/repository/StudentExamRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/exercise/repository/ParticipationRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/exercise/repository/StudentParticipationRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/exercise/repository/SubmissionRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/iris/repository/IrisHestiaSessionRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/iris/repository/IrisMessageRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/iris/service/pyris/PyrisConnectorService.java (1 hunks)
  • src/main/java/de/tum/cit/aet/artemis/iris/web/open/PublicPyrisStatusUpdateResource.java (1 hunks)
  • src/main/java/de/tum/cit/aet/artemis/lecture/repository/SlideRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/lti/repository/LtiPlatformConfigurationRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/modeling/repository/ModelingSubmissionRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/programming/repository/BuildJobRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/programming/repository/ProgrammingExerciseRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/programming/repository/ProgrammingExerciseStudentParticipationRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/programming/repository/ProgrammingExerciseTestCaseRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/quiz/repository/QuizExerciseRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/quiz/repository/QuizSubmissionRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/text/repository/TextSubmissionRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/tutorialgroup/repository/TutorialGroupRegistrationRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/tutorialgroup/repository/TutorialGroupRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/tutorialgroup/repository/TutorialGroupScheduleRepository.java (0 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/AssessmentComplaintIntegrationTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/AssessmentTeamComplaintIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/BonusIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/ComplaintResponseIntegrationTest.java (25 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/ExampleSubmissionIntegrationTest.java (11 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/ExerciseScoresChartIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/FeedbackTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/GradeStepIntegrationTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/GradingScaleIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/LongFeedbackResourceIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/ParticipantScoreIntegrationTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/RatingResourceIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/ResultListenerIntegrationTest.java (6 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/ResultServiceIntegrationTest.java (7 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/ResultTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/TutorEffortIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/TutorLeaderboardServiceIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/TutorParticipationIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/TutorParticipationResourceIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/service/ComplaintResponseServiceTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/service/CourseScoreCalculationServiceTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/service/FeedbackServiceTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/service/GradingScaleServiceTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/service/ResultServiceTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/test_repository/ComplaintResponseTestRepository.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/test_repository/ExampleSubmissionTestRepository.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/test_repository/ResultTestRepository.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/test_repository/TutorParticipationTestRepository.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/util/BonusFactory.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/util/ComplaintUtilService.java (7 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/util/GradingCriterionUtil.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/util/GradingScaleFactory.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/util/GradingScaleUtilService.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/util/StudentScoreUtilService.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/athena/AbstractAthenaTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/athena/AthenaExerciseIntegrationTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/athena/AthenaResourceIntegrationTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/athena/service/connectors/AthenaFeedbackSendingServiceTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/athena/service/connectors/AthenaFeedbackSuggestionsServiceTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/athena/service/connectors/AthenaHealthIndicatorTest.java (2 hunks)
⛔ Files not processed due to max files limit (21)
  • src/test/java/de/tum/cit/aet/artemis/athena/service/connectors/AthenaRepositoryExportServiceTest.java
  • src/test/java/de/tum/cit/aet/artemis/athena/service/connectors/AthenaSubmissionSelectionServiceTest.java
  • src/test/java/de/tum/cit/aet/artemis/athena/service/connectors/AthenaSubmissionSendingServiceTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/competency/AbstractCompetencyPrerequisiteIntegrationTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/competency/CompetencyIntegrationTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/competency/CompetencyJolIntegrationTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/competency/CourseCompetencyIntegrationTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/competency/PrerequisiteIntegrationTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/competency/StandardizedCompetencyIntegrationTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/competency/util/CompetencyProgressUtilService.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/competency/util/CompetencyUtilService.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/competency/util/PrerequisiteUtilService.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/competency/util/StandardizedCompetencyUtilService.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/learningpath/LearningPathIntegrationTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/learningpath/util/LearningPathUtilService.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/science/ScienceIntegrationTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/science/ScienceSettingsIntegrationTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/science/util/ScienceUtilService.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/service/LearningObjectServiceTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/service/LearningPathServiceTest.java
  • src/test/java/de/tum/cit/aet/artemis/atlas/test_repository/CompetencyProgressTestRepository.java
💤 Files not reviewed due to no reviewable changes (39)
  • src/main/java/de/tum/cit/aet/artemis/assessment/repository/ComplaintRepository.java
  • src/main/java/de/tum/cit/aet/artemis/assessment/repository/ComplaintResponseRepository.java
  • src/main/java/de/tum/cit/aet/artemis/assessment/repository/ExampleSubmissionRepository.java
  • src/main/java/de/tum/cit/aet/artemis/assessment/repository/ParticipantScoreRepository.java
  • src/main/java/de/tum/cit/aet/artemis/assessment/repository/ResultRepository.java
  • src/main/java/de/tum/cit/aet/artemis/assessment/repository/TutorParticipationRepository.java
  • src/main/java/de/tum/cit/aet/artemis/atlas/repository/CompetencyProgressRepository.java
  • src/main/java/de/tum/cit/aet/artemis/atlas/repository/LearningPathRepository.java
  • src/main/java/de/tum/cit/aet/artemis/atlas/repository/ScienceEventRepository.java
  • src/main/java/de/tum/cit/aet/artemis/communication/repository/ConversationParticipantRepository.java
  • src/main/java/de/tum/cit/aet/artemis/communication/repository/PostRepository.java
  • src/main/java/de/tum/cit/aet/artemis/communication/repository/ReactionRepository.java
  • src/main/java/de/tum/cit/aet/artemis/communication/repository/conversation/ChannelRepository.java
  • src/main/java/de/tum/cit/aet/artemis/communication/repository/conversation/ConversationRepository.java
  • src/main/java/de/tum/cit/aet/artemis/communication/repository/conversation/OneToOneChatRepository.java
  • src/main/java/de/tum/cit/aet/artemis/core/config/CacheConfiguration.java
  • src/main/java/de/tum/cit/aet/artemis/core/repository/CourseRepository.java
  • src/main/java/de/tum/cit/aet/artemis/core/repository/DataExportRepository.java
  • src/main/java/de/tum/cit/aet/artemis/core/repository/UserRepository.java
  • src/main/java/de/tum/cit/aet/artemis/exam/repository/ExamLiveEventRepository.java
  • src/main/java/de/tum/cit/aet/artemis/exam/repository/StudentExamRepository.java
  • src/main/java/de/tum/cit/aet/artemis/exercise/repository/ParticipationRepository.java
  • src/main/java/de/tum/cit/aet/artemis/exercise/repository/StudentParticipationRepository.java
  • src/main/java/de/tum/cit/aet/artemis/exercise/repository/SubmissionRepository.java
  • src/main/java/de/tum/cit/aet/artemis/iris/repository/IrisHestiaSessionRepository.java
  • src/main/java/de/tum/cit/aet/artemis/iris/repository/IrisMessageRepository.java
  • src/main/java/de/tum/cit/aet/artemis/lecture/repository/SlideRepository.java
  • src/main/java/de/tum/cit/aet/artemis/lti/repository/LtiPlatformConfigurationRepository.java
  • src/main/java/de/tum/cit/aet/artemis/modeling/repository/ModelingSubmissionRepository.java
  • src/main/java/de/tum/cit/aet/artemis/programming/repository/BuildJobRepository.java
  • src/main/java/de/tum/cit/aet/artemis/programming/repository/ProgrammingExerciseRepository.java
  • src/main/java/de/tum/cit/aet/artemis/programming/repository/ProgrammingExerciseStudentParticipationRepository.java
  • src/main/java/de/tum/cit/aet/artemis/programming/repository/ProgrammingExerciseTestCaseRepository.java
  • src/main/java/de/tum/cit/aet/artemis/quiz/repository/QuizExerciseRepository.java
  • src/main/java/de/tum/cit/aet/artemis/quiz/repository/QuizSubmissionRepository.java
  • src/main/java/de/tum/cit/aet/artemis/text/repository/TextSubmissionRepository.java
  • src/main/java/de/tum/cit/aet/artemis/tutorialgroup/repository/TutorialGroupRegistrationRepository.java
  • src/main/java/de/tum/cit/aet/artemis/tutorialgroup/repository/TutorialGroupRepository.java
  • src/main/java/de/tum/cit/aet/artemis/tutorialgroup/repository/TutorialGroupScheduleRepository.java
🧰 Additional context used
📓 Path-based instructions (43)
src/main/java/de/tum/cit/aet/artemis/core/web/admin/AuditResource.java (1)

Pattern src/main/java/**/*.java: naming:CamelCase; principles:{single_responsibility,small_methods,no_duplication}; db:{perf_queries,datetime_not_timestamp}; rest:{stateless,singleton,delegate_logic,http_only,minimal_dtos}; dtos:{java_records,no_entities,min_data,single_resp}; di:constructor_injection; kiss:simple_code; file_handling:os_indep_paths; practices:{least_access,avoid_transactions,code_reuse,static_member_ref,prefer_primitives}; sql:{param_annotation,uppercase,avoid_subqueries};java:avoid_star_imports

src/main/java/de/tum/cit/aet/artemis/iris/service/pyris/PyrisConnectorService.java (1)

Pattern src/main/java/**/*.java: naming:CamelCase; principles:{single_responsibility,small_methods,no_duplication}; db:{perf_queries,datetime_not_timestamp}; rest:{stateless,singleton,delegate_logic,http_only,minimal_dtos}; dtos:{java_records,no_entities,min_data,single_resp}; di:constructor_injection; kiss:simple_code; file_handling:os_indep_paths; practices:{least_access,avoid_transactions,code_reuse,static_member_ref,prefer_primitives}; sql:{param_annotation,uppercase,avoid_subqueries};java:avoid_star_imports

src/main/java/de/tum/cit/aet/artemis/iris/web/open/PublicPyrisStatusUpdateResource.java (1)

Pattern src/main/java/**/*.java: naming:CamelCase; principles:{single_responsibility,small_methods,no_duplication}; db:{perf_queries,datetime_not_timestamp}; rest:{stateless,singleton,delegate_logic,http_only,minimal_dtos}; dtos:{java_records,no_entities,min_data,single_resp}; di:constructor_injection; kiss:simple_code; file_handling:os_indep_paths; practices:{least_access,avoid_transactions,code_reuse,static_member_ref,prefer_primitives}; sql:{param_annotation,uppercase,avoid_subqueries};java:avoid_star_imports

src/test/java/de/tum/cit/aet/artemis/assessment/AssessmentComplaintIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/AssessmentTeamComplaintIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/BonusIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/ComplaintResponseIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/ExampleSubmissionIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/ExerciseScoresChartIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/FeedbackTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/GradeStepIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/GradingScaleIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/LongFeedbackResourceIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/ParticipantScoreIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/RatingResourceIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/ResultListenerIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/ResultServiceIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/ResultTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/TutorEffortIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/TutorLeaderboardServiceIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/TutorParticipationIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/TutorParticipationResourceIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/service/ComplaintResponseServiceTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/service/CourseScoreCalculationServiceTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/service/FeedbackServiceTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/service/GradingScaleServiceTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/service/ResultServiceTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/test_repository/ComplaintResponseTestRepository.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/test_repository/ExampleSubmissionTestRepository.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/test_repository/ResultTestRepository.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/test_repository/TutorParticipationTestRepository.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/util/BonusFactory.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/util/ComplaintUtilService.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/util/GradingCriterionUtil.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/util/GradingScaleFactory.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/util/GradingScaleUtilService.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/util/StudentScoreUtilService.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/athena/AbstractAthenaTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/athena/AthenaExerciseIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/athena/AthenaResourceIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/athena/service/connectors/AthenaFeedbackSendingServiceTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/athena/service/connectors/AthenaFeedbackSuggestionsServiceTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/athena/service/connectors/AthenaHealthIndicatorTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

📓 Learnings (2)
src/test/java/de/tum/cit/aet/artemis/assessment/ComplaintResponseIntegrationTest.java (1)
Learnt from: julian-christl
PR: ls1intum/Artemis#7829
File: src/main/java/de/tum/in/www1/artemis/web/rest/ComplaintResponseResource.java:0-0
Timestamp: 2024-01-08T18:32:55.982Z
Learning: The user has fixed the issue regarding the redundant wildcard import in `ComplaintResponseResource.java` by removing it in commit 7e392e0.
src/test/java/de/tum/cit/aet/artemis/assessment/service/CourseScoreCalculationServiceTest.java (1)
Learnt from: Strohgelaender
PR: ls1intum/Artemis#8030
File: src/main/java/de/tum/in/www1/artemis/service/CourseScoreCalculationService.java:21-49
Timestamp: 2024-02-16T16:56:16.054Z
Learning: The project consistently avoids using star-imports in Java files.
🔇 Additional comments (144)
src/test/java/de/tum/cit/aet/artemis/assessment/test_repository/ComplaintResponseTestRepository.java (3)

1-9: LGTM: Package declaration and imports are appropriate.

The package name de.tum.cit.aet.artemis.assessment.test_repository aligns with the PR objectives of creating a test repository subpackage. The imports are relevant and necessary for the interface's functionality.


11-12: LGTM: Annotations are correctly applied.

The @Repository and @Primary annotations are appropriately used. The @Primary annotation ensures that this test repository is prioritized over the production repository in test contexts, which aligns with the PR objectives.


1-16: Verify package rules using ArchUnit.

The implementation adheres to most of the specified coding guidelines. However, to ensure full compliance, we should verify if there are any package rules that need to be enforced.

Run the following script to check for existing ArchUnit tests:

If no relevant ArchUnit tests are found, consider adding tests to enforce package rules for test repositories.

✅ Verification successful

Package rules are already enforced via existing ArchUnit tests. No further action is required.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for existing ArchUnit tests related to package rules

# Test: Search for ArchUnit tests. Expect: Files containing ArchUnit package rule tests.
rg --type java -g '*Test.java' -i '(archunit|architecturerule).*package'

Length of output: 406

src/test/java/de/tum/cit/aet/artemis/assessment/test_repository/ExampleSubmissionTestRepository.java (2)

1-9: LGTM: Package declaration and imports are appropriate.

The package name correctly includes "test_repository", aligning with the file's purpose. The imports are relevant and necessary for the interface's functionality.


11-13: LGTM: Annotations and interface declaration follow guidelines.

The use of @Repository and @Primary annotations is correct and aligns with the coding guidelines for test repositories. Extending ExampleSubmissionRepository ensures that this test repository implements the corresponding production repository, which is a good practice.

src/test/java/de/tum/cit/aet/artemis/assessment/test_repository/TutorParticipationTestRepository.java (4)

1-11: LGTM: Package declaration and imports are correct.

The package declaration and imports are appropriate for a test repository interface. The necessary Spring annotations, Java utilities, and domain classes are correctly imported.


13-15: LGTM: Interface declaration and annotations are correct.

The interface is properly named and extends the correct repository. The use of @repository and @primary annotations is appropriate, ensuring this test repository is prioritized in the Spring context.


17-17: LGTM: Method declaration is clear and follows conventions.

The findByAssessedExercise method is well-defined, following Spring Data naming conventions. It appropriately returns a List of TutorParticipation entities for a given Exercise.


19-19: LGTM: Method declaration is clear and follows conventions.

The findAllByAssessedExercise_Course method is well-defined, following Spring Data naming conventions. It appropriately uses the underscore to navigate to the Course property of the assessed Exercise, returning a List of TutorParticipation entities for a given Course.

src/test/java/de/tum/cit/aet/artemis/athena/AbstractAthenaTest.java (3)

Line range hint 10-28: LGTM! The rest of the file is consistent with the changes and follows coding guidelines.

The unchanged parts of the file remain consistent with the new package structure and base class. Some observations:

  1. The test class follows the naming convention and appears to be small and specific.
  2. JUnit 5 features are used (@BeforeEach, @AfterEach).
  3. The class follows the util service factory pattern by using @Autowired for AthenaRequestMockProvider.
  4. There's no direct database access in this abstract test class.

The overall structure and consistency of the file are maintained while accommodating the package restructuring.


1-1: LGTM! Package declaration updated correctly.

The package declaration has been updated to de.tum.cit.aet.artemis.athena, which aligns with the PR objectives of restructuring into modules. This change improves the organization of the codebase.

To ensure that this change doesn't break any existing imports, please run the following script:

If the script returns any results, those files will need to be updated to use the new package structure.


7-8: LGTM! Import statements updated correctly.

The import statements have been updated to reflect the new package structure:

  1. AthenaRequestMockProvider is now imported from the core.connector package.
  2. A new import for AbstractSpringIntegrationJenkinsGitlabTest has been added.

These changes are consistent with the PR objectives and the package restructuring.

To ensure that the new base class is used correctly, please run the following script:

This script will confirm that AbstractAthenaTest correctly extends AbstractSpringIntegrationJenkinsGitlabTest.

✅ Verification successful

Verified ✅ AbstractAthenaTest correctly extends AbstractSpringIntegrationJenkinsGitlabTest

The class AbstractAthenaTest successfully extends AbstractSpringIntegrationJenkinsGitlabTest, ensuring proper integration with the new base class.

  • src/test/java/de/tum/cit/aet/artemis/athena/AbstractAthenaTest.java
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the correct usage of AbstractSpringIntegrationJenkinsGitlabTest

# Test: Check if AbstractAthenaTest extends AbstractSpringIntegrationJenkinsGitlabTest
ast-grep --lang java --pattern 'class AbstractAthenaTest extends AbstractSpringIntegrationJenkinsGitlabTest'

Length of output: 579


Script:

#!/bin/bash
# Description: Verify that AbstractAthenaTest extends AbstractSpringIntegrationJenkinsGitlabTest using ripgrep

# Search for the class declaration excluding binary and non-UTF-8 files
rg 'class AbstractAthenaTest extends AbstractSpringIntegrationJenkinsGitlabTest' --type java --text

Length of output: 263

src/test/java/de/tum/cit/aet/artemis/athena/service/connectors/AthenaHealthIndicatorTest.java (2)

1-1: Package declaration update looks good.

The package declaration change aligns with the restructuring effort mentioned in the PR objectives. The new structure de.tum.cit.aet.artemis.athena.service.connectors appears more logical, placing 'athena' before 'service'.


10-10: Import statement update is correct.

The import statement for AbstractAthenaTest has been properly updated to reflect the new package structure. This change ensures that the correct AbstractAthenaTest class is imported, maintaining consistency with the package restructuring.

src/test/java/de/tum/cit/aet/artemis/assessment/util/GradingScaleFactory.java (1)

1-1: 🧹 Nitpick (assertive)

Package change approved

The package change from de.tum.cit.aet.artemis.assessment to de.tum.cit.aet.artemis.assessment.util aligns with the PR objectives of restructuring code into modules. This change improves code organization by placing the utility class in a more appropriate package.

Consider adding a private constructor

To prevent instantiation of this utility class, consider adding a private constructor:

private GradingScaleFactory() {
    throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}

This follows best practices for utility classes with only static methods.

Verify usage and consider relocation

This class appears to be a utility for creating test data. If it's used in production code as well, consider moving it to the main source directory. If it's only used in tests, consider renaming it to TestGradingScaleFactory to indicate its test-specific nature.

To verify the usage of this class, run the following script:

Based on the results, we can determine if this class should be relocated or renamed.

✅ Verification successful

Package change approved

The package change from de.tum.cit.aet.artemis.assessment to de.tum.cit.aet.artemis.assessment.util aligns with the PR objectives of restructuring code into modules. This change improves code organization by placing the utility class in a more appropriate package.

Add a private constructor

To prevent instantiation of this utility class, ensure a private constructor is present:

private GradingScaleFactory() {
    throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}

This follows best practices for utility classes with only static methods.

Rename to TestGradingScaleFactory

Since GradingScaleFactory is exclusively used within test files, renaming it to TestGradingScaleFactory will clarify its purpose:

  • Pros:

    • Enhances code readability by indicating its test-specific role.
    • Prevents confusion about its usage in production code.
  • Cons:

    • Requires updating all import statements in test files.

Please proceed with renaming the class to better reflect its usage.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check usage of GradingScaleFactory class

# Search for usage in test files
echo "Usage in test files:"
rg --type java "GradingScaleFactory" src/test

# Search for usage in main source files
echo "Usage in main source files:"
rg --type java "GradingScaleFactory" src/main

# Search for other occurrences of GradingScaleFactory
echo "Other occurrences:"
rg --type java "GradingScaleFactory" --glob '!src/{test,main}/**'

Length of output: 3119

src/test/java/de/tum/cit/aet/artemis/assessment/test_repository/ResultTestRepository.java (8)

1-13: LGTM: Package declaration and imports are appropriate.

The package structure follows the convention for test repositories, and all necessary classes and annotations are correctly imported. The static import for EntityGraph.EntityGraphType.LOAD enhances code readability.


15-17: LGTM: Interface declaration and annotations are correct.

The ResultTestRepository interface is properly defined:

  • It extends ResultRepository, following the correct naming convention for test repositories.
  • The @Repository annotation is correctly applied for Spring Data repositories.
  • The @Primary annotation ensures this test repository takes precedence in test contexts, aligning with the PR objectives.

19-19: LGTM: Method signature is well-defined.

The findAllByParticipationExerciseId method follows Spring Data JPA naming conventions and has a clear, descriptive parameter name. Returning a Set<Result> is appropriate for collecting unique results.


24-24: LGTM: Method signature is well-defined.

The findDistinctBySubmissionId method follows Spring Data JPA naming conventions. Returning an Optional<Result> is a good practice for potentially absent results, and the parameter name is clear and descriptive.


26-27: LGTM: Method is well-defined with appropriate use of @entitygraph.

The findDistinctWithFeedbackBySubmissionId method is correctly implemented:

  • It follows Spring Data JPA naming conventions.
  • The @EntityGraph annotation is used correctly to eagerly fetch feedbacks.
  • Returning an Optional<Result> is a good practice for potentially absent results.
  • The parameter name is clear and descriptive.

29-31: LGTM, but clarification needed on helper methods.

The findFirstWithFeedbacksByParticipationIdOrderByCompletionDateDescElseThrow method is well-named, clearly indicating its functionality. However, it relies on two helper methods that are not visible in this file:

  1. getValueElseThrow
  2. findFirstWithFeedbacksTestCasesByParticipationIdOrderByCompletionDateDesc

Could you please provide more information about these helper methods? Specifically:

  • Where are they defined?
  • What exceptions do they throw?
  • Are they part of a common utility class or interface?

This information would help ensure that the method behaves as expected and follows the project's error handling conventions.


33-48: LGTM: Well-documented method with efficient implementation.

The findFirstWithSubmissionsByParticipationIdOrderByCompletionDateDesc method is well-implemented and documented:

  • The Javadoc clearly explains the method's behavior and return value.
  • The implementation avoids in-memory paging, which is good for performance.
  • Returning an Optional<Result> is appropriate for a query that might not find a result.

However, the method relies on two helper methods that are not visible in this file:

  1. findFirstByParticipationIdOrderByCompletionDateDesc
  2. findResultWithSubmissionsById

Could you please provide more information about these helper methods? Specifically:

  • Where are they defined?
  • Are they part of the extended ResultRepository interface?

This information would help ensure that the method behaves as expected and follows the project's conventions.


1-49: Overall assessment: Well-structured test repository with minor clarifications needed.

The ResultTestRepository interface is well-designed and aligns with the PR objectives of restructuring tests into modules. Key points:

  1. Appropriate use of annotations (@repository, @primary) ensures correct usage in test contexts.
  2. Query methods follow Spring Data JPA naming conventions and use @entitygraph where necessary for performance optimization.
  3. Default method implementations provide complex query logic, avoiding in-memory paging.

To improve:

  1. Consider using @query for the long method name on lines 21-22 to enhance readability.
  2. Provide clarification on helper methods used in default implementations (lines 29-31 and 41-48).

Once these minor points are addressed, the file will be in excellent shape.

src/test/java/de/tum/cit/aet/artemis/assessment/util/StudentScoreUtilService.java (3)

1-1: Package declaration change looks good.

The package has been updated to de.tum.cit.aet.artemis.assessment.util, which better reflects the purpose and location of this utility service. This change aligns with the coding guideline for enforcing package rules.


Line range hint 14-16: Class structure adheres to coding guidelines.

The StudentScoreUtilService class follows the util service factory pattern and uses static mocks for the repository. The methods are small and specific, and there's no direct database access, which aligns with the coding guidelines.


Line range hint 1-59: Overall, the changes and existing code adhere to guidelines.

The package declaration change improves the organization of the codebase. The StudentScoreUtilService class follows the util service factory pattern, uses static mocks, avoids direct database access, and contains small, specific methods with descriptive names. The only suggestion for improvement is to reduce code duplication in the createStudentScore methods.

src/test/java/de/tum/cit/aet/artemis/assessment/util/GradingCriterionUtil.java (2)

Line range hint 1-55: Well-structured utility class for testing purposes.

The GradingCriterionUtil class is well-implemented and follows good practices:

  1. It correctly implements the utility class pattern with a private constructor.
  2. The methods use modern Java features like streams and Optional, improving readability and maintainability.
  3. The class and its methods are well-documented with Javadoc comments.
  4. Method names are descriptive and follow good naming conventions.
  5. The class is appropriately placed in the test package, aligning with its purpose.

The implementation adheres to the provided coding guidelines and seems suitable for its testing purposes.


1-1: Package change aligns with restructuring objectives.

The package change from de.tum.cit.aet.artemis.exercise to de.tum.cit.aet.artemis.assessment.util aligns with the PR objectives of restructuring the code into modules. This change improves the organization of the codebase by moving the utility class to a more appropriate package.

Let's verify if this package change affects imports in other test files:

✅ Verification successful

Package change correctly reflected in all test file imports.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any references to the old package path in other test files

# Search for the old package path in all Java test files
rg --type java -g 'src/test/**/*.java' 'de\.tum\.cit\.aet\.artemis\.exercise\.GradingCriterionUtil'

# Search for imports of GradingCriterionUtil in all Java test files
rg --type java -g 'src/test/**/*.java' 'import.*GradingCriterionUtil'

Length of output: 1572

src/test/java/de/tum/cit/aet/artemis/assessment/service/FeedbackServiceTest.java (2)

Line range hint 1-15: Adherence to coding guidelines confirmed.

The changes made to this file maintain compliance with the provided coding guidelines:

  • The test class name remains descriptive.
  • Existing tests are small and specific.
  • JUnit 5 features are utilized.
  • assertThat is used for assertions.
  • The class extends AbstractSpringIntegrationIndependentTest, which likely handles context management efficiently.

No further changes are required to meet the guidelines.


15-15: Import statement update is appropriate.

The update of the import statement for AbstractSpringIntegrationIndependentTest to de.tum.cit.aet.artemis.shared.base.AbstractSpringIntegrationIndependentTest is in line with the restructuring efforts. This change improves the organization of shared and base components.

To ensure consistency across all test classes, please run the following script to check for any remaining references to the old import:

src/main/java/de/tum/cit/aet/artemis/core/web/admin/AuditResource.java (4)

1-1: LGTM: Package declaration change improves organization.

The package change from de.tum.cit.aet.artemis.core.web to de.tum.cit.aet.artemis.core.web.admin aligns with the single responsibility principle by grouping admin-related resources together. This change enhances code organization and maintainability.


Line range hint 33-43: LGTM: Class structure and constructor follow best practices.

The AuditResource class:

  1. Uses appropriate annotations for a REST controller.
  2. Implements constructor injection for AuditEventService, adhering to dependency injection best practices.
  3. Uses the @Profile annotation for conditional bean creation, which is a good practice for managing different deployment environments.

Line range hint 50-56: LGTM: getAll method implements pagination and access control correctly.

The getAll method:

  1. Uses appropriate annotations for GET mapping and admin access control.
  2. Implements pagination correctly, enhancing performance for large datasets.
  3. Returns a well-structured ResponseEntity with pagination headers, adhering to RESTful best practices.

Line range hint 1-93: Overall, well-structured and follows best practices.

The AuditResource class demonstrates good adherence to RESTful principles, proper use of annotations, and follows most of the specified coding guidelines. Key strengths include:

  1. Appropriate use of dependency injection.
  2. Correct implementation of pagination.
  3. Proper access control with @EnforceAdmin annotations.
  4. Use of ResponseEntity for flexible HTTP responses.

The suggested improvements (refactoring date handling and simplifying path variable) are minor and do not detract from the overall quality of the implementation.

src/test/java/de/tum/cit/aet/artemis/assessment/FeedbackTest.java (11)

1-1: Package change aligns with module restructuring.

The package declaration has been updated from de.tum.cit.aet.artemis.domain to de.tum.cit.aet.artemis.assessment. This change is consistent with the PR objectives of restructuring the code into modules and moving test code to align with the new production code structure.


Line range hint 13-21: LGTM: Test method follows best practices.

The setTruncatedFeedbackDetailText test method adheres to the coding guidelines:

  • Descriptive name
  • Uses assertThat for assertions
  • Small and specific test
  • Uses fixed data for testing

The test effectively verifies the truncation behavior of the Feedback class.


Line range hint 23-30: LGTM: Test method handles null input correctly.

The setTruncatedFeedbackDetailTextNull test method follows the coding guidelines:

  • Descriptive name
  • Uses assertThat for assertions
  • Small and specific test
  • Tests an important edge case (null input)

This test ensures that the Feedback class handles null input appropriately.


Line range hint 32-40: LGTM: Test method verifies short input handling.

The setShortDetailText test method adheres to the coding guidelines:

  • Descriptive name
  • Uses assertThat for assertions
  • Small and specific test
  • Tests a valid use case with a short input

This test ensures that the Feedback class correctly handles short detail text inputs.


Line range hint 42-50: LGTM: Test method handles null input for setDetailText.

The setNullDetailText test method follows the coding guidelines:

  • Descriptive name
  • Uses assertThat for assertions
  • Small and specific test
  • Tests an important edge case (null input) for setDetailText

This test ensures that the Feedback class handles null input appropriately when setting the detail text.


Line range hint 52-65: LGTM: Test method verifies long input handling.

The setLongDetailText test method adheres to the coding guidelines:

  • Descriptive name
  • Uses assertThat for assertions
  • Small and specific test
  • Tests an important case (long input exceeding the max length)

This test ensures that the Feedback class correctly handles long detail text inputs, including the creation of a LongFeedbackText object when necessary.


Line range hint 67-80: LGTM: Test method handles input between soft max and true max length.

The setDetailTextBetweenSoftMaxLengthAndTrueMax test method follows the coding guidelines:

  • Descriptive name
  • Uses assertThat for assertions
  • Small and specific test
  • Tests an important edge case (input between soft max and true max length)

This test ensures that the Feedback class correctly handles detail text inputs that fall between the soft maximum length and the true maximum length.


Line range hint 82-90: LGTM: Test method verifies trim marker for long texts.

The detailTextTrimMarker test method adheres to the coding guidelines:

  • Descriptive name
  • Uses assertThat for assertions
  • Small and specific test
  • Tests an important feature (presence of trim marker for long texts)

This test ensures that the Feedback class correctly adds a trim marker (" [...]") to the end of long detail texts when they are truncated.


Line range hint 92-102: LGTM: Test method handles extremely long feedback trimming.

The trimVeryLongLongFeedback test method follows the coding guidelines:

  • Descriptive name
  • Uses assertThat for assertions
  • Small and specific test
  • Tests an important edge case (input exceeding the maximum allowed length)

This test ensures that the Feedback class correctly trims very long feedback to the maximum allowed length (Constants.LONG_FEEDBACK_MAX_LENGTH).


Line range hint 104-106: LGTM: Helper method provides consistent test data.

The getText helper method is well-designed for test data generation:

  • Private method, appropriately scoped for this test class
  • Generates strings of specified lengths, useful for various test cases
  • Uses a simple and consistent approach (repeating '0' characters)

This method contributes to the readability and maintainability of the test cases.


Line range hint 1-106: Excellent test coverage and adherence to best practices.

This test file demonstrates high-quality unit testing for the Feedback class:

  • Comprehensive test coverage, including various scenarios and edge cases
  • Consistent use of JUnit 5 features
  • Small, specific tests with descriptive names
  • Appropriate use of assertThat for assertions
  • Well-structured and readable test methods

The test suite effectively verifies the behavior of the Feedback class, particularly its handling of detail text with various lengths and edge cases. This contributes to the overall reliability and maintainability of the codebase.

src/test/java/de/tum/cit/aet/artemis/assessment/TutorParticipationResourceIntegrationTest.java (2)

15-16: LGTM: Import statements updated correctly.

The import statements have been appropriately updated to reflect the use of test repositories and the restructured package for AbstractSpringIntegrationIndependentTest. These changes align well with the PR objectives of adjusting tests to the new module structure.

Also applies to: 20-21


28-28: LGTM: Repository fields updated to use test repositories.

The change from production repositories to test repositories (TutorParticipationTestRepository and ExampleSubmissionTestRepository) aligns well with the coding guideline to avoid direct DB access in tests. This modification enhances the separation between test and production code, potentially improving test isolation and performance.

Also applies to: 31-31

src/test/java/de/tum/cit/aet/artemis/assessment/LongFeedbackResourceIntegrationTest.java (2)

20-20: LGTM: Class now extends AbstractSpringIntegrationIndependentTest.

This change aligns with the coding guideline to use a util service factory pattern and may help in minimizing context restarts. It's a good step towards standardizing the testing approach across the project.


Line range hint 22-108: LGTM: Existing code complies with coding guidelines.

The unchanged parts of the file adhere to the provided coding guidelines:

  • Test methods have descriptive names and are small and specific.
  • AssertJ's assertThat is used for assertions.
  • Fixed data is used in tests.
  • JUnit 5 features like @BeforeEach are utilized.
  • Direct database access is avoided, with utility services being used instead.

These practices contribute to maintainable and efficient tests.

src/test/java/de/tum/cit/aet/artemis/assessment/TutorLeaderboardServiceIntegrationTest.java (1)

56-56: Approved: Good use of test-specific repository.

The change from userRepository.save(tutor) to userTestRepository.save(tutor) is a positive improvement. It aligns with the coding guideline to avoid direct database access in tests and helps isolate test data from production data.

Benefits of this change:

  1. Improved test isolation
  2. Reduced risk of interfering with production data
  3. Better adherence to testing best practices
src/test/java/de/tum/cit/aet/artemis/athena/service/connectors/AthenaFeedbackSuggestionsServiceTest.java (6)

1-1: Package declaration update looks good.

The package restructuring aligns with the PR objectives of organizing the code into modules. The new package structure de.tum.cit.aet.artemis.athena.service.connectors appears more logical and consistent.


3-4: Import statement updates for AthenaRequestMockProvider are appropriate.

The relocation of AthenaRequestMockProvider to de.tum.cit.aet.artemis.core.connector aligns with the restructuring efforts. This change suggests an improved organization of shared components, which is beneficial for maintainability.


16-19: Import updates for AbstractAthenaTest and DTOs are consistent with restructuring.

The updated import statements for AbstractAthenaTest, ProgrammingFeedbackDTO, and TextFeedbackDTO reflect the new package structure, which includes 'athena' in the path. This change enhances the clarity of the module organization.


25-25: Import update for ProgrammingExerciseUtilService is appropriate.

The relocation of ProgrammingExerciseUtilService to de.tum.cit.aet.artemis.programming.util aligns with the modular restructuring effort. This change improves the organization of programming-specific utilities.


28-28: Import update for TextExerciseUtilService is consistent and appropriate.

The updated import path for TextExerciseUtilService to de.tum.cit.aet.artemis.text.util mirrors the structure used for programming utilities. This change contributes to a more modular and organized codebase.


Line range hint 1-28: Overall package restructuring and import updates look good.

The changes in this file are limited to package restructuring and import updates, which align well with the PR objectives of organizing the code into modules. The new package structure appears more logical and modular. It's positive to note that the actual test methods and logic remain unchanged, preserving the integrity of the tests.

Some points to consider:

  1. Ensure that these changes are consistently applied across the entire codebase to maintain uniformity.
  2. Update any documentation or build scripts that might reference the old package structure.
  3. Verify that the new package structure doesn't introduce any unexpected side effects in terms of visibility or access.

To ensure consistency across the codebase, run the following script:

✅ Verification successful

Package restructuring and import updates are consistent throughout the codebase.

All old package references have been removed, and the new package structure is used consistently across relevant files. No mismatched import statements were found, ensuring the integrity of the codebase post-refactoring.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify consistent package structure changes across the codebase

# Check for any remaining references to the old package structure
echo "Checking for old package references:"
rg -i "de\.tum\.cit\.aet\.artemis\.service\.connectors\.athena" src/

# Verify the new package structure is used consistently
echo "Verifying new package structure usage:"
rg -i "de\.tum\.cit\.aet\.artemis\.athena\.service\.connectors" src/

# Check for any mismatched import statements
echo "Checking for mismatched import statements:"
rg -i "import.*de\.tum\.cit\.aet\.artemis\.(service\.connectors\.athena|athena\.service\.connectors)" src/

Length of output: 1473

src/test/java/de/tum/cit/aet/artemis/assessment/TutorEffortIntegrationTest.java (4)

21-22: LGTM: Test repository imports added.

The change from production repositories to test repositories aligns with the coding guideline to avoid direct database access in tests. This is a good practice for integration tests, as it allows for better control over the test data and reduces dependencies on the production database.

Also applies to: 25-26


60-60: LGTM: Updated to use test repository method.

The change to use textSubmissionTestRepository.findByParticipation_ExerciseIdAndSubmittedIsTrue() is consistent with the switch to test repositories. The method name is more specific, which improves readability and clarity of the test setup.


63-63: LGTM: Updated to use userTestRepository.

The change to use userTestRepository.save(instructor) is consistent with the overall approach of using test repositories. This ensures that the test data for the instructor user is properly isolated from the production database, which is a good practice for integration tests.


Line range hint 1-150: Overall assessment: Changes improve test isolation and are ready for merge with minor suggestions.

The changes in this file consistently move towards using test repositories, which is a good practice for integration tests. This improves test isolation and reduces dependencies on the production database. The only suggestion is to ensure consistent naming for the test repository fields.

Key points:

  1. Test repository imports have been added correctly.
  2. Repository fields have been updated to use test repositories.
  3. The initTestCase method has been updated to use the new test repository methods.
  4. The instructor user is now saved using the test repository.

These changes align well with the provided coding guidelines, particularly in avoiding direct database access in tests. After addressing the minor naming consistency suggestion, this file should be ready for merge.

src/test/java/de/tum/cit/aet/artemis/assessment/ResultTest.java (5)

40-40: LGTM: Correct use of test repository.

The change from ResultRepository to ResultTestRepository is consistent with the PR objective of using test repositories in tests. The @Autowired annotation is correctly used for dependency injection.


Line range hint 68-185: LGTM: Test methods adhere to coding guidelines.

The test methods in this file follow the provided coding guidelines:

  • Descriptive test names are used (e.g., evaluateFeedback_totalScoreGreaterMaxScore).
  • Tests are small and specific.
  • AssertJ's assertThat() is consistently used for assertions.
  • Assertions are specific and meaningful.

The lack of changes to test logic helps maintain existing test coverage.


Line range hint 1-185: LGTM: Changes align with PR objectives and maintain test integrity.

The modifications to ResultTest.java successfully achieve the following:

  1. Package restructuring from de.tum.cit.aet.artemis.domain to de.tum.cit.aet.artemis.assessment.
  2. Replacement of ResultRepository with ResultTestRepository, aligning with the goal of using test repositories in tests.
  3. Updated import statements reflecting the new package structure.

These changes are consistent with the PR objectives of restructuring the code into modules and adjusting server tests accordingly. The test methods remain unchanged, maintaining existing test coverage and adhering to the provided coding guidelines.


Line range hint 72-74: LGTM: Appropriate use of ResultTestRepository methods.

The use of resultRepository.calculateTotalPoints() and resultRepository.constrainToRange() aligns with the change to ResultTestRepository. This supports the separation of test and production code.

To ensure the correctness of these methods, let's verify their implementations:

#!/bin/bash
# Description: Verify ResultTestRepository method implementations
# Test: Check for calculateTotalPoints and constrainToRange methods in ResultTestRepository
rg --type java -g 'src/test/java/de/tum/cit/aet/artemis/assessment/test_repository/ResultTestRepository.java' -A 10 'calculateTotalPoints|constrainToRange'

Also applies to: 86-88, 103-105


Line range hint 1-26: LGTM: Package and import changes align with restructuring objectives.

The package declaration and import changes are consistent with the PR's objective of restructuring the code into modules. The use of ResultTestRepository instead of ResultRepository aligns with the goal of using test repositories in tests.

To ensure consistency across the codebase, let's verify that other test files in this package use similar import structures:

✅ Verification successful

LGTM: Import statements are consistent across all assessment test files.

All import changes in ResultTest.java align with the standardized import structure observed in other test files within the de/tum/cit/aet/artemis/assessment package.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify consistent import structure in test files
# Test: Check for similar import patterns in other test files
rg --type java -g 'src/test/java/de/tum/cit/aet/artemis/assessment/*.java' -A 20 '^package'

Length of output: 155


Script:

#!/bin/bash
# Description: Verify consistent import statements in all assessment test files
# Test: Extract and compare import statements across test files in the assessment package

# Find all Java test files in the assessment package
fd --type f --extension java 'src/test/java/de/tum/cit/aet/artemis/assessment/' | while read -r file; do
  echo "Imports in $file:"
  rg '^import ' "$file"
  echo ""
done

Length of output: 592


Script:

#!/bin/bash
# Description: Verify consistent import statements in all assessment test files
# Test: Extract and compare import statements across test files in the assessment package

# Find all Java test files in the assessment package using the corrected fd pattern
fd . 'src/test/java/de/tum/cit/aet/artemis/assessment/' --type f --extension java | while read -r file; do
  echo "Imports in $file:"
  rg '^import ' "$file"
  echo ""
done

Length of output: 55872

src/test/java/de/tum/cit/aet/artemis/assessment/ExerciseScoresChartIntegrationTest.java (4)

80-80: LGTM: Consistent use of test repository for tutor retrieval.

The change to userTestRepository for fetching tutor1 is consistent with the previous change and aligns with the PR objectives.


Line range hint 1-146: Overall assessment: Changes align with PR objectives and coding guidelines.

The modifications in this test file successfully implement the transition to using test repositories and align with the restructuring into modules. The test naming, size, and structure adhere to the provided coding guidelines. The use of assertThat for assertions and the overall organization of the test class are commendable.

To further improve the test:

  1. Consider implementing the suggested refactoring for user retrieval to enhance code maintainability.
  2. Ensure that the ParticipantScoreScheduleService.DEFAULT_WAITING_TIME_FOR_SCHEDULED_TASKS modification in @BeforeEach and @AfterEach methods is necessary and doesn't affect other tests.
  3. Verify that the test coverage is adequate, especially for the newly introduced utility services.

79-79: LGTM: Switched to test repository for user retrieval.

The change from userRepository to userTestRepository aligns with the PR objectives of using test repositories in tests. This helps in isolating test data from production data.

To ensure consistency, please run the following script to check if all user retrievals in this test class use the test repository:

#!/bin/bash
# Verify consistent use of userTestRepository in the test file
rg --type java -e "userRepository" -e "userTestRepository" src/test/java/de/tum/cit/aet/artemis/assessment/ExerciseScoresChartIntegrationTest.java

27-30: LGTM: Import changes reflect updated dependencies.

The new imports for ParticipationUtilService and TeamUtilService, along with the updated import for AbstractSpringIntegrationIndependentTest, align with the PR objectives of restructuring into modules.

To ensure these new services are properly utilized, please run the following script:

✅ Verification successful

Follow-up Action Required:

Please run the following script to verify the usage of ParticipationUtilService and TeamUtilService in the test file:


Verified: New utility services are properly utilized in the test file.

The usage of ParticipationUtilService and TeamUtilService in ExerciseScoresChartIntegrationTest.java confirms that the new imports are correctly integrated and functional.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Verify the usage of new utility services in the test file
rg --type java -e "participationUtilService" -e "teamUtilService" src/test/java/de/tum/cit/aet/artemis/assessment/ExerciseScoresChartIntegrationTest.java

Length of output: 708


Script:

#!/bin/bash
# Verify the usage of new utility services in the test file
rg --type java -e "participationUtilService" -e "teamUtilService" src/test/java/de/tum/cit/aet/artemis/assessment/ExerciseScoresChartIntegrationTest.java

Length of output: 1164

src/main/java/de/tum/cit/aet/artemis/iris/web/open/PublicPyrisStatusUpdateResource.java (3)

1-1: LGTM: Package change aligns with the class purpose.

The package change to de.tum.cit.aet.artemis.iris.web.open accurately reflects the public nature of this controller, which is consistent with its name PublicPyrisStatusUpdateResource and its purpose of providing public access to Pyris status updates.


Line range hint 32-45: LGTM: Class structure and annotations are appropriate.

The PublicPyrisStatusUpdateResource class is well-structured:

  • It follows the single responsibility principle by focusing on handling Pyris status updates.
  • Constructor injection is correctly used for dependency injection.
  • The class is properly annotated as a REST controller with the correct request mapping and profile.

These practices contribute to maintainable and clean code.


Line range hint 56-69: LGTM: Method implementation is secure and follows best practices.

The setStatusOfJob method:

  • Correctly uses custom token-based authentication.
  • Properly validates the run ID to ensure consistency between the URL and request body.
  • Delegates the status update to the appropriate service.
  • Uses proper exception handling for potential conflicts.
  • Follows RESTful principles with appropriate HTTP status codes.

These practices contribute to a secure and well-structured endpoint.

src/test/java/de/tum/cit/aet/artemis/assessment/util/ComplaintUtilService.java (4)

55-57: LGTM! Consistent use of test repository.

The change from resultRepository to resultTestRepository is consistent with the overall switch to test repositories. The method's functionality remains intact, which is good.


98-100: LGTM! Consistent use of test repository.

The change from resultRepository to resultTestRepository is consistent with the overall switch to test repositories. The method's functionality remains intact, which is good.


115-117: LGTM! Consistent use of test repository across methods.

The changes in addComplaintToSubmission and addTeamComplaints methods from resultRepository to resultTestRepository are consistent with the overall switch to test repositories. The methods' functionality remains intact, which is good.

Also applies to: 132-134


Line range hint 1-156: Overall, the changes look good and align with the PR objectives.

The ComplaintUtilService has been successfully updated to use test repositories instead of production repositories. This change is consistent with the PR's goal of restructuring the code into modules and separating test code from production code. The functionality of the service remains intact, which is crucial.

Here's a summary of the changes and their impact:

  1. The package has been updated to include the "util" subpackage, improving organization.
  2. Imports have been updated to use test repositories where appropriate.
  3. Field injections and method calls have been consistently updated to use test repositories.

These changes should improve the isolation of test code and make the overall structure of the project clearer. The service is now better suited for use in integration tests without interfering with production repositories.

To further improve the code quality, consider the following suggestions:

  1. Organize imports alphabetically for better readability.
  2. Use constructor injection instead of field injection for better testability.

Great job on maintaining the functionality while improving the code structure!

src/test/java/de/tum/cit/aet/artemis/athena/AthenaExerciseIntegrationTest.java (2)

54-54: LGTM! Correct use of TestRepository.

The change from ProgrammingExerciseRepository to ProgrammingExerciseTestRepository is correct and aligns with the PR objectives. This ensures that the test is using the appropriate test repository instead of the production repository.


Line range hint 60-231: LGTM! Test methods remain intact.

The test methods have not been modified, which is good. This indicates that the restructuring effort has successfully maintained the integrity and functionality of the existing tests while adapting to the new module structure.

src/test/java/de/tum/cit/aet/artemis/assessment/util/GradingScaleUtilService.java (1)

1-1: LGTM: Package declaration change is appropriate.

The package change from de.tum.cit.aet.artemis.assessment to de.tum.cit.aet.artemis.assessment.util aligns well with the PR objectives of restructuring the code into modules. This change better reflects the utility nature of the GradingScaleUtilService class and is consistent with its location in the directory structure.

src/test/java/de/tum/cit/aet/artemis/athena/service/connectors/AthenaFeedbackSendingServiceTest.java (6)

Line range hint 1-41: LGTM: Package and import changes align with modularization objectives.

The package restructuring and import updates correctly reflect the new modular structure of the codebase. The changes are consistent and properly implemented, supporting the PR's goal of adjusting tests to the new production code structure.


55-55: LGTM: Appropriate use of TestRepository.

The change from ProgrammingExerciseRepository to ProgrammingExerciseTestRepository aligns with the PR objective of using test repositories in tests instead of production repositories. This modification enhances the separation between test and production code.


Line range hint 81-126: LGTM: Consistent use of TestRepository in setUp method.

The setUp method has been correctly updated to use ProgrammingExerciseTestRepository, maintaining consistency with the earlier change. The rest of the method remains intact, preserving its original functionality.


Line range hint 150-176: LGTM: Method remains relevant and unchanged.

The testFeedbackSendingTextWithGradingInstruction method has not been modified. It continues to serve its purpose in testing the feedback sending functionality with grading instructions, which remains relevant to the overall test suite.


Line range hint 178-224: LGTM: Comprehensive test coverage maintained.

The remaining test methods (testFeedbackSendingProgramming, testFeedbackSendingModeling, testEmptyFeedbackNotSending, testSendFeedbackWithFeedbackSuggestionsDisabled) remain unchanged. They continue to provide thorough test coverage for various scenarios, maintaining the robustness of the test suite.


Line range hint 1-224: Overall assessment: Changes successfully implement PR objectives.

The modifications to AthenaFeedbackSendingServiceTest.java effectively adapt the test class to the new modular structure of the codebase. Key improvements include:

  1. Updated package and import statements reflecting the new structure.
  2. Proper use of ProgrammingExerciseTestRepository instead of the production repository.
  3. Consistent updates throughout the file, maintaining test integrity.

These changes align well with the PR objectives of restructuring into modules and using test repositories. The overall functionality and coverage of the test suite are preserved, ensuring continued robust testing of the AthenaFeedbackSendingService.

src/test/java/de/tum/cit/aet/artemis/assessment/ParticipantScoreIntegrationTest.java (3)

25-26: LGTM: Import statements updated to reflect new test structure

The changes to the import statements align well with the restructuring of the test code. The addition of utility services (e.g., ExamUtilService, ParticipationUtilService) and test-specific repositories (e.g., StudentParticipationTestRepository) suggests an improved separation of concerns and a more maintainable test setup.

Also applies to: 30-31, 34-37, 41-42, 44-45


73-74: LGTM: Switched to test-specific repository

The change from StudentParticipationRepository to StudentParticipationTestRepository is a positive step. This switch to a test-specific repository helps isolate test data and prevents potential interference with production data, which is crucial for maintaining reliable integration tests.


Line range hint 1-284: Summary: Improved test structure and isolation

The changes in this file consistently improve the test structure and isolation:

  1. Adoption of test-specific repositories (e.g., StudentParticipationTestRepository, userTestRepository) enhances test data isolation.
  2. Introduction of utility services (e.g., ExamUtilService, ParticipationUtilService) improves the separation of concerns and test setup maintainability.
  3. The overall test structure remains clear and comprehensive, covering various scenarios and user roles.

These improvements align well with the goal of restructuring the code into modules and adjusting server tests accordingly. The changes should lead to more reliable and maintainable integration tests.

src/test/java/de/tum/cit/aet/artemis/assessment/service/ComplaintResponseServiceTest.java (3)

Line range hint 1-30: LGTM: Package and import changes align with restructuring.

The package declaration and import modifications are consistent with the PR objectives of restructuring the code into modules. The changes appear necessary and appropriate for the new structure.


40-46: LGTM: Repository types updated to test versions.

The change from UserRepository to UserTestRepository and ResultRepository to ResultTestRepository aligns with the PR objectives. This is a good practice for isolating test data and preventing unintended side effects on production data.


Line range hint 1-232: Overall assessment: Changes align with PR objectives and maintain test quality.

The modifications to this file successfully:

  1. Moved the test class to the appropriate package.
  2. Updated repository types to test versions.
  3. Maintained adherence to coding guidelines.

The changes are consistent with the PR objectives of restructuring the code into modules and using test repositories. No major issues or bugs were introduced. The suggested improvements for assert specificity and performance tracking are minor enhancements that can be addressed in future iterations.

src/test/java/de/tum/cit/aet/artemis/assessment/TutorParticipationIntegrationTest.java (1)

69-69: Approved: Use of SubmissionTestRepository

The change from SubmissionRepository to SubmissionTestRepository for the submissionRepository field is a positive modification. This aligns with the PR objectives of using dedicated test repositories in test classes, which helps in maintaining a clear separation between test and production code.

src/test/java/de/tum/cit/aet/artemis/assessment/service/ResultServiceTest.java (3)

Line range hint 1-32: LGTM: Package and import changes align with restructuring objectives

The package declaration update and import modifications correctly reflect the restructuring of the codebase into modules. The use of test repositories (ProgrammingExerciseTestRepository and ProgrammingExerciseStudentParticipationTestRepository) instead of production repositories aligns with the PR objectives and improves test isolation.


39-39: LGTM: Repository variables updated to use test repositories

The update of programmingExerciseRepository and participationRepository to use their respective test repository implementations (ProgrammingExerciseTestRepository and ProgrammingExerciseStudentParticipationTestRepository) is in line with the PR objectives. This change enhances test isolation and prevents unintended interactions with production data.

Also applies to: 48-48


Line range hint 65-265: Verify test effectiveness with new structure

While the test methods remain largely unchanged, it's crucial to ensure they are still valid and effective with the new modular structure and the use of test repositories. Please verify that:

  1. All tests are passing with the new structure.
  2. The tests adequately cover the functionality of the restructured code.
  3. Any assumptions made in the tests about the structure of the code or data are still valid.

To assist in this verification, you can run the following command to check if all tests in this file are passing:

src/test/java/de/tum/cit/aet/artemis/assessment/AssessmentTeamComplaintIntegrationTest.java (2)

28-41: LGTM: Import changes align with coding guidelines

The addition of specific utility services and factories (ComplaintUtilService, ParticipationFactory, ParticipationUtilService, TeamUtilService, SubmissionTestRepository, and ModelingExerciseUtilService) aligns well with the util_service_factory_pattern guideline. This change promotes better separation of concerns and improved testability.


52-52: LGTM: Repository type change improves test isolation

Changing the type of submissionRepository from SubmissionRepository to SubmissionTestRepository aligns with the avoid_db_access guideline. This change enhances test isolation by using a test-specific repository instead of the production one, potentially supporting the use of fixed test data as per the fixed_data guideline.

src/test/java/de/tum/cit/aet/artemis/assessment/GradeStepIntegrationTest.java (4)

25-26: LGTM: Import statements updated to reflect new package structure

The changes in import statements for ExamUtilService, ParticipationUtilService, and AbstractSpringIntegrationIndependentTest align with the PR objectives of adjusting tests to the new module structure. This update ensures that the test class correctly references the relocated utility services and base test class.

Also applies to: 30-30


331-331: LGTM: Consistent use of userTestRepository

The change from userRepository to userTestRepository in this method is consistent with the previous modification. It further reinforces the use of test repositories in test methods, aligning with the PR objectives and improving test isolation.


Line range hint 1-391: Overall: Changes align with PR objectives and improve test isolation

The modifications in this file consistently reflect the PR objectives of adjusting tests to the new module structure and using test repositories instead of production repositories. These changes improve test isolation and maintain the integrity of the test suite. The updated import statements and consistent use of userTestRepository demonstrate a thorough approach to the restructuring effort.

Some suggestions for further improvement:

  1. Consider adding a comment explaining the reason for using userTestRepository to help future developers understand the rationale behind this choice.
  2. Ensure that all other test classes in the project follow the same pattern of using test repositories where applicable.

284-284: LGTM: Switched to userTestRepository for improved test isolation

The change from userRepository to userTestRepository aligns with the PR objectives of using test repositories instead of production repositories in tests. This improves test isolation and prevents potential side effects on production data.

To ensure consistency across the codebase, let's verify that all test classes are using the appropriate test repositories:

✅ Verification successful

Verified: All test classes correctly use UserTestRepository

The shell script results confirm that all instances of userRepository within test files appropriately reference UserTestRepository. This ensures enhanced test isolation and prevents any potential side effects on production data.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for any remaining uses of userRepository in test files
rg --type java -g 'src/test/**/*.java' 'userRepository' -C 3

Length of output: 138972

src/test/java/de/tum/cit/aet/artemis/assessment/service/CourseScoreCalculationServiceTest.java (3)

1-1: Package declaration updated appropriately

The package declaration has been updated to de.tum.cit.aet.artemis.assessment.service, which better reflects the specific context of the test class. This change aligns with the restructuring effort mentioned in the PR objectives.


52-52: Appropriate use of test repositories

The change from production repositories to test repositories (StudentParticipationTestRepository and ResultTestRepository) is in line with the PR objectives. This modification enhances test isolation and allows for more controlled test scenarios.

Also applies to: 58-58


Line range hint 44-371: Overall structure and test methods remain intact

The changes to this test class are primarily focused on package reorganization and dependency updates. The core structure of the test class and the individual test methods remain largely unchanged, which is good for maintaining the existing test coverage.

However, please ensure that:

  1. The @Primary annotation is correctly applied to the test repository classes as mentioned in the PR objectives.
  2. All test methods still function as expected with the new test repository implementations.
  3. The disabled test AnswerMessageIntegrationTest#testCreateAnswerInExamChannel mentioned in the PR objectives is addressed in the appropriate test class.
✅ Verification successful

@primary annotations correctly applied in test repository classes

All relevant TestRepository classes have the @Primary annotation as required. Verified that the annotations are present and correctly implemented across the necessary classes.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Verify the presence of @Primary annotation in test repository classes
echo "Checking for @Primary annotation in test repository classes:"
rg --type java "@Primary.*class.*TestRepository" src/test/java

Length of output: 195


Script:

#!/bin/bash
# Search for @Primary annotations in all test repository classes
echo "Searching for @Primary annotations in test repository classes:"
rg --type java "@Primary" src/test/java | rg "TestRepository"

Length of output: 3924

src/test/java/de/tum/cit/aet/artemis/assessment/service/GradingScaleServiceTest.java (3)

Line range hint 1-31: Package and import changes look good.

The package declaration and import statements have been updated to reflect the new module structure. This aligns with the PR objective of adjusting server tests to the restructuring effort.


Line range hint 33-57: Class structure and field declarations are appropriate.

The test class extends AbstractSpringIntegrationIndependentTest and uses @Autowired for dependency injection, which is consistent with Spring best practices. The private fields for test data setup promote test isolation and readability.


Line range hint 1-437: Overall, the GradingScaleServiceTest is well-structured and appropriately updated.

The test class has been successfully adapted to the new module structure, maintaining good testing practices and largely complying with the provided coding guidelines. The suggested improvements are minor and focus on enhancing readability and maintainability. Great job on maintaining test quality during the restructuring process!

src/test/java/de/tum/cit/aet/artemis/athena/AthenaResourceIntegrationTest.java (3)

1-1: LGTM: Package declaration updated correctly.

The package declaration has been updated to de.tum.cit.aet.artemis.athena, which aligns with the restructuring effort mentioned in the PR objectives. This change improves the organization of test code to mirror the production code structure.


68-80: LGTM: Repository fields updated to use test repositories.

The class fields for repositories have been correctly updated to use test repositories (e.g., TextSubmissionTestRepository, ProgrammingSubmissionTestRepository, etc.). This change is consistent with the import updates and aligns with the restructuring effort.


Line range hint 3-49: LGTM: Import statements updated correctly.

The import statements have been updated to use test repositories instead of production repositories, which is a good practice for isolating test data. The change to core.connector is consistent with the overall restructuring effort.

To ensure all imports are necessary, run the following script:

src/test/java/de/tum/cit/aet/artemis/assessment/BonusIntegrationTest.java (4)

Line range hint 1-37: Package and import changes look good.

The package restructuring and import modifications align with the PR objectives of adjusting server tests to the new production code structure. These changes should improve code organization and maintainability.


Line range hint 39-396: Test methods are well-structured and comprehensive.

The test methods follow JUnit 5 conventions, use descriptive names, and employ AssertJ's assertThat() for assertions. They cover various scenarios for bonus calculations and error cases, which is good for maintaining test coverage during the restructuring process.


Line range hint 398-421: Helper methods for creating grading scales are well-designed.

The methods createBonusToGradingScale and createSourceGradingScaleWithGradeStepsForGradesBonusStrategy encapsulate the logic for creating different types of grading scales. This approach promotes code reuse and improves readability in the test cases.


Line range hint 423-435: The calculateFinalGradeAtServer method is comprehensive and well-implemented.

This method effectively tests the bonus calculation logic by using the REST API and asserting the results. It covers various scenarios and edge cases, which is crucial for ensuring the correctness of the bonus calculation feature during and after the restructuring process.

src/test/java/de/tum/cit/aet/artemis/assessment/GradingScaleIntegrationTest.java (1)

65-65: Approve change to use test repository in init method.

The change from userRepository to userTestRepository for saving the instructor user is a good practice. It ensures that test data is isolated from production data and aligns with the PR objective of restructuring test code.

Please verify if similar changes are needed in other parts of this test class or in other test classes. Run the following script to check for any remaining usage of userRepository in test files:

#!/bin/bash
# Check for usage of userRepository in test files

echo "Checking for usage of userRepository in test files:"
rg --type java "userRepository" src/test/java
src/test/java/de/tum/cit/aet/artemis/assessment/ResultListenerIntegrationTest.java (4)

Line range hint 1-42: LGTM: Package and import changes align with restructuring goals.

The package declaration and import changes correctly reflect the restructuring of the codebase into modules. The shift from production repositories to test repositories in the imports is consistent with the PR objectives.


97-97: LGTM: User retrieval updated to use TestRepository.

The change from userRepository to userTestRepository is consistent with the PR objective of using test repositories in tests. This modification ensures that test data is used instead of production data, improving test isolation.


105-105: LGTM: Tutor retrieval updated to use TestRepository.

The change from userRepository to userTestRepository for tutor retrieval is consistent with the previous modifications and aligns with the PR objective of using test repositories in tests.


409-409: LGTM: Participant retrieval updated to use TestRepository.

The changes from userRepository to userTestRepository in both setupTestScenarioWithOneResultSaved and verifyStructureOfParticipantScoreInDatabase methods are consistent with the previous modifications and align with the PR objective of using test repositories in tests.

Also applies to: 446-446

src/test/java/de/tum/cit/aet/artemis/assessment/ExampleSubmissionIntegrationTest.java (8)

30-41: LGTM: Import statements updated correctly

The changes in import statements reflect the restructuring of the test code, introducing test-specific repositories and utility services. This aligns well with the PR objectives.


55-58: LGTM: Repository variables updated correctly

The changes to repository variables are consistent with the shift towards using test-specific repositories. The updated variable names (exampleSubmissionRepository, gradingCriterionRepository) improve naming consistency.


151-156: LGTM: Repository method calls updated correctly

The changes in the createAndDeleteExampleModelingSubmission method correctly reflect the repository variable renaming. The method logic remains intact, ensuring the test's functionality is preserved.


170-175: LGTM: Repository method calls updated correctly

The changes in the createAndDeleteExampleModelingSubmissionWithResult method correctly reflect the repository variable renaming. The method logic remains intact, ensuring the test's functionality is preserved.


296-296: LGTM: Repository method call updated correctly

The change in the createExampleTextAssessmentNotExistentId method correctly reflects the repository variable renaming. The method logic remains intact, ensuring the test's functionality is preserved.


315-315: LGTM: Repository method call updated correctly

The change in the createExampleTextAssessment_wrongExerciseId method correctly reflects the repository variable renaming. The method logic remains intact, ensuring the test's functionality is preserved.


383-383: LGTM: Repository method call updated correctly

The change in the testGradingCriteriaAreImported method correctly reflects the repository variable renaming. The method logic remains intact, ensuring the test's functionality is preserved.


Line range hint 1-441: Overall assessment: Changes align with PR objectives

The modifications in this file consistently reflect the restructuring of test code as outlined in the PR objectives. The primary changes involve:

  1. Updating import statements to use test-specific repositories and utility services.
  2. Renaming repository variables for better consistency (e.g., exampleSubmissionRepo to exampleSubmissionRepository).
  3. Updating all repository method calls to use the new variable names.

These changes improve the overall structure and maintainability of the test code without altering the logic of the test methods. The file now better separates test-specific components from production code, which is a good practice in test organization.

src/test/java/de/tum/cit/aet/artemis/assessment/ComplaintResponseIntegrationTest.java (5)

24-24: Excellent use of test-specific repositories!

The changes to use ComplaintResponseTestRepository, SubmissionTestRepository, and UserTestRepository instead of their production counterparts improve test isolation. This practice prevents potential side effects on production data and makes the tests more reliable.

Also applies to: 30-30, 32-32, 48-48, 54-54


538-538: Consistent use of test repository

The change from userRepository to userTestRepository is consistent with the earlier modifications and maintains the improved test isolation throughout the test class.


526-526: Consistent use of test repository

The change from complaintResponseRepository to complaintResponseTestRepository in the validateThatComplaintIsResolved method is consistent with the earlier modifications and maintains the improved test isolation.


139-139: Consistent application of test repositories throughout the test class

The changes from complaintResponseRepository to complaintResponseTestRepository have been consistently applied throughout the test methods. This maintains the improved test isolation across all test scenarios.

Also applies to: 177-177, 217-217, 226-226, 238-238, 255-255, 267-267, 277-277, 286-286, 289-289, 300-300, 309-309, 318-318, 327-327, 336-336, 347-347, 362-362, 364-364, 373-373, 382-382, 435-435


Line range hint 1-547: Overall improvement in test isolation and reliability

The changes in this file consistently replace production repositories with test-specific repositories (ComplaintResponseTestRepository, SubmissionTestRepository, and UserTestRepository). This refactoring:

  1. Improves test isolation by preventing potential side effects on production data.
  2. Enhances the reliability of the tests.
  3. Follows best practices for integration testing.

The core logic and assertions of the tests remain unchanged, preserving their original intent while improving their implementation.

src/test/java/de/tum/cit/aet/artemis/assessment/ResultServiceIntegrationTest.java (7)

37-37: LGTM! Improved test isolation with test-specific repositories.

The changes in import statements, particularly the introduction of test-specific repositories (e.g., ProgrammingExerciseTestRepository, QuizExerciseTestRepository) and utility services, are a positive improvement. This approach enhances test isolation and provides better control over test data, which is crucial for maintaining reliable and deterministic tests.

Also applies to: 43-43, 47-50, 54-54, 59-60, 67-73


87-87: LGTM! Consistent use of test repositories enhances test reliability.

The modification of repository field types to use test-specific repositories (e.g., ProgrammingExerciseTestRepository, QuizExerciseTestRepository, StudentParticipationTestRepository, SubmissionTestRepository) is a positive change. This approach ensures that tests are using isolated data stores, preventing potential interference with production data and improving the overall reliability and predictability of the test suite.

Also applies to: 96-96, 105-105, 108-108, 111-111


572-572: LGTM! Consistent use of test repository for user data.

The change from userRepository to userTestRepository for finding a user is consistent with the overall approach of using test-specific repositories. This ensures that the test is using a controlled set of user data, further enhancing the isolation and reliability of the test environment.


645-645: LGTM! Consistent use of test repository for user data in external submission test.

The replacement of userRepository with userTestRepository in this method maintains consistency with the overall approach of using test-specific repositories. This change ensures that the test for creating results for external submissions is using isolated user data, contributing to the robustness and reliability of the test suite.


692-692: LGTM! Maintaining consistency with test repositories across all test methods.

The replacement of userRepository with userTestRepository in this method demonstrates a consistent approach throughout the test class. This change ensures that the test for getting assessment counts by correction round is also using isolated user data, contributing to the overall integrity and reliability of the test suite.


Line range hint 1-863: LGTM! Good adherence to coding guidelines.

The test class demonstrates good adherence to the specified coding guidelines. Notable points include:

  • Descriptive test names
  • Appropriate test sizes
  • Consistent use of AssertJ's assertThat for assertions
  • Proper use of JUnit 5 features
  • Use of static mocks as per the guidelines

This consistency helps maintain code quality and readability across the test suite.


Line range hint 1-863: LGTM! Overall improvements to test isolation and consistency.

The changes made to this test class significantly enhance its quality:

  1. Consistent use of test-specific repositories across all test methods improves test isolation.
  2. The modifications align well with best practices for integration testing.
  3. The changes maintain adherence to the specified coding guidelines.

These improvements contribute to a more reliable, maintainable, and robust test suite. The consistent approach across the entire file is commendable and will likely make future maintenance and extensions easier.

src/test/java/de/tum/cit/aet/artemis/assessment/AssessmentComplaintIntegrationTest.java (5)

31-32: LGTM: Improved test isolation with test-specific repositories

The changes in the import statements, particularly the replacement of ComplaintResponseRepository with ComplaintResponseTestRepository and SubmissionRepository with SubmissionTestRepository, indicate a move towards using test-specific repositories. This change is likely to enhance test isolation and provide better control over the test environment.

Also applies to: 36-36, 39-39, 43-45, 47-47, 50-50, 52-53, 56-56


63-63: LGTM: Consistent use of test-specific repositories

The field declarations for submissionRepo and complaintResponseTestRepository have been updated to use the test-specific repository types. This change is consistent with the modifications in the import statements and further reinforces the use of test-specific repositories throughout the test class.

Also applies to: 69-69


425-425: LGTM: Consistent use of test-specific repository for saving

The change from complaintResponseRepo.save(...) to complaintResponseTestRepository.save(...) is consistent with the overall modifications to use test-specific repositories. This change maintains the coherence of the test class.


Line range hint 1-1005: LGTM: Successful migration to test-specific repositories

The changes throughout this file consistently implement the use of test-specific repositories (ComplaintResponseTestRepository and SubmissionTestRepository) instead of their production counterparts. This modification is likely to enhance test isolation and provide better control over the test environment. The core test logic and assertions remain unchanged, which suggests that the functionality being tested should remain the same.

Key points:

  1. Import statements have been updated to include the new test repositories.
  2. Field declarations have been modified to use the test-specific repository types.
  3. Method calls throughout the tests have been updated to use the new repository methods.

These changes should improve the reliability and maintainability of the tests by reducing dependencies on production repositories.


360-360: LGTM: Updated method call for test-specific repository

The change from complaintResponseRepo.findByComplaint_Id(...) to complaintResponseTestRepository.findByComplaintId(...) aligns with the use of the new test-specific repository. This modification is consistent with the earlier changes.

To ensure the new method behaves as expected, please run the following verification:

coderabbitai[bot]
coderabbitai bot previously approved these changes Sep 28, 2024
cremertim
cremertim previously approved these changes Sep 28, 2024
Copy link
Contributor

@cremertim cremertim left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-approve after new commit

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE

📥 Commits

Files that changed from the base of the PR and between a4d4947 and b2b58e7.

📒 Files selected for processing (6)
  • src/main/java/de/tum/cit/aet/artemis/assessment/repository/ComplaintResponseRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/assessment/repository/ResultRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/exercise/repository/SubmissionRepository.java (0 hunks)
  • src/main/java/de/tum/cit/aet/artemis/programming/repository/ProgrammingExerciseRepository.java (0 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/TutorEffortIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/assessment/service/CourseScoreCalculationServiceTest.java (3 hunks)
💤 Files not reviewed due to no reviewable changes (4)
  • src/main/java/de/tum/cit/aet/artemis/assessment/repository/ComplaintResponseRepository.java
  • src/main/java/de/tum/cit/aet/artemis/assessment/repository/ResultRepository.java
  • src/main/java/de/tum/cit/aet/artemis/exercise/repository/SubmissionRepository.java
  • src/main/java/de/tum/cit/aet/artemis/programming/repository/ProgrammingExerciseRepository.java
🧰 Additional context used
📓 Path-based instructions (2)
src/test/java/de/tum/cit/aet/artemis/assessment/TutorEffortIntegrationTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

src/test/java/de/tum/cit/aet/artemis/assessment/service/CourseScoreCalculationServiceTest.java (1)

Pattern src/test/java/**/*.java: test_naming: descriptive; test_size: small_specific; fixed_data: true; junit5_features: true; assert_use: assertThat; assert_specificity: true; archunit_use: enforce_package_rules; db_query_count_tests: track_performance; util_service_factory_pattern: true; avoid_db_access: true; mock_strategy: static_mocks; context_restart_minimize: true

📓 Learnings (1)
src/test/java/de/tum/cit/aet/artemis/assessment/service/CourseScoreCalculationServiceTest.java (1)
Learnt from: Strohgelaender
PR: ls1intum/Artemis#8030
File: src/main/java/de/tum/in/www1/artemis/service/CourseScoreCalculationService.java:21-49
Timestamp: 2024-02-16T16:56:16.054Z
Learning: The project consistently avoids using star-imports in Java files.
🔇 Additional comments (6)
src/test/java/de/tum/cit/aet/artemis/assessment/TutorEffortIntegrationTest.java (4)

21-22: LGTM: Import statements updated correctly.

The import statements have been updated to use the new test repository classes, which aligns with the PR objective of adjusting server tests to the restructured modules. The naming convention for test repositories is consistent, using the "Test" suffix.

Also applies to: 25-26


60-60: LGTM: Test case initialization updated correctly.

The initTestCase method has been updated to use the new TextSubmissionTestRepository, which aligns with the PR objective of adjusting server tests to the restructured modules. The method name, although long, is descriptive and follows the Spring Data naming conventions.


63-63: LGTM: User repository updated to test repository.

The change from userRepository to userTestRepository is consistent with the overall shift to using test repositories in this integration test. This aligns with the PR objectives and maintains consistency with other test repository usage in the file.


Line range hint 1-143: Overall assessment: Changes align with PR objectives.

The modifications to TutorEffortIntegrationTest.java successfully implement the transition to test repositories, which aligns with the PR objective of adjusting server tests to the restructured modules. The existing test logic remains unchanged, maintaining the current test coverage.

A minor naming inconsistency was noted for one repository field, but this doesn't impact functionality. Consider addressing this for improved code consistency.

The changes in this file appear to be ready for merging, pending the suggested minor improvement.

src/test/java/de/tum/cit/aet/artemis/assessment/service/CourseScoreCalculationServiceTest.java (2)

1-1: Package structure change aligns with modular restructuring.

The package change from de.tum.cit.aet.artemis.service to de.tum.cit.aet.artemis.assessment.service appropriately reflects the assessment-specific nature of this service, aligning with the PR's objective of restructuring the code into modules.


52-58: Variable type updates align with test repository usage.

The changes from StudentParticipationRepository to StudentParticipationTestRepository and ResultRepository to ResultTestRepository are consistent with the PR objective of using test repositories in place of production repositories for tests. This separation enhances the distinction between test and production code, promoting better maintainability and reducing potential conflicts.

Copy link
Contributor

@raffifasaro raffifasaro left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code LGTM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ready for review server Pull requests that update Java code. (Added Automatically!) tests
Projects
Status: Merged
Status: Done
Development

Successfully merging this pull request may close these issues.

7 participants