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: Refactor programming server tests #9506

Merged
merged 18 commits into from
Oct 22, 2024

Conversation

ole-ve
Copy link
Contributor

@ole-ve ole-ve commented Oct 16, 2024

Checklist

General

Motivation and Context

Autowired components are all-over the place in the test code. Following (for instance) #9415, these changes introduce new abstract test classes for each test setup (LocalCI/Independent/GitlabJenkins/GitlabCI).

Description

Adds the new abstract test classes and adapt the arch test to accept multiple (abstract) test classes that are allowed to autowire classes.

As a side note, this PR fixes a path in JavaDoc for Atlas.

Summary by CodeRabbit

  • Refactor
    • Updated class and method signatures across multiple test files to enhance integration testing structure.
    • Introduced new abstract classes for programming integration tests to streamline testing processes.
    • Removed unnecessary fields from various test classes to improve clarity and maintainability.
    • Added new test cases to cover additional scenarios and edge cases related to learning paths and build job priorities.
    • Restructured test classes to simplify dependencies and enhance readability.

These changes improve the overall efficiency and organization of the testing framework, ensuring better integration and functionality in future updates.

@ole-ve ole-ve self-assigned this Oct 16, 2024
@ole-ve ole-ve requested a review from a team as a code owner October 16, 2024 16:22
@github-actions github-actions bot added tests atlas Pull requests that affect the corresponding module fileupload Pull requests that affect the corresponding module lti Pull requests that affect the corresponding module programming Pull requests that affect the corresponding module labels Oct 16, 2024
@ole-ve ole-ve requested a review from JohannesStoehr October 16, 2024 16:28
Copy link

coderabbitai bot commented Oct 16, 2024

Walkthrough

This pull request introduces significant refactoring across multiple integration test classes in the ARTEMIS framework. Key changes include updates to method documentation, the addition of new test cases, and the restructuring of classes to extend new abstract base classes. Several autowired dependencies have been removed, indicating a shift towards a more streamlined testing approach. The modifications enhance the coverage and organization of tests related to learning paths and programming exercises, ensuring that various scenarios are adequately tested.

Changes

File Path Summary of Changes
src/test/java/de/tum/cit/aet/artemis/atlas/learningpath/LearningPathIntegrationTest.java Updated method documentation and added new test cases for learning path features, ensuring correct handling of retrieval scenarios and unauthorized access. Organized test methods into nested classes for better readability.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseParticipationIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest, removing several autowired dependencies. Introduced a new nested class for commit history tests.
src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIIntegrationTest.java Changed base class to AbstractProgrammingIntegrationLocalCILocalVCTestBase, removed multiple autowired fields, and modified setup methods. Enhanced documentation within the code.
src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIResourceIntegrationTest.java Updated to extend AbstractProgrammingIntegrationLocalCILocalVCTestBase, removed several autowired dependencies, and maintained core test functionalities.
src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIServiceTest.java Refactored to extend AbstractProgrammingIntegrationLocalCILocalVCTest, removing multiple autowired fields while preserving the structure of test methods.
src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCLocalCIIntegrationTest.java Updated to extend AbstractProgrammingIntegrationLocalCILocalVCTestBase, removed several autowired fields and associated value annotations, while maintaining core test functionalities and adding a nested class for build job priority tests.
src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationIndependentTest.java Introduced a new abstract test class for programming module integration testing, providing autowired repositories and services essential for testing programming exercises.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseIntegrationTestService.java Changed class access modifier to public, added various methods for setup and teardown of programming exercises, and enhanced error handling and assertions for different scenarios.
src/test/java/de/tum/cit/aet/artemis/tutorialgroup/architecture/TutorialGroupTestArchitectureTest.java Changed to extend AbstractModuleTestArchitectureTest, modified method to return a set of integration test classes, altering how integration tests are handled within this architecture.

Possibly related PRs

Suggested labels

ready for review, core

Suggested reviewers

  • JohannesStoehr
  • MaximilianAnzinger
  • SimonEntholzer
  • krusche

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.

Copy link

coderabbitai bot commented Oct 16, 2024

Walkthrough

This pull request introduces significant refactoring and structural changes across various test classes in the project. Key updates include the removal of generic type parameters from several classes, the conversion of some classes to abstract types, and the introduction of new abstract classes for integration testing. Additionally, many existing tests have been modified to extend these new abstract classes, and numerous @Autowired fields have been removed to streamline the test setup.

Changes

File Path Change Summary
src/test/java/de/tum/cit/aet/artemis/atlas/architecture/AtlasTestArchitectureTest.java Class now extends AbstractModuleTestArchitectureTest without a generic type. Method updated to return a Set.
src/test/java/de/tum/cit/aet/artemis/learningpath/LearningPathIntegrationTest.java Enhanced with new test methods and updates to existing tests.
src/test/java/de/tum/cit/aet/artemis/fileupload/AbstractFileUploadIntegrationTest.java Changed from a regular class to an abstract class.
src/test/java/de/tum/cit/aet/artemis/fileupload/architecture/FileUploadTestArchitectureTest.java Class now extends AbstractModuleTestArchitectureTest without a generic type. Method updated to return a Set.
src/test/java/de/tum/cit/aet/artemis/lti/architecture/LtiTestArchitectureTest.java Class now extends AbstractModuleTestArchitectureTest without a generic type. Method updated to return a Set.
src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationGitlabCIGitlabSamlTest.java Introduced as an abstract test class for GitLab CI and SAML authentication.
src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationIndependentTest.java Introduced as a new abstract class for integration tests.
src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationJenkinsGitlabTest.java Introduced as an abstract class for Jenkins and GitLab integration testing.
src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationLocalCILocalVCTest.java Introduced as an abstract test class for local CI integration testing.
src/test/java/de/tum/cit/aet/artemis/programming/AuxiliaryRepositoryServiceTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/BuildPlanIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/ConsistencyCheckGitlabJenkinsIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Field removed.
src/test/java/de/tum/cit/aet/artemis/programming/CourseGitlabJenkinsIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/GitServiceTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest. Field removed.
src/test/java/de/tum/cit/aet/artemis/programming/GitlabServiceTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/IdePreferencesIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/PlantUmlIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingAssessmentIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseBuildPlanTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseGitIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseGitlabJenkinsIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseGradingServiceTest.java Significant modifications, including class renaming and field removals.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseIntegrationJenkinsGitlabTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseParticipationIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseRepositoryServiceTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseResultJenkinsIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Field removed.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseScheduleServiceTest.java Refactored to extend AbstractProgrammingIntegrationGitlabCIGitlabSamlTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseServiceIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationLocalCILocalVCTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseServiceTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTemplateIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTestCaseServiceTest.java Refactored to extend AbstractProgrammingIntegrationLocalCILocalVCTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingSubmissionAndResultGitlabJenkinsIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingSubmissionIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/RepositoryIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/RepositoryProgrammingExerciseParticipationJenkinsIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/StaticCodeAnalysisIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationLocalCILocalVCTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/SubmissionPolicyIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/TestRepositoryResourceIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/architecture/ProgrammingTestArchitectureTest.java Introduced as a new test class for programming integration tests.
src/test/java/de/tum/cit/aet/artemis/programming/hestia/CodeHintIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/hestia/CodeHintServiceTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/hestia/ExerciseHintIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/hestia/ExerciseHintServiceTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/hestia/HestiaDatabaseTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest.
src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseGitDiffReportIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationLocalCILocalVCTestBase. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseGitDiffReportServiceTest.java Refactored to extend AbstractProgrammingIntegrationLocalCILocalVCTestBase. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseSolutionEntryIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest.
src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseTaskIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest.
src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseTaskServiceTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest.
src/test/java/de/tum/cit/aet/artemis/programming/hestia/StructuralTestCaseServiceTest.java Refactored to extend AbstractProgrammingIntegrationLocalCILocalVCTestBase. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/hestia/TestwiseCoverageIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest.
src/test/java/de/tum/cit/aet/artemis/programming/hestia/TestwiseCoverageReportServiceTest.java Refactored to extend AbstractProgrammingIntegrationLocalCILocalVCTestBase. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/hestia/behavioral/BehavioralTestCaseServiceLocalCILocalVCTest.java Renamed from BehavioralTestCaseServiceTest to indicate a shift in base class.
src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationLocalCILocalVCTestBase. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIResourceIntegrationTest.java Refactored to extend AbstractProgrammingIntegrationLocalCILocalVCTestBase. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIResultServiceTest.java Refactored to extend AbstractProgrammingIntegrationLocalCILocalVCTestBase. Field removed.
src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIServiceTest.java Refactored to extend AbstractProgrammingIntegrationLocalCILocalVCTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCLocalCIIntegrationTest.java Extended AbstractProgrammingIntegrationLocalCILocalVCTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/icl/SharedQueueManagementServiceTest.java Extended AbstractProgrammingIntegrationLocalCILocalVCTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/service/BuildLogEntryServiceTest.java Refactored to extend AbstractProgrammingIntegrationIndependentTest. Field removed.
src/test/java/de/tum/cit/aet/artemis/programming/service/GitlabCIServiceTest.java Refactored to extend AbstractProgrammingIntegrationGitlabCIGitlabSamlTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsAuthorizationInterceptorTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Field removed.
src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsInternalUriServiceTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Field removed.
src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsJobPermissionServiceTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Field removed.
src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsJobServiceTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Fields removed.
src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsServiceTest.java Refactored to extend AbstractProgrammingIntegrationJenkinsGitlabTest. Method signature updated.

Possibly related PRs

Suggested labels

ready to merge

Suggested reviewers

  • JohannesStoehr
  • MaximilianAnzinger
  • SimonEntholzer

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.

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: 61

🧹 Outside diff range comments (60)
src/test/java/de/tum/cit/aet/artemis/programming/icl/MultipleHostKeyProviderTest.java (1)

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

The test class follows most of the specified coding guidelines:

  • Descriptive test naming
  • Small and specific test
  • Use of fixed data
  • JUnit 5 features (implied by @test annotation)
  • Use of assertThat for assertions
  • Specific assertions

Consider the following improvements:

  1. Add ArchUnit tests to enforce package rules if not already present in the base class.
  2. If applicable, implement DB query count tracking for performance monitoring.
  3. Consider using static mocks if mocking is needed in future tests.
  4. Ensure that the base class minimizes context restarts for efficiency.

Would you like assistance in implementing any of these improvements?

src/test/java/de/tum/cit/aet/artemis/programming/icl/SharedQueueManagementServiceTest.java (1)

Line range hint 16-50: Verify dependency management and consider enhancing assertion specificity.

The removal of @Autowired annotations for SharedQueueManagementService and HazelcastInstance suggests a change in dependency management. However, these services are still used in the test method. Please verify that these dependencies are correctly provided, possibly through the new base class AbstractProgrammingIntegrationLocalCILocalVCTest.

The test method testPushDockerImageCleanupInfo follows the coding guidelines well:

  • It has a descriptive name.
  • It uses assertThat for assertions.
  • It tests a specific scenario.
  • It doesn't appear to directly access the database.

To further improve the test, consider enhancing the assertion specificity:

Instead of just comparing seconds, consider using isCloseTo() with a small tolerance to account for potential minor timing differences:

assertThat(dockerImageCleanupInfo.get("image1")).isCloseTo(now, within(1, ChronoUnit.SECONDS));
assertThat(dockerImageCleanupInfo.get("image2")).isCloseTo(now.plusMinutes(1), within(1, ChronoUnit.SECONDS));
assertThat(dockerImageCleanupInfo.get("image3")).isCloseTo(now.plusMinutes(2), within(1, ChronoUnit.SECONDS));

This change would make the test more robust against small timing variations while still effectively verifying the correct behavior.

src/test/java/de/tum/cit/aet/artemis/programming/ConsistencyCheckGitlabJenkinsIntegrationTest.java (2)

Line range hint 22-61: Test methods are well-structured. Consider adding more specific assertions.

The test methods are well-organized and cover various consistency check scenarios. They follow the naming conventions specified in the coding guidelines and use appropriate annotations for security context setup.

The delegation of test logic to consistencyCheckTestService promotes code reuse and maintainability, which is a good practice.

To further improve the tests:

  1. Consider adding more specific assertions within each test method to verify the expected outcomes, rather than relying solely on the consistencyCheckTestService methods. This would enhance the test specificity as per the coding guidelines.
  2. You might want to add comments or documentation for each test method to clearly describe the scenario being tested and the expected outcome.

Line range hint 1-63: Overall, the refactoring improves test organization and maintainability.

The changes in this file successfully implement the intended refactoring of the test hierarchy. By extending AbstractProgrammingIntegrationJenkinsGitlabTest and removing the @Autowired annotation, the code now aligns better with the PR objectives of addressing scattered use of autowired components.

Key points:

  1. The test structure is improved while maintaining coverage of various consistency check scenarios.
  2. The use of a shared consistencyCheckTestService promotes code reuse across tests.
  3. The file generally adheres to the specified coding guidelines, including test naming conventions and mock strategies.

To further enhance the test architecture:

  1. Consider implementing more granular assertions within each test method to improve test specificity.
  2. Evaluate if any additional scenarios need to be covered in light of the new abstract test class structure.
  3. Ensure that the AbstractProgrammingIntegrationJenkinsGitlabTest class properly manages the lifecycle and injection of shared components like consistencyCheckTestService.
src/test/java/de/tum/cit/aet/artemis/fileupload/AbstractFileUploadIntegrationTest.java (2)

Line range hint 27-71: Refactor: Consider reducing the number of @Autowired fields

The class contains a large number of @Autowired fields, which can lead to reduced test isolation and increased setup time. Consider refactoring to use more focused test classes or employing the builder pattern for test data setup.

Here's a suggestion to start reducing the number of @Autowired fields:

  1. Identify which fields are actually used in the subclasses.
  2. Move unused fields to the specific subclasses where they are needed.
  3. For commonly used fields, consider creating protected methods that lazily initialize these dependencies when needed.

Example of lazy initialization:

private FileUploadExerciseRepository fileUploadExerciseRepository;

protected FileUploadExerciseRepository getFileUploadExerciseRepository() {
    if (fileUploadExerciseRepository == null) {
        fileUploadExerciseRepository = applicationContext.getBean(FileUploadExerciseRepository.class);
    }
    return fileUploadExerciseRepository;
}

This approach can help reduce the number of @Autowired fields and improve test isolation.


Line range hint 24-71: Consider implementing utility methods for common test operations

To improve code reuse and maintainability, consider adding utility methods in this abstract class for common operations that subclasses might need to perform. This can help reduce duplication in test code and make it easier to write new tests.

For example, you could add methods like:

protected FileUploadExercise createDefaultFileUploadExercise() {
    // Implementation
}

protected FileUploadSubmission createDefaultFileUploadSubmission(FileUploadExercise exercise) {
    // Implementation
}

protected void cleanupTestData() {
    // Implementation to clean up created test data
}

These methods can encapsulate common setup and teardown operations, making it easier for subclasses to focus on their specific test scenarios.

src/test/java/de/tum/cit/aet/artemis/programming/PlantUmlIntegrationTest.java (3)

Line range hint 41-52: Consider using a more specific assertion.

While the test follows most coding guidelines, the assertion could be more specific. Instead of just checking equality, consider asserting specific properties of the response.

For example, you could add assertions for the content type and length of the response:

assertThat(pngResponse)
    .isEqualTo(UML_PNG)
    .hasSize(4)
    .startsWith((byte) 3);

This provides more detailed verification of the response content.


Line range hint 55-69: Enhance assertion specificity.

While the test adheres to most coding guidelines, the assertion could be more specific. Consider asserting additional properties of the SVG response.

You could enhance the assertion as follows:

assertThat(svgResponse)
    .isEqualTo(UML_SVG)
    .startsWith("<svg")
    .endsWith("</svg>");

This provides a more comprehensive verification of the SVG content.


Line range hint 72-81: Improve test structure and assertions.

While the test covers important error scenarios, it can be improved in several ways:

  1. Split the test into two separate tests for better clarity and adherence to the small_specific guideline.
  2. Use assertThat for assertions as per the coding guidelines.
  3. Make assertions more specific by checking the response body or error message.

Here's a suggested refactor:

@Test
@WithMockUser(username = TEST_PREFIX + "student1", roles = "USER")
void generateSvg_asStudent_emptyStringError() throws Exception {
    final var paramMap = new LinkedMultiValueMap<String, String>();
    paramMap.setAll(Map.of("plantuml", ""));    // empty string
    var response = request.get("/api/plantuml/svg", HttpStatus.INTERNAL_SERVER_ERROR, String.class, paramMap);
    assertThat(response).isNotBlank().contains("error");
}

@Test
@WithMockUser(username = TEST_PREFIX + "student1", roles = "USER")
void generateSvg_asStudent_veryLongStringError() throws Exception {
    final var paramMap = new LinkedMultiValueMap<String, String>();
    var veryLongString = new String(new char[10001]).replace('\0', 'a');
    paramMap.setAll(Map.of("plantuml", veryLongString));
    var response = request.get("/api/plantuml/svg", HttpStatus.INTERNAL_SERVER_ERROR, String.class, paramMap);
    assertThat(response).isNotBlank().contains("error");
}

This refactor improves test clarity, uses assertThat, and makes assertions more specific.

src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsInternalUriServiceTest.java (1)

Line range hint 1-105: Overall alignment with coding guidelines.

The changes in this file generally align with the provided coding guidelines:

  • Test methods remain descriptive and specific.
  • Assertions use assertThat as required.
  • Fixed data is used in tests.

To further improve alignment with the guidelines, consider the following:

  1. Explore opportunities to use JUnit 5 specific features where applicable.
  2. If relevant to this test class, consider adding ArchUnit tests to enforce package rules.
  3. If this test involves database operations, consider adding DB query count tracking for performance monitoring.

These suggestions are for potential future improvements and are not critical for the current changes.

src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsJobServiceTest.java (2)

Line range hint 52-107: LGTM: Test methods maintain good practices, minor suggestion for consistency.

The test methods adhere to the coding guidelines:

  • Descriptive naming convention
  • Small and specific tests
  • Use of assertThat for assertions
  • Consistent use of static mocks

For improved consistency and clarity, consider adding a comment at the class level explaining how jenkinsJobService is now provided (presumably by the parent class).

Add a class-level comment explaining the source of jenkinsJobService:

/**
 * Test class for JenkinsJobService.
 * Note: jenkinsJobService is provided by the parent class AbstractProgrammingIntegrationJenkinsGitlabTest.
 */
class JenkinsJobServiceTest extends AbstractProgrammingIntegrationJenkinsGitlabTest {
    // ... existing code ...
}

Issues Found with Dependency Injection in JenkinsJobServiceTest.java

  • userUtilService is still being used in initTestCase, which may compromise test isolation.
  • jenkinsJobService methods are referenced directly without visible dependency injection, potentially affecting maintainability and adherence to coding guidelines.
🔗 Analysis chain

Line range hint 33-50: Verify test isolation and database access after removing @Autowired annotations.

The removal of @Autowired annotations for JenkinsJobService and UserUtilService aligns with the PR objectives to address scattered use of autowired components. However, please clarify:

  1. How is test isolation maintained without adding users in initTestCase?
  2. How are database queries tracked for performance as per the coding guidelines?
  3. Is the jenkinsJobService now provided by the parent class? If so, consider documenting this in a comment for clarity.

To check for potential issues, please run:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for remaining @Autowired annotations and usage of removed services
rg --type java '@Autowired|userUtilService|jenkinsJobService' src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsJobServiceTest.java

Length of output: 795

src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsAuthorizationInterceptorTest.java (1)

Line range hint 52-127: LGTM: Test methods are well-structured and cover key scenarios

The test methods follow good practices with descriptive names, small and specific tests, and appropriate use of assertions and mocking. They cover key scenarios for the jenkinsAuthorizationInterceptor.

For consistency, consider using static imports for Mockito methods. Apply this change:

-import org.mockito.Mockito;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;

 // In the test methods, replace:
-Mockito.mock(ClientHttpRequestExecution.class)
+mock(ClientHttpRequestExecution.class)
src/test/java/de/tum/cit/aet/artemis/programming/hestia/TestwiseCoverageIntegrationTest.java (1)

Line range hint 1-124: LGTM: Overall structure and test coverage maintained.

The refactoring has successfully maintained the existing test coverage and structure. The class adheres to JUnit 5 conventions and the provided coding guidelines for test classes.

To improve test naming and make it more descriptive, consider renaming the test methods to clearly indicate the scenario being tested and the expected outcome. For example:

@Test
@WithMockUser(username = TEST_PREFIX + "student1", roles = "USER")
void getLatestFullCoverageReport_AsStudent_ShouldReturnForbidden() throws Exception {
    // ... (existing test code)
}

@Test
@WithMockUser(username = TEST_PREFIX + "tutor1", roles = "TA")
void getLatestFullCoverageReport_AsTutor_ShouldReturnReportWithCorrectData() throws Exception {
    // ... (existing test code)
}

This naming convention makes it easier to understand the purpose of each test at a glance.

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIServiceTest.java (1)

Line range hint 44-52: LGTM: Simplified setUp method.

The setUp method has been simplified by removing the initialization of several services, which are likely now handled in the parent class. This change aligns with the PR objectives of better managing dependencies through autowiring in the abstract test classes.

Consider updating the comment to clarify that the listener removal is still necessary:

// Remove listener to avoid triggering build job processing during tests
sharedQueueProcessingService.removeListener();
src/test/java/de/tum/cit/aet/artemis/programming/AuxiliaryRepositoryServiceTest.java (2)

Line range hint 24-36: LGTM! Consider extracting the setup logic for better readability.

The removal of @Autowired fields and the use of utility services directly in the setUp method improves maintainability and reduces dependency injection boilerplate. This change aligns well with the new base class structure.

To further improve readability, consider extracting the setup logic into a private method:

 @BeforeEach
 void setUp() {
+    initializeProgrammingExercise();
+}
+
+private void initializeProgrammingExercise() {
     var course = programmingExerciseUtilService.addCourseWithOneProgrammingExercise();
     programmingExerciseBeforeUpdate = exerciseUtilService.getFirstExerciseWithType(course, ProgrammingExercise.class);
     programmingExerciseBeforeUpdate.setReleaseDate(null);
     programmingExerciseBeforeUpdate.setAuxiliaryRepositories(new ArrayList<>());
     programmingExerciseRepository.save(programmingExerciseBeforeUpdate);

     updatedProgrammingExercise = programmingExerciseRepository.findById(programmingExerciseBeforeUpdate.getId()).orElseThrow();
     updatedProgrammingExercise.setAuxiliaryRepositories(new ArrayList<>());
     auxiliaryRepositoryRepository.deleteAll();
 }

This change would make the setUp method more concise and the initialization logic more self-contained.


Line range hint 38-189: LGTM! Consider using more specific assertions in some tests.

The test methods adhere well to the coding guidelines. They use descriptive names, are focused on specific scenarios, and use appropriate assertion methods. The use of assertThat and JUnit 5 features is consistent throughout the class.

To further improve the tests, consider using more specific assertions in some cases. For example, in the shouldAddAuxiliaryRepositoriesSuccessfully test:

 @Test
 void shouldAddAuxiliaryRepositoriesSuccessfully() {
     AuxiliaryRepository auxiliaryRepository = createAuxiliaryRepository("test", "test", "test", programmingExerciseBeforeUpdate, null);
     AuxiliaryRepository auxiliaryRepository2 = createAuxiliaryRepository("test2", "test2", "test2", programmingExerciseBeforeUpdate, null);
     auxiliaryRepositoryRepository.save(auxiliaryRepository);
     programmingExerciseBeforeUpdate.setAuxiliaryRepositories(List.of(auxiliaryRepository));

     auxiliaryRepositoryService.validateAndAddAuxiliaryRepositoriesOfProgrammingExercise(programmingExerciseBeforeUpdate, List.of(auxiliaryRepository2));

-    assertThat(programmingExerciseBeforeUpdate.getAuxiliaryRepositories()).containsExactly(auxiliaryRepository, auxiliaryRepository2);
+    assertThat(programmingExerciseBeforeUpdate.getAuxiliaryRepositories())
+        .hasSize(2)
+        .containsExactly(auxiliaryRepository, auxiliaryRepository2)
+        .extracting(AuxiliaryRepository::getName)
+        .containsExactly("test", "test2");
 }

This change provides more specific assertions about the size and content of the auxiliary repositories list, making the test more robust and informative.

src/test/java/de/tum/cit/aet/artemis/programming/service/BuildLogEntryServiceTest.java (2)

Line range hint 232-240: LGTM! Consider adding more test scenarios.

The test methods are well-structured and use parameterized testing with @ValueSource, which is an excellent practice for testing multiple scenarios efficiently. The testScenario method tests both Gradle and Maven scenarios, which provides good coverage.

Consider adding more diverse scenarios to further improve test coverage. For example, you could add scenarios for different programming languages or edge cases.


Line range hint 1-257: Overall, the changes improve the test class structure and maintainability.

The refactoring of this test class, including the change to extend AbstractProgrammingIntegrationIndependentTest and the removal of the @Autowired annotation, appears to be part of a larger effort to enhance the testing framework for programming-related tests. These changes likely contribute to better organization and potentially more efficient test execution.

The existing test methods and utility functions are well-implemented, making good use of parameterized testing and Java 8+ features. This promotes code reuse and readability.

To further improve this test class:

  1. Ensure that all similar test classes have been updated consistently.
  2. Verify that buildLogEntryService is properly initialized in the new context.
  3. Consider adding more diverse test scenarios to increase coverage.
  4. If not already present, consider adding a brief class-level Javadoc comment explaining the purpose of this test class and any important setup details.
src/test/java/de/tum/cit/aet/artemis/programming/service/connectors/jenkins/build_plan/JenkinsPipelineScriptCreatorTest.java (1)

Line range hint 62-69: Avoid direct database access in tests

According to the coding guidelines (avoid_db_access: true), tests should avoid direct database interactions. The test methods interact with repositories to save and retrieve entities, which involves database access. Consider refactoring the tests to use static mocks or in-memory data structures instead of accessing the database directly.

src/test/java/de/tum/cit/aet/artemis/programming/service/RepositoryAccessServiceTest.java (1)

Line range hint 33-42: Avoid direct database access in tests

Per the coding guidelines (avoid_db_access: true), direct database access should be minimized in tests. In the setup() method, calls like userUtilService.addUsers(...), userRepository.findOneByLogin(...), and programmingExerciseRepository.save(...) may involve database operations. Consider refactoring the test to use mocks or test data builders to avoid direct database interactions, which can improve test isolation and performance.

src/test/java/de/tum/cit/aet/artemis/programming/BuildPlanIntegrationTest.java (1)

Line range hint 20-37: Avoid direct database access in tests

The init() method directly saves entities to the database using repositories:

  • programmingExerciseBuildConfigRepository.save(buildConfig);
  • programmingExerciseRepository.save(programmingExercise);

According to the coding guidelines (avoid_db_access: true), tests should avoid direct database access to improve performance and test isolation.

Suggestion:

Use utility services or factory patterns to manage test data, adhering to the util_service_factory_pattern: true guideline. This will enhance maintainability and reduce test execution time.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseGitIntegrationTest.java (2)

Line range hint 91-104: Rename testRepositoryMethods() to a more descriptive name

The method name testRepositoryMethods() is not sufficiently descriptive of the test's purpose. Since this test verifies that the ProgrammingExerciseRepository methods throw EntityNotFoundException when provided with invalid IDs, consider renaming the method to better reflect this behavior.

Apply this diff to rename the method:

-void testRepositoryMethods() {
+void testProgrammingExerciseRepositoryThrowsEntityNotFoundExceptionForInvalidIds() {

Line range hint 106-125: Ensure proper cleanup of temporary repositories

In the testCombineTemplateRepositoryCommits() method, temporary repositories are created but not explicitly closed or deleted within the test. Although the @AfterEach tearDown() method attempts to clean up, it's good practice to ensure that resources are properly closed within the test to prevent resource leaks.

Consider explicitly closing and deleting the repositories at the end of the test or verifying that tearDown() reliably handles all scenarios.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseTaskIntegrationTest.java (1)

Line range hint 38-51: Prefer utility services over direct repository access in tests

The test method initTestCases() directly uses repositories like testCaseRepository and programmingExerciseSolutionEntryRepository to manage test data. According to the coding guidelines, tests should avoid direct database access (avoid_db_access: true) and utilize utility services or factory patterns (util_service_factory_pattern: true) for better abstraction and maintainability.

Consider refactoring initTestCases() to use utility services provided by programmingExerciseUtilService or similar helpers to create and manage test cases and solution entries. This will enhance test readability and adhere to the project's best practices.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseSolutionEntryIntegrationTest.java (1)

Line range hint 35-58: Avoid direct database access in tests by utilizing utility services

In the initTestCase() method, the test directly accesses the database using repositories to fetch and save entities. As per the coding guidelines (avoid_db_access: true and util_service_factory_pattern: true), tests should avoid direct database interactions. Consider using utility services or factory patterns to manage test data setup.

You can utilize existing utility services like programmingExerciseUtilService or create dedicated methods to handle test data creation without direct repository access.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTemplateIntegrationTest.java (7)

Line range hint 119-119: Usage of Removed Field programmingExerciseTestService

The field programmingExerciseTestService has been removed but is still being used here. This will lead to a compilation error.

To resolve this issue, you can obtain an instance of ProgrammingExerciseTestService by autowiring it or adjusting the test setup to accommodate the changes. For example:

+@Autowired
+private ProgrammingExerciseTestService programmingExerciseTestService;

 void setup() throws Exception {
     programmingExerciseTestService.setupTestUsers(TEST_PREFIX, 1, 1, 0, 1);

Line range hint 128-129: Usage of Removed Field programmingExerciseTestService

The programmingExerciseTestService is used here but has been removed from the class fields. This will cause a compilation error.

Consider reintroducing the field by autowiring it:

+@Autowired
+private ProgrammingExerciseTestService programmingExerciseTestService;

 //...

 programmingExerciseTestService.setup(this, versionControlService, continuousIntegrationService);
 programmingExerciseTestService.setupRepositoryMocks(exercise, exerciseRepo, solutionRepo, testRepo, auxRepo);

Line range hint 157-157: Usage of Removed Field programmingLanguageFeatureService

The programmingLanguageFeatureService is being used but has been removed from the class fields. This will result in a compilation error.

To fix this, reintroduce the field with autowiring:

+@Autowired
+private ProgrammingLanguageFeatureService programmingLanguageFeatureService;

 //...

 var languageFeatures = programmingLanguageFeatureService.getProgrammingLanguageFeatures(language);

Line range hint 153-193: Consider Refactoring languageTypeBuilder Method

The languageTypeBuilder method is quite complex and deeply nested, which might affect readability and maintainability.

Consider simplifying the method by extracting inner loops or conditions into separate methods or by using more descriptive variable names to enhance clarity.


Line range hint 118-129: Avoid Using Hardcoded Time Values

In the setup method, ZonedDateTime.now().minusDays(1) and ZonedDateTime.now().plusDays(7) are used directly.

Consider using constants or variables to define these time offsets for better readability and easier maintenance.


Line range hint 190-215: Ensure Proper Error Handling in invokeGradle Method

The invokeGradle method catches a general Exception and returns -1 upon any error, which might mask specific issues.

Consider catching specific exceptions and providing more detailed error handling to help diagnose issues during test execution.


Line range hint 226-240: Simplify the readTestReports Method

The method reads test reports and processes them. There might be an opportunity to simplify the stream operations for better readability.

Consider refactoring the stream chain to improve readability, possibly by breaking it into intermediate variables.

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIResourceIntegrationTest.java (3)

Line range hint 70-93: Avoid direct database access in tests

In the createJobs() method, the test directly interacts with the database by saving Result entities using resultRepository.save() (lines 85-88). According to the coding guideline avoid_db_access: true, it's recommended to avoid direct database access in tests to improve performance and isolation.

Consider using static mocks or test doubles for the Result entities instead of persisting them to the database. This can be achieved by mocking the resultRepository and configuring it to return the desired results without actual database interactions.

Example refactor:

// Mock the result repository
when(resultRepository.save(any(Result.class))).thenAnswer(invocation -> invocation.getArgument(0));

This approach adheres to the mock_strategy: static_mocks guideline and enhances test efficiency.


Line range hint 85-88: Potential issue with shared state in tests

The direct manipulation of shared queues and maps (lines 102-104) might lead to test flakiness due to shared mutable state. According to the guideline context_restart_minimize: true, it's important to ensure that tests are isolated and do not interfere with each other.

Ensure that the shared data structures are properly isolated or reset between tests to prevent side effects. You might consider encapsulating the setup and teardown logic to maintain test independence.

Example:

@BeforeEach
void setUp() {
    // Initialize or reset shared resources
}

@AfterEach
void tearDown() {
    // Clean up shared resources
}

Line range hint 185-193: Enhance assertion specificity in test testGetBuildJobStatistics

In the test method testGetBuildJobStatistics() (lines 185-193), the assertions verify the counts of total, successful, failed, and cancelled builds. While the current assertions check the expected values, ensuring that they are as specific as possible improves test clarity and maintainability.

Consider adding messages to the assertions to clarify the intent and provide better diagnostics in case of test failures.

Example:

assertThat(response.totalBuilds()).as("Total builds should be 2").isEqualTo(2);
assertThat(response.successfulBuilds()).as("There should be 1 successful build").isEqualTo(1);
assertThat(response.failedBuilds()).as("There should be 1 failed build").isEqualTo(1);
assertThat(response.cancelledBuilds()).as("There should be no cancelled builds").isEqualTo(0);
src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsServiceTest.java (4)

Line range hint 97-99: Rename duplicate test methods for clarity

There are two test methods named testCreateBuildPlanForExerciseThrowsExceptionOnTemplateError. Having test methods with the same name can lead to confusion and make test reports harder to interpret. Consider renaming one of the methods to provide a more descriptive name.

Apply this diff to rename the parameterized test method:

-    void testCreateBuildPlanForExerciseThrowsExceptionOnTemplateError(ProgrammingLanguage programmingLanguage) {
+    void testCreateBuildPlanForUnsupportedProgrammingLanguages(ProgrammingLanguage programmingLanguage) {

Also applies to: 115-117


Line range hint 141-150: Duplicate test methods detected

The methods testImportBuildPlansThrowsExceptionOnGivePermissions and testDeleteBuildPlan have identical implementations. This duplication may be unintended. Please check if both methods are necessary or if they can be consolidated into a single test.

Also applies to: 154-163


Line range hint 119-120: Avoid direct database access in tests

Directly saving entities using programmingExerciseRepository.save(programmingExercise); in tests violates the guideline avoid_db_access: true. Instead, use utility services or factory methods to manage test data, which enhances test isolation and maintainability.

Apply this diff to use the utility service:

-        programmingExercise = programmingExerciseRepository.save(programmingExercise);
+        programmingExercise = programmingExerciseUtilService.save(programmingExercise);

Line range hint 238-246: Avoid direct database access in tests

The test directly interacts with the database using programmingExerciseRepository.save(sourceExercise); and buildPlanRepository.setBuildPlanForExercise(...). According to the guidelines avoid_db_access: true and util_service_factory_pattern: true, consider using utility services or factory patterns to handle test data, improving test performance and reliability.

src/test/java/de/tum/cit/aet/artemis/programming/service/ProgrammingExerciseFeedbackCreationServiceTest.java (6)

Line range hint 33-41: Avoid Direct Database Access in Tests

According to the coding guidelines (avoid_db_access: true), tests should avoid direct database interactions. The init() method accesses repositories to save entities, which entails database operations. Consider refactoring to use mocks or in-memory data structures to set up test data without database access.


Line range hint 110-113: Minimize Database Access in Test Methods

The test method is directly accessing the testCaseRepository to retrieve data. To comply with the guideline to avoid database access in tests, consider using mock repositories or test utilities that simulate repository behavior without real database interactions.


Line range hint 130-133: Consistent Use of Mocks for Repositories

In this test method, direct calls to testCaseRepository.deleteAll() involve database operations. To reduce dependency on the database, use mocking frameworks to mock the behavior of repositories.


Line range hint 185-188: Ensure Test Isolation from Database

Direct database access can lead to flaky tests and longer execution times. Refactoring to eliminate database interactions in this method will enhance test reliability and speed.


Line range hint 226-234: Refactor Test Data Setup to Avoid Database Operations

The loop over programming languages initializes test cases with database entities. Align with the avoid_db_access: true guideline by mocking the test cases and programming exercises instead of persisting them.


Line range hint 247-258: Simplify Feedback Creation Without Database Dependence

The creation of the StaticCodeAnalysisReportDTO and associated feedback does not require database entities. Refactor the test to use simple objects or mocks to decouple from the database.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/StructuralTestCaseServiceTest.java (3)

Line range hint 45-47: Undefined References to courseUtilService and userUtilService

The methods courseUtilService.addEmptyCourse() and userUtilService.addUsers() are being called, but courseUtilService and userUtilService are not defined in this class anymore since the @Autowired fields have been removed. This will result in compilation errors.

To fix this issue, you should either:

  • Reintroduce the @Autowired fields for these services, or
  • Utilize the methods or utilities provided by the new base class AbstractProgrammingIntegrationLocalCILocalVCTestBase for setting up courses and users.

Line range hint 64-64: Undefined Reference to testCaseRepository and Avoid Direct Database Access

The method testCaseRepository.save(testCase) is used, but testCaseRepository is not defined in this class since the @Autowired field has been removed. Additionally, according to the coding guidelines, direct database access should be avoided in tests.

To fix this issue, you should:

  • Use the utility methods provided by the new base class or other test utilities to handle test case creation without directly accessing the repository.
  • Remove or refactor the direct call to testCaseRepository.save(testCase) to comply with the guideline to avoid database access.

Line range hint 70-71: Undefined Reference to hestiaUtilTestService

The method hestiaUtilTestService.setupSolution() is called, but hestiaUtilTestService is not defined in this class since the @Autowired field has been removed. This will cause compilation errors.

To fix this issue, you should either:

  • Reintroduce the @Autowired field for hestiaUtilTestService, or
  • Use alternative setup methods provided by the new base class or refactor the code to initialize the required setups differently.

Note: This issue occurs in multiple test methods where hestiaUtilTestService is used.

src/test/java/de/tum/cit/aet/artemis/programming/TestRepositoryResourceIntegrationTest.java (2)

Line range hint 63-78: Avoid database access in tests according to coding guidelines

Per the coding guidelines (avoid_db_access: true), tests should avoid accessing the database. In the setup method, the call to programmingExerciseBuildConfigRepository.save(programmingExercise.getBuildConfig()); persists data to the database. Consider using mocks or in-memory objects instead of saving to the database to improve test performance and isolation.


Line range hint 88-292: Avoid database access in test methods

In multiple test methods, such as testGetFiles(), testGetFile(), and others, there are calls to programmingExerciseRepository.save(programmingExercise);, which access the database. According to the coding guidelines (avoid_db_access: true), tests should avoid database interactions. Please refactor these tests to use mocks or in-memory data structures instead of persisting data to the database to adhere to the guidelines and enhance test performance.

src/test/java/de/tum/cit/aet/artemis/programming/CourseGitlabJenkinsIntegrationTest.java (2)

Line range hint 75-86: Ensure changeUserGroup method adheres to the utility service pattern

The method changeUserGroup is defined within this test class. To promote code reuse and adhere to the utility service factory pattern as per coding guidelines, consider moving this method to a utility or service class if it's used across multiple test classes.

Apply this change to move the method to a utility class:

-    private void changeUserGroup(String userLogin, Set<String> groups) {
-        Optional<User> user = userTestRepository.findOneWithGroupsByLogin(userLogin);
-        assertThat(user).isPresent();
-
-        User updatedUser = user.get();
-        updatedUser.setGroups(groups);
-
-        userTestRepository.save(updatedUser);
-    }

Then, use the method from the utility class in your test:

// Example usage after moving the method
UserUtilService.changeUserGroup(userLogin, groups);

Line range hint 259-264: Avoid direct usage of gitlabRequestMockProvider and jenkinsRequestMockProvider

According to the mock strategy guideline (mock_strategy: static_mocks), prefer using static mocks over direct mocking within test classes. Ensure that mocking is centralized and consistent across tests.

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCLocalCIIntegrationTest.java (1)

Remaining usages of removed dependencies detected

Several usages of the removed dependencies (examUtilService, buildJobRepository, localCITriggerService, sharedQueueProcessingService, hazelcastInstance) are still present in LocalVCLocalCIIntegrationTest.java:

  • hazelcastInstance.getQueue("buildJobQueue");
  • buildJobRepository.findFirstByParticipationIdOrderByBuildStartDateDesc(...)
  • examUtilService.addExamWithExerciseGroup(...)
  • sharedQueueProcessingService.removeListener();
  • localCITriggerService.triggerBuild(...)

These remaining usages indicate that the dependencies have not been fully refactored, which could lead to NullPointerException or other issues during test execution.

🔗 Analysis chain

Line range hint 53-79: Ensure the removal of @Autowired dependencies does not impact test functionality

Several @Autowired fields have been removed:

  • examUtilService
  • buildJobRepository
  • localCITriggerService
  • sharedQueueProcessingService
  • hazelcastInstance

Please verify that all usages of these dependencies have been refactored appropriately or are now provided by the new base class AbstractProgrammingIntegrationLocalCILocalVCTestBase. This ensures that there are no NullPointerException or other issues during test execution.

Run the following script to check for any remaining usages of the removed dependencies:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Search for any remaining usages of the removed dependencies in the test class.

# Test: Ensure there are no occurrences of the removed dependencies. Expect: No matches found.
rg 'examUtilService|buildJobRepository|localCITriggerService|sharedQueueProcessingService|hazelcastInstance' src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCLocalCIIntegrationTest.java

Length of output: 2926

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTestCaseServiceTest.java (6)

Line range hint 37-39: Replace removed service usages with superclass utilities in setUp()

The setUp() method uses userUtilService, programmingExerciseUtilService, and exerciseUtilService, which are no longer declared in the class. These services were removed and need to be replaced with the corresponding utilities provided by the superclass.

Apply this diff to fix the issue:

-        userUtilService.addUsers(TEST_PREFIX, 5, 1, 0, 1);
-        var course = programmingExerciseUtilService.addCourseWithOneProgrammingExerciseAndTestCases();
-        programmingExercise = exerciseUtilService.getFirstExerciseWithType(course, ProgrammingExercise.class);
+        database.addUsers(TEST_PREFIX, 5, 1, 0, 1);
+        var course = database.addCourseWithOneProgrammingExerciseAndTestCases();
+        programmingExercise = database.getFirstExerciseWithType(course, ProgrammingExercise.class);

This change utilizes the database utility provided by the superclass, ensuring that the setup operations are correctly performed.


Line range hint 41-42: Ensure programmingExerciseRepository is properly initialized

The variable programmingExerciseRepository is used but not declared in the class. Since @Autowired private ProgrammingExerciseRepository programmingExerciseRepository was removed, you should access it through the superclass or reintroduce it if necessary.

If programmingExerciseRepository is accessible via the superclass, adjust the code accordingly. Otherwise, consider adding the following declaration:

+    @Autowired
+    private ProgrammingExerciseRepository programmingExerciseRepository;

Or, if available through the superclass, replace programmingExerciseRepository with programmingExerciseUtilService.getProgrammingExerciseRepository() or an equivalent method.


Line range hint 55-58: Update usage of participationUtilService in test methods

In the testResetTestCases() method, participationUtilService is used but not declared. Replace it with the appropriate utility from the superclass.

Apply this diff to fix the issue:

-        participationUtilService.addProgrammingParticipationWithResultForExercise(programmingExercise, TEST_PREFIX + "student1");
+        database.addProgrammingParticipationForExercise(programmingExercise, TEST_PREFIX + "student1");

This change leverages the database utility to add a programming participation for the exercise.


Line range hint 57-58: Correct usage of testCaseRepository and testCaseService

The variables testCaseRepository and testCaseService are no longer declared. Replace their usages with the appropriate methods or utilities.

If these services are accessible through the superclass or a common utility, adjust the code accordingly. For example:

-        new ArrayList<>(testCaseRepository.findByExerciseId(programmingExercise.getId())).getFirst().weight(50.0);
+        var testCases = programmingExerciseTestCaseRepository.findByExerciseId(programmingExercise.getId());
+        testCases.iterator().next().setWeight(50.0);

Ensure that programmingExerciseTestCaseRepository is properly initialized or accessed via the superclass.


Line range hint 68-72: Replace gitService mock setup with superclass utility

The gitService is being mocked using doReturn and when. Ensure that the gitService is appropriately accessed from the superclass or adjust the mocking strategy as per the new architecture.

If gitService is provided by the superclass, you may not need to mock it here. Otherwise, adjust the code to match the new mocking strategy.


Line range hint 95-113: Update test data creation in shouldAllowTestCaseWeightSumZero

In the shouldAllowTestCaseWeightSumZero method, programmingExerciseRepository, gitService, and feedbackCreationService are used but not declared.

Modify the code to use the utilities provided by the superclass or reintroduce the necessary services. For example, adjust the repository access and service usages to ensure the test functions correctly.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE

📥 Commits

Files that changed from the base of the PR and between 6431b46 and 0f7b4dd.

📒 Files selected for processing (79)
  • src/test/java/de/tum/cit/aet/artemis/atlas/architecture/AtlasTestArchitectureTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/atlas/learningpath/LearningPathIntegrationTest.java (5 hunks)
  • src/test/java/de/tum/cit/aet/artemis/fileupload/AbstractFileUploadIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/fileupload/architecture/FileUploadTestArchitectureTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/lti/architecture/LtiTestArchitectureTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationGitlabCIGitlabSamlTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationIndependentTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationJenkinsGitlabTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationLocalCILocalVCTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationLocalCILocalVCTestBase.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/AuxiliaryRepositoryServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/BuildPlanIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ConsistencyCheckGitlabJenkinsIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/CourseGitlabJenkinsIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/GitServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/GitlabServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/IdePreferencesIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/PlantUmlIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingAssessmentIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseBuildPlanTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseGitIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseGitlabJenkinsIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseGradingServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseIntegrationJenkinsGitlabTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseParticipationIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseRepositoryServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseResultJenkinsIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseScheduleServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseServiceIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseServiceTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTemplateIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTestCaseServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingSubmissionAndResultGitlabJenkinsIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingSubmissionIntegrationTest.java (4 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/RepositoryIntegrationTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/RepositoryProgrammingExerciseParticipationJenkinsIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/StaticCodeAnalysisIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/SubmissionPolicyIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/TestRepositoryResourceIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/architecture/ProgrammingTestArchitectureTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/CodeHintIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/CodeHintServiceTest.java (8 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/ExerciseHintIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/ExerciseHintServiceTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/HestiaDatabaseTest.java (6 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseGitDiffReportIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseGitDiffReportServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseSolutionEntryIntegrationTest.java (11 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseTaskIntegrationTest.java (5 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseTaskServiceTest.java (14 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/StructuralTestCaseServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/TestwiseCoverageIntegrationTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/TestwiseCoverageReportServiceTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/behavioral/BehavioralTestCaseServiceLocalCILocalVCTest.java (4 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIResourceIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIResultServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCLocalCIIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCLocalCIParticipationIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCSshIntegrationTest.java (0 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/MultipleHostKeyProviderTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/ProgrammingExerciseLocalVCLocalCIIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/SharedQueueManagementServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/BuildLogEntryServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/GitlabCIServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsAuthorizationInterceptorTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsInternalUriServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsJobPermissionServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsJobServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/ProgrammingExerciseFeedbackCreationServiceTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/RepositoryAccessServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/connectors/gitlab/GitLabPersonalAccessTokenManagementServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/connectors/jenkins/build_plan/JenkinsPipelineScriptCreatorTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/shared/architecture/module/AbstractModuleTestArchitectureTest.java (1 hunks)
💤 Files with no reviewable changes (1)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCSshIntegrationTest.java
🧰 Additional context used
📓 Path-based instructions (78)
src/test/java/de/tum/cit/aet/artemis/atlas/architecture/AtlasTestArchitectureTest.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/atlas/learningpath/LearningPathIntegrationTest.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/fileupload/AbstractFileUploadIntegrationTest.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/fileupload/architecture/FileUploadTestArchitectureTest.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/lti/architecture/LtiTestArchitectureTest.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/programming/AbstractProgrammingIntegrationGitlabCIGitlabSamlTest.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/programming/AbstractProgrammingIntegrationIndependentTest.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/programming/AbstractProgrammingIntegrationJenkinsGitlabTest.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/programming/AbstractProgrammingIntegrationLocalCILocalVCTest.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/programming/AbstractProgrammingIntegrationLocalCILocalVCTestBase.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/programming/AuxiliaryRepositoryServiceTest.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/programming/BuildPlanIntegrationTest.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/programming/ConsistencyCheckGitlabJenkinsIntegrationTest.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/programming/CourseGitlabJenkinsIntegrationTest.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/programming/GitServiceTest.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/programming/GitlabServiceTest.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/programming/IdePreferencesIntegrationTest.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/programming/PlantUmlIntegrationTest.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/programming/ProgrammingAssessmentIntegrationTest.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/programming/ProgrammingExerciseBuildPlanTest.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/programming/ProgrammingExerciseGitIntegrationTest.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/programming/ProgrammingExerciseGitlabJenkinsIntegrationTest.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/programming/ProgrammingExerciseGradingServiceTest.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/programming/ProgrammingExerciseIntegrationJenkinsGitlabTest.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/programming/ProgrammingExerciseParticipationIntegrationTest.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/programming/ProgrammingExerciseRepositoryServiceTest.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/programming/ProgrammingExerciseResultJenkinsIntegrationTest.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/programming/ProgrammingExerciseScheduleServiceTest.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/programming/ProgrammingExerciseServiceIntegrationTest.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/programming/ProgrammingExerciseServiceTest.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/programming/ProgrammingExerciseTemplateIntegrationTest.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/programming/ProgrammingExerciseTest.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/programming/ProgrammingExerciseTestCaseServiceTest.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/programming/ProgrammingSubmissionAndResultGitlabJenkinsIntegrationTest.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/programming/ProgrammingSubmissionIntegrationTest.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/programming/RepositoryIntegrationTest.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/programming/RepositoryProgrammingExerciseParticipationJenkinsIntegrationTest.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/programming/StaticCodeAnalysisIntegrationTest.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/programming/SubmissionPolicyIntegrationTest.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/programming/TestRepositoryResourceIntegrationTest.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/programming/architecture/ProgrammingTestArchitectureTest.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/programming/hestia/CodeHintIntegrationTest.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/programming/hestia/CodeHintServiceTest.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/programming/hestia/ExerciseHintIntegrationTest.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/programming/hestia/ExerciseHintServiceTest.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/programming/hestia/HestiaDatabaseTest.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/programming/hestia/ProgrammingExerciseGitDiffReportIntegrationTest.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/programming/hestia/ProgrammingExerciseGitDiffReportServiceTest.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/programming/hestia/ProgrammingExerciseSolutionEntryIntegrationTest.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/programming/hestia/ProgrammingExerciseTaskIntegrationTest.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/programming/hestia/ProgrammingExerciseTaskServiceTest.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/programming/hestia/StructuralTestCaseServiceTest.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/programming/hestia/TestwiseCoverageIntegrationTest.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/programming/hestia/TestwiseCoverageReportServiceTest.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/programming/hestia/behavioral/BehavioralTestCaseServiceLocalCILocalVCTest.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/programming/icl/LocalCIIntegrationTest.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/programming/icl/LocalCIResourceIntegrationTest.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/programming/icl/LocalCIResultServiceTest.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/programming/icl/LocalCIServiceTest.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/programming/icl/LocalVCIntegrationTest.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/programming/icl/LocalVCLocalCIIntegrationTest.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/programming/icl/LocalVCLocalCIParticipationIntegrationTest.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/programming/icl/LocalVCServiceTest.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/programming/icl/MultipleHostKeyProviderTest.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/programming/icl/ProgrammingExerciseLocalVCLocalCIIntegrationTest.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/programming/icl/SharedQueueManagementServiceTest.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/programming/service/BuildLogEntryServiceTest.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/programming/service/GitlabCIServiceTest.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/programming/service/JenkinsAuthorizationInterceptorTest.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/programming/service/JenkinsInternalUriServiceTest.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/programming/service/JenkinsJobPermissionServiceTest.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/programming/service/JenkinsJobServiceTest.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/programming/service/JenkinsServiceTest.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/programming/service/ProgrammingExerciseFeedbackCreationServiceTest.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/programming/service/RepositoryAccessServiceTest.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/programming/service/connectors/gitlab/GitLabPersonalAccessTokenManagementServiceTest.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/programming/service/connectors/jenkins/build_plan/JenkinsPipelineScriptCreatorTest.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/shared/architecture/module/AbstractModuleTestArchitectureTest.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/programming/ProgrammingExerciseServiceIntegrationTest.java (2)
Learnt from: Hialus
PR: ls1intum/Artemis#7451
File: src/test/java/de/tum/in/www1/artemis/exercise/programmingexercise/ProgrammingExerciseTestService.java:9-9
Timestamp: 2024-10-08T15:35:48.767Z
Learning: The use of wildcard imports is acceptable in this project as specified in the `.editorconfig` file.
Learnt from: Hialus
PR: ls1intum/Artemis#7451
File: src/test/java/de/tum/in/www1/artemis/exercise/programmingexercise/ProgrammingExerciseTestService.java:9-9
Timestamp: 2024-01-19T15:49:43.303Z
Learning: The use of wildcard imports is acceptable in this project as specified in the `.editorconfig` file.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseServiceTest.java (2)
Learnt from: Hialus
PR: ls1intum/Artemis#7451
File: src/test/java/de/tum/in/www1/artemis/exercise/programmingexercise/ProgrammingExerciseTestService.java:9-9
Timestamp: 2024-10-08T15:35:48.767Z
Learning: The use of wildcard imports is acceptable in this project as specified in the `.editorconfig` file.
Learnt from: Hialus
PR: ls1intum/Artemis#7451
File: src/test/java/de/tum/in/www1/artemis/exercise/programmingexercise/ProgrammingExerciseTestService.java:9-9
Timestamp: 2024-01-19T15:49:43.303Z
Learning: The use of wildcard imports is acceptable in this project as specified in the `.editorconfig` file.
🔇 Additional comments (157)
src/test/java/de/tum/cit/aet/artemis/lti/architecture/LtiTestArchitectureTest.java (4)

3-3: LGTM: Import statement added for Set.

The addition of the java.util.Set import is appropriate and necessary for the changes made to the getAbstractModuleIntegrationTestClasses method.


8-8: LGTM: Removed generic type parameter from class signature.

The removal of the generic type parameter <AbstractLtiIntegrationTest> from the class signature aligns with the PR objectives of refactoring the test architecture. This change makes the class more flexible and supports the goal of adapting the architecture to accommodate multiple abstract test classes.


16-17: LGTM: Updated method to return a Set of test classes.

The changes to getAbstractModuleIntegrationTestClasses method are well-implemented:

  1. The method now returns a Set<Class<?>>, allowing for multiple abstract test classes, which aligns with the PR objectives.
  2. The use of Set.of() is a modern Java feature, adhering to the guideline of using JUnit 5 features.
  3. The method name remains descriptive, following the test naming guideline.

These changes support the goal of improving the organization and flexibility of the test architecture.


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

The modifications to LtiTestArchitectureTest successfully contribute to the refactoring of the test architecture as outlined in the PR objectives. The changes adhere to the provided coding guidelines, particularly in terms of test naming, use of modern Java features, and adapting the architecture for multiple abstract test classes. These updates should improve the flexibility and organization of the testing framework.

src/test/java/de/tum/cit/aet/artemis/atlas/architecture/AtlasTestArchitectureTest.java (3)

3-3: LGTM: Import statement added correctly.

The addition of import java.util.Set; is consistent with the changes in the method signature of getAbstractModuleIntegrationTestClasses.


8-8: LGTM: Class signature updated to improve flexibility.

The removal of the generic type parameter <AbstractAtlasIntegrationTest> from the class signature allows for more flexibility in the test architecture. This change is consistent with the PR objectives of refactoring the test architecture and potentially supporting multiple abstract test classes.


Line range hint 1-20: Summary: Successful refactoring of AtlasTestArchitectureTest

The changes in this file successfully refactor the AtlasTestArchitectureTest class to support a more flexible test architecture. The removal of the generic type parameter and the modification of the getAbstractModuleIntegrationTestClasses method align well with the PR objectives of improving the organization and maintainability of the testing framework.

These changes lay the groundwork for potentially supporting multiple abstract test classes in the future, which could lead to better management of dependencies and improved test structure.

src/test/java/de/tum/cit/aet/artemis/fileupload/architecture/FileUploadTestArchitectureTest.java (2)

3-4: LGTM: Import statement addition is appropriate.

The addition of the java.util.Set import is consistent with the changes in the method signature and usage in the class.


8-8: LGTM: Class signature update improves flexibility.

The removal of the generic type parameter from the class signature allows for handling multiple integration test classes, which is consistent with the method changes. This update adheres to the coding guidelines and improves the flexibility of the test architecture.

src/test/java/de/tum/cit/aet/artemis/programming/icl/MultipleHostKeyProviderTest.java (2)

11-11: LGTM: Import statement added correctly.

The new import statement for AbstractProgrammingIntegrationLocalCILocalVCTestBase is correctly placed and aligns with the change in class extension.


15-15: LGTM: Class extension updated as per refactoring objectives.

The change to extend AbstractProgrammingIntegrationLocalCILocalVCTestBase aligns with the PR objectives to refactor programming tests and create new abstract test classes for different test setups.

To ensure this change adheres to the coding guidelines, please run the following verification:

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIResultServiceTest.java (4)

11-11: LGTM: Import statement updated correctly.

The import statement has been updated to reflect the new base class being extended. This change is consistent with the class signature modification.


14-14: LGTM: Class extension updated to improve test organization.

The change from extending AbstractLocalCILocalVCIntegrationTest to AbstractProgrammingIntegrationLocalCILocalVCTestBase aligns well with the PR objectives. This modification contributes to better organization of test code and potentially improves dependency management through the new abstract test classes.


Line range hint 1-33: Overall adherence to coding guidelines is good.

The file follows the provided coding guidelines well:

  • Test naming is descriptive (LocalCIResultServiceTest).
  • The test class is small and specific to LocalCIResultService.
  • assertThat is used for assertions.
  • The test method is specific and uses fixed data.

No violations of other guidelines (like JUnit 5 features, ArchUnit rules, or database access) were observed in this file.


14-14: Verify localCIResultService availability in the base class.

The removal of the @Autowired LocalCIResultService field aligns with the PR objectives of addressing scattered use of autowired components. However, the test method still uses localCIResultService.

Please ensure that localCIResultService is properly provided by the new base class AbstractProgrammingIntegrationLocalCILocalVCTestBase. Run the following script to verify:

src/test/java/de/tum/cit/aet/artemis/programming/architecture/ProgrammingTestArchitectureTest.java (3)

1-12: LGTM: Class structure and package declaration are well-defined.

The class ProgrammingTestArchitectureTest is correctly placed in the de.tum.cit.aet.artemis.programming.architecture package. It extends AbstractModuleTestArchitectureTest, which is appropriate for a module-specific test architecture class. The naming convention follows the project guidelines for test classes.


14-17: LGTM: getModulePackage() method is correctly implemented.

The getModulePackage() method is properly overridden and returns the correct package for the programming module. The use of the ARTEMIS_PACKAGE constant ensures consistency with other parts of the project.


1-31: Overall, excellent implementation of the ProgrammingTestArchitectureTest class.

This new test class adheres well to the project's coding guidelines and best practices for test classes. It correctly extends the abstract module test architecture class and provides appropriate implementations for the required methods. The class structure is clean, and the code is well-organized.

Key points:

  1. The class name is descriptive and follows the naming convention for test classes.
  2. The package structure aligns with the module being tested (programming).
  3. Both overridden methods (getModulePackage() and getAbstractModuleIntegrationTestClasses()) are correctly implemented.
  4. The use of Set.of() in getAbstractModuleIntegrationTestClasses() adheres to the util service factory pattern guideline.

The only minor suggestion is to add brief comments explaining the purpose of each included test class in getAbstractModuleIntegrationTestClasses() to further improve code readability and maintainability.

src/test/java/de/tum/cit/aet/artemis/programming/icl/SharedQueueManagementServiceTest.java (2)

11-11: LGTM: Import change aligns with class extension modification.

The import of AbstractProgrammingIntegrationLocalCILocalVCTest is consistent with the change in the class extension. This refactoring appears to be part of the broader effort to create more specific abstract test classes for different test setups, as mentioned in the PR objectives.


14-14: Verify features of the new base class.

The change to extend AbstractProgrammingIntegrationLocalCILocalVCTest aligns with the PR objectives to create more specific abstract test classes. This should provide better-tailored utilities for programming tests.

To ensure all necessary features are available in the new base class, please run the following script:

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseServiceTest.java (4)

14-14: LGTM: Class extension change aligns with PR objectives.

The change from extending AbstractSpringIntegrationIndependentTest to AbstractProgrammingIntegrationIndependentTest is in line with the PR's goal of creating new abstract test classes for different test setups. This should improve the organization and maintainability of the test code.


Line range hint 20-33: Verify test setup completeness after removing @Autowired fields.

The removal of @Autowired fields and simplification of the init() method aligns with the PR objectives of addressing scattered use of autowired components. This change should improve the organization of the test code.

However, please ensure that:

  1. The test still has access to all necessary dependencies.
  2. The test setup is still complete and correct.
  3. The removed setup logic (e.g., adding users and courses) is now handled in the abstract class or elsewhere appropriately.

To verify the completeness of the test setup, please run the following script:


Line range hint 1-48: Verify JUnit 5 usage and overall structure.

The test class generally adheres to the coding guidelines:

  • The test class and method names are descriptive.
  • The test is small and specific.
  • It uses assertThat for assertions.
  • It uses @WithMockUser for authentication.

To fully comply with the guidelines, please ensure:

  1. The test is using JUnit 5 features as required.
  2. The test is using fixed data where appropriate.
  3. The assertions are specific enough.

To verify JUnit 5 usage and other guideline adherence, please run the following script:


45-46: Verify repository functionality after changing from programmingExerciseTestRepository to programmingExerciseRepository.

The change from using programmingExerciseTestRepository to programmingExerciseRepository suggests a consolidation of repository usage, which can improve consistency and maintainability.

Please ensure that:

  1. The programmingExerciseRepository provides the same functionality as the previously used programmingExerciseTestRepository.
  2. The method findAllWithBuildAndTestAfterDueDateInFuture() is available and functions correctly in the new repository.

To verify the repository functionality, please run the following script:

src/test/java/de/tum/cit/aet/artemis/programming/ConsistencyCheckGitlabJenkinsIntegrationTest.java (1)

Line range hint 10-20: Setup and teardown methods look good.

The setup() and tearDown() methods are well-structured and follow JUnit5 conventions. They properly initialize and clean up the test environment, including setting up mock providers for Jenkins and GitLab requests. This approach aligns with the specified mock strategy in the coding guidelines.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseBuildPlanTest.java (3)

12-12: Improved test class hierarchy

The change to extend AbstractProgrammingIntegrationGitlabCIGitlabSamlTest aligns well with the PR objectives. This more specific parent class should provide better organization and management of dependencies for programming exercise tests.


Line range hint 24-29: Improved test setup with reduced dependencies

The removal of @Autowired fields and simplification of the init method align well with the PR objectives. This change reduces setup complexity and improves maintainability. It also adheres to the coding guidelines, particularly the utility service factory pattern and minimizing context restarts.


Line range hint 31-62: Verify test methods with new setup

While the test methods remain unchanged, they may now rely on methods or fields from the parent class AbstractProgrammingIntegrationGitlabCIGitlabSamlTest. Please verify that all test methods still function correctly with the new setup, especially regarding access to programmingExerciseRepository and programmingExerciseUtilService.

To assist in verifying the test methods, you can run the following script:

If the script returns any results, please ensure that these usages are properly handled by the new parent class or update the test methods accordingly.

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCServiceTest.java (1)

13-13: LGTM: Import statement added for new base class.

The import statement for AbstractProgrammingIntegrationLocalCILocalVCTest has been correctly added, which aligns with the change in the class extension.

src/test/java/de/tum/cit/aet/artemis/fileupload/AbstractFileUploadIntegrationTest.java (2)

24-24: LGTM: Class declaration changed to abstract

The change from a regular class to an abstract class is appropriate for a base test class. This modification aligns with the PR objectives of creating abstract test classes for different test setups.


Line range hint 24-71: Verify: Ensure all @Autowired fields are necessary

The large number of @Autowired fields might indicate that this abstract class is trying to do too much. It's important to verify if all these dependencies are actually needed in the subclasses.

To help with this verification, you can run the following script to check the usage of these fields in the subclasses:

This script will help identify which fields are actually used in the subclasses, allowing you to make informed decisions about which fields to keep in the abstract class and which to move to specific subclasses.

✅ Verification successful

All @Autowired fields are necessary

  • Verified that each dependency annotated with @Autowired in AbstractFileUploadIntegrationTest.java is actively used in subclasses.
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check usage of @Autowired fields in subclasses

# Get all field names
fields=$(ast-grep --lang java --pattern '$_ $_' src/test/java/de/tum/cit/aet/artemis/fileupload/AbstractFileUploadIntegrationTest.java | grep -oP '(?<=protected ).*(?=;)' | awk '{print $NF}')

# Check usage in subclasses
for field in $fields; do
    echo "Checking usage of $field:"
    rg "\b$field\b" src/test/java/de/tum/cit/aet/artemis/fileupload/ --type java --glob '!AbstractFileUploadIntegrationTest.java'
    echo "---"
done

Length of output: 196


Script:

#!/bin/bash
# Description: Check usage of @Autowired fields in subclasses

# Extract fields with @Autowired annotation
fields=$(ast-grep --lang java --pattern '
  @Autowired
  protected $_ $$_;
' src/test/java/de/tum/cit/aet/artemis/fileupload/AbstractFileUploadIntegrationTest.java | grep -oP '(?<=protected ).*(?=;)' | awk '{print $NF}')

# Check if fields were extracted
if [ -z "$fields" ]; then
  echo "No @Autowired fields found."
  exit 0
fi

# Check usage in subclasses
for field in $fields; do
    echo "Checking usage of $field:"
    rg "\b$field\b" src/test/java/de/tum/cit/aet/artemis/fileupload/ --type java --glob '!AbstractFileUploadIntegrationTest.java'
    echo "---"
done

Length of output: 315


Script:

#!/bin/bash
# Description: Enhanced check for usage of @Autowired fields in subclasses

# Extract fields with @Autowired annotation, accounting for possible formatting variations
fields=$(ast-grep --lang java --pattern '
  @Autowired
  protected $_ $$_;
' src/test/java/de/tum/cit/aet/artemis/fileupload/AbstractFileUploadIntegrationTest.java | grep -oP '(?<=protected ).*(?=;)' | awk '{print $NF}')

# If no fields found, attempt alternative pattern matching
if [ -z "$fields" ]; then
  echo "No @Autowired fields found with the initial pattern. Attempting alternative pattern."
  fields=$(ast-grep --lang java --pattern '
    @Autowired
    private $_ $$_;
  ' src/test/java/de/tum/cit/aet/artemis/fileupload/AbstractFileUploadIntegrationTest.java | grep -oP '(?<=private ).*(?=;)' | awk '{print $NF}')
fi

# Check if fields were extracted after alternative pattern
if [ -z "$fields" ]; then
  echo "No @Autowired fields found after alternative pattern."
  exit 0
fi

# Check usage in subclasses
for field in $fields; do
    echo "Checking usage of $field:"
    rg "\b$field\b" src/test/java/de/tum/cit/aet/artemis/fileupload/ --type java --glob '!AbstractFileUploadIntegrationTest.java'
    echo "---"
done

Length of output: 790


Script:

#!/bin/bash
# Description: Robust check for usage of @Autowired fields in subclasses

# Attempt to extract fields with @Autowired annotation using ast-grep
fields=$(ast-grep --lang java --pattern '
  @Autowired
  ($_)
  $_ $_;
' src/test/java/de/tum/cit/aet/artemis/fileupload/AbstractFileUploadIntegrationTest.java | grep -oP '(?<=protected |private |public )\w+(?=;)')

# If no fields found with ast-grep, attempt extraction using ripgrep
if [ -z "$fields" ]; then
  echo "No @Autowired fields found with ast-grep. Attempting extraction with ripgrep."
  fields=$(rg "@Autowired\s*(?:\n|\s)+(?:protected|private|public)\s+\w+\s+(\w+);" src/test/java/de/tum/cit/aet/artemis/fileupload/AbstractFileUploadIntegrationTest.java --only-matching --replace '$1')
fi

# Check if fields were extracted
if [ -z "$fields" ]; then
  echo "No @Autowired fields found after trying both ast-grep and ripgrep patterns."
  exit 0
fi

# Check usage in subclasses
for field in $fields; do
    echo "Checking usage of $field:"
    rg "\b$field\b" src/test/java/de/tum/cit/aet/artemis/fileupload/ --type java --glob '!AbstractFileUploadIntegrationTest.java'
    echo "---"
done

Length of output: 980


Script:

#!/bin/bash
# Description: Robust extraction of @Autowired fields using ripgrep with multiline support

# Attempt to extract fields with @Autowired annotation using ripgrep with multiline flag
fields=$(rg --multiline "@Autowired\s*\n\s*(protected|private|public)\s+\w+\s+(\w+);" \
        src/test/java/de/tum/cit/aet/artemis/fileupload/AbstractFileUploadIntegrationTest.java \
        --only-matching --replace '$2')

# Check if fields were extracted
if [ -z "$fields" ]; then
  echo "No @Autowired fields found after enabling multiline mode."
  exit 0
fi

# Check usage in subclasses
for field in $fields; do
    echo "Checking usage of $field:"
    rg "\b$field\b" src/test/java/de/tum/cit/aet/artemis/fileupload/ --type java --glob '!AbstractFileUploadIntegrationTest.java'
    echo "---"
done

Length of output: 72654

src/test/java/de/tum/cit/aet/artemis/programming/RepositoryProgrammingExerciseParticipationJenkinsIntegrationTest.java (1)

Line range hint 41-75: LGTM! Verify DB query count tracking in parent class.

The test method testGetLatestBuildLogsFails follows good practices:

  • Descriptive name
  • Appropriate size and specificity
  • Use of mocking for Jenkins behavior
  • Specific assertion using assertThat

These align well with the provided coding guidelines.

To ensure full compliance with the coding guidelines, please verify if DB query count tracking is handled by the parent class AbstractProgrammingIntegrationJenkinsGitlabTest. Run the following script to check for DB query tracking in the parent class:

If DB query count tracking is not found in the parent class, consider adding it to comply with the coding guideline for db_query_count_tests: track_performance.

src/test/java/de/tum/cit/aet/artemis/programming/PlantUmlIntegrationTest.java (2)

23-23: LGTM: Class now extends the appropriate abstract test class.

The change to extend AbstractProgrammingIntegrationIndependentTest aligns with the PR objectives to improve test organization and dependency management.


Line range hint 1-83: Overall, the changes align with PR objectives and improve test structure.

The refactoring to use AbstractProgrammingIntegrationIndependentTest aligns with the PR goals. The tests cover various scenarios for PlantUML integration, including success and error cases. While some improvements in assertion specificity and test structure have been suggested, the overall changes contribute positively to the codebase.

src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsInternalUriServiceTest.java (2)

19-19: LGTM: Import statement updated to reflect new base class.

The import of AbstractProgrammingIntegrationJenkinsGitlabTest aligns with the change in the class extension, indicating a more specific base class for programming integration tests with Jenkins and GitLab.


22-22: Verify initialization of jenkinsInternalUrlService.

The removal of the @Autowired annotation for jenkinsInternalUrlService aligns with the PR objectives of addressing scattered use of autowired components. However, please ensure that jenkinsInternalUrlService is properly initialized, possibly by the new base class AbstractProgrammingIntegrationJenkinsGitlabTest.

To prevent potential NullPointerExceptions, consider adding a null check for jenkinsInternalUrlService in the @BeforeEach method:

@BeforeEach
void initTestCase() throws Exception {
    // Existing initialization code...
    
    assertThat(jenkinsInternalUrlService).isNotNull();
}

Also, run the following script to check for any remaining @Autowired annotations in this file:

src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsJobServiceTest.java (1)

30-33: LGTM: Class extension and import changes align with PR objectives.

The change to extend AbstractProgrammingIntegrationJenkinsGitlabTest aligns with the PR objectives to create new abstract test classes for different test setups. The import statement is correctly placed, and the class naming convention is maintained.

src/test/java/de/tum/cit/aet/artemis/programming/IdePreferencesIntegrationTest.java (2)

22-22: Summary of changes and recommendations

The changes in this file align well with the PR objectives to refactor and improve the organization of test code. The main modifications include:

  1. Updating the base class to AbstractProgrammingIntegrationIndependentTest.
  2. Removing @Autowired annotations for repositories.
  3. Modifying the tearDown method by removing explicit cleanup calls.

These changes contribute to better management of dependencies and potentially improve the overall structure of the testing framework. However, there are a few points that require attention:

  1. Verify that all necessary setup and utility methods from the previous base class are still available in the new base class.
  2. Ensure that test methods still have proper access to the required repositories.
  3. Confirm that test isolation is maintained, and cleanup is handled appropriately, possibly by the new base class.

The core functionality of the test methods remains unchanged, which is a positive sign for maintaining the existing test coverage.

Please address the verification points mentioned in the previous comments to ensure the refactoring doesn't introduce any unintended side effects.


Line range hint 41-44: Verify test isolation after removing repository cleanup.

The removal of userIdeMappingRepository.deleteAll() and ideRepository.deleteAll() calls from the tearDown method is consistent with the removal of @Autowired annotations. However, this change may affect test isolation between test runs.

Please verify that test isolation is maintained and that cleanup is handled properly, possibly by the new base class. Consider running the following script to check for any potential issues:

#!/bin/bash
# Description: Check for potential test isolation issues after removing cleanup calls

# Test: Check if there are any remaining references to deleteAll() calls in the test class
rg --type java -e "deleteAll\(\)" src/test/java/de/tum/cit/aet/artemis/programming/IdePreferencesIntegrationTest.java

# Test: Verify that the new base class handles cleanup
ast-grep --lang java --pattern 'class AbstractProgrammingIntegrationIndependentTest {
  $$$
  @AfterEach
  void $_($$) {
    $$$
    $_Repository.deleteAll();
    $$$
  }
  $$$
}'

If the new base class doesn't handle cleanup, consider reintroducing the cleanup calls or implementing a different cleanup mechanism to ensure proper test isolation.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/TestwiseCoverageReportServiceTest.java (4)

16-16: LGTM: Import statement added for new base class.

The import statement for AbstractProgrammingIntegrationLocalCILocalVCTestBase has been correctly added to support the change in the class extension.


Line range hint 1-108: Overall assessment: Well-executed refactoring with consistent changes.

The changes in this file align well with the PR objectives of refactoring the test setup and improving dependency management. Key points:

  1. The class now extends a more specific base class, potentially providing better support for programming exercise tests.
  2. Consistent updates to repository usage (testCaseRepository instead of programmingExerciseTestCaseRepository) throughout the file.
  3. Removal of several @Autowired fields, likely now managed by the new base class.

These changes contribute to a more organized and maintainable test structure. The suggested verification steps should help ensure that the refactoring hasn't introduced any unintended side effects.


76-76: LGTM: Consistent update of repository usage in test method.

The change to use testCaseRepository.findByExerciseId() is consistent with the updates made in the setup method and aligns with the overall refactoring approach.

To ensure the functionality remains intact, please run the following script:

✅ Verification successful

Verified: Updated repository usage confirmed in test method.

The usage of testCaseRepository.findByExerciseId() has been successfully updated in the shouldCreateFullTestwiseCoverageReport method, consistent with the refactoring approach.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the test execution and coverage

# Test: Run the specific test and check its output
./gradlew test --tests TestwiseCoverageReportServiceTest.shouldCreateFullTestwiseCoverageReport

# Test: Verify test coverage for the changed lines
./gradlew jacocoTestReport
cat build/reports/jacoco/test/html/de.tum.cit.aet.artemis.programming.hestia/TestwiseCoverageReportServiceTest.java.html | grep -A 10 -B 10 "testCaseRepository.findByExerciseId"

Length of output: 823


Script:

#!/bin/bash
# Description: Verify the usage of testCaseRepository.findByExerciseId in the test method

# Search for the method call within the TestwiseCoverageReportServiceTest.java file
rg "testCaseRepository\.findByExerciseId" src/test/java/de/tum/cit/aet/artemis/programming/hestia/TestwiseCoverageReportServiceTest.java -C 10

Length of output: 1706


25-25: LGTM: Class extension updated to new base class.

The change to extend AbstractProgrammingIntegrationLocalCILocalVCTestBase aligns with the PR objectives to create new abstract test classes for different test setups. This likely provides more specific functionality for programming exercise tests.

To ensure this change doesn't introduce any unintended side effects, please run the following script:

src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsAuthorizationInterceptorTest.java (2)

29-29: LGTM: Removed autowired fields for better dependency management

The removal of @Value and @Autowired fields aligns with the PR objectives of addressing scattered use of autowired components. This should lead to better dependency management through the new abstract test classes.

To ensure the dependencies are correctly managed in the new setup, please run the following script:


31-31: LGTM: Class now extends AbstractProgrammingIntegrationJenkinsGitlabTest

The change to extend AbstractProgrammingIntegrationJenkinsGitlabTest aligns with the PR objectives of creating new abstract test classes for different test setups. This should improve the organization and maintainability of the test code.

To ensure the new base class provides all necessary functionality, please run the following script:

✅ Verification successful

Verified: AbstractProgrammingIntegrationJenkinsGitlabTest contains necessary fields

All removed fields (jenkinsServerUrl, jenkinsAuthorizationInterceptor, and restTemplate) are present in the new base class AbstractProgrammingIntegrationJenkinsGitlabTest. This ensures that the test class maintains the required functionality and adheres to the refactoring objectives.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the contents of the new base class

# Test: Check if the new base class exists and contains expected methods/fields
ast-grep --lang java --pattern 'abstract class AbstractProgrammingIntegrationJenkinsGitlabTest {
  $$$
}'

Length of output: 536


Script:

#!/bin/bash
# Description: Verify the existence and contents of AbstractProgrammingIntegrationJenkinsGitlabTest class, excluding files with encoding issues

# Find all Java files excluding those with encoding issues
fd --extension java --type f | grep -v 'EncodingISO_8559_1.java' | xargs ast-grep --lang java --pattern 'abstract class AbstractProgrammingIntegrationJenkinsGitlabTest { $$$ }'

Length of output: 176


Script:

#!/bin/bash
# Description: Search for the AbstractProgrammingIntegrationJenkinsGitlabTest class using ripgrep

rg 'abstract\s+class\s+AbstractProgrammingIntegrationJenkinsGitlabTest' --type java

Length of output: 310


Script:

#!/bin/bash
# Description: Verify if AbstractProgrammingIntegrationJenkinsGitlabTest contains necessary fields

# Search for field declarations in the new base class
ast-grep --lang java --pattern '
abstract class AbstractProgrammingIntegrationJenkinsGitlabTest {
  $$$
  $_ jenkinsServerUrl;
  $_ jenkinsAuthorizationInterceptor;
  $_ restTemplate;
  $$$
}'

Length of output: 318


Script:

#!/bin/bash
# Description: Verify the presence of necessary fields in AbstractProgrammingIntegrationJenkinsGitlabTest

# Define the file path
FILE="src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationJenkinsGitlabTest.java"

# Check for jenkinsServerUrl
rg 'jenkinsServerUrl' "$FILE"

# Check for jenkinsAuthorizationInterceptor
rg 'jenkinsAuthorizationInterceptor' "$FILE"

# Check for restTemplate
rg 'restTemplate' "$FILE"

Length of output: 647

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCLocalCIParticipationIntegrationTest.java (4)

15-15: LGTM: Import statement updated correctly.

The import statement for AbstractProgrammingIntegrationLocalCILocalVCTest has been added, which aligns with the change in the class extension. This change is appropriate and consistent with the refactoring objectives.


25-25: LGTM: Class extension updated appropriately.

The class now extends AbstractProgrammingIntegrationLocalCILocalVCTest, which aligns with the PR objectives to refactor programming tests and create new abstract test classes. This change likely provides a more specific base class for programming exercises with local CI and VC setup.


Line range hint 38-106: LGTM: Test methods comply with coding guidelines.

The test methods in this file adhere to the specified coding guidelines:

  1. Test naming is descriptive and clear.
  2. Tests use assertThat for assertions, as required.
  3. Each test focuses on a specific functionality, keeping tests small and specific.
  4. No direct database access is observed in the test methods.
  5. The tests appear to use fixed data for consistency.

The overall structure and implementation of these tests align well with the project's coding standards for test classes.


25-25: Verify the removal of autowired services.

The autowired services (ProgrammingExerciseUtilService, VcsAccessLogRepository, and ParticipationUtilService) have been removed, which aligns with the PR objectives. However, these services are still used in the test methods. Please verify that these services are now provided by the new abstract base class AbstractProgrammingIntegrationLocalCILocalVCTest to avoid potential compilation errors.

To verify this, you can run the following script:

src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsJobPermissionServiceTest.java (3)

19-19: LGTM: Import statement added correctly.

The import for AbstractProgrammingIntegrationJenkinsGitlabTest has been added, which aligns with the class extension modification.


Line range hint 1-124: Summary: Changes align with PR objectives and coding guidelines.

The modifications to this test class, including the updated base class and removal of the @Autowired annotation, align well with the PR objectives to refactor programming tests and address scattered use of autowired components. The test methods remain unchanged, preserving existing test coverage.

The file adheres to the specified coding guidelines for test files, including:

  • Descriptive test naming
  • Small and specific tests
  • Use of JUnit 5 features
  • Use of assertThat for assertions
  • Specific assertions
  • Mocking strategy using static mocks

No issues were found regarding database access or context restart minimization, as these aspects are not directly relevant to the changes made in this file.


23-23: LGTM: Class extension updated correctly.

The class now extends AbstractProgrammingIntegrationJenkinsGitlabTest, which aligns with the PR objectives to refactor programming tests. The removal of the @Autowired annotation for jenkinsJobPermissionsService suggests a change in dependency management.

To ensure the new base class provides all necessary functionality, please run the following verification script:

This script will help verify the existence and proper setup of the new base class, ensuring that the refactoring has been applied consistently across related test classes.

✅ Verification successful

Verification Successful: Class extension and dependency management are correct.

All changes align with the refactoring objectives:

  • AbstractProgrammingIntegrationJenkinsGitlabTest exists and is correctly extended.
  • jenkinsJobPermissionsService is now managed by the new base class.
  • No remaining @Autowired annotations are present in the test class.
  • Other related test classes have been consistently updated.
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the new base class and its usage

# Test 1: Check if the new base class exists
echo "Checking for AbstractProgrammingIntegrationJenkinsGitlabTest..."
fd -t f "AbstractProgrammingIntegrationJenkinsGitlabTest.java"

# Test 2: Verify if jenkinsJobPermissionsService is provided by the new base class
echo "Checking for jenkinsJobPermissionsService in the base class..."
rg -t java "protected\s+JenkinsJobPermissionsService\s+jenkinsJobPermissionsService" $(fd -t f "AbstractProgrammingIntegrationJenkinsGitlabTest.java")

# Test 3: Check for any remaining @Autowired annotations in this test class
echo "Checking for remaining @Autowired annotations..."
rg -t java "@Autowired" src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsJobPermissionServiceTest.java

# Test 4: Verify if other test classes have been updated similarly
echo "Checking for other test classes extending AbstractProgrammingIntegrationJenkinsGitlabTest..."
rg -t java "extends\s+AbstractProgrammingIntegrationJenkinsGitlabTest" src/test/java/de/tum/cit/aet/artemis/programming/service/

Length of output: 2863

src/test/java/de/tum/cit/aet/artemis/programming/hestia/TestwiseCoverageIntegrationTest.java (3)

14-14: LGTM: Import statement added for new base class.

The import statement for AbstractProgrammingIntegrationIndependentTest has been correctly added to support the change in the class extension.


Line range hint 1-124: Overall assessment: Refactoring successfully implemented.

The refactoring of TestwiseCoverageIntegrationTest has been successfully implemented, aligning with the PR objectives. Key points:

  1. The class now extends the new AbstractProgrammingIntegrationIndependentTest, improving test organization.
  2. Repository usage has been updated to reflect new naming conventions or structure.
  3. Existing test coverage and structure have been maintained.
  4. The class adheres to JUnit 5 conventions and provided coding guidelines.

Minor suggestions for improvement have been made, including:

  • Extracting test case creation into a separate method.
  • Improving test method naming for better clarity.

These changes enhance the maintainability and readability of the test code without compromising its functionality.


23-23: Verify the impact of the new base class.

The change to extend AbstractProgrammingIntegrationIndependentTest aligns with the PR objectives for refactoring programming tests. This likely improves the organization of test code.

Please ensure that:

  1. All necessary methods and fields from the old base class are still accessible.
  2. Any new methods or fields introduced by the new base class are properly utilized.

Run the following script to check for any potential issues:

✅ Verification successful

Base class change verified successfully.

The transition to AbstractProgrammingIntegrationIndependentTest has been validated:

  • No methods from the old base class are in use.
  • All methods from the new base class are appropriately utilized.
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for potential issues after changing the base class

# Test 1: Check if any methods from the old base class are still being used
echo "Checking for usage of methods from AbstractSpringIntegrationIndependentTest:"
rg --type java 'AbstractSpringIntegrationIndependentTest\.' src/test/java/de/tum/cit/aet/artemis/programming/hestia/TestwiseCoverageIntegrationTest.java

# Test 2: Check if any new methods from the new base class are not being used
echo "Checking for unused methods from AbstractProgrammingIntegrationIndependentTest:"
ast-grep --lang java --pattern 'class AbstractProgrammingIntegrationIndependentTest { $$$1 }' | rg 'public|protected' | while read -r method; do
    if ! rg --type java "$method" src/test/java/de/tum/cit/aet/artemis/programming/hestia/TestwiseCoverageIntegrationTest.java > /dev/null; then
        echo "Unused method: $method"
    fi
done

Length of output: 747


Script:

#!/bin/bash
# Description: Check for potential issues after changing the base class with encoding handling

# Test 1: Check if any methods from the old base class are still being used
echo "Checking for usage of methods from AbstractSpringIntegrationIndependentTest:"
rg --type java 'AbstractSpringIntegrationIndependentTest\.' src/test/java/de/tum/cit/aet/artemis/programming/hestia/TestwiseCoverageIntegrationTest.java

# Test 2: Check if any new methods from AbstractProgrammingIntegrationIndependentTest are not being used
echo "Checking for unused methods from AbstractProgrammingIntegrationIndependentTest:"
ast-grep --lang java --pattern 'class AbstractProgrammingIntegrationIndependentTest { $$$1 }' 2>/dev/null | rg 'public|protected' | while read -r method; do
    if ! rg --type java "$method" src/test/java/de/tum/cit/aet/artemis/programming/hestia/TestwiseCoverageIntegrationTest.java > /dev/null; then
        echo "Unused method: $method"
    fi
done

Length of output: 623

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseGitDiffReportServiceTest.java (4)

15-15: LGTM: Import statement added for the new base class.

The import statement for AbstractProgrammingIntegrationLocalCILocalVCTestBase has been correctly added to support the change in the class extension.


24-24: Verify the impact of the new base class.

The change to extend AbstractProgrammingIntegrationLocalCILocalVCTestBase is approved. This refactoring aligns with the PR objectives to create new abstract test classes for different test setups.

Please ensure that:

  1. All necessary setup methods from the old base class are still available or properly overridden in the new base class.
  2. The new base class provides all required utilities for the tests in this class.

Run the following script to verify the base class structure:


24-24: Verify the impact of removed @Autowired fields on test methods.

The removal of @Autowired fields aligns with the PR objectives to address scattered use of autowired components. This change is approved as it likely improves the organization of the test code.

Please ensure that:

  1. All removed services are still accessible within the test methods, either through the new base class or other means.
  2. The removal of these fields doesn't break any existing test logic.

Run the following script to verify the usage of the removed services in the test methods:


Line range hint 1-204: Summary: Refactoring aligns with PR objectives, final verification needed.

The changes in this file, including the new base class extension and removal of @Autowired fields, align well with the PR objectives to refactor programming tests and address scattered use of autowired components. The overall structure of the test methods remains intact, which is good for maintaining existing test coverage.

To ensure the refactoring doesn't introduce any regressions:

  1. Run all tests in this class to verify they still pass with the new setup.
  2. Check if any test utility methods previously used from the old base class are still accessible or properly replaced.
  3. Verify that the removed @Autowired fields don't cause any issues in the test methods' execution.

Run the following command to execute the tests in this class:

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIServiceTest.java (5)

28-28: LGTM: Class extension change aligns with PR objectives.

The change from extending AbstractSpringIntegrationLocalCILocalVCTest to AbstractProgrammingIntegrationLocalCILocalVCTest aligns well with the PR objectives of creating new abstract test classes for different test setups. This refactoring should help in better organizing the test code and managing dependencies.

Also applies to: 38-38


Line range hint 165-217: LGTM: GetCheckoutDirectoriesTests remain unchanged and valid.

The GetCheckoutDirectoriesTests nested class and its test methods remain unchanged. These tests don't rely on the removed autowired services and continue to effectively verify the behavior of the getCheckoutDirectories method for different programming languages and scenarios. This consistency is good and doesn't require any modifications in light of the other changes in the class.


Line range hint 1-218: Overall assessment: Refactoring aligns with PR objectives, but requires verification.

The refactoring of LocalCIServiceTest aligns well with the PR objectives of creating new abstract test classes and better managing dependencies. The change to extend AbstractProgrammingIntegrationLocalCILocalVCTest and the removal of several autowired services indicate a shift towards a more organized and maintainable test structure.

Key points:

  1. The core test logic remains valid and continues to cover important functionality.
  2. The removal of autowired services suggests these are now managed in the parent class, which aligns with the goal of better dependency management.
  3. The GetCheckoutDirectoriesTests nested class remains unchanged and valid.

Action items:

  1. Verify the availability of previously autowired services in the new structure, particularly for testReturnCorrectBuildStatus and testRecreateBuildPlanForExercise methods.
  2. Consider updating comments in the setUp method for clarity.

These changes contribute positively to the overall goal of refactoring the programming tests, but careful verification is needed to ensure all dependencies are correctly managed in the new structure.


Line range hint 110-131: LGTM: Test logic remains valid, but verify service availability.

The test logic in testRecreateBuildPlanForExercise remains valid and effectively tests the recreateBuildPlansForExercise method's behavior. However, like the previous test, this method still uses services that were previously autowired and have been removed from this class (e.g., programmingExerciseUtilService, exerciseUtilService, buildScriptProviderService, aeolusTemplateService).

Please verify that these services are now properly provided by the parent class AbstractProgrammingIntegrationLocalCILocalVCTest or through another mechanism to ensure the test's continued functionality.

#!/bin/bash
# Verify that the required services are available in the parent class or through another mechanism

# Check for the presence of required methods in the parent class
parent_class_file=$(fd -t f -e java AbstractProgrammingIntegrationLocalCILocalVCTest)
if [ -n "$parent_class_file" ]; then
    echo "Checking parent class for required services:"
    grep -n "protected.*Service" "$parent_class_file" || echo "No Service fields found in parent class"
    echo "---"
    grep -n "get.*Service" "$parent_class_file" || echo "No getter methods for Services found in parent class"
else
    echo "Parent class file not found"
fi

# Check for any new mechanism to provide these services in the current class
echo "Checking current class for new service provision mechanisms:"
grep -n "get.*Service" src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIServiceTest.java || echo "No new service provision mechanisms found in current class"

Line range hint 62-97: LGTM: Test logic remains valid, but verify service availability.

The test logic in testReturnCorrectBuildStatus remains valid and effectively tests the getBuildStatus method's behavior. However, the method still uses services that were previously autowired and have been removed from this class (e.g., programmingExerciseUtilService, exerciseUtilService, participationUtilService).

Please verify that these services are now properly provided by the parent class AbstractProgrammingIntegrationLocalCILocalVCTest or through another mechanism to ensure the test's continued functionality.

✅ Verification successful

Verification Complete: Services are properly inherited.

The LocalCIServiceTest class successfully inherits the required UtilService instances from its parent classes. The testReturnCorrectBuildStatus method remains valid and functional.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Verify that the required services are available in the parent class or through another mechanism

# Check for the presence of required methods in the parent class
parent_class_file=$(fd -t f -e java AbstractProgrammingIntegrationLocalCILocalVCTest)
if [ -n "$parent_class_file" ]; then
    echo "Checking parent class for required methods:"
    grep -n "protected.*UtilService" "$parent_class_file" || echo "No UtilService fields found in parent class"
    echo "---"
    grep -n "get.*UtilService" "$parent_class_file" || echo "No getter methods for UtilServices found in parent class"
else
    echo "Parent class file not found"
fi

# Check for any new mechanism to provide these services in the current class
echo "Checking current class for new service provision mechanisms:"
grep -n "get.*UtilService" src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIServiceTest.java || echo "No new service provision mechanisms found in current class"

Length of output: 2327


Script:

#!/bin/bash
# Verify that the required services are available in the parent class or through another mechanism

# Find all parent class files
parent_class_files=$(fd -t f -e java AbstractProgrammingIntegrationLocalCILocalVCTest)

if [ -n "$parent_class_files" ]; then
    for file in $parent_class_files; do
        echo "Checking parent class for required services in $file:"
        grep -n "protected.*UtilService" "$file" || echo "No UtilService fields found in $file"
        echo "---"
        grep -n "get.*UtilService" "$file" || echo "No getter methods for UtilServices found in $file"
        echo "==============================="
    done
else
    echo "Parent class file not found"
fi

# Check for any new mechanism to provide these services in the current class
current_class_file="src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIServiceTest.java"
echo "Checking current class for new service provision mechanisms in $current_class_file:"
if [ -f "$current_class_file" ]; then
    grep -n "get.*UtilService" "$current_class_file" || echo "No new service provision mechanisms found in current class"
else
    echo "Current class file not found: $current_class_file"
fi

Length of output: 3710

src/test/java/de/tum/cit/aet/artemis/programming/service/connectors/gitlab/GitLabPersonalAccessTokenManagementServiceTest.java (3)

32-36: LGTM: Class extension change aligns with PR objectives

The change from extending AbstractSpringIntegrationJenkinsGitlabTest to AbstractProgrammingIntegrationJenkinsGitlabTest aligns well with the PR objectives of creating new abstract test classes for different test setups. This refactoring should help in better organization and management of dependencies through autowiring.


Line range hint 38-255: LGTM: Adherence to coding guidelines in existing tests

The existing test methods in this file adhere well to the provided coding guidelines:

  • Test naming is descriptive (e.g., testCreateAccessToken, testRenewAccessToken)
  • JUnit 5 features are utilized (@ParameterizedTest, @CsvSource)
  • AssertJ is used for assertions (assertThat)
  • Mockito is employed for mocking
  • Tests appear to be small and specific

These practices contribute to maintainable and readable test code.


36-36: Verify service accessibility after @Autowired removal

The removal of @Autowired fields for gitLabPersonalAccessTokenManagementService, userRepository, and userUtilService aligns with the PR objectives to address scattered use of autowired components. However, please ensure that these services are still accessible within the test methods, possibly through the new abstract class AbstractProgrammingIntegrationJenkinsGitlabTest.

To verify the accessibility of these services, you can run the following script:

✅ Verification successful

Verified removal of @Autowired fields

The removal of @Autowired fields for gitLabPersonalAccessTokenManagementService, userRepository, and userUtilService has been successfully verified. These services remain accessible through the superclass AbstractProgrammingIntegrationJenkinsGitlabTest, ensuring that all test methods continue to function correctly.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if the removed @Autowired fields are accessible through the superclass or other means

# Test: Search for usage of the removed services in the test methods
echo "Searching for usage of removed services in test methods:"
rg --type java 'gitLabPersonalAccessTokenManagementService|userRepository|userUtilService' src/test/java/de/tum/cit/aet/artemis/programming/service/connectors/gitlab/GitLabPersonalAccessTokenManagementServiceTest.java

# Test: Check if these services are defined in the superclass
echo "Checking if services are defined in the superclass:"
rg --type java 'protected.*gitLabPersonalAccessTokenManagementService|protected.*userRepository|protected.*userUtilService' src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationJenkinsGitlabTest.java

Length of output: 4054

src/test/java/de/tum/cit/aet/artemis/programming/AuxiliaryRepositoryServiceTest.java (2)

Line range hint 1-189: Overall, the changes improve the test structure and align with the refactoring objectives.

The refactoring of AuxiliaryRepositoryServiceTest achieves the following improvements:

  1. Better organization: By extending AbstractProgrammingIntegrationIndependentTest, the class now uses a more specific base for programming-related tests.
  2. Improved dependency management: Removal of @Autowired fields reduces scattered use of autowired components, as mentioned in the PR objectives.
  3. Maintained test coverage: The core test methods remain unchanged, ensuring that existing functionality is still being tested.

These changes contribute to a more maintainable and organized test structure, aligning well with the goals of the pull request.


16-16: LGTM! Verify the new base class functionality.

The change to extend AbstractProgrammingIntegrationIndependentTest is appropriate for a programming-specific test class. This likely provides more tailored setup and utilities for programming exercises.

To ensure this change doesn't introduce any unexpected behavior, please verify that all necessary setup from the previous base class is still being performed, either in this class or in the new base class. Run the following command to check the new base class implementation:

✅ Verification successful

Base class functionality verified

The AbstractProgrammingIntegrationIndependentTest class extends AbstractSpringIntegrationIndependentTest, ensuring that all necessary setup and dependencies are maintained. No issues found with the class extension.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check the implementation of AbstractProgrammingIntegrationIndependentTest
# Expected result: The file should exist and contain relevant setup methods for programming exercises

rg --type java -g 'AbstractProgrammingIntegrationIndependentTest.java' -A 10 'class AbstractProgrammingIntegrationIndependentTest'

Length of output: 1618

src/test/java/de/tum/cit/aet/artemis/programming/service/GitlabCIServiceTest.java (2)

30-30: LGTM: Import statement aligns with class extension change.

The new import of AbstractProgrammingIntegrationGitlabCIGitlabSamlTest is consistent with the updated class extension. This change suggests a move towards a more integrated testing approach, which is a positive step in improving test organization.


39-39: LGTM: Class extension updated to more specific test base class.

The change from AbstractSpringIntegrationGitlabCIGitlabSamlTest to AbstractProgrammingIntegrationGitlabCIGitlabSamlTest aligns with the PR objectives of refactoring programming tests. This new base class likely provides more specific functionality for programming exercise tests, which should improve test organization and reduce code duplication.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseResultJenkinsIntegrationTest.java (3)

28-28: LGTM: Class extension change improves test specificity

The change from AbstractSpringIntegrationJenkinsGitlabTest to AbstractProgrammingIntegrationJenkinsGitlabTest aligns well with the PR objectives. This new superclass name is more descriptive and specific to programming integration tests, which should improve the organization and maintainability of the test code.


Line range hint 1-283: Overall impact of changes is positive

The changes in this file are focused on improving the test class structure and dependency management, which aligns well with the PR objectives. The key points are:

  1. The class now extends a more specific abstract test class, improving organization and maintainability.
  2. The removal of the @Autowired annotation suggests a move towards a more centralized service management approach.
  3. The test methods and their implementations remain unchanged, preserving existing test coverage.

These changes contribute to a better overall architecture while maintaining the integrity of the tests. The refactoring appears to be successful in addressing the scattered use of autowired components without disrupting the existing test logic.


Line range hint 33-39: Verify new service management approach

The removal of the @Autowired annotation for programmingExerciseResultTestService aligns with the PR objectives of reducing scattered autowired components. This change likely indicates that the service is now being managed through the new abstract superclass or a different mechanism.

Please ensure that:

  1. The programmingExerciseResultTestService is properly initialized and accessible in the new setup.
  2. The change doesn't introduce any null pointer exceptions or unintended side effects.
  3. The new approach adheres to the util_service_factory_pattern as per our coding guidelines.

To verify the new service management approach, please run the following script:

src/test/java/de/tum/cit/aet/artemis/programming/GitServiceTest.java (2)

Line range hint 1-524: Overall, the test class adheres to good practices and guidelines

The GitServiceTest class follows the provided coding guidelines and demonstrates good testing practices:

  1. Test names are descriptive and follow the convention.
  2. Tests are small and specific to individual functionalities.
  3. JUnit 5 features, including parameterized tests, are effectively utilized.
  4. Assertions use the assertThat style as recommended.
  5. The tests cover various scenarios and edge cases for the GitService.

The main change in this file is the parent class, which may affect dependency management. Ensure that all necessary dependencies are properly injected in the new setup.


42-42: Verify the impact of changing the parent class

The test class now extends AbstractProgrammingIntegrationIndependentTest instead of AbstractSpringIntegrationIndependentTest. This change suggests a more specific test setup for programming-related tests.

Please ensure that:

  1. All necessary dependencies and configurations from the previous parent class are still available in the new parent class.
  2. The new parent class doesn't introduce any conflicts with existing test methods.

Additionally, the @Autowired annotation for gitUtilService has been removed. Verify that this service is now properly injected, possibly through constructor injection in the parent class or another mechanism.

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCIntegrationTest.java (1)

32-32: Superclass change: Verify impact on existing tests

The superclass of LocalVCIntegrationTest has been changed from AbstractLocalCILocalVCIntegrationTest to AbstractProgrammingIntegrationLocalCILocalVCTestBase. This change might affect how the test class interacts with the underlying system or framework.

To ensure this change doesn't introduce any regressions:

  1. Check if all existing test methods still work as expected.
  2. Verify if any setup or teardown procedures need to be adjusted.
  3. Confirm that this change aligns with the project's overall testing strategy.

Also applies to: 39-39

src/test/java/de/tum/cit/aet/artemis/programming/service/BuildLogEntryServiceTest.java (3)

Line range hint 242-257: LGTM! Utility methods are well-implemented.

The utility methods for converting strings to BuildLogEntry objects are well-implemented. They make good use of Java 8+ features like streams, which enhances readability and conciseness.

These methods provide a convenient way to create test data, which is crucial for maintaining clean and readable tests.


20-20: Verify initialization of buildLogEntryService.

The removal of the @Autowired annotation for buildLogEntryService is noted. This change likely aligns with the new base class's dependency management approach.

Let's confirm that buildLogEntryService is properly initialized in the new context:

#!/bin/bash
# Search for the initialization of buildLogEntryService in the base class or this class
rg -t java "buildLogEntryService\s*=|protected\s+BuildLogEntryService" src/test/java

20-20: LGTM! Consider reviewing similar test classes.

The change to extend AbstractProgrammingIntegrationIndependentTest is appropriate for a programming-specific test class. This base class likely provides more relevant setup and utilities for programming-related tests.

To ensure consistency across the codebase, let's check if other similar test classes have been updated:

src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationGitlabCIGitlabSamlTest.java (1)

59-59: Service naming convention

Ensure that the service name reflects its functionality. If GitLabCIResultService processes results from GitLab CI, the naming is appropriate. Otherwise, consider renaming it for clarity.

src/test/java/de/tum/cit/aet/artemis/programming/service/connectors/jenkins/build_plan/JenkinsPipelineScriptCreatorTest.java (4)

Line range hint 25-25: Undefined courseUtilService may cause errors

In line 25, courseUtilService is used to add an empty course:

var course = courseUtilService.addEmptyCourse();

Since the @Autowired field for courseUtilService has been removed, please ensure that it is accessible from the new base class or is properly initialized to avoid undefined variable errors.


Line range hint 38-40: Usage of repositories without initialization

Lines 38-40 utilize programmingExerciseBuildConfigRepository and programmingExerciseRepository:

var savedBuildConfig = programmingExerciseBuildConfigRepository.save(programmingExercise.getBuildConfig());
programmingExercise.setBuildConfig(savedBuildConfig);
programmingExercise = programmingExerciseRepository.save(programmingExercise);

With the removal of the @Autowired fields, these repositories may not be initialized, leading to runtime exceptions. Please confirm that these repositories are available via the new base class or initialize them appropriately.


Line range hint 43-47: Undefined services used in test methods

In the testBuildPlanCreation() method, jenkinsPipelineScriptCreator and buildPlanRepository are used:

jenkinsPipelineScriptCreator.createBuildPlanForExercise(programmingExercise);
Optional<BuildPlan> optionalBuildPlan = buildPlanRepository.findByProgrammingExercises_IdWithProgrammingExercises(programmingExercise.getId());
assertThat(optionalBuildPlan).isPresent();

Since the @Autowired fields have been removed, verify that these services are provided by the new base class or are properly instantiated to prevent NullPointerException.


17-17: ⚠️ Potential issue

Ensure services are accessible in the new base class

By changing the base class to AbstractProgrammingIntegrationJenkinsGitlabTest, the @Autowired fields have been removed. Please verify that the services and repositories (courseUtilService, programmingExerciseBuildConfigRepository, programmingExerciseRepository, jenkinsPipelineScriptCreator, and buildPlanRepository) are accessible through the new base class or properly instantiated. This will prevent any NullPointerException or undefined variable errors during test execution.

src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationLocalCILocalVCTest.java (1)

29-103: The abstract test class is well-structured and aligns with the refactoring objectives

The introduction of AbstractProgrammingIntegrationLocalCILocalVCTest effectively organizes shared dependencies for programming exercise integration tests, enhancing code maintainability and clarity.

src/test/java/de/tum/cit/aet/artemis/programming/service/RepositoryAccessServiceTest.java (1)

31-31: Verify inherited dependencies from the new base class

By changing the base class to AbstractProgrammingIntegrationJenkinsGitlabTest and removing several @Autowired fields (e.g., userRepository, userUtilService, programmingExerciseRepository, repositoryAccessService, programmingExerciseGradingService), please ensure that these services are properly provided by the new base class. If these dependencies are not inherited or initialized, it could lead to NullPointerException during test execution.

src/test/java/de/tum/cit/aet/artemis/programming/BuildPlanIntegrationTest.java (1)

17-17: Update test class to extend new abstract base class

The test class now extends AbstractProgrammingIntegrationJenkinsGitlabTest, which aligns with the new test architecture and improves dependency management as outlined in the PR objectives.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/behavioral/BehavioralTestCaseServiceLocalCILocalVCTest.java (1)

15-15: Verify the compatibility of the new base class and class name

The test class BehavioralTestCaseServiceLocalCILocalVCTest now extends AbstractProgrammingIntegrationLocalCILocalVCTestBase (line 28), and the import statement reflects this change (line 15). Please ensure that this new base class provides all the required functionalities and aligns with the intended testing setup for behavioral tests. Additionally, confirm that the class name is descriptive and follows the project's naming conventions for test classes.

Also applies to: 28-28

src/test/java/de/tum/cit/aet/artemis/programming/hestia/CodeHintIntegrationTest.java (2)

16-16: Import statement updated appropriately

The import of AbstractProgrammingIntegrationIndependentTest aligns with the updated inheritance and is necessary for the test class.


22-22: Verify compatibility with new base class AbstractProgrammingIntegrationIndependentTest

The test class now extends AbstractProgrammingIntegrationIndependentTest instead of AbstractSpringIntegrationIndependentTest. Ensure that this change maintains the desired test context and that all required beans and configurations are properly initialized. This change might affect the initialization of @Autowired components or the application context in your tests.

src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationIndependentTest.java (1)

48-180: Class structure and naming are appropriate

The AbstractProgrammingIntegrationIndependentTest class is well-structured and follows descriptive naming conventions. Extending AbstractSpringIntegrationIndependentTest aligns with the project's architecture for integration tests.

src/test/java/de/tum/cit/aet/artemis/programming/GitlabServiceTest.java (1)

34-34: Extending the appropriate abstract test class

The test class GitlabServiceTest now extends AbstractProgrammingIntegrationJenkinsGitlabTest instead of AbstractSpringIntegrationJenkinsGitlabTest. This change aligns with the refactoring objectives to improve the test structure and organization.

src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationJenkinsGitlabTest.java (1)

173-209: 🛠️ Refactor suggestion

Ensure proper use of utility services following the factory pattern

Several utility services are autowired in this test class (e.g., CourseUtilService, ExerciseUtilService, UserUtilService). According to the coding guidelines, we should adhere to the util_service_factory_pattern (util_service_factory_pattern: true) to manage dependencies effectively.

Please verify that these utility services are used appropriately within the tests and consider refactoring to instantiate them using a factory pattern if not already done. This approach enhances modularity and reusability, and aligns with best practices.

src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationLocalCILocalVCTestBase.java (1)

1-1: Ensure package change adheres to architectural guidelines

The package declaration has been changed from de.tum.cit.aet.artemis.programming.icl to de.tum.cit.aet.artemis.programming. Please verify that this change aligns with the project's package structure and complies with the architectural constraints enforced by ArchUnit tests (archunit_use: enforce_package_rules).

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseRepositoryServiceTest.java (1)

17-17: Verify dependency initialization after changing the base class

By changing the base class from AbstractSpringIntegrationIndependentTest to AbstractProgrammingIntegrationIndependentTest, ensure that all necessary dependencies and configurations are properly inherited. Since several @Autowired fields have been removed, please confirm that the new base class provides the required services and that the tests continue to function correctly without additional modifications.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseTaskIntegrationTest.java (5)

18-18: Appropriate extension of AbstractProgrammingIntegrationIndependentTest

Changing the base class from AbstractSpringIntegrationIndependentTest to AbstractProgrammingIntegrationIndependentTest aligns with the refactoring objectives outlined in the PR. This change facilitates better organization of test code for different setups and is consistent with the project's testing architecture.

Also applies to: 24-24


Line range hint 117-140: Consider verifying the correctness of task extraction logic

The test testTaskExtractionForProgrammingExercise() includes complex logic for extracting tasks and associating test cases. Ensure that all possible edge cases are covered, and consider adding assertions to verify the completeness and accuracy of the task extraction process.

Would you like assistance in reviewing the test coverage or enhancing the assertions to cover additional scenarios?


142-142: Confirm that empty problem statements are handled correctly

In testTaskExtractionForEmptyProblemStatement(), the assertion checks that taskRepository.findByExerciseId(programmingExercise.getId()) is empty. Ensure that this behavior is expected and that the system appropriately handles exercises with empty problem statements without causing unintended side effects.


38-38: Ensure testCaseRepository and programmingExerciseSolutionEntryRepository are properly initialized

The repositories testCaseRepository and programmingExerciseSolutionEntryRepository are used but not declared within this class. Verify that these repositories are inherited from AbstractProgrammingIntegrationIndependentTest or another superclass. If not, they should be declared and initialized to prevent potential NullPointerException.

Run the following script to verify if these repositories are declared in AbstractProgrammingIntegrationIndependentTest:

✅ Verification successful

testCaseRepository and programmingExerciseSolutionEntryRepository are properly initialized through inheritance.

No further action is needed.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that 'testCaseRepository' and 'programmingExerciseSolutionEntryRepository' are declared in 'AbstractProgrammingIntegrationIndependentTest'

# Find the file 'AbstractProgrammingIntegrationIndependentTest.java'
file=$(fd 'AbstractProgrammingIntegrationIndependentTest.java' --type f)

# Search for the declarations of the repositories in the file
if [[ -n "$file" ]]; then
  echo "Searching for 'testCaseRepository'..."
  rg 'protected\s+\w+\s+testCaseRepository;' "$file"
  echo "Searching for 'programmingExerciseSolutionEntryRepository'..."
  rg 'protected\s+\w+\s+programmingExerciseSolutionEntryRepository;' "$file"
else
  echo "AbstractProgrammingIntegrationIndependentTest.java not found"
fi

Length of output: 1004


80-80: Ensure taskRepository is properly initialized

The taskRepository is used in multiple locations but is not declared within this class. Confirm that taskRepository is inherited from AbstractProgrammingIntegrationIndependentTest or appropriately declared in this class to prevent any runtime issues.

Run the following script to verify if taskRepository is declared in AbstractProgrammingIntegrationIndependentTest:

Also applies to: 83-83, 117-117, 142-142

✅ Verification successful

Verification Successful: taskRepository is properly initialized via inheritance.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that 'taskRepository' is declared in 'AbstractProgrammingIntegrationIndependentTest'

# Find the file 'AbstractProgrammingIntegrationIndependentTest.java'
file=$(fd 'AbstractProgrammingIntegrationIndependentTest.java' --type f)

# Search for the declaration of 'taskRepository' in the file
if [[ -n "$file" ]]; then
  rg 'protected\s+\w+\s+taskRepository;' "$file"
else
  echo "AbstractProgrammingIntegrationIndependentTest.java not found"
fi

Length of output: 488


Script:

#!/bin/bash
# Description: Verify that 'ProgrammingExerciseTaskIntegrationTest' extends 'AbstractProgrammingIntegrationIndependentTest'

# Find the file 'ProgrammingExerciseTaskIntegrationTest.java'
file=$(fd 'ProgrammingExerciseTaskIntegrationTest.java' --type f)

# Search for the inheritance declaration
if [[ -n "$file" ]]; then
  rg 'class\s+ProgrammingExerciseTaskIntegrationTest\s+extends\s+AbstractProgrammingIntegrationIndependentTest' "$file"
else
  echo "ProgrammingExerciseTaskIntegrationTest.java not found"
fi

Length of output: 589

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseGitDiffReportIntegrationTest.java (2)

14-14: Import the new abstract test base class

The import of AbstractProgrammingIntegrationLocalCILocalVCTestBase is appropriate and aligns with the refactoring efforts to improve test code structure.


24-24: Update the base class to enhance test organization

Changing the base class to AbstractProgrammingIntegrationLocalCILocalVCTestBase reflects the PR objective of creating tailored abstract test classes for different setups. This change enhances the organization and dependency management within the test code.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/CodeHintServiceTest.java (1)

20-20: Ensure the new superclass provides necessary configurations

By changing the superclass from AbstractSpringIntegrationIndependentTest to AbstractProgrammingIntegrationIndependentTest, please verify that all required configurations, beans, and dependencies are correctly set up for the tests. This change may affect the Spring context initialization and the availability of necessary components.

Also applies to: 29-29

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseSolutionEntryIntegrationTest.java (1)

14-14: Update of superclass aligns with refactoring objectives

Changing the superclass to AbstractProgrammingIntegrationIndependentTest is appropriate and aligns with the refactoring goals stated in the PR objectives. This change ensures that the test class benefits from the new structure tailored for programming exercises.

Also applies to: 21-21

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTest.java (3)

39-39: Update base class to improve test specificity

The test class now extends AbstractProgrammingIntegrationJenkinsGitlabTest, which is more appropriate for programming exercise integration tests involving Jenkins and GitLab. This change enhances the test's alignment with its specific testing context.


139-139: Refactor repository usage to testCaseRepository

The repository reference has been updated from programmingExerciseTestCaseRepository to testCaseRepository. This change promotes consistency in dependency management and aligns with the refactoring goals outlined in the PR.


167-169: Consistent use of testCaseRepository for test cases

The code now uses testCaseRepository to retrieve and save test cases, ensuring consistency across the test class after the refactoring.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ExerciseHintServiceTest.java (1)

21-29: Update test class to use new abstract test base class

Changing the superclass to AbstractProgrammingIntegrationIndependentTest and updating the import statement align with the refactoring goals mentioned in the PR objectives. This promotes better test organization and dependency management for programming exercises.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTemplateIntegrationTest.java (3)

61-61: Verify the Change of Base Class

The class now extends AbstractProgrammingIntegrationJenkinsGitlabTest instead of AbstractSpringIntegrationJenkinsGitlabTest. Ensure that the new base class provides all the necessary setup and dependencies required for this test. This change might affect the test execution environment and injected services.


Line range hint 218-224: Potential Resource Leak in moveAssignmentSourcesOf Method

The method uses FileUtils.moveDirectory, which can throw an IOException. Ensure that resources are properly closed or handled in case of exceptions.

Review the method to ensure that any opened resources are properly closed even if an exception occurs.


Line range hint 243-249: Enum TestResult Might Need Additional Test Cases

The TestResult enum maps the results from ReportTestCase. Ensure that all possible test case outcomes are accounted for.

Add tests to confirm that all possible test results are correctly mapped, especially if ReportTestCase behavior changes.

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIResourceIntegrationTest.java (2)

32-32: Verify the compatibility of the new base class

The test class now imports AbstractProgrammingIntegrationLocalCILocalVCTestBase (line 32), replacing the previous base class. Ensure that this new base class provides all the necessary configurations and dependencies required for the tests. This change might affect the test setup and execution.

To confirm, please run the full test suite and check for any failures or unexpected behavior.


38-38: Ensure the new superclass supports all test requirements

Changing the superclass to AbstractProgrammingIntegrationLocalCILocalVCTestBase (line 38) may impact inherited methods and test utilities. Verify that all inherited methods function correctly and that no essential functionality from the previous superclass is missing.

Consider reviewing the methods provided by the new superclass to ensure they align with the test cases in this class.

src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsServiceTest.java (1)

41-41: Update class inheritance to new abstract test class

The class JenkinsServiceTest now extends AbstractProgrammingIntegrationJenkinsGitlabTest, which aligns with the new test architecture focused on programming exercises. This change improves test setup and organization.

src/test/java/de/tum/cit/aet/artemis/programming/service/ProgrammingExerciseFeedbackCreationServiceTest.java (2)

19-19: Import Statement is Appropriate

The added import statement for AbstractProgrammingIntegrationIndependentTest is correct and necessary for the new class inheritance.


31-31: Extending the Updated Base Test Class

Changing the base class to AbstractProgrammingIntegrationIndependentTest aligns with the refactoring goals and the new test structure.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseServiceIntegrationTest.java (1)

29-29: 💡 Codebase verification

⚠️ Potential issue

Missing service declarations in the new superclass

The services UserUtilService, ExerciseUtilService, and CourseUtilService are not declared in AbstractProgrammingIntegrationLocalCILocalVCTest. Please ensure these services are declared either in the superclass or within ProgrammingExerciseServiceIntegrationTest to prevent potential NullPointerException or compilation errors.

🔗 Analysis chain

Verify the accessibility of required services after changing the superclass

Changing the superclass from AbstractSpringIntegrationLocalCILocalVCTest to AbstractProgrammingIntegrationLocalCILocalVCTest may affect the availability of certain services used within this test class. Specifically, services like userUtilService, programmingExerciseUtilService, exerciseUtilService, courseUtilService, and pageableSearchUtilService are utilized but their declarations are not present in this class anymore.

Please ensure that these services are appropriately provided by the new superclass or are declared in this class to prevent NullPointerException or compilation errors.

Run the following script to verify that the required services are accessible through the new superclass:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that the required services are declared in the new superclass.

# Expected result: Declarations of the services are found in the superclass.

# Find the superclass file
SUPERCLASS_FILE=$(fd 'AbstractProgrammingIntegrationLocalCILocalVCTest.java' src/test/java)

if [ -n "$SUPERCLASS_FILE" ]; then
  echo "Found superclass file: $SUPERCLASS_FILE"
  echo "Checking for service declarations..."

  # Check for declarations of the required services
  rg 'protected\s+UserUtilService\s+userUtilService;' "$SUPERCLASS_FILE"
  rg 'protected\s+ProgrammingExerciseUtilService\s+programmingExerciseUtilService;' "$SUPERCLASS_FILE"
  rg 'protected\s+ExerciseUtilService\s+exerciseUtilService;' "$SUPERCLASS_FILE"
  rg 'protected\s+CourseUtilService\s+courseUtilService;' "$SUPERCLASS_FILE"
  rg 'protected\s+PageableSearchUtilService\s+pageableSearchUtilService;' "$SUPERCLASS_FILE"

else
  echo "Superclass file not found."
fi

Length of output: 1645

⛔ Skipped due to learnings
Learnt from: Hialus
PR: ls1intum/Artemis#7451
File: src/test/java/de/tum/in/www1/artemis/exercise/programmingexercise/ProgrammingExerciseTestService.java:9-9
Timestamp: 2024-10-08T15:35:48.767Z
Learning: The use of wildcard imports is acceptable in this project as specified in the `.editorconfig` file.
Learnt from: Hialus
PR: ls1intum/Artemis#7451
File: src/test/java/de/tum/in/www1/artemis/exercise/programmingexercise/ProgrammingExerciseTestService.java:9-9
Timestamp: 2024-01-19T15:49:43.303Z
Learning: The use of wildcard imports is acceptable in this project as specified in the `.editorconfig` file.
src/test/java/de/tum/cit/aet/artemis/programming/icl/ProgrammingExerciseLocalVCLocalCIIntegrationTest.java (2)

35-35: Import updated to reflect new base class

The import statement for AbstractProgrammingIntegrationLocalCILocalVCTest is correctly updated to match the new abstract test class.


58-58: Class now extends the appropriate abstract test class

The test class now extends AbstractProgrammingIntegrationLocalCILocalVCTest, which aligns with the refactoring to use specialized abstract test classes tailored for different test setups.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseTaskServiceTest.java (2)

16-16: Verify the impact of changing the superclass

The test class now extends AbstractProgrammingIntegrationIndependentTest instead of AbstractSpringIntegrationIndependentTest. Please ensure that this change aligns with the intended refactoring objectives and that all necessary configurations, bean injections, and test contexts are correctly handled with the new superclass.

Also applies to: 22-22


Line range hint 139-149: Ensure proper cleanup of dependent entities

When deleting a ProgrammingExerciseTask that has associated CodeHint entities, it's important to ensure all related data is cleanly removed to prevent orphaned records. The code correctly deletes the task and checks that codeHintRepository is empty.

However, double-check that cascading deletes or manual cleanup are properly configured to handle any additional related entities that might not be covered.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ExerciseHintIntegrationTest.java (2)

23-23: Import statement updated appropriately

The import of AbstractProgrammingIntegrationIndependentTest aligns with the new inheritance structure and supports the refactoring goals.


32-32: Class now extends the correct abstract test class

Updating the class to extend AbstractProgrammingIntegrationIndependentTest reflects the intended architectural changes and ensures consistency with the new test framework.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingSubmissionAndResultGitlabJenkinsIntegrationTest.java (1)

41-41: Updated base class aligns with refactored test architecture

Changing the base class to AbstractProgrammingIntegrationJenkinsGitlabTest aligns the test with the new abstract classes designed for specific test setups. This enhances code organization and maintainability in accordance with the refactoring objectives.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/StructuralTestCaseServiceTest.java (1)

16-16: Refactoring to New Base Test Class Confirmed

The test class now extends AbstractProgrammingIntegrationLocalCILocalVCTestBase, and the import statement has been updated accordingly. This change is in line with the PR objectives to create new abstract test classes and enhances the organization of the test code.

Also applies to: 28-28

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIIntegrationTest.java (3)

58-58: Approved Import Change

The addition of the import statement for AbstractProgrammingIntegrationLocalCILocalVCTestBase is necessary due to the change in the base class. This aligns with the refactoring objectives mentioned in the PR.


77-77: Update Base Class to Enhance Test Architecture

Changing the base class to AbstractProgrammingIntegrationLocalCILocalVCTestBase reflects the new test architecture and improves the organization of integration tests as per the PR objectives.


Line range hint 88-92: Ensure 'localVCUsername' and 'localVCPassword' Are Accessible

In the setupAll() method, the variables localVCUsername and localVCPassword are being used but are not declared within this class. Since the @Value annotations and fields were removed, please verify that these variables are properly inherited from the new base class AbstractProgrammingIntegrationLocalCILocalVCTestBase or defined elsewhere to prevent potential NullPointerException.

src/test/java/de/tum/cit/aet/artemis/programming/SubmissionPolicyIntegrationTest.java (5)

34-34: Appropriate superclass change to AbstractProgrammingIntegrationJenkinsGitlabTest

Changing the superclass to AbstractProgrammingIntegrationJenkinsGitlabTest aligns the test class with the new test architecture. This superclass likely provides the necessary configurations and utility services for programming integration tests with Jenkins and GitLab, streamlining dependencies and adhering to the project's testing framework.


Line range hint 261-261: Check usage of programmingExerciseUtilService

The programmingExerciseUtilService has been removed but is still referenced in methods like addSubmissionPolicyToExercise:

programmingExerciseUtilService.addSubmissionPolicyToExercise(policy, programmingExercise);

Ensure that this utility service is accessible through the new superclass or refactor the code to correctly initialize and use the required services.

Run the following script to verify if programmingExerciseUtilService is defined in the class hierarchy:

#!/bin/bash
# Description: Verify if `programmingExerciseUtilService` is defined in a superclass.

# Test: Search for the field definition in superclass hierarchy.
# Expected: `programmingExerciseUtilService` field should be defined in a superclass.

ast-grep --lang java --pattern $'class $_ {
  $$$
  protected ProgrammingExerciseUtilService programmingExerciseUtilService;
  $$$
}'

Line range hint 271-271: Ensure participationUtilService is available

The participationUtilService is still being used in methods like addAnySubmissionPolicyToExercise:

participationUtilService.addSubmission(participation, submission);

Please verify that participationUtilService is properly initialized, possibly via the new superclass, to prevent null references and compilation issues.

Run the following script to verify if participationUtilService is defined in the class hierarchy:

#!/bin/bash
# Description: Verify if `participationUtilService` is defined in a superclass.

# Test: Search for the field definition in superclass hierarchy.
# Expected: `participationUtilService` field should be defined in a superclass.

ast-grep --lang java --pattern $'class $_ {
  $$$
  protected ParticipationUtilService participationUtilService;
  $$$
}'

Line range hint 222-222: Potential undefined references to removed @Autowired fields

The @Autowired fields such as programmingExerciseRepository, programmingExerciseUtilService, participationUtilService, and gradingService have been removed, but methods in the test class still reference them. For example, programmingExerciseRepository is used in test_enforceSubmissionPenaltyPolicyOnStudentParticipation:

programmingExerciseRepository.save(programmingExercise);

Please verify that these dependencies are now provided by the new superclass AbstractProgrammingIntegrationJenkinsGitlabTest or adjust the code to access these services appropriately to avoid compilation errors.

Run the following script to verify if programmingExerciseRepository is defined in the class hierarchy:


Line range hint 164-164: Verify accessibility of gradingService

The gradingService has been removed but is still used in tests like test_enforceLockRepositoryPolicyOnStudentParticipation:

var result = gradingService.processNewProgrammingExerciseResult(participation, resultRequestBody);

Ensure that gradingService is accessible and properly initialized to avoid compilation errors and ensure test correctness.

Run the following script to verify if gradingService is defined in the class hierarchy:

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseScheduleServiceTest.java (1)

45-45: Base class updated to new abstract test class

The test class now extends AbstractProgrammingIntegrationGitlabCIGitlabSamlTest instead of AbstractSpringIntegrationGitlabCIGitlabSamlTest. This change aligns with the PR objectives to create new abstract test classes tailored for different test setups, enhancing the organization and maintainability of the test code.

src/test/java/de/tum/cit/aet/artemis/programming/CourseGitlabJenkinsIntegrationTest.java (2)

Line range hint 29-269: Tests should be small and specific

The test methods in this class delegate to methods in courseTestService. Ensure that each test is small and specific as per the coding guidelines. Consider whether the delegation is necessary or if the tests can be directly implemented here to improve clarity and maintainability.


24-24: Verify dependency injection after changing the superclass

The class now extends AbstractProgrammingIntegrationJenkinsGitlabTest instead of AbstractSpringIntegrationJenkinsGitlabTest. Ensure that all required beans and services (e.g., courseTestService, programmingExerciseRepository, objectMapper, programmingExerciseUtilService) are correctly provided by the new superclass or properly instantiated. This change should not affect the functionality of the tests.

To confirm that the dependencies are correctly managed, you can check for the declarations of these services in the superclass:

✅ Verification successful

Dependency Injection Verified Successfully

All required services (CourseTestService, ProgrammingExerciseTestRepository, ObjectMapper, ProgrammingExerciseUtilService) are correctly provided by the new superclass AbstractProgrammingIntegrationJenkinsGitlabTest. The change does not affect the functionality of the tests.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that the new superclass provides the necessary services.

# Test: Search for field declarations of the required services in the superclass.
# Expect: The services should be declared in the superclass.

fd 'AbstractProgrammingIntegrationJenkinsGitlabTest.java' --type file --exec cat {} \| \
    rg --multiline 'protected\s+(CourseTestService|ProgrammingExerciseTestRepository|ObjectMapper|ProgrammingExerciseUtilService)\s+\w+;'

Length of output: 301


Script:

#!/bin/bash
# Description: Verify that the new superclass provides the necessary services.

# Test: Search for field declarations of the required services in the superclass.
# Expect: The services should be declared in the superclass.

fd 'AbstractProgrammingIntegrationJenkinsGitlabTest.java' --type file --exec cat {} | \
    rg 'protected\s+(CourseTestService|ProgrammingExerciseTestRepository|ObjectMapper|ProgrammingExerciseUtilService)\s+\w+;'

Length of output: 457

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseIntegrationJenkinsGitlabTest.java (1)

25-25: Verify that dependencies are correctly inherited from the new superclass

Changing the superclass to AbstractProgrammingIntegrationJenkinsGitlabTest modifies how dependencies are injected. Ensure that all required services, such as programmingExerciseIntegrationTestService, are properly declared and initialized in the new superclass to prevent NullPointerException and maintain the functionality of the test methods.

Run the following script to verify that programmingExerciseIntegrationTestService is declared in the new superclass:

✅ Verification successful

Dependencies are correctly inherited from the new superclass.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that programmingExerciseIntegrationTestService is declared in the superclass.

# Expected: The superclass declares programmingExerciseIntegrationTestService.

ast-grep --lang java --pattern $'
class AbstractProgrammingIntegrationJenkinsGitlabTest extends $_ {
    $$$
    protected ProgrammingExerciseIntegrationTestService programmingExerciseIntegrationTestService;
    $$$
}'

Length of output: 343


Script:

#!/bin/bash
# Description: Verify that programmingExerciseIntegrationTestService is declared in AbstractProgrammingIntegrationJenkinsGitlabTest.java.

# Expected: The superclass declares programmingExerciseIntegrationTestService.

rg 'protected ProgrammingExerciseIntegrationTestService programmingExerciseIntegrationTestService;' src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationJenkinsGitlabTest.java

Length of output: 302

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseParticipationIntegrationTest.java (1)

40-40: Change of base class to AbstractProgrammingIntegrationIndependentTest is appropriate.

Switching the base class from AbstractSpringIntegrationIndependentTest to AbstractProgrammingIntegrationIndependentTest aligns the test class with the new testing strategy outlined in the PR objectives. This enhances the organization of the test code and allows for better management of dependencies, improving maintainability and consistency across programming exercise tests.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingSubmissionIntegrationTest.java (1)

59-59: Class Extension Updated Correctly

The test class now extends AbstractProgrammingIntegrationJenkinsGitlabTest instead of AbstractSpringIntegrationJenkinsGitlabTest. This change aligns with the refactoring efforts to enhance the test architecture.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingAssessmentIntegrationTest.java (1)

55-55: Change of base test class aligns with refactoring goals

Updating the base class from AbstractSpringIntegrationIndependentTest to AbstractProgrammingIntegrationIndependentTest enhances test specificity and reflects the refactoring towards better test organization for programming exercises.

src/test/java/de/tum/cit/aet/artemis/programming/RepositoryIntegrationTest.java (1)

82-82: Verify the impact of changing the base class on test functionality.

The class now extends AbstractProgrammingIntegrationJenkinsGitlabTest instead of AbstractSpringIntegrationJenkinsGitlabTest. Ensure that all necessary configurations, dependencies, and initializations required by the tests are provided by the new base class to avoid any unintended side effects.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTestCaseServiceTest.java (1)

31-31: Update class extension to match new test architecture

The class now extends AbstractProgrammingIntegrationLocalCILocalVCTest. Ensure that this change aligns with the new test class hierarchy introduced in the refactoring. Verify that all necessary setup methods and utilities are correctly inherited from the new superclass.

Run the following script to confirm that the superclass AbstractProgrammingIntegrationLocalCILocalVCTest provides all required methods and fields:

src/test/java/de/tum/cit/aet/artemis/programming/hestia/HestiaDatabaseTest.java (14)

13-25: Appropriate extension to the new abstract test class

The class now extends AbstractProgrammingIntegrationIndependentTest, which aligns with the refactoring objectives to use new abstract test classes for different test setups. This change adheres to the updated testing framework.


62-62: Avoid direct database queries in assertions

Per the coding guidelines (avoid_db_access: true), direct database queries in tests should be avoided. Consider verifying expected behavior through the service layer or using mocks to assert the test outcomes.


69-69: Duplicate issue regarding direct database access

As previously noted, please avoid direct database queries in tests. This practice aligns with the guideline to avoid database access in tests (avoid_db_access: true).


76-76: Duplicate issue regarding direct database access

As mentioned earlier, tests should not perform direct database queries. Consider using mocks or utility services instead.


88-89: Duplicate issue regarding direct database access in assertions

Please avoid direct database queries in assertions. Aligning with the coding guidelines will improve test performance and reliability.


96-96: Duplicate issue regarding direct database access

Avoid direct calls to the database in tests. Utilize the appropriate service methods or mocks as per the guidelines.


100-102: Duplicate issue regarding direct database access

Direct database operations in tests should be replaced with utility services or mocked interactions to adhere to the coding standards.


109-109: Duplicate issue regarding direct database access

Consistent with previous comments, avoid direct database queries in tests.


113-113: Duplicate issue regarding direct database access

Please use utility services or mocks instead of direct database access.


132-132: Duplicate issue regarding direct database access

Remember to avoid direct database interactions in tests as per the guidelines.


142-143: Duplicate issue regarding direct database access

Direct database queries should be avoided in tests. Refer to earlier comments for guidance.


150-153: Duplicate issue regarding direct database access

Avoiding direct database access in tests will help maintain test isolation and speed.


159-160: Duplicate issue regarding direct database access

Please refrain from direct database operations in tests.


162-162: Duplicate issue regarding direct database access

Ensure consistency with coding guidelines by avoiding direct database queries.

Comment on lines +16 to +17
protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
return Set.of(AbstractAtlasIntegrationTest.class);
Copy link

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

LGTM: Method updated to support multiple abstract test classes.

The change from returning a single Class<AbstractAtlasIntegrationTest> to a Set<Class<?>> allows for greater flexibility in the test architecture, aligning with the PR objectives. The implementation using Set.of() is concise and appropriate.

Consider using a more extensible approach for future additions:

@Override
protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
    return new HashSet<>(Arrays.asList(
        AbstractAtlasIntegrationTest.class
        // Add more classes here as needed
    ));
}

This structure will make it easier to add more test classes in the future without changing the method signature.

Comment on lines +16 to +17
protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
return Set.of(AbstractFileUploadIntegrationTest.class);
Copy link

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

LGTM: Method update enhances flexibility. Consider a minor naming improvement.

The changes to the getAbstractModuleIntegrationTestClasses() method improve the flexibility of the test architecture by allowing multiple integration test classes. The implementation is correct and adheres to the coding guidelines.

Consider renaming the method to getAbstractModuleIntegrationTestClassSet() to be more explicit about the return type. This would improve code readability and maintain consistency with Java naming conventions for methods returning collections.

-    protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
+    protected Set<Class<?>> getAbstractModuleIntegrationTestClassSet() {
         return Set.of(AbstractFileUploadIntegrationTest.class);
     }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
return Set.of(AbstractFileUploadIntegrationTest.class);
protected Set<Class<?>> getAbstractModuleIntegrationTestClassSet() {
return Set.of(AbstractFileUploadIntegrationTest.class);

Comment on lines +19 to +30
@Override
protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
// @formatter:off
return Set.of(
AbstractProgrammingIntegrationGitlabCIGitlabSamlTest.class,
AbstractProgrammingIntegrationIndependentTest.class,
AbstractProgrammingIntegrationJenkinsGitlabTest.class,
AbstractProgrammingIntegrationLocalCILocalVCTest.class,
AbstractProgrammingIntegrationLocalCILocalVCTestBase.class
);
// @formatter:on
}
Copy link

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

LGTM: getAbstractModuleIntegrationTestClasses() method is well-implemented.

The method correctly returns a set of abstract integration test classes for the programming module. The use of Set.of() is an efficient way to create an immutable set, adhering to the util service factory pattern guideline.

Consider adding a brief comment explaining the purpose of each included test class to improve code readability and maintainability. For example:

@Override
protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
    // @formatter:off
    return Set.of(
        AbstractProgrammingIntegrationGitlabCIGitlabSamlTest.class,  // Tests for GitLab CI with SAML
        AbstractProgrammingIntegrationIndependentTest.class,         // Independent integration tests
        AbstractProgrammingIntegrationJenkinsGitlabTest.class,       // Tests for Jenkins with GitLab
        AbstractProgrammingIntegrationLocalCILocalVCTest.class,      // Tests for local CI and VC
        AbstractProgrammingIntegrationLocalCILocalVCTestBase.class   // Base class for local CI and VC tests
    );
    // @formatter:on
}


@Autowired
private ConsistencyCheckTestService consistencyCheckTestService;
class ConsistencyCheckGitlabJenkinsIntegrationTest extends AbstractProgrammingIntegrationJenkinsGitlabTest {
Copy link

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

LGTM! Consider adding a brief class-level Javadoc.

The change to extend AbstractProgrammingIntegrationJenkinsGitlabTest aligns with the PR objectives of refactoring the test structure. The removal of the @Autowired annotation suggests that dependency injection is now handled in the superclass, which is a good practice for reducing duplication.

To further improve the code:

Consider adding a brief class-level Javadoc comment to describe the purpose of this test class and its relationship to the new abstract test hierarchy.


class LocalVCServiceTest extends AbstractSpringIntegrationLocalCILocalVCTest {
class LocalVCServiceTest extends AbstractProgrammingIntegrationLocalCILocalVCTest {
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

Issues Found: Missing @Autowired Annotations in New Base Class

The new base class AbstractProgrammingIntegrationLocalCILocalVCTest does not contain any @Autowired annotations. This suggests that dependencies previously managed by @Autowired in LocalVCServiceTest may no longer be injected, potentially leading to test failures or incomplete setups.

  • File Affected: src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationLocalCILocalVCTest.java

Please verify that dependency injection is correctly handled in the new base class to ensure all tests function as expected.

🔗 Analysis chain

LGTM: Class extension updated and dependencies simplified.

The change to extend AbstractProgrammingIntegrationLocalCILocalVCTest aligns with the PR objectives to refactor and improve the organization of test code. The removal of @Autowired fields suggests that these dependencies are now managed in the new base class, which should simplify the test setup.

To ensure that the refactoring hasn't inadvertently affected test coverage, please run the following command:


To ensure that the new base class AbstractProgrammingIntegrationLocalCILocalVCTest properly manages dependencies, please run the following command:


To confirm that the @Autowired annotations are present in the new base class AbstractProgrammingIntegrationLocalCILocalVCTest, please execute the following command:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify test coverage for LocalVCServiceTest

# Test: Check if all test methods are still present and being executed
rg --type java -n "void test" src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCServiceTest.java

# Test: Verify that the new base class contains the necessary setup
ast-grep --lang java --pattern 'class AbstractProgrammingIntegrationLocalCILocalVCTest {
  $$$
  @Autowired
  $$$
}'

Length of output: 494


Script:

# 
#!/bin/bash
# Description: Verify @Autowired annotations in AbstractProgrammingIntegrationLocalCILocalVCTest

# Locate the file defining the new base class
fd --type f --search-path src/test/java "AbstractProgrammingIntegrationLocalCILocalVCTest.java" | while read -r file; do
  ast-grep --lang java --pattern 'class AbstractProgrammingIntegrationLocalCILocalVCTest {
    $$$
    @Autowired
    $$$
  }' "$file"
done

Length of output: 355


Script:

# 
#!/bin/bash
# Description: Verify presence of @Autowired annotations in AbstractProgrammingIntegrationLocalCILocalVCTest

# Locate and search for @Autowired in the new base class
rg "@Autowired" $(fd --type f --search-path src/test/java "AbstractProgrammingIntegrationLocalCILocalVCTest.java")

Length of output: 500

@@ -394,7 +357,7 @@
submission.setCommitHash(TestConstants.COMMIT_HASH_STRING);
submission.setType(SubmissionType.MANUAL);
submission = programmingExerciseUtilService.addProgrammingSubmission(exercise, submission, TEST_PREFIX + "student1");
var optionalParticipation = programmingExerciseStudentParticipationRepository.findById(submission.getParticipation().getId());
var optionalParticipation = participationRepository.findById(submission.getParticipation().getId());
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

⚠️ Potential issue

Avoid Direct Database Access in Tests

The test accesses the database directly using participationRepository.findById(...). According to the coding guidelines, tests should avoid direct DB access. Consider using utility services or mocks instead to manage participations.

Apply this refactor:

-var optionalParticipation = participationRepository.findById(submission.getParticipation().getId());
+var participation = participationUtilService.findParticipationById(submission.getParticipation().getId());

Note: Use the appropriate method from participationUtilService to retrieve the participation without direct DB access.

Committable suggestion was skipped due to low confidence.

@@ -1011,7 +965,7 @@ void overrideProgrammingAssessmentAfterComplaint() throws Exception {
void unlockFeedbackRequestAfterAssessment() throws Exception {
programmingExercise.setAllowFeedbackRequests(true);
programmingExercise.setDueDate(ZonedDateTime.now().plusDays(1));
exerciseRepository.save(programmingExercise);
programmingExerciseRepository.save(programmingExercise);
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Avoid direct database access in tests

According to the coding guidelines (avoid_db_access: true), tests should minimize direct interactions with the database. The call to programmingExerciseRepository.save(programmingExercise); introduces a database operation. Consider using test utilities or mocks to manage the programmingExercise state within the test context.

@@ -1081,7 +1027,7 @@ void testCommitChangesNotAllowedForLockedParticipation() throws Exception {
programmingExercise.setReleaseDate(ZonedDateTime.now().minusHours(2));
programmingExercise.setDueDate(ZonedDateTime.now().minusHours(1));
programmingExerciseRepository.save(programmingExercise);
this.programmingExerciseStudentParticipationRepository.updateLockedById(participation.getId(), true);
participationRepository.updateLockedById(participation.getId(), true);
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Avoid direct repository access in tests; use service methods to update participation lock status.

According to the coding guidelines, tests should avoid direct database access and use service layer methods instead. Replace the direct call to participationRepository.updateLockedById(...) with an appropriate service method to maintain consistency and adhere to best practices.

Apply this diff to address the issue:

- participationRepository.updateLockedById(participation.getId(), true);
+ programmingExerciseParticipationService.lockStudentRepositoryAndParticipation(programmingExercise, participation);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
participationRepository.updateLockedById(participation.getId(), true);
programmingExerciseParticipationService.lockStudentRepositoryAndParticipation(programmingExercise, participation);

@@ -1104,7 +1050,7 @@
programmingExercise.setReleaseDate(ZonedDateTime.now().minusHours(2));
programmingExercise.setDueDate(ZonedDateTime.now().minusHours(1));
programmingExerciseRepository.save(programmingExercise);
this.programmingExerciseStudentParticipationRepository.updateLockedById(participation.getId(), true);
participationRepository.updateLockedById(participation.getId(), true);
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Avoid direct repository access in tests; use service methods to update participation lock status.

Consistent with the coding guidelines to avoid direct database access in tests, replace the call to participationRepository.updateLockedById(...) with a service method. This ensures the test respects the service layer abstraction and maintains maintainability.

Apply this diff to correct the code:

- participationRepository.updateLockedById(participation.getId(), true);
+ programmingExerciseParticipationService.lockStudentRepositoryAndParticipation(programmingExercise, participation);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
participationRepository.updateLockedById(participation.getId(), true);
programmingExerciseParticipationService.lockStudentRepositoryAndParticipation(programmingExercise, participation);

@@ -72,7 +39,7 @@ ProgrammingExerciseTask addTaskToProgrammingExercise(String taskName) {
var task = new ProgrammingExerciseTask();
task.setTaskName(taskName);
task.setExercise(programmingExerciseRepository.getReferenceById(programmingExerciseId));
task = programmingExerciseTaskRepository.save(task);
task = taskRepository.save(task);
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Avoid direct database access in tests

According to the coding guidelines (avoid_db_access: true), tests should avoid direct database access. Instead of directly calling taskRepository.save(task);, consider using utility services or factory methods to handle data operations, adhering to the utility service factory pattern (util_service_factory_pattern: true).

Copy link

coderabbitai bot commented Oct 16, 2024

Walkthrough

The pull request primarily updates the class and method signatures across various test files to streamline the architecture of integration tests. This includes the introduction of new abstract classes and the modification of existing classes to extend from these new abstractions. Additionally, certain fields have been removed from several test classes to simplify the structure.

Changes

File Path Change Summary
src/test/java/de/tum/cit/aet/artemis/atlas/architecture/AtlasTestArchitectureTest.java Updated class and method signatures to remove specific type parameters.
src/test/java/de/tum/cit/aet/artemis/fileupload/AbstractFileUploadIntegrationTest.java Changed class from concrete to abstract.
src/test/java/de/tum/cit/aet/artemis/fileupload/architecture/FileUploadTestArchitectureTest.java Updated class and method signatures to remove specific type parameters.
src/test/java/de/tum/cit/aet/artemis/lti/architecture/LtiTestArchitectureTest.java Updated class and method signatures to remove specific type parameters.
src/test/java/de/tum/cit/aet/artemis/programming/* Multiple classes updated to extend new abstract classes; fields removed for simplification.
src/test/java/de/tum/cit/aet/artemis/shared/architecture/module/AbstractModuleTestArchitectureTest.java Updated class and method signatures to remove specific type parameters.
src/test/java/de/tum/cit/aet/artemis/programming/hestia/* Class signatures updated to extend from new abstract classes.
src/test/java/de/tum/cit/aet/artemis/programming/icl/* Class signatures updated to extend from new abstract classes; fields removed for simplification.
src/test/java/de/tum/cit/aet/artemis/programming/service/* Class signatures updated to extend from new abstract classes; fields removed for simplification.
src/test/java/de/tum/cit/aet/artemis/programming/service/connectors/gitlab/* Class signatures updated to extend from new abstract classes; fields removed for simplification.

Possibly related PRs

Suggested labels

buildagent

Suggested reviewers

  • JohannesStoehr
  • MaximilianAnzinger
  • SimonEntholzer

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.

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: 52

🧹 Outside diff range comments (60)
src/test/java/de/tum/cit/aet/artemis/programming/icl/SharedQueueManagementServiceTest.java (1)

Line range hint 16-49: Ensure full compliance with coding guidelines.

The test method testPushDockerImageCleanupInfo largely adheres to the coding guidelines:

  • It has a descriptive name and is small and specific.
  • It uses fixed data for testing.
  • It correctly uses assertThat for assertions with good specificity.

However, consider the following improvements to fully align with the guidelines:

  1. Utilize JUnit 5 features where applicable (e.g., @DisplayName, @Nested for grouping related tests).
  2. Implement ArchUnit tests to enforce package rules, if not done elsewhere.
  3. Add DB query count tracking to monitor performance, if relevant to this test.
  4. Ensure the util service factory pattern is used for creating test data, if applicable.
  5. Verify that DB access is avoided in favor of mocking, if possible.
  6. Consider using static mocks as per the mocking strategy guideline.
  7. Minimize context restarts to improve test performance, if relevant.

Would you like assistance in implementing any of these suggestions?

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseServiceTest.java (1)

Action Required: Incomplete Test Setup Refactoring

The simplification of the init method removed service calls but the test class still utilizes userUtilService, programmingExerciseUtilService, and exerciseUtilService. This indicates that some necessary setup steps may not have been fully refactored, potentially affecting the reliability of the tests.

  • Files to Review:
    • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseServiceTest.java
🔗 Analysis chain

Line range hint 21-33: Verify completeness of test setup after simplification.

The simplification of the init method by removing service calls and directly using programmingExerciseRepository is a good change that aligns with our test setup guidelines. However, please verify that all necessary setup steps for the test cases in this class are still being performed, either in this method or in the parent class.

To ensure the completeness of the test setup, please run the following script:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that removed setup steps are handled in the parent class or are no longer necessary.

# Test: Check for the presence of removed setup steps in the parent class
ast-grep --lang java --pattern 'class AbstractProgrammingIntegrationIndependentTest {
  $$$
  @BeforeEach
  $$$
  userUtilService.addUsers($$$);
  $$$
  programmingExerciseUtilService.addCourseWithOneProgrammingExercise();
  $$$
  exerciseUtilService.getFirstExerciseWithType($$$);
  $$$
}'

# Test: Check for any remaining usages of the removed services in this test class
rg --type java 'userUtilService|programmingExerciseUtilService|exerciseUtilService' src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseServiceTest.java

Length of output: 1056

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCServiceTest.java (1)

Line range hint 1-58: Overall, the changes improve test architecture and maintainability.

The refactoring of LocalVCServiceTest aligns well with the PR objectives. By extending the new abstract class and removing unnecessary dependencies, the test becomes more focused and potentially more maintainable. The preservation of existing test methods suggests that the functionality remains intact.

However, to ensure the refactoring hasn't introduced any regressions:

  1. Verify that all tests still pass after these changes.
  2. Confirm that the new abstract class (AbstractProgrammingIntegrationLocalCILocalVCTest) provides all necessary setup and utilities previously supplied by the removed @Autowired fields.
  3. Consider adding a comment explaining the rationale behind this architectural change for future maintainers.
src/test/java/de/tum/cit/aet/artemis/fileupload/AbstractFileUploadIntegrationTest.java (1)

Line range hint 24-85: Consider breaking down this large abstract class for better maintainability.

While the change to make this class abstract is good, the class itself contains a large number of autowired components. This might violate the Single Responsibility Principle and make the class harder to maintain.

Consider breaking this abstract class into smaller, more focused abstract classes. For example:

  1. BaseFileUploadRepositoryTest for repository-related components
  2. BaseFileUploadServiceTest for service-related components
  3. BaseFileUploadUtilTest for utility-related components

This refactoring would improve maintainability and allow for more granular test class inheritance.

src/test/java/de/tum/cit/aet/artemis/programming/PlantUmlIntegrationTest.java (1)

Line range hint 29-93: LGTM! Consider extracting test data to constants.

The test methods adhere well to the coding guidelines and best practices for integration testing. They are descriptive, specific, use fixed data, leverage JUnit 5 features, use appropriate assertions, and follow the recommended mocking strategy.

To further improve maintainability, consider extracting the test data (e.g., UML_DIAGRAM_STRING, UML_SVG, UML_PNG) to private static final fields at the class level. This would centralize the test data management and make it easier to update if needed.

Here's an example of how you could refactor the test data:

private static final String UML_DIAGRAM_STRING = "@somePlantUml";
private static final String UML_SVG = "foobar";
private static final byte[] UML_PNG = new byte[] { 3, 4, 2, 1 };
src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsJobServiceTest.java (1)

Verify test isolation after removal of user setup.

The call to userUtilService.addUsers(TEST_PREFIX, 1, 0, 0, 0); has been removed from the initTestCase method. However, global search results indicate that userUtilService.addUsers is still extensively used across multiple test classes. This change may impact test isolation and reliability.

Please ensure that:

  • All necessary user setups are still performed within each affected test class.
  • If centralizing user setup was intended, implement it in a shared base class to maintain consistency and proper test isolation.
🔗 Analysis chain

Line range hint 42-54: Verify test isolation after removal of user setup.

The call to userUtilService.addUsers(TEST_PREFIX, 1, 0, 0, 0); has been removed from the initTestCase method. This change suggests that user setup is now handled differently, possibly in the new abstract base class AbstractProgrammingIntegrationJenkinsGitlabTest.

To ensure test isolation is maintained, please verify:

  1. The new base class or another mechanism is handling the necessary user setup.
  2. These tests don't rely on specific user data that was previously set up in this method.

Run the following script to check if user setup is handled in the new base class:

If no results are found, consider adding appropriate user setup to maintain test isolation.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for user setup in AbstractProgrammingIntegrationJenkinsGitlabTest

# Test: Search for user setup methods in the new base class
ast-grep --lang java --pattern $'class AbstractProgrammingIntegrationJenkinsGitlabTest {
  $$$
  $_($$) {
    $$$
    userUtilService.addUsers($$$)
    $$$
  }
  $$$
}'

Length of output: 293


Script:

#!/bin/bash
# Description: Check for user setup in AbstractProgrammingIntegrationJenkinsGitlabTest using ripgrep

rg 'userUtilService\.addUsers' src/test/java/de/tum/cit/aet/artemis/programming/service/AbstractProgrammingIntegrationJenkinsGitlabTest.java

Length of output: 292


Script:

#!/bin/bash
# Description: Globally search for user setup calls in the codebase

rg 'userUtilService\.addUsers'

Length of output: 33550

src/test/java/de/tum/cit/aet/artemis/programming/IdePreferencesIntegrationTest.java (1)

tearDown() Method Still Contains deleteAll() Calls

The tearDown method in IdePreferencesIntegrationTest.java still includes deleteAll() calls for userIdeMappingRepository and ideRepository. This indicates that the intended removal was not fully implemented.

  • src/test/java/de/tum/cit/aet/artemis/programming/IdePreferencesIntegrationTest.java lines 18-28
🔗 Analysis chain

Line range hint 41-44: Verify cleanup process after removing repository deletions.

The removal of deleteAll() calls in the tearDown method is consistent with the earlier changes. However, it's crucial to ensure that proper cleanup is still performed after each test to maintain test isolation.

Please confirm that the cleanup process is handled appropriately, possibly in the parent class. Run the following script to verify:


Please run the following scripts to verify the cleanup process more effectively:


Please run the following scripts to gather additional information about the cleanup process:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for cleanup methods in the parent class or other mechanisms

# Test: Check for cleanup methods in AbstractProgrammingIntegrationIndependentTest
ast-grep --lang java --pattern 'class AbstractProgrammingIntegrationIndependentTest {
  $$$
  @AfterEach
  void $_($$_) {
    $$$
  }
  $$$
}'

# Test: Check for any other cleanup mechanisms in the test class
rg -U --type java '@AfterEach|@After|cleanup|clear|reset' src/test/java/de/tum/cit/aet/artemis/programming/IdePreferencesIntegrationTest.java

Length of output: 522


Script:

#!/bin/bash
# Description: Check for cleanup methods in the parent class or other mechanisms, excluding files with encoding issues

# Find all Java files excluding those with known encoding issues
fd --type file --extension java --exclude 'EncodingISO_8559_1.java' -x ast-grep --lang java --pattern 'class AbstractProgrammingIntegrationIndependentTest {
  $$$
  @AfterEach
  void $_($$_) {
    $$$
  }
  $$$
}'

# Corrected rg command to search for cleanup mechanisms in the test class
rg -U --type java '@AfterEach|@After|cleanup|clear|reset' src/test/java/de/tum/cit/aet/artemis/programming/IdePreferencesIntegrationTest.java

Length of output: 372


Script:

#!/bin/bash
# Description: Search for all cleanup-related methods across the test suite

# 1. Find all methods annotated with @AfterEach or @After
fd --type file --extension java -E 'EncodingISO_8559_1.java' | xargs ast-grep --lang java --pattern '
    @AfterEach
    void $_($$_) {
        $$$
    }
'

fd --type file --extension java -E 'EncodingISO_8559_1.java' | xargs ast-grep --lang java --pattern '
    @After
    void $_($$_) {
        $$$
    }
'

# 2. Search for methods with names that suggest cleanup actions
fd --type file --extension java -E 'EncodingISO_8559_1.java' | xargs rg -U -A 2 'void\s+(cleanup|reset|tearDown)\s*\('

# 3. Search for custom cleanup annotations
fd --type file --extension java -E 'EncodingISO_8559_1.java' | xargs ast-grep --lang java --pattern '
    @$_CustomCleanupAnnotation
    void $_($$_) {
        $$$
    }
'

Length of output: 47708

src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsJobPermissionServiceTest.java (1)

Line range hint 41-115: LGTM! Consider enhancing test coverage and performance tracking.

The test methods are well-structured and align with the coding guidelines. They use descriptive names, focus on specific scenarios, utilize JUnit 5 features, and employ static mocks as recommended.

Suggestions for improvement:

  1. Consider adding tests to track DB query count for performance monitoring, as per the db_query_count_tests: track_performance guideline.
  2. If not already implemented in the base class, consider adding ArchUnit tests to enforce package rules (archunit_use: enforce_package_rules).

To implement DB query count tracking, you could add a test method similar to:

@Test
@WithMockUser(username = TEST_PREFIX + "student1")
void testAddPermissionsForUsersToFolderDBQueryCount() {
    String folderName = "JenkinsFolder";
    Set<JenkinsJobPermission> permissions = JenkinsJobPermission.getTeachingAssistantPermissions();
    Set<String> logins = Set.of(TEST_PREFIX + "ta1");

    jenkinsRequestMockProvider.mockGetFolderConfig(folderName);

    TestTransaction.flagForCommit();
    int queryCount = TestEntityManager.getEntityManager().getEntityManagerFactory()
            .getStatistics().getPrepareStatementCount();

    jenkinsJobPermissionsService.addPermissionsForUsersToFolder(logins, folderName, permissions);

    TestTransaction.end();
    int newQueryCount = TestEntityManager.getEntityManager().getEntityManagerFactory()
            .getStatistics().getPrepareStatementCount();

    assertThat(newQueryCount - queryCount).isLessThanOrEqualTo(expectedQueryCount);
}

Replace expectedQueryCount with the appropriate value for your use case.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseResultJenkinsIntegrationTest.java (3)

Line range hint 33-39: Setup method refactored to align with util_service_factory_pattern.

The removal of the @Autowired annotation and direct usage of programmingExerciseResultTestService aligns with the util_service_factory_pattern guideline. This change improves the test structure and reduces dependency on Spring's autowiring.

Consider adding a comment explaining how programmingExerciseResultTestService is now being initialized or managed, to improve code readability.


Line range hint 41-44: TearDown method updated for consistency with setup changes.

The tearDown() method has been updated to directly use programmingExerciseResultTestService, consistent with the changes in the setup() method. The addition of throws Exception improves error handling.

Consider adding a comment explaining the potential exceptions that might be thrown during teardown, to improve code maintainability.


Line range hint 46-219: Ensure all test methods adhere to coding guidelines.

The test methods generally follow good practices, but consider the following improvements to fully align with the coding guidelines:

  1. Utilize more JUnit 5 features (junit5_features: true). For example, consider using @ParameterizedTest for similar test cases with different inputs.
  2. Ensure that all assertions use assertThat and are specific (assert_specificity: true).
  3. Verify that these tests are not directly accessing the database (avoid_db_access: true). If DB access is necessary, consider mocking or using in-memory databases for testing.
  4. Add tests to track query count and performance (db_query_count_tests: track_performance) if not already present in the base class.
  5. Consider using static mocks where appropriate (mock_strategy: static_mocks).

These changes will enhance the test suite's alignment with the project's coding guidelines and improve overall test quality.

src/test/java/de/tum/cit/aet/artemis/programming/service/BuildLogEntryServiceTest.java (1)

Line range hint 374-388: LGTM: Well-designed helper methods.

These convertToBuildLogs methods are well-implemented and make good use of Java 8+ features. They provide flexibility in creating test data, which is beneficial for maintaining and extending tests.

For improved readability, consider using method references more consistently. For example, you could refactor the last method like this:

-    private List<BuildLogEntry> convertToBuildLogs(Stream<String> content) {
-        return content.map(text -> new BuildLogEntry(ZonedDateTime.now(), text)).collect(Collectors.toCollection(ArrayList::new));
-    }
+    private List<BuildLogEntry> convertToBuildLogs(Stream<String> content) {
+        return content.map(this::createBuildLogEntry).collect(Collectors.toCollection(ArrayList::new));
+    }
+
+    private BuildLogEntry createBuildLogEntry(String text) {
+        return new BuildLogEntry(ZonedDateTime.now(), text);
+    }

This change would make the code more consistent with the functional programming style used elsewhere in the class.

src/test/java/de/tum/cit/aet/artemis/programming/SubmissionPolicyIntegrationTest.java (2)

Line range hint 458-523: Well-structured helper methods and SubmissionPolicyBuilder.

The private helper methods and the SubmissionPolicyBuilder inner record are well-organized and promote code reuse within the test class. This structure enhances readability and maintainability of the tests.

Consider extracting the SubmissionPolicyBuilder to a separate file in the test package. This would allow its reuse in other test classes if needed and improve the overall organization of the test code. For example:

// In a new file: src/test/java/de/tum/cit/aet/artemis/programming/util/SubmissionPolicyBuilder.java
package de.tum.cit.aet.artemis.programming.util;

public record SubmissionPolicyBuilder(SubmissionPolicy policy) {
    // ... (existing methods)
}

// In SubmissionPolicyIntegrationTest.java
import de.tum.cit.aet.artemis.programming.util.SubmissionPolicyBuilder;

// ... (rest of the test class)

This change would make the SubmissionPolicyBuilder more accessible and potentially reusable across different test classes.


Line range hint 1-523: Overall improvement in test structure and organization.

The changes in this file, including the removal of @Autowired fields and the change in base class, appear to be part of a larger refactoring effort to improve the organization and structure of the test code. The test coverage remains comprehensive, and the helper methods are well-structured.

Consider adding a class-level JavaDoc comment to explain the purpose of this test class and any significant changes made during the refactoring. This would help other developers understand the context and reasons for the current structure. For example:

/**
 * Integration tests for SubmissionPolicy functionality in Programming Exercises.
 * <p>
 * This test class has been refactored to use AbstractProgrammingIntegrationJenkinsGitlabTest
 * as its base class, centralizing common setup and utility methods for programming exercise tests.
 * Direct @Autowired dependencies have been removed in favor of using methods provided by the base class.
 */
class SubmissionPolicyIntegrationTest extends AbstractProgrammingIntegrationJenkinsGitlabTest {
    // ... (rest of the class)
}

This documentation would provide valuable context for future maintainers of the test suite.

src/test/java/de/tum/cit/aet/artemis/atlas/learningpath/LearningPathIntegrationTest.java (1)

Line range hint 1-1010: Overall compliance with coding guidelines

The test file generally adheres to the provided coding guidelines. Here are some observations:

  1. Test naming is descriptive, following the guideline.
  2. JUnit 5 features are used throughout the file.
  3. AssertThat is consistently used for assertions.
  4. Nested test classes are used for better organization.

However, there are a few areas where improvements could be made:

  1. Some test methods are quite long and could potentially be split into smaller, more focused tests.
  2. Consider adding more specific assertions in some test methods to improve test clarity.

Consider reviewing longer test methods for potential refactoring into smaller, more focused tests to improve maintainability and readability.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseBuildPlanTest.java (3)

Line range hint 25-27: Address the usage of programmingExerciseRepository without declaration

In the test methods testGetBuildPlanSuccess, testGetBuildPlanInvalidSecret, and testGetBuildPlanInvalidExerciseId, the programmingExerciseRepository is used but is no longer declared as a field in this class. If the repository is not provided by the new base class, consider adding it back to ensure the tests function correctly.

Apply this diff to reintroduce the programmingExerciseRepository field:

+    @Autowired
+    private ProgrammingExerciseTestRepository programmingExerciseRepository;

Also applies to: 33-35, 41-43


Line range hint 17-19: Minimize direct database access in tests

Per the coding guidelines (avoid_db_access: true), consider reducing direct database interactions in your tests. In the init() method, the use of programmingExerciseUtilService.addCourseWithOneProgrammingExercise() and exerciseUtilService.getFirstExerciseWithType() may involve database access. Evaluate the possibility of using mocks or test factories to provide the necessary data without relying on the database.


Line range hint 24-47: Enhance test method names for clarity and descriptiveness

According to the coding guidelines (test_naming: descriptive), consider renaming your test methods to more clearly convey their purpose:

  • testGetBuildPlanSuccessshouldReturnBuildPlanWhenSecretIsValid
  • testGetBuildPlanInvalidSecretshouldReturnForbiddenWhenSecretIsInvalid
  • testGetBuildPlanInvalidExerciseIdshouldReturnBadRequestWhenExerciseIdIsInvalid
src/test/java/de/tum/cit/aet/artemis/programming/service/connectors/jenkins/build_plan/JenkinsPipelineScriptCreatorTest.java (2)

Line range hint 23-31: Refactor initialization logic using superclass utilities

Consider refactoring the init() method to leverage any setup utilities provided by AbstractProgrammingIntegrationJenkinsGitlabTest. This can reduce code duplication and enhance maintainability.

For example, if the superclass offers a method to create and save a ProgrammingExercise, you can use it instead of manually setting up and saving the exercise.


Line range hint 36-57: Avoid direct repository access in test methods

Accessing repositories directly in test methods (e.g., buildPlanRepository.findByProgrammingExercises_IdWithProgrammingExercises(...)) goes against the guideline to minimize direct database interactions in tests.

Consider the following alternatives:

  • Use service methods: Interact with the data layer through service methods that encapsulate repository access.
  • Mock repository interactions: If appropriate, use static mocks to simulate repository behavior without hitting the actual database.

This approach aligns with the mock strategy of using static mocks and helps to keep tests focused and performant.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/TestwiseCoverageIntegrationTest.java (1)

Line range hint 38-46: Refactor to remove direct repository usage in test setup

In the setup() method, repositories are directly used to save entities:

  • solutionEntryRepository.findWithEagerResultsAndSubmissionsByProgrammingExerciseId(...)
  • programmingSubmissionRepository.save(...)

This direct interaction with the database should be avoided in tests per the coding guidelines.

Refactor the setup to use test utilities or mocks that provide the necessary data without direct database access. For example, utilize methods from programmingExerciseUtilService or create in-memory data structures.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTestCaseServiceTest.java (3)

Line range hint 37-43: Potential NullPointerException due to undefined services in setUp method

In the setUp method, services such as userUtilService, programmingExerciseUtilService, exerciseUtilService, and programmingExerciseRepository are used but not declared in this class. Ensure these services are properly inherited from the new superclass or declared in this class to prevent NullPointerException.

If these services are not available after the superclass change, consider injecting them or adjusting the test setup to include them.


Line range hint 55-58: Ensure participationUtilService and testCaseRepository are accessible

Within the testResetTestCases method, participationUtilService and testCaseRepository are utilized but are not defined within this class. Verify that these services are inherited from AbstractProgrammingIntegrationLocalCILocalVCTest or properly injected to avoid runtime errors.


Line range hint 100-127: Verify access to feedbackCreationService in shouldAllowTestCaseWeightSumZero

The method shouldAllowTestCaseWeightSumZero uses feedbackCreationService, which is not declared in this class. Ensure that feedbackCreationService is inherited or otherwise accessible to avoid issues during test execution.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseGitIntegrationTest.java (2)

Line range hint 46-46: Avoid Direct Database Access in Tests

According to the coding guidelines (avoid_db_access: true), tests should avoid direct database access. The call to programmingExerciseRepository.findWithEagerStudentParticipationsById(...) in the initTestCase() method directly accesses the database. Consider mocking the repository method or using predefined test data to avoid direct interaction with the database.


Line range hint 70-72: Ensure Test Size Is Small and Specific

Per the coding guidelines (test_size: small_specific), test methods should focus on specific functionalities. The testCombineTemplateRepositoryCommits() method performs multiple operations, including initializing repositories, pushing commits, and verifying commit counts. Consider splitting this test into smaller, more focused tests to improve readability and maintainability.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseGitDiffReportServiceTest.java (5)

Line range hint 33-39: Update test setup to use base class utilities

In the initTestCase() method, replace the calls to the removed services with the base class utilities:

  • Use database.addUsers(TEST_PREFIX, 1, 1, 1, 1); instead of userUtilService.addUsers(...).
  • Use exercise = programmingExercise; assuming programmingExercise is initialized in the base class.

This ensures that the test setup aligns with the utilities provided by AbstractProgrammingIntegrationLocalCILocalVCTestBase.


Line range hint 49-112: Resolve undefined references to hestiaUtilTestService, reportService, and reportRepository

The fields hestiaUtilTestService, reportService, and reportRepository have been removed but are still used in your test methods. This will result in compilation errors.

  • Replace hestiaUtilTestService method calls with equivalent methods from the base class or initialize it appropriately.
  • Access reportService and reportRepository through the base class if available, or mock them using a mocking framework like Mockito.

Line range hint 49-112: Mock services to adhere to the static mock strategy

Per the coding guideline mock_strategy: static_mocks, consider mocking external services and repositories used in your tests.

Use static mocks for reportService and reportRepository to improve test isolation and reduce dependencies on actual implementations.


Line range hint 113-128: Avoid direct database access in tests

The test method ensureDeletionOfDuplicateReports() directly interacts with the database via reportRepository.save() and reportRepository.findByProgrammingExerciseId(). According to the coding guideline avoid_db_access: true, tests should avoid direct database operations.

Consider mocking the reportRepository and simulate its behavior within the test. This will help to isolate the test logic and comply with the testing guidelines.


Line range hint 113-128: Ensure test methods are self-contained and minimize context restarts

To adhere to context_restart_minimize: true, ensure that your tests do not require unnecessary context reloads, which can slow down the test suite.

Review your test configurations and annotations to confirm that context restarts are minimized between tests.

src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationLocalCILocalVCTestBase.java (1)

Line range hint 173-192: Avoid direct database access in tests; use mocks or test utilities instead

Per the coding guidelines, tests should avoid accessing the database directly to improve performance and maintain test isolation. The initUsersAndExercise method performs database operations such as adding users and saving entities. Consider using mocks or test utility patterns to set up test data without interacting with the database.

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIServiceTest.java (5)

Line range hint 45-51: hazelcastInstance and sharedQueueProcessingService may not be initialized

The @Autowired fields for hazelcastInstance and sharedQueueProcessingService have been removed, but they are still used in the setUp() method. This may lead to NullPointerException if these fields are not initialized elsewhere.

Consider re-adding the autowiring or updating the code to properly initialize these dependencies.

+@Autowired
+@Qualifier("hazelcastInstance")
+private HazelcastInstance hazelcastInstance;
+
+@Autowired
+private SharedQueueProcessingService sharedQueueProcessingService;

Line range hint 61-66: hazelcastInstance and sharedQueueProcessingService usage in tearDown()

Similar to the setUp() method, the tearDown() method relies on hazelcastInstance and sharedQueueProcessingService, which may not be initialized due to the removal of the @Autowired annotations.

Ensure these services are properly initialized before use or modify the methods to avoid using uninitialized fields.

+@Autowired
+@Qualifier("hazelcastInstance")
+private HazelcastInstance hazelcastInstance;
+
+@Autowired
+private SharedQueueProcessingService sharedQueueProcessingService;

Line range hint 105-121: Consider removing unnecessary null checks

In the testRecreateBuildPlanForExercise() method, the exercise is checked for null at the end with a comment indicating that the method does not throw an exception when the exercise is null. If it's intended for the method to handle null values, consider adding a proper test case to assert this behavior.

Add a test to explicitly check the behavior when exercise is null.

@Test
void testRecreateBuildPlanForNullExercise() {
    // Ensure no exception is thrown when exercise is null
    assertThatCode(() -> continuousIntegrationService.recreateBuildPlansForExercise(null)).doesNotThrowAnyException();
}

Line range hint 123-134: Initialize scriptCache properly in testGetScriptForWithoutCache()

The scriptCache is re-initialized using new ConcurrentHashMap<>(). Ensure that this does not interfere with other tests by affecting shared state. It might be better to use dependency injection or mock the buildScriptProviderService.

Consider using a fresh instance of buildScriptProviderService or resetting the scriptCache appropriately to avoid side effects.


Line range hint 136-150: Re-evaluate the need for empty method overrides in testUnsupportedMethods()

The method testUnsupportedMethods() calls several methods that do nothing or return default values. If these methods are not supported, consider adding @Disabled annotations or removing the test if it's not providing value.

If the intent is to document unsupported methods, add comments explaining why they are unsupported.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseGitDiffReportIntegrationTest.java (2)

Line range hint 48-49: Prevent potential NullPointerException by initializing used services.

The methods are invoking hestiaUtilTestService and reportService, but without proper initialization, these references are null. This will cause a NullPointerException during test execution.

Ensure that hestiaUtilTestService and reportService are initialized before use. Depending on your testing framework and the changes in the base class, you might:

  • Access the services from the application context.
  • Inject the services in the setup method if they are provided by the base class.
  • Reintroduce the @Autowired annotations as shown previously.

Verify that all dependencies are correctly set up to maintain test integrity.

Also applies to: 52-52, 60-61, 64-64, 72-73, 76-76, 80-81, 84-84, 88-89, 92-92, 96-97, 100-100, 104-105, 108-108


Line range hint 48-108: Avoid direct database access in tests as per coding guidelines.

The test methods seem to interact with the database through service calls, which might violate the guideline avoid_db_access: true. Direct database access can slow down tests and make them less reliable.

Consider mocking database interactions or using in-memory databases to comply with the guidelines. Utilize static mocks (mock_strategy: static_mocks) to simulate database operations, and ensure that the tests remain fast and isolated.

Would you like assistance in refactoring these tests to minimize direct database access?

src/test/java/de/tum/cit/aet/artemis/programming/hestia/CodeHintServiceTest.java (1)

Line range hint 29-246: Refactor Tests to Avoid Direct Database Access

According to the coding guidelines (avoid_db_access: true), tests should minimize direct database interactions to improve performance and maintainability. Consider refactoring the test setup to use mocking or test utilities instead of direct repository calls.

Apply the following changes to use test utilities or mocks:

-    private ProgrammingExerciseTestCase addTestCaseToExercise(String name) {
-        var testCase = new ProgrammingExerciseTestCase();
-        testCase.setTestName(name);
-        testCase.setExercise(exercise);
-        // Additional setup...
-        return testCaseRepository.save(testCase);
-    }
+    // Use utility service to create test case without direct database access
+    private ProgrammingExerciseTestCase addTestCaseToExercise(String name) {
+        return programmingExerciseUtilService.createTestCaseForExercise(exercise, name);
+    }

This approach reduces database dependencies in tests and adheres to the project's coding guidelines.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseSolutionEntryIntegrationTest.java (1)

Line range hint 167-173: Correct the test: 'testUpdateSolutionEntryWithInvalidId' uses valid IDs

The test method testUpdateSolutionEntryWithInvalidId is intended to verify the behavior when an invalid solution entry ID is used. However, it currently uses a valid entryId and expects HttpStatus.OK, which is identical to the testUpdateSolutionEntry method.

To properly test the invalid ID scenario, update the entryId to an invalid value (e.g., Long.MAX_VALUE) and expect an error response such as HttpStatus.NOT_FOUND.

Apply this diff to correct the test:

 void testUpdateSolutionEntryWithInvalidId() throws Exception {
     ProgrammingExerciseTestCase testCase = testCaseRepository.findByExerciseIdWithSolutionEntries(programmingExercise.getId()).stream().findFirst().orElseThrow();
     ProgrammingExerciseSolutionEntry entry = testCase.getSolutionEntries().stream().findFirst().orElseThrow();
-    Long entryId = entry.getId();
+    Long entryId = Long.MAX_VALUE;
     String updatedFilePath = "NewPath.java";
     entry.setFilePath(updatedFilePath);

-    request.put("/api/programming-exercises/" + programmingExercise.getId() + "/test-cases/" + testCase.getId() + "/solution-entries/" + entryId, entry, HttpStatus.OK);
+    request.put("/api/programming-exercises/" + programmingExercise.getId() + "/test-cases/" + testCase.getId() + "/solution-entries/" + entryId, entry, HttpStatus.NOT_FOUND);
-    Optional<ProgrammingExerciseSolutionEntry> entryAfterUpdate = programmingExerciseSolutionEntryRepository.findById(entryId);
-    assertThat(entryAfterUpdate).isPresent();
-    assertThat(entryAfterUpdate.get().getFilePath()).isEqualTo(updatedFilePath);
 }
src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIResourceIntegrationTest.java (7)

Line range hint 54-54: Undefined variable sharedQueueProcessingService due to removed dependency

The sharedQueueProcessingService is used here, but the @Autowired SharedQueueProcessingService sharedQueueProcessingService; field has been removed. This will result in a compilation error because sharedQueueProcessingService is not defined.

To resolve this, consider accessing sharedQueueProcessingService through the new base class AbstractProgrammingIntegrationLocalCILocalVCTestBase if it provides this service, or re-add the @Autowired field if necessary.


Line range hint 73-73: Undefined variable sharedQueueProcessingService due to removed dependency

The sharedQueueProcessingService is also used here, but it has been removed from the class. This will cause a compilation error.

As mentioned earlier, ensure that you have access to sharedQueueProcessingService either through the base class or by re-injecting it into the test class.


Line range hint 62-65: Undefined variable hazelcastInstance due to removed dependency

The hazelcastInstance is used to obtain queues and maps, but the @Autowired HazelcastInstance hazelcastInstance; field has been removed. This will lead to a compilation error because hazelcastInstance is not defined.

Check if the new base class AbstractProgrammingIntegrationLocalCILocalVCTestBase provides access to hazelcastInstance. If not, consider re-adding the @Autowired field or refactoring the code to obtain the HazelcastInstance differently.


Line range hint 260-260: Undefined variable buildLogEntryService due to removed dependency

The buildLogEntryService is used here, but the @Autowired BuildLogEntryService buildLogEntryService; field has been removed. This will result in a compilation error.

Ensure that buildLogEntryService is accessible, possibly through the base class or by re-injecting it into the test class.


Line range hint 250-251: Avoid direct database access in tests

According to the coding guidelines (avoid_db_access: true), tests should avoid direct database access. The usage of buildJobRepository.deleteAll() and buildJobRepository.save(...) directly interacts with the database.

Consider using mocks or in-memory databases to simulate database operations. This can improve test performance and avoid side effects.

Example using Mockito:

@Mock
private BuildJobRepository buildJobRepository;

// In your setup method
Mockito.when(buildJobRepository.save(Mockito.any())).thenReturn(savedBuildJob);

Also applies to: 285-286


Line range hint 105-107: Potential race condition due to shared state

Adding jobs to queuedJobs within the test may lead to flaky tests since the jobs are processed quickly due to mocking. This could cause the size assertions to fail intermittently.

Consider mocking the job processing to control the state of queuedJobs, ensuring consistent test results.

Example:

// Mock the job processor to prevent automatic processing during the test
doNothing().when(jobProcessor).processJobs();

// Then proceed with adding jobs and assertions

Line range hint 150-152: Repeated code for setting up pageable search DTO

The code for configuring pageableSearchDTO is repeated in multiple tests.

Extract this setup code into a helper method or utilize a test utility class to improve code reusability and maintainability.

Also applies to: 180-182

src/test/java/de/tum/cit/aet/artemis/programming/service/ProgrammingExerciseFeedbackCreationServiceTest.java (1)

Line range hint 36-43: Avoid direct database access in tests

The init() method performs database operations by saving entities directly using repositories:

  • programmingExerciseBuildConfigRepository.save(programmingExercise.getBuildConfig())
  • programmingExerciseRepository.save(programmingExercise)

According to the coding guidelines (avoid_db_access: true), tests should avoid accessing the database and utilize static mocks instead.

Suggestion:

Refactor the test setup to use mock services or in-memory data structures. This approach will improve test performance and reliability by eliminating the overhead and side effects of database interactions.

src/test/java/de/tum/cit/aet/artemis/programming/StaticCodeAnalysisIntegrationTest.java (1)

Line range hint 41-46: Avoid direct database access in tests

Per the coding guidelines (avoid_db_access: true), tests should avoid direct database access to improve performance and test isolation. In the initTestCase() method, the test accesses the database via courseRepository.findWithEagerExercisesById(...). Consider using mocks or test utilities to eliminate direct database interactions.

You can refactor the initTestCase() method to use a test utility method that provides a mock Course object without accessing the database:

 @BeforeEach
 void initTestCase() {
     userUtilService.addUsers(TEST_PREFIX, 2, 1, 1, 1);
     programmingExerciseSCAEnabled = programmingExerciseUtilService.addCourseWithOneProgrammingExerciseAndStaticCodeAnalysisCategories();
-    course = courseRepository.findWithEagerExercisesById(programmingExerciseSCAEnabled.getCourseViaExerciseGroupOrCourseMember().getId());
+    course = programmingExerciseSCAEnabled.getCourseViaExerciseGroupOrCourseMember();
     var tempProgrammingEx = ProgrammingExerciseFactory.generateProgrammingExercise(ZonedDateTime.now(), ZonedDateTime.now().plusDays(1),
             programmingExerciseSCAEnabled.getCourseViaExerciseGroupOrCourseMember());
     tempProgrammingEx.setBuildConfig(programmingExerciseBuildConfigRepository.save(tempProgrammingEx.getBuildConfig()));
     programmingExercise = programmingExerciseRepository.save(tempProgrammingEx);
 }

By retrieving the course directly from programmingExerciseSCAEnabled, you avoid the database call and adhere to the guideline.

src/test/java/de/tum/cit/aet/artemis/programming/TestRepositoryResourceIntegrationTest.java (2)

Line range hint 58-59: Usage of removed programmingExerciseBuildConfigRepository causes compilation error

The field programmingExerciseBuildConfigRepository has been removed but is still being used in the setup() method. This will lead to a compilation error. Please update the code to remove or replace the usage of this repository.

Apply this diff to fix the issue:

- programmingExercise.setBuildConfig(programmingExerciseBuildConfigRepository.save(programmingExercise.getBuildConfig()));
+ // Removed the usage of programmingExerciseBuildConfigRepository to fix compilation error.

Line range hint 85-85: Avoid direct database access in tests

The test methods are directly accessing the database by calling programmingExerciseRepository.save(programmingExercise);, which violates the guideline avoid_db_access: true. Direct database operations can slow down tests and introduce dependencies on the database state.

Consider the following refactor to avoid direct database access:

  • Use mocks for the repository interactions.
  • Utilize predefined test data or test factories to provide necessary objects without persisting them.
  • Ensure that any necessary data is set up in-memory rather than relying on the database.

Example:

- programmingExerciseRepository.save(programmingExercise);
+ // Mock the repository or use in-memory objects to avoid database access.

Also applies to: 110-110, 131-131, 148-148, 167-167, 186-186, 205-205, 226-226, 253-253, 276-276, 283-283, 319-319, 365-365

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseScheduleServiceTest.java (2)

Line range hint 73-86: Potential compilation errors due to undefined services

The init() method and other parts of the test class reference services like userUtilService, programmingExerciseUtilService, and exerciseUtilService, which were previously autowired but are now removed. This will lead to compilation errors as these services are undefined.

Consider obtaining these services from the new superclass if it provides them, or reintroduce them into the class with proper initialization. Alternatively, adjust the test methods to operate without direct dependency on these services.


Line range hint 73-86: Avoid direct database access in tests

According to the coding guidelines (avoid_db_access: true), tests should avoid direct database interactions. The init() method and several test methods use repositories to access the database (e.g., programmingExerciseRepository.saveAndFlush()).

Refactor the tests to use mocks or in-memory databases to simulate database operations. Employ static mocks as per the mock_strategy: static_mocks guideline to prevent actual database access and improve test performance.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseParticipationIntegrationTest.java (1)

Line range hint 49-54: Check for missing dependencies in initTestCase method

The initTestCase method uses programmingExerciseRepository, which was previously injected via @Autowired and has been removed according to the AI summary. Ensure that programmingExerciseRepository is now properly initialized or accessible through the new superclass to prevent NullPointerException or other runtime errors.

Apply this diff to inject the necessary repository:

+ @Autowired
+ private ProgrammingExerciseRepository programmingExerciseRepository;
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingAssessmentIntegrationTest.java (5)

Line range hint 67-91: Avoid direct database access in tests.

According to the coding guidelines (avoid_db_access: true), tests should avoid accessing the database directly. In the initTestCase() method, there are several calls that interact with the database, such as userUtilService.addUsers() and programmingExerciseUtilService.addCourseWithOneProgrammingExerciseAndTestCases(). Consider using mocks or test data factories to isolate tests and improve performance.


Line range hint 226-279: Reduce code duplication by using parameterized tests.

The test methods createManualProgrammingExerciseResult_IncludedCompletelyWithBonusPointsExercise(), createManualProgrammingExerciseResult_IncludedCompletelyWithoutBonusPointsExercise(), createManualProgrammingExerciseResult_IncludedAsBonusExercise(), and createManualProgrammingExerciseResult_NotIncludedExercise() share similar logic with variations in exercise configuration. Consider refactoring them into a single parameterized test to reduce duplication and enhance maintainability.


Line range hint 522-569: Avoid database interactions within test methods.

In the overrideAssessment() method, there are database interactions such as fetching participations and saving results. As per the coding guidelines (avoid_db_access: true), consider mocking these interactions to prevent direct database access, which can improve test performance and isolation.


Line range hint 631-672: Use fixed data for deterministic tests.

The multipleCorrectionRoundsForExam() method dynamically sets up exams, exercises, and submissions. To adhere to the guideline of using fixed data (fixed_data: true), consider predefining test data or using test fixtures. This approach enhances test reliability and makes debugging easier.


Line range hint 798-829: Enhance assertion specificity for clearer test failures.

In the testDeleteResult() method, assertions verify the state of submissions and results after deletion. To follow the guideline on assertion specificity (assert_specificity: true), include descriptive messages or use assertion methods that provide detailed failure information.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE

📥 Commits

Files that changed from the base of the PR and between 6431b46 and 0f7b4dd.

📒 Files selected for processing (79)
  • src/test/java/de/tum/cit/aet/artemis/atlas/architecture/AtlasTestArchitectureTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/atlas/learningpath/LearningPathIntegrationTest.java (5 hunks)
  • src/test/java/de/tum/cit/aet/artemis/fileupload/AbstractFileUploadIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/fileupload/architecture/FileUploadTestArchitectureTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/lti/architecture/LtiTestArchitectureTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationGitlabCIGitlabSamlTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationIndependentTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationJenkinsGitlabTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationLocalCILocalVCTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationLocalCILocalVCTestBase.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/AuxiliaryRepositoryServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/BuildPlanIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ConsistencyCheckGitlabJenkinsIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/CourseGitlabJenkinsIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/GitServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/GitlabServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/IdePreferencesIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/PlantUmlIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingAssessmentIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseBuildPlanTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseGitIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseGitlabJenkinsIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseGradingServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseIntegrationJenkinsGitlabTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseParticipationIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseRepositoryServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseResultJenkinsIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseScheduleServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseServiceIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseServiceTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTemplateIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTestCaseServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingSubmissionAndResultGitlabJenkinsIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingSubmissionIntegrationTest.java (4 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/RepositoryIntegrationTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/RepositoryProgrammingExerciseParticipationJenkinsIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/StaticCodeAnalysisIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/SubmissionPolicyIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/TestRepositoryResourceIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/architecture/ProgrammingTestArchitectureTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/CodeHintIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/CodeHintServiceTest.java (8 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/ExerciseHintIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/ExerciseHintServiceTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/HestiaDatabaseTest.java (6 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseGitDiffReportIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseGitDiffReportServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseSolutionEntryIntegrationTest.java (11 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseTaskIntegrationTest.java (5 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseTaskServiceTest.java (14 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/StructuralTestCaseServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/TestwiseCoverageIntegrationTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/TestwiseCoverageReportServiceTest.java (3 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/hestia/behavioral/BehavioralTestCaseServiceLocalCILocalVCTest.java (4 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIResourceIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIResultServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCLocalCIIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCLocalCIParticipationIntegrationTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCSshIntegrationTest.java (0 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/MultipleHostKeyProviderTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/ProgrammingExerciseLocalVCLocalCIIntegrationTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/SharedQueueManagementServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/BuildLogEntryServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/GitlabCIServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsAuthorizationInterceptorTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsInternalUriServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsJobPermissionServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsJobServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/ProgrammingExerciseFeedbackCreationServiceTest.java (2 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/RepositoryAccessServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/connectors/gitlab/GitLabPersonalAccessTokenManagementServiceTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/service/connectors/jenkins/build_plan/JenkinsPipelineScriptCreatorTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/shared/architecture/module/AbstractModuleTestArchitectureTest.java (1 hunks)
💤 Files with no reviewable changes (1)
  • src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCSshIntegrationTest.java
🧰 Additional context used
📓 Path-based instructions (78)
src/test/java/de/tum/cit/aet/artemis/atlas/architecture/AtlasTestArchitectureTest.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/atlas/learningpath/LearningPathIntegrationTest.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/fileupload/AbstractFileUploadIntegrationTest.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/fileupload/architecture/FileUploadTestArchitectureTest.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/lti/architecture/LtiTestArchitectureTest.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/programming/AbstractProgrammingIntegrationGitlabCIGitlabSamlTest.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/programming/AbstractProgrammingIntegrationIndependentTest.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/programming/AbstractProgrammingIntegrationJenkinsGitlabTest.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/programming/AbstractProgrammingIntegrationLocalCILocalVCTest.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/programming/AbstractProgrammingIntegrationLocalCILocalVCTestBase.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/programming/AuxiliaryRepositoryServiceTest.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/programming/BuildPlanIntegrationTest.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/programming/ConsistencyCheckGitlabJenkinsIntegrationTest.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/programming/CourseGitlabJenkinsIntegrationTest.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/programming/GitServiceTest.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/programming/GitlabServiceTest.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/programming/IdePreferencesIntegrationTest.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/programming/PlantUmlIntegrationTest.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/programming/ProgrammingAssessmentIntegrationTest.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/programming/ProgrammingExerciseBuildPlanTest.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/programming/ProgrammingExerciseGitIntegrationTest.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/programming/ProgrammingExerciseGitlabJenkinsIntegrationTest.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/programming/ProgrammingExerciseGradingServiceTest.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/programming/ProgrammingExerciseIntegrationJenkinsGitlabTest.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/programming/ProgrammingExerciseParticipationIntegrationTest.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/programming/ProgrammingExerciseRepositoryServiceTest.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/programming/ProgrammingExerciseResultJenkinsIntegrationTest.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/programming/ProgrammingExerciseScheduleServiceTest.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/programming/ProgrammingExerciseServiceIntegrationTest.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/programming/ProgrammingExerciseServiceTest.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/programming/ProgrammingExerciseTemplateIntegrationTest.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/programming/ProgrammingExerciseTest.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/programming/ProgrammingExerciseTestCaseServiceTest.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/programming/ProgrammingSubmissionAndResultGitlabJenkinsIntegrationTest.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/programming/ProgrammingSubmissionIntegrationTest.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/programming/RepositoryIntegrationTest.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/programming/RepositoryProgrammingExerciseParticipationJenkinsIntegrationTest.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/programming/StaticCodeAnalysisIntegrationTest.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/programming/SubmissionPolicyIntegrationTest.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/programming/TestRepositoryResourceIntegrationTest.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/programming/architecture/ProgrammingTestArchitectureTest.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/programming/hestia/CodeHintIntegrationTest.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/programming/hestia/CodeHintServiceTest.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/programming/hestia/ExerciseHintIntegrationTest.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/programming/hestia/ExerciseHintServiceTest.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/programming/hestia/HestiaDatabaseTest.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/programming/hestia/ProgrammingExerciseGitDiffReportIntegrationTest.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/programming/hestia/ProgrammingExerciseGitDiffReportServiceTest.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/programming/hestia/ProgrammingExerciseSolutionEntryIntegrationTest.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/programming/hestia/ProgrammingExerciseTaskIntegrationTest.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/programming/hestia/ProgrammingExerciseTaskServiceTest.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/programming/hestia/StructuralTestCaseServiceTest.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/programming/hestia/TestwiseCoverageIntegrationTest.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/programming/hestia/TestwiseCoverageReportServiceTest.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/programming/hestia/behavioral/BehavioralTestCaseServiceLocalCILocalVCTest.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/programming/icl/LocalCIIntegrationTest.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/programming/icl/LocalCIResourceIntegrationTest.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/programming/icl/LocalCIResultServiceTest.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/programming/icl/LocalCIServiceTest.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/programming/icl/LocalVCIntegrationTest.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/programming/icl/LocalVCLocalCIIntegrationTest.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/programming/icl/LocalVCLocalCIParticipationIntegrationTest.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/programming/icl/LocalVCServiceTest.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/programming/icl/MultipleHostKeyProviderTest.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/programming/icl/ProgrammingExerciseLocalVCLocalCIIntegrationTest.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/programming/icl/SharedQueueManagementServiceTest.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/programming/service/BuildLogEntryServiceTest.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/programming/service/GitlabCIServiceTest.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/programming/service/JenkinsAuthorizationInterceptorTest.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/programming/service/JenkinsInternalUriServiceTest.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/programming/service/JenkinsJobPermissionServiceTest.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/programming/service/JenkinsJobServiceTest.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/programming/service/JenkinsServiceTest.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/programming/service/ProgrammingExerciseFeedbackCreationServiceTest.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/programming/service/RepositoryAccessServiceTest.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/programming/service/connectors/gitlab/GitLabPersonalAccessTokenManagementServiceTest.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/programming/service/connectors/jenkins/build_plan/JenkinsPipelineScriptCreatorTest.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/shared/architecture/module/AbstractModuleTestArchitectureTest.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/programming/ProgrammingExerciseServiceIntegrationTest.java (2)
Learnt from: Hialus
PR: ls1intum/Artemis#7451
File: src/test/java/de/tum/in/www1/artemis/exercise/programmingexercise/ProgrammingExerciseTestService.java:9-9
Timestamp: 2024-10-08T15:35:48.767Z
Learning: The use of wildcard imports is acceptable in this project as specified in the `.editorconfig` file.
Learnt from: Hialus
PR: ls1intum/Artemis#7451
File: src/test/java/de/tum/in/www1/artemis/exercise/programmingexercise/ProgrammingExerciseTestService.java:9-9
Timestamp: 2024-01-19T15:49:43.303Z
Learning: The use of wildcard imports is acceptable in this project as specified in the `.editorconfig` file.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseServiceTest.java (2)
Learnt from: Hialus
PR: ls1intum/Artemis#7451
File: src/test/java/de/tum/in/www1/artemis/exercise/programmingexercise/ProgrammingExerciseTestService.java:9-9
Timestamp: 2024-10-08T15:35:48.767Z
Learning: The use of wildcard imports is acceptable in this project as specified in the `.editorconfig` file.
Learnt from: Hialus
PR: ls1intum/Artemis#7451
File: src/test/java/de/tum/in/www1/artemis/exercise/programmingexercise/ProgrammingExerciseTestService.java:9-9
Timestamp: 2024-01-19T15:49:43.303Z
Learning: The use of wildcard imports is acceptable in this project as specified in the `.editorconfig` file.
🔇 Additional comments (164)
src/test/java/de/tum/cit/aet/artemis/lti/architecture/LtiTestArchitectureTest.java (3)

3-3: LGTM: Import statement added correctly.

The addition of the java.util.Set import is necessary for the updated method signature and is placed correctly with other imports.


8-8: LGTM: Class signature updated to improve flexibility.

The removal of the generic type parameter <AbstractLtiIntegrationTest> from the class signature makes LtiTestArchitectureTest more flexible. This change aligns well with the updated method signature and improves the class's extensibility.


Line range hint 1-20: Overall, excellent refactoring to improve test architecture flexibility.

The changes in this file successfully contribute to the PR's objective of refactoring programming tests. By modifying the class and method signatures, you've enhanced the flexibility and extensibility of the test architecture. This allows for easier addition of multiple integration test classes in the future if needed.

Key improvements:

  1. Removal of the generic type constraint on the class.
  2. Update of the method to return a Set of Classes instead of a single Class.
  3. Consistent naming updates to reflect these changes.

These modifications align well with good software engineering practices, promoting more maintainable and adaptable code.

src/test/java/de/tum/cit/aet/artemis/atlas/architecture/AtlasTestArchitectureTest.java (3)

3-3: LGTM: Import statement addition is appropriate.

The addition of the java.util.Set import is necessary and correctly supports the changes made to the getAbstractModuleIntegrationTestClasses method.


8-8: LGTM: Class signature update improves flexibility.

The removal of the generic type parameter from the class signature aligns with the PR objectives of refactoring the test architecture. This change allows for more flexibility in the implementation and is consistent with the modifications in the parent class.


Line range hint 1-20: Summary: Architectural improvements enhance test flexibility and extensibility.

The changes made to AtlasTestArchitectureTest align well with the PR objectives of refactoring and improving the test architecture. The removal of the generic type parameter in the class signature and the modification of the getAbstractModuleIntegrationTestClasses method provide increased flexibility and allow for future extensibility.

These changes adhere to the provided coding guidelines, particularly:

  • Maintaining descriptive test naming
  • Utilizing JUnit 5 features
  • Enforcing package rules (as part of the architecture test)

The modifications lay a solid foundation for potential future enhancements to the test structure, allowing for the inclusion of multiple integration test classes if needed.

src/test/java/de/tum/cit/aet/artemis/fileupload/architecture/FileUploadTestArchitectureTest.java (2)

3-3: LGTM: Import statement added correctly.

The addition of the java.util.Set import is consistent with the changes in the method signature and is necessary for the new implementation.


8-8: LGTM: Class signature updated appropriately.

The removal of the generic type parameter simplifies the class signature and allows for more flexibility in handling multiple integration test classes. This change is consistent with the method signature update and adheres to the coding guidelines for test architecture.

src/test/java/de/tum/cit/aet/artemis/programming/icl/MultipleHostKeyProviderTest.java (4)

11-11: Updated import statement for the new base class.

The import statement has been updated to reflect the new base class AbstractProgrammingIntegrationLocalCILocalVCTestBase. This change aligns with the class extension modification.


Line range hint 1-32: Overall structure and adherence to coding guidelines.

The test class structure adheres well to the provided coding guidelines:

  1. The test name is descriptive (MultipleHostKeyProviderTest).
  2. The test size is small and specific, focusing on a single functionality.
  3. The test uses assertThat() for assertions, as recommended.
  4. The @Profile(PROFILE_LOCALVC) annotation is correctly applied.

The change in the base class doesn't affect the existing test method or class-level annotation, maintaining the test's original functionality while potentially benefiting from the new abstract base class.


Line range hint 1-32: Summary of changes and their impact.

The changes made to MultipleHostKeyProviderTest.java are part of the larger refactoring effort described in the PR objectives. The main modifications are:

  1. Updated import statement for the new base class.
  2. Changed the extended base class from AbstractLocalCILocalVCIntegrationTest to AbstractProgrammingIntegrationLocalCILocalVCTestBase.

These changes align with the PR's goal of creating new abstract test classes for various test setups. The modifications don't introduce any apparent issues and maintain the original functionality of the test. The refactoring should improve the organization and maintainability of the test code as intended.


15-15: Class now extends AbstractProgrammingIntegrationLocalCILocalVCTestBase.

The test class now extends AbstractProgrammingIntegrationLocalCILocalVCTestBase instead of AbstractLocalCILocalVCIntegrationTest. This change appears to be part of the refactoring effort mentioned in the PR objectives to create new abstract test classes for various test setups.

To ensure this change is consistent across the codebase, let's verify the usage of the new base class:

✅ Verification successful

Verification successful: AbstractProgrammingIntegrationLocalCILocalVCTestBase usage consistent

All relevant classes have been updated to extend AbstractProgrammingIntegrationLocalCILocalVCTestBase, and no remaining usages of AbstractLocalCILocalVCIntegrationTest were found.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the usage of AbstractProgrammingIntegrationLocalCILocalVCTestBase

# Test: Search for classes extending AbstractProgrammingIntegrationLocalCILocalVCTestBase
echo "Classes extending AbstractProgrammingIntegrationLocalCILocalVCTestBase:"
rg --type java "class \w+ extends AbstractProgrammingIntegrationLocalCILocalVCTestBase"

# Test: Search for remaining usages of AbstractLocalCILocalVCIntegrationTest
echo "Remaining usages of AbstractLocalCILocalVCIntegrationTest:"
rg --type java "AbstractLocalCILocalVCIntegrationTest"

Length of output: 2567

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIResultServiceTest.java (4)

11-11: LGTM: Import change aligns with class refactoring.

The addition of the import for AbstractProgrammingIntegrationLocalCILocalVCTestBase is consistent with the PR's objective to introduce new abstract test classes for various test setups.


Line range hint 16-31: LGTM: Overall structure and unchanged parts align with guidelines.

The test class structure, including the unchanged getTestPrefix() method and the test method testThrowsExceptionWhenResultIsNotLocalCIBuildResult(), aligns well with the provided coding guidelines:

  1. The test naming is descriptive.
  2. The test size is small and specific, focusing on a single scenario.
  3. The assert use is specific, using assertThatExceptionOfType.
  4. The class follows the naming convention for test classes.

These aspects contribute to maintaining a clear and maintainable test suite.


Line range hint 26-31: Verify localCIResultService usage after field removal.

The @Autowired private LocalCIResultService localCIResultService field has been removed, but the test method still uses localCIResultService. Please verify if this is intentional and if the localCIResultService is now provided by the new base class.

To ensure the localCIResultService is properly available, please run the following script:

#!/bin/bash
# Description: Verify the availability of localCIResultService in the base class or current class

# Test: Check if localCIResultService is defined in the base class
ast-grep --lang java --pattern 'abstract class AbstractProgrammingIntegrationLocalCILocalVCTestBase {
  $$$
  protected LocalCIResultService localCIResultService;
  $$$
}'

# Test: Check if localCIResultService is still defined in the current class
ast-grep --lang java --pattern 'class LocalCIResultServiceTest extends AbstractProgrammingIntegrationLocalCILocalVCTestBase {
  $$$
  private LocalCIResultService localCIResultService;
  $$$
}'

If localCIResultService is not found in either location, consider updating the test method to use the correct reference or inject the service if needed.


14-14: LGTM: Class signature updated to use new abstract base class.

The change to extend AbstractProgrammingIntegrationLocalCILocalVCTestBase aligns with the PR's objective to refactor programming tests and introduce new abstract test classes.

To ensure the new base class provides the necessary functionality, please run the following script:

src/test/java/de/tum/cit/aet/artemis/programming/architecture/ProgrammingTestArchitectureTest.java (4)

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

The package declaration matches the file path, and all imports are relevant and properly organized.


12-12: LGTM: Class declaration is appropriate.

The class name ProgrammingTestArchitectureTest is descriptive and follows the naming convention for test classes. Extending AbstractModuleTestArchitectureTest aligns with the PR objectives of refactoring programming tests.


14-17: LGTM: getModulePackage() method is correctly implemented.

The method properly overrides the superclass method and returns the expected package name for the programming module.


1-31: Overall assessment: Well-implemented architecture test for programming module.

This new file introduces a well-structured ProgrammingTestArchitectureTest class that extends AbstractModuleTestArchitectureTest. The implementation aligns with the PR objectives of refactoring programming tests and addresses the issue of scattered autowired components by centralizing abstract test classes.

The code follows good practices, including:

  1. Proper package and import organization
  2. Descriptive class and method names
  3. Correct method overrides
  4. Use of constants and immutable collections
  5. Improved readability with formatted blocks

This implementation contributes to enhancing the organization and maintainability of the test code as intended by the PR.

src/test/java/de/tum/cit/aet/artemis/programming/icl/SharedQueueManagementServiceTest.java (2)

11-11: Update import statement to reflect new base class.

The import statement has been correctly updated to import the new base class AbstractProgrammingIntegrationLocalCILocalVCTest. This change aligns with the modification of the class signature.


Line range hint 1-49: Overall assessment of changes and potential impact.

The changes to this test class align with the PR objectives of refactoring programming tests and creating new abstract test classes. The main modifications include:

  1. Extending a new base class AbstractProgrammingIntegrationLocalCILocalVCTest.
  2. Removing explicit @Autowired annotations for SharedQueueManagementService and HazelcastInstance.

These changes likely contribute to a more streamlined and consistent testing structure across the project. However, to ensure the refactoring doesn't introduce any issues:

  1. Verify that the new base class correctly provides the necessary dependencies (e.g., sharedQueueManagementService, hazelcastInstance).
  2. Ensure that the test setup and teardown processes are still functioning as expected with the new base class.
  3. Consider adding a comment explaining the role of the new base class and how it manages dependencies, to improve code maintainability.

To confirm the proper functioning of the new structure, consider running this test class along with other refactored tests:

As this change is part of a larger refactoring effort, consider creating or updating architecture tests to enforce the new structure across all relevant test classes. This will help maintain consistency and prevent regression to the old structure in future development.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseServiceTest.java (1)

14-14: LGTM: Class extension change aligns with PR objectives.

The change from extending AbstractSpringIntegrationIndependentTest to AbstractProgrammingIntegrationIndependentTest aligns well with the PR objectives. This new parent class is likely more specific to programming exercises, which should improve test organization and reduce code duplication across the test suite.

src/test/java/de/tum/cit/aet/artemis/programming/ConsistencyCheckGitlabJenkinsIntegrationTest.java (3)

Line range hint 1-62: Verify compliance with specific coding guidelines.

The changes align with most of the coding guidelines. However, please ensure the following:

  1. Use assertThat for assertions in the test methods.
  2. Track DB query counts for performance in the tests.
  3. Minimize context restarts if possible.

To verify compliance with these guidelines, please run the following script:

#!/bin/bash
# Description: Verify compliance with specific coding guidelines

# Test 1: Check for use of assertThat
echo "Checking for use of assertThat:"
rg -t java "assertThat" src/test/java/de/tum/cit/aet/artemis/programming/ConsistencyCheckGitlabJenkinsIntegrationTest.java

# Test 2: Check for DB query count tracking
echo "Checking for DB query count tracking:"
rg -t java "verifyNumberOfQueries" src/test/java/de/tum/cit/aet/artemis/programming/ConsistencyCheckGitlabJenkinsIntegrationTest.java

# Test 3: Check for context restart minimization
echo "Checking for context restart minimization:"
rg -t java "@DirtiesContext" src/test/java/de/tum/cit/aet/artemis/programming/ConsistencyCheckGitlabJenkinsIntegrationTest.java

If any of these guidelines are not met, please update the tests accordingly or provide a justification for any deviations.


8-8: LGTM: Class now extends a more specific base class.

The change to extend AbstractProgrammingIntegrationJenkinsGitlabTest aligns with the PR objectives and likely improves code organization for programming tests.

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

✅ Verification successful

: The new base class AbstractProgrammingIntegrationJenkinsGitlabTest exists and is correctly extended by relevant test classes. The removal of the @Autowired annotation aligns with centralized dependency management in the base class.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the implementation and usage of AbstractProgrammingIntegrationJenkinsGitlabTest

# Test 1: Check if the new base class exists
echo "Checking for AbstractProgrammingIntegrationJenkinsGitlabTest:"
fd -e java AbstractProgrammingIntegrationJenkinsGitlabTest

# Test 2: Check for other classes extending the new base class
echo "Checking for other classes extending AbstractProgrammingIntegrationJenkinsGitlabTest:"
rg -t java "class \w+ extends AbstractProgrammingIntegrationJenkinsGitlabTest"

# Test 3: Check the content of the new base class
echo "Displaying the content of AbstractProgrammingIntegrationJenkinsGitlabTest:"
fd -e java AbstractProgrammingIntegrationJenkinsGitlabTest -x cat {}

Length of output: 13384


8-8: Verify initialization of consistencyCheckTestService.

The removal of the @Autowired annotation for consistencyCheckTestService aligns with the PR objectives. However, please ensure that this service is still properly initialized and accessible in the test methods.

To verify the initialization and usage of consistencyCheckTestService, please run the following script:

If consistencyCheckTestService is not properly initialized or accessible, consider adding a comment explaining how it's now being managed.

✅ Verification successful

Initialization of consistencyCheckTestService Verified.

The consistencyCheckTestService is properly declared in the base class AbstractProgrammingIntegrationJenkinsGitlabTest and is accessible in ConsistencyCheckGitlabJenkinsIntegrationTest.java. The removal of the @Autowired annotation does not affect its initialization or usage within the test methods.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the initialization and usage of consistencyCheckTestService

# Test 1: Check for consistencyCheckTestService in the new base class
echo "Checking for consistencyCheckTestService in AbstractProgrammingIntegrationJenkinsGitlabTest:"
rg -t java "consistencyCheckTestService" $(fd -e java AbstractProgrammingIntegrationJenkinsGitlabTest)

# Test 2: Check for any new initialization of consistencyCheckTestService
echo "Checking for new initialization of consistencyCheckTestService:"
rg -t java "consistencyCheckTestService\s*=\s*new" src/test/java/de/tum/cit/aet/artemis/programming/

# Test 3: Check usage of consistencyCheckTestService in the current class
echo "Checking usage of consistencyCheckTestService in ConsistencyCheckGitlabJenkinsIntegrationTest:"
rg -t java "consistencyCheckTestService" src/test/java/de/tum/cit/aet/artemis/programming/ConsistencyCheckGitlabJenkinsIntegrationTest.java

Length of output: 732


Script:

#!/bin/bash
# Description: Verify the initialization and usage of consistencyCheckTestService

# Test 1: Check for consistencyCheckTestService in AbstractProgrammingIntegrationJenkinsGitlabTest
echo "Checking for consistencyCheckTestService in AbstractProgrammingIntegrationJenkinsGitlabTest:"
rg -t java "consistencyCheckTestService" $(fd -e java AbstractProgrammingIntegrationJenkinsGitlabTest)

# Test 2: Check for any new initialization of consistencyCheckTestService
echo "Checking for new initialization of consistencyCheckTestService:"
rg -t java "consistencyCheckTestService\s*=\s*new" src/test/java/de/tum/cit/aet/artemis/programming/

# Test 3: Check usage of consistencyCheckTestService in ConsistencyCheckGitlabJenkinsIntegrationTest
echo "Checking usage of consistencyCheckTestService in ConsistencyCheckGitlabJenkinsIntegrationTest:"
rg -t java "consistencyCheckTestService" src/test/java/de/tum/cit/aet/artemis/programming/ConsistencyCheckGitlabJenkinsIntegrationTest.java

Length of output: 1574

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCServiceTest.java (2)

13-13: LGTM: Import statement added for new abstract class.

The import statement for AbstractProgrammingIntegrationLocalCILocalVCTest has been correctly added, which is necessary for the updated class extension.


16-16: LGTM: Class extension updated and dependencies reduced.

The class now extends AbstractProgrammingIntegrationLocalCILocalVCTest, which aligns with the PR objectives of refactoring programming tests. The removal of @Autowired fields suggests a reduction in dependencies, potentially leading to more focused and maintainable tests.

To ensure that this refactoring hasn't inadvertently affected test coverage, please run the following script:

src/test/java/de/tum/cit/aet/artemis/programming/RepositoryProgrammingExerciseParticipationJenkinsIntegrationTest.java (2)

28-28: LGTM! Verify service accessibility in the new base class.

The removal of the @Autowired fields aligns with the PR objectives of addressing autowired components scattered throughout the test code. This change promotes better encapsulation and reduces duplication across test classes.

To ensure the removed services are still accessible through the new base class, run the following script:

#!/bin/bash
# Description: Verify the accessibility of removed services in the new base class

# Test: Check if the removed services are declared in the new base class
ast-grep --lang java --pattern 'abstract class AbstractProgrammingIntegrationJenkinsGitlabTest extends $_ {
  $$$
  $_(private|protected) ProgrammingExerciseTestRepository $_
  $$$
  $_(private|protected) ProgrammingExerciseUtilService $_
  $$$
  $_(private|protected) ParticipationUtilService $_
  $$$
}'

# Test: Check for any remaining usages of the removed fields in this class
rg --type java "programmingExerciseRepository|programmingExerciseUtilService|participationUtilService" src/test/java/de/tum/cit/aet/artemis/programming/RepositoryProgrammingExerciseParticipationJenkinsIntegrationTest.java

28-28: LGTM! Verify the new base class implementation.

The change to extend AbstractProgrammingIntegrationJenkinsGitlabTest aligns with the PR objectives of creating new abstract test classes for various test setups. This should improve code organization and reduce duplication for programming exercise tests.

To ensure the new base class is properly implemented, run the following script:

✅ Verification successful

Verified! The AbstractProgrammingIntegrationJenkinsGitlabTest base class is correctly implemented and the test class properly extends it, inheriting necessary dependencies.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the implementation of AbstractProgrammingIntegrationJenkinsGitlabTest

# Test: Check if the new base class exists and its content
ast-grep --lang java --pattern 'abstract class AbstractProgrammingIntegrationJenkinsGitlabTest extends $_ {
  $$$
}'

# Test: Check for other classes extending the new base class
rg --type java "extends AbstractProgrammingIntegrationJenkinsGitlabTest"

Length of output: 1191

src/test/java/de/tum/cit/aet/artemis/programming/PlantUmlIntegrationTest.java (1)

23-23: LGTM! Verify the new base class functionality.

The change to extend AbstractProgrammingIntegrationIndependentTest aligns with the PR objectives for refactoring programming tests. This should improve the organization and maintainability of the test code.

To ensure the new base class provides the necessary functionality, please run the following script:

src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsInternalUriServiceTest.java (2)

19-19: LGTM: Import statement aligns with class extension change.

The new import statement for AbstractProgrammingIntegrationJenkinsGitlabTest is correct and consistent with the updated class extension.


Line range hint 1-105: Summary: Refactoring aligns with PR objectives, verify abstract class setup

The changes to JenkinsInternalUriServiceTest align well with the PR objectives of refactoring programming tests and addressing autowired components. The main modifications are:

  1. Extending AbstractProgrammingIntegrationJenkinsGitlabTest instead of AbstractSpringIntegrationJenkinsGitlabTest.
  2. Removal of the @Autowired annotation for jenkinsInternalUrlService.

These changes contribute to a more organized test structure. However, it's crucial to ensure that the new abstract class provides all necessary setup and that jenkinsInternalUrlService is properly instantiated or injected.

The existing test methods remain unchanged, which is good for maintaining test coverage. Overall, this refactoring appears to improve the test architecture while preserving existing functionality.

src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationLocalCILocalVCTest.java (1)

1-27: LGTM: Package declaration and imports are well-organized.

The package declaration is correct, and the imports are relevant to the class's purpose. They cover necessary Spring annotations, Hazelcast, and various custom services and repositories required for the integration tests.

src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsJobServiceTest.java (3)

30-30: LGTM: Import statement aligns with class extension change.

The new import statement for AbstractProgrammingIntegrationJenkinsGitlabTest is correctly added to support the change in the class extension.


Line range hint 1-114: Summary of changes and their implications.

The main changes in this file are:

  1. Extending AbstractProgrammingIntegrationJenkinsGitlabTest instead of AbstractSpringIntegrationJenkinsGitlabTest.
  2. Removal of @Autowired annotations for JenkinsJobService and UserUtilService.
  3. Removal of user setup in the initTestCase method.

These changes align with the PR objectives to refactor programming tests and create new abstract test classes. The shift in dependency management (removal of @Autowired annotations) suggests that these dependencies are now handled differently, possibly by the new base class.

While the changes appear to be in line with the refactoring goals, it's important to ensure:

  1. The new base class provides all necessary setup and dependencies for these tests to function correctly.
  2. Test isolation is maintained, especially considering the removal of explicit user setup.
  3. The unchanged parts of the file (test methods) still function as expected with the new setup.

To ensure the refactoring hasn't introduced any regressions, please run these tests and verify that they all pass with the new setup.


33-33: LGTM: Class extension change aligns with PR objectives.

The change from AbstractSpringIntegrationJenkinsGitlabTest to AbstractProgrammingIntegrationJenkinsGitlabTest aligns with the PR objectives to create new abstract test classes for various test setups. This change appears to make the test more specific to programming integration tests with Jenkins and GitLab.

To ensure this change doesn't have unintended consequences, please run the following script to check for any other classes that might need similar updates:

src/test/java/de/tum/cit/aet/artemis/programming/service/RepositoryAccessServiceTest.java (3)

24-24: LGTM: Import statement updated correctly.

The import statement for AbstractProgrammingIntegrationJenkinsGitlabTest has been added, which aligns with the change in the class extension. This change is consistent with the refactoring of the test class hierarchy.


31-31: Overall, the changes improve test structure and align with refactoring goals.

The modifications to RepositoryAccessServiceTest.java successfully address the PR objectives by:

  1. Updating the parent class to a more specific AbstractProgrammingIntegrationJenkinsGitlabTest.
  2. Removing scattered @Autowired fields, likely centralizing dependencies in the parent class.
  3. Maintaining the existing test logic while improving the overall structure.

These changes should enhance maintainability and organization of the test code. Please ensure to run the provided verification scripts to confirm that all necessary dependencies and functionalities are still accessible after the refactoring.


31-31: LGTM: Removal of @Autowired fields improves test structure.

The removal of @Autowired fields aligns with the PR objectives of addressing scattered autowired components in test code. This change likely improves the overall structure and maintainability of the test class.

To ensure that all necessary dependencies are still available, please run the following script:

✅ Verification successful

Verified: @Autowired fields are correctly inherited from the parent class.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that all previously autowired dependencies are still accessible in the test methods

# Test: Check for usage of previously autowired fields in test methods
echo "Usage of previously autowired fields in test methods:"
rg -A 1 --type java "\b(userRepository|programmingExerciseRepository|repositoryAccessService|userUtilService|programmingExerciseUtilService|participationUtilService|programmingExerciseGradingService)\b" src/test/java/de/tum/cit/aet/artemis/programming/service/RepositoryAccessServiceTest.java

# Test: Check if these fields are declared in the parent class
echo "Declarations of previously autowired fields in parent class:"
rg -A 1 --type java "protected.*(userRepository|programmingExerciseRepository|repositoryAccessService|userUtilService|programmingExerciseUtilService|participationUtilService|programmingExerciseGradingService)" src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationJenkinsGitlabTest.java

Length of output: 2424

src/test/java/de/tum/cit/aet/artemis/programming/IdePreferencesIntegrationTest.java (3)

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

The overall structure of the test class adheres well to the provided coding guidelines:

  • Test names are descriptive and specific.
  • JUnit 5 features are used appropriately.
  • assertThat is used for assertions with good specificity.
  • The tests avoid direct database access, using repositories instead.
  • The test cases are small and focused.

Good job on maintaining code quality and following best practices!


22-22: LGTM! Verify repository accessibility.

The removal of @Autowired annotations for userIdeMappingRepository and ideRepository aligns with the PR objectives to address scattered autowired components. This change likely improves the test structure.

Please ensure that these repositories are still accessible in the test methods. Run the following script to verify:


22-22: LGTM! Verify new parent class functionality.

The change to extend AbstractProgrammingIntegrationIndependentTest aligns with the PR objectives to refactor programming tests. This should improve test organization and reduce duplication.

Please ensure that all necessary setup from AbstractSpringIntegrationIndependentTest is still available in AbstractProgrammingIntegrationIndependentTest. Run the following script to verify:

src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsAuthorizationInterceptorTest.java (2)

29-33: Summary: Changes align with PR objectives and coding guidelines.

The modifications to this test class, including the base class change and removal of fields, align well with the PR objectives to refactor programming tests and address scattered autowired components. The changes maintain compliance with the coding guidelines:

  1. Test naming remains descriptive.
  2. Test size is still small and specific.
  3. JUnit 5 features and assertThat assertions are preserved.
  4. The mock strategy (static mocks) is unaffected.
  5. Context restart minimization is maintained.

These changes should improve the organization and maintainability of the test code without compromising its functionality or adherence to best practices.


31-33: LGTM: Removal of fields aligns with PR objectives.

The removal of jenkinsServerUrl, jenkinsAuthorizationInterceptor, and restTemplate fields aligns with the PR objectives to address scattered autowired components. This change should improve the organization of the test code.

To ensure that the test methods still function correctly after these changes, please verify:

  1. The jenkinsServer variable is accessible in the initTestCase method.
  2. The restTemplate is still available for setting up the mockRestServiceServer.
  3. The jenkinsAuthorizationInterceptor is accessible in the test methods.

You can run the following script to check for any remaining usages of these fields:

#!/bin/bash
# Description: Verify the removal of fields

# Test: Check for any remaining usage of removed fields
rg --type java "jenkinsServerUrl|@Autowired.*JenkinsAuthorizationInterceptor|@Autowired.*RestTemplate" src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsAuthorizationInterceptorTest.java

If the script returns no results, it confirms that all references to the removed fields have been properly addressed.

src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsJobPermissionServiceTest.java (1)

19-19: LGTM! Verify service initialization after base class change.

The change to extend AbstractProgrammingIntegrationJenkinsGitlabTest aligns with the PR objectives for refactoring programming tests. This change, along with the removal of the @Autowired annotation for jenkinsJobPermissionsService, suggests a shift in how the service is initialized or accessed.

Please ensure that jenkinsJobPermissionsService is properly initialized in the new base class or through a factory method. You can verify this by running the following command:

Also applies to: 23-23

src/test/java/de/tum/cit/aet/artemis/programming/GitlabServiceTest.java (3)

34-34: LGTM: Class signature change aligns with PR objectives.

The change from AbstractSpringIntegrationJenkinsGitlabTest to AbstractProgrammingIntegrationJenkinsGitlabTest aligns well with the PR objectives of refactoring programming tests and creating new abstract test classes. This more specific base class likely provides common functionality for programming exercise tests, which should improve code organization and maintainability.


34-34: LGTM: Test methods and functionality preserved.

The preservation of test methods and overall functionality aligns well with the PR objectives. The refactoring has improved the structure of programming tests without affecting the core testing functionality. This approach ensures that existing tests continue to validate the system's behavior while benefiting from the improved organization.


34-34: Verify accessibility of removed fields in test methods.

The removal of @Autowired fields (programmingExerciseRepository, programmingExerciseBuildConfigRepository, programmingExerciseUtilService) and the @Value annotation for gitlabServerUrl aligns with the PR objectives of addressing scattered autowired components. This change likely improves code organization and maintainability.

However, please ensure that these removed fields are still accessible where needed in the test methods, possibly through methods in the new base class.

To verify the accessibility of the removed fields, please run the following script:

If the script returns any results, please ensure that these usages are properly handled after the refactoring.

src/test/java/de/tum/cit/aet/artemis/programming/service/connectors/gitlab/GitLabPersonalAccessTokenManagementServiceTest.java (4)

Line range hint 1-236: Overall assessment: Refactoring looks good, but requires thorough verification

The changes in this file, particularly extending AbstractProgrammingIntegrationJenkinsGitlabTest and removing autowired dependencies, appear to be part of a larger refactoring effort to improve the test structure. These changes have the potential to enhance maintainability and reduce coupling in the tests.

To ensure the refactoring hasn't introduced any regressions:

  1. Run all tests in this class and verify they pass.
  2. Check the code coverage to ensure it hasn't decreased.
  3. Review the AbstractProgrammingIntegrationJenkinsGitlabTest class to understand what setup and utilities it provides.
  4. Ensure that the removed autowired dependencies are properly handled by the new base class.
  5. Verify that the mock setup in setUp() and teardown() methods still works as expected.

If all verifications pass, this refactoring can be considered successful. If any issues are found, please address them before merging this PR.


32-32: LGTM: Class now extends AbstractProgrammingIntegrationJenkinsGitlabTest

The change to extend AbstractProgrammingIntegrationJenkinsGitlabTest instead of AbstractSpringIntegrationJenkinsGitlabTest appears to be a good refactoring step. This likely provides more specific setup for programming-related tests that interact with Jenkins and GitLab.

To ensure this change doesn't introduce any regressions, please verify that:

  1. All necessary setup from the previous base class is still available.
  2. The new base class provides all required functionality for these tests.

Also applies to: 36-36


Line range hint 36-236: Ensure all test methods function correctly with new class structure

While the test methods remain unchanged, they still use gitLabPersonalAccessTokenManagementService, userRepository, and userUtilService. Given the removal of the autowired dependencies, it's crucial to verify that these services are correctly provided by the new base class and that all test methods continue to function as expected.

Please perform the following verifications:

  1. Run all tests in this class to ensure they pass with the new structure.
  2. Check that the behavior of gitLabPersonalAccessTokenManagementService, userRepository, and userUtilService in the test methods matches the expected behavior from before the refactoring.
  3. Verify that the mock setup in setUp() and teardown() methods still works correctly with the new base class.

36-36: Verify availability of removed autowired dependencies

The removal of the autowired dependencies (GitLabPersonalAccessTokenManagementService, UserTestRepository, and UserUtilService) suggests that these are now provided by the new base class or are no longer needed. This change can lead to more maintainable and less coupled tests.

Please ensure that:

  1. The functionality provided by these services is still accessible in the test methods.
  2. If they are now provided by the base class, verify that they are properly initialized and configured.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseResultJenkinsIntegrationTest.java (2)

28-28: Class extension change improves test specificity.

The class now extends AbstractProgrammingIntegrationJenkinsGitlabTest instead of AbstractSpringIntegrationJenkinsGitlabTest. This change aligns with the coding guideline to use more specific test setups for programming exercises.


Line range hint 1-219: Overall improvement in test structure, with opportunities for further refinement.

The refactoring of ProgrammingExerciseResultJenkinsIntegrationTest represents a positive step towards a more modular and maintainable test suite. The change to extend AbstractProgrammingIntegrationJenkinsGitlabTest and the removal of @Autowired annotations align well with the project's coding guidelines, particularly the util_service_factory_pattern.

While the core functionality of the tests remains intact, there are opportunities to further enhance the test methods to fully comply with all specified coding guidelines. This includes making more use of JUnit 5 features, ensuring consistent use of assertThat, and potentially adding performance tracking tests.

These changes contribute to a more robust and efficient testing framework for programming exercises. To complete this refactoring effort, consider applying similar principles to related test classes and ensuring consistent implementation across the test suite.

src/test/java/de/tum/cit/aet/artemis/programming/service/JenkinsServiceTest.java (1)

41-41: Approved: Class extension change aligns with PR objectives

The change from extending AbstractSpringIntegrationJenkinsGitlabTest to AbstractProgrammingIntegrationJenkinsGitlabTest aligns well with the PR's objective of creating new abstract test classes for various test setups. This refactoring likely provides more specific functionality for programming exercises with Jenkins and GitLab integration, improving the organization and maintainability of the test code.

src/test/java/de/tum/cit/aet/artemis/programming/GitServiceTest.java (3)

42-42: 🧹 Nitpick (assertive)

Verify gitUtilService initialization and add explanatory comment.

The removal of the @Autowired annotation for gitUtilService aligns with the PR objective of addressing scattered autowired components. However, it's important to ensure that gitUtilService is still properly initialized and available for the test methods.

Please add a comment explaining how gitUtilService is now managed (e.g., if it's initialized in the parent class). This will improve code readability and maintainability.

To verify the proper initialization of gitUtilService, please run the following script:

#!/bin/bash
# Description: Check for gitUtilService initialization in AbstractProgrammingIntegrationIndependentTest

# Search for gitUtilService declaration or initialization in the abstract class
echo "Checking gitUtilService initialization in AbstractProgrammingIntegrationIndependentTest:"
rg --type java "gitUtilService" src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationIndependentTest.java

Line range hint 1-487: LGTM! Verify test execution with new abstract class.

The test methods remain unchanged and continue to adhere to the provided coding guidelines. This includes using descriptive test names, keeping tests small and specific, utilizing JUnit 5 features, and using AssertThat for specific assertions.

To ensure that the tests still run correctly with the new abstract class, please execute the following script:

#!/bin/bash
# Description: Run GitServiceTest and check for any failures

# Run the GitServiceTest
echo "Running GitServiceTest:"
./gradlew test --tests "de.tum.cit.aet.artemis.programming.GitServiceTest"

# Check the test results
echo "Checking test results:"
grep "GitServiceTest > " build/test-results/test/*.xml | grep -v "PASSED"

If the script outputs any failed tests, please review and address them accordingly.


42-42: LGTM! Verify consistency across test classes.

The change to extend AbstractProgrammingIntegrationIndependentTest aligns with the PR objective of creating new abstract test classes for various test setups. This should help in better organizing the test code and reducing scattered autowired components.

To ensure consistency across the codebase, please run the following script to check if other test classes have been updated similarly:

✅ Verification successful

Verified: All test classes consistently extend AbstractProgrammingIntegrationIndependentTest.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for test classes that might need to be updated to extend AbstractProgrammingIntegrationIndependentTest

# Search for test classes still extending AbstractSpringIntegrationIndependentTest
echo "Test classes still extending AbstractSpringIntegrationIndependentTest:"
rg --type java "class \w+Test extends AbstractSpringIntegrationIndependentTest" src/test/java

# Search for test classes already updated to extend AbstractProgrammingIntegrationIndependentTest
echo "Test classes updated to extend AbstractProgrammingIntegrationIndependentTest:"
rg --type java "class \w+Test extends AbstractProgrammingIntegrationIndependentTest" src/test/java

Length of output: 5044

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCIntegrationTest.java (2)

Line range hint 1-524: LGTM: Comprehensive test coverage and adherence to best practices

The LocalVCIntegrationTest class demonstrates excellent test coverage for various scenarios in local version control integration. The test methods are well-named, use appropriate JUnit 5 features, and follow the coding guidelines by using assertThat for assertions. The class effectively uses mocking where necessary and covers both happy path and error scenarios.


39-39: Approved: Class inheritance updated to new abstract base class

The change to extend AbstractProgrammingIntegrationLocalCILocalVCTestBase aligns with the PR objectives of refactoring programming tests. This new base class likely provides a more specific setup for programming integration tests.

To ensure this change hasn't inadvertently affected test functionality, please run the following verification script:

src/test/java/de/tum/cit/aet/artemis/programming/hestia/StructuralTestCaseServiceTest.java (3)

28-28: Improved test structure with new base class.

The change to extend AbstractProgrammingIntegrationLocalCILocalVCTestBase aligns well with the PR objectives. This new base class likely provides a more structured and specific setup for programming exercise integration tests, which should lead to improved organization and reduced duplication across test classes.


16-16: Verify accessibility of removed autowired dependencies.

The removal of several autowired fields (CourseUtilService, UserUtilService, HestiaUtilTestService, StructuralTestCaseService, and ProgrammingExerciseTestCaseTestRepository) suggests these are now provided by the new base class AbstractProgrammingIntegrationLocalCILocalVCTestBase. This change reduces boilerplate code and centralizes dependency management.

Please ensure that all these dependencies are still accessible in the test methods. If they are now provided through protected fields or methods in the base class, consider adding a comment or updating the class documentation to clarify how these dependencies are now accessed.

✅ Verification successful

Dependency accessibility in AbstractProgrammingIntegrationLocalCILocalVCTestBase confirmed

Our investigation has revealed that the base class AbstractProgrammingIntegrationLocalCILocalVCTestBase does indeed provide access to most of the required dependencies:

  1. The class is defined and extends AbstractProgrammingIntegrationLocalCILocalVCTest.
  2. It contains protected fields for:
    • HestiaUtilTestService
    • StructuralTestCaseService
    • UserUtilService

While CourseUtilService and ProgrammingExerciseTestCaseTestRepository (testCaseRepository) are not directly visible in this class, they are present in related classes, suggesting they might be inherited from a parent class or injected through other means.

The absence of a constructor doesn't indicate a problem, as Spring supports field injection, which is likely being used here.

In conclusion, the removal of autowired fields from the test class is justified, as the necessary dependencies are accessible through the base class. This change reduces boilerplate code and centralizes dependency management as intended.

To improve clarity, consider adding a comment in the test class documenting that these dependencies are provided by the base class, or update the base class's documentation to explicitly list all available dependencies for subclasses.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Verify that the new base class provides the necessary dependencies

# Check if the base class exists and contains the required fields or methods
ast-grep --lang java --pattern $'class AbstractProgrammingIntegrationLocalCILocalVCTestBase {
  $$$
  (protected $_ courseUtilService|protected $_ userUtilService|protected $_ hestiaUtilTestService|protected $_ structuralTestCaseService|protected $_ testCaseRepository)
  $$$
}'

# Check if there are any compilation errors in the test class due to missing dependencies
rg -p "cannot find symbol" -A 5 -B 5 src/test/java/de/tum/cit/aet/artemis/programming/hestia/StructuralTestCaseServiceTest.java

Length of output: 533


Script:

#!/bin/bash
# List all protected fields in the base class
ast-grep --lang java --pattern $'class AbstractProgrammingIntegrationLocalCILocalVCTestBase {
  $$$
  protected $_ $_;
  $$$
}'

# Find files with non-UTF-8 encoding
find . -type f -name "*.java" -exec LC_ALL=C grep -IL . {} \; > non_utf8_files.txt

# Check for constructor-based dependency injections in the base class
ast-grep --lang java --pattern $'class AbstractProgrammingIntegrationLocalCILocalVCTestBase {
  $$$
  public $_($_ ... ) {
    $$$
  }
  $$$
}'

Length of output: 103680


Script:

#!/bin/bash
# Identify and list all Java files with non-UTF-8 encoding
find . -type f -name "*.java" -exec bash -c 'file -i "$1" | grep -vq "utf-8"' _ {} \; > non_utf8_files.txt

# Exclude files with encoding issues and verify that the base class provides the necessary dependencies
ast-grep --lang java --pattern $'class AbstractProgrammingIntegrationLocalCILocalVCTestBase {
  $$$
  (protected $_ courseUtilService|protected $_ userUtilService|protected $_ hestiaUtilTestService|protected $_ structuralTestCaseService|protected $_ testCaseRepository)
  $$$
}' | grep -vf non_utf8_files.txt

# Check for constructor-based dependency injections in the base class, excluding problematic files
ast-grep --lang java --pattern $'class AbstractProgrammingIntegrationLocalCILocalVCTestBase {
  $$$
  public $_($_ ... ) {
    $$$
  }
  $$$
}' | grep -vf non_utf8_files.txt

Length of output: 82828


Script:

#!/bin/bash
# Search for the base class definition
grep -R -i -a "class AbstractProgrammingIntegrationLocalCILocalVCTestBase" .

# Look for protected fields matching the names of the required dependencies
grep -R -i -a "protected.*\(CourseUtilService\|UserUtilService\|HestiaUtilTestService\|StructuralTestCaseService\|ProgrammingExerciseTestCaseTestRepository\)" .

# Check for a constructor in the base class
grep -R -i -a "AbstractProgrammingIntegrationLocalCILocalVCTestBase(.*)" .

Length of output: 3416


28-28: Ensure test integrity after refactoring.

While the core logic of the test methods remains unchanged, it's crucial to verify that the new structure doesn't introduce any subtle issues. Please ensure that:

  1. All tests in this class are re-run and pass successfully.
  2. The test coverage remains the same or improves.
  3. There are no unintended side effects from the new base class.

Additionally, if it doesn't already exist, consider adding a dedicated test class for AbstractProgrammingIntegrationLocalCILocalVCTestBase to ensure its functionality is correctly implemented and maintained.

src/test/java/de/tum/cit/aet/artemis/programming/service/BuildLogEntryServiceTest.java (4)

Line range hint 367-372: LGTM: Good edge case testing.

This test method effectively checks the behavior of removeUnnecessaryLogsForProgrammingLanguage with empty or whitespace-only logs. It's a good practice to include such edge case tests.


Line range hint 1-390: Consider using external files for test data.

The test scenarios (GRADLE_SCENARIO and MAVEN_SCENARIO) contain large amounts of log data. To improve readability and maintainability, consider moving these scenarios to external resource files.

You could refactor this by:

  1. Creating resource files (e.g., gradle_scenario.log and maven_scenario.log) in the src/test/resources directory.
  2. Loading these files in your test class using a utility method.

Example:

private String loadScenario(String fileName) {
    return new String(getClass().getResourceAsStream("/" + fileName).readAllBytes(), StandardCharsets.UTF_8);
}

@ValueSource(strings = { "gradle_scenario.log", "maven_scenario.log" })
@ParameterizedTest
void testScenario(String scenarioFile) {
    String scenario = loadScenario(scenarioFile);
    // ... rest of the test
}

This approach would make the test class more readable and easier to maintain.

Also, ensure that the new testing approach (extending AbstractProgrammingIntegrationIndependentTest and removing @Autowired annotations) is consistently applied across all relevant test classes in the codebase.

#!/bin/bash
# Check for consistency in test class extensions and Autowired annotations
echo "Classes extending AbstractProgrammingIntegrationIndependentTest:"
grep -R "extends AbstractProgrammingIntegrationIndependentTest" src/test/java
echo "Classes with @Autowired annotations:"
grep -R "@Autowired" src/test/java

16-16: Class extension change requires verification.

The class now extends AbstractProgrammingIntegrationIndependentTest instead of AbstractSpringIntegrationIndependentTest. This change might affect the test setup and execution.

Please ensure that:

  1. The new parent class provides all necessary setup for these tests.
  2. The change is consistent across all similar test classes.

Also applies to: 20-20

✅ Verification successful

Please rerun the verification with the corrected shell script below.

Also applies to: 20-20


Class extension change is consistent, @Autowired removal is isolated.

The change from extending AbstractSpringIntegrationIndependentTest to AbstractProgrammingIntegrationIndependentTest appears to be consistent across the codebase. There are no remaining classes that extend AbstractSpringIntegrationIndependentTest.

Regarding the removal of the @Autowired annotation:

  1. This change seems to be isolated to the buildLogEntryService in the BuildLogEntryServiceTest class.
  2. @Autowired annotations are still widely used throughout the codebase, including in test classes.

This suggests that the removal of @Autowired for buildLogEntryService is likely intentional but not part of a global refactoring effort. It may be an initial step towards moving away from field injection to constructor injection for this specific service.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for consistency in test class extensions
echo "Classes extending AbstractProgrammingIntegrationIndependentTest:"
grep -R "extends AbstractProgrammingIntegrationIndependentTest" src/test/java
echo "Classes still extending AbstractSpringIntegrationIndependentTest:"
grep -R "extends AbstractSpringIntegrationIndependentTest" src/test/java

Length of output: 169335


Script:

#!/bin/bash
# Check for consistency in test class extensions
echo "Classes extending AbstractProgrammingIntegrationIndependentTest:"
grep -R "extends AbstractProgrammingIntegrationIndependentTest" src/test/java
echo "Classes still extending AbstractSpringIntegrationIndependentTest:"
grep -R "extends AbstractSpringIntegrationIndependentTest" src/test/java
# Check for @Autowired annotations
echo "Classes with @Autowired annotations:"
grep -R "@Autowired" src/test/java

Length of output: 192019


Line range hint 359-365: Consider enhancing test assertions.

The current assertion assertThat(result).hasSizeLessThan(30) is quite broad. Consider adding more specific assertions to ensure the filtered logs contain the expected content.

You could improve the test by:

  1. Asserting on specific log entries that should be present after filtering.
  2. Checking for log entries that should be removed.
  3. Verifying the order of important log entries.

Example:

assertThat(result).hasSizeLessThan(30)
    .extracting(BuildLogEntry::getMessage)
    .contains("BUILD FAILED")
    .doesNotContain("Pull image progress: Downloading");

Also, verify that buildLogEntryService is properly initialized without the @Autowired annotation.

src/test/java/de/tum/cit/aet/artemis/programming/SubmissionPolicyIntegrationTest.java (3)

34-34: Class extension change improves test organization.

The change from AbstractSpringIntegrationJenkinsGitlabTest to AbstractProgrammingIntegrationJenkinsGitlabTest suggests a more specific base class for programming exercise tests. This change likely provides more relevant setup and utilities for programming-specific test scenarios.


Line range hint 41-49: Verify init() method functionality with removed dependencies.

The init() method seems to function correctly despite the removal of previously @Autowired fields. Please ensure that all necessary setup steps are still being performed correctly, especially those that might have relied on the removed services (e.g., programmingExerciseRepository, gradingService).

To verify the correct setup, you can add logging or assertions after each step in the init() method. For example:

@BeforeEach
void init() {
    userUtilService.addUsers(TEST_PREFIX, 2, 1, 1, 1);
    // Add assertion or logging here
    userUtilService.addInstructor("other-instructor-group", TEST_PREFIX + "other-instructor");
    // Add assertion or logging here
    // ... (continue for each step)
    assertThat(programmingExercise).isNotNull();
    assertThat(programmingExerciseId).isNotNull();
}

Line range hint 51-456: Comprehensive test coverage with good use of parameterized testing.

The test methods cover a wide range of scenarios for submission policy management, which is commendable. The use of parameterized testing (e.g., @ParameterizedTest) is an excellent practice for reducing code duplication and ensuring thorough coverage of different cases.

To ensure that the removal of @Autowired fields hasn't affected test functionality, consider adding a simple end-to-end test that exercises the main workflow of submission policy management. This test should create a policy, apply it to an exercise, and verify its effects on submissions. For example:

@Test
@WithMockUser(username = TEST_PREFIX + "instructor1", roles = "INSTRUCTOR")
void testEndToEndSubmissionPolicyWorkflow() {
    // Create and add a submission policy
    addSubmissionPolicyToExercise(SubmissionPolicyBuilder.lockRepo().active(true).limit(2).policy());
    
    // Verify policy was added correctly
    ProgrammingExercise updatedExercise = updatedExercise();
    assertThat(updatedExercise.getSubmissionPolicy()).isNotNull();
    assertThat(updatedExercise.getSubmissionPolicy().getSubmissionLimit()).isEqualTo(2);
    
    // Simulate submissions and verify policy enforcement
    ProgrammingExerciseStudentParticipation participation = participationUtilService.addStudentParticipationForProgrammingExercise(programmingExercise, TEST_PREFIX + "student1");
    
    // First submission (should be allowed)
    Result result1 = simulateSubmission(participation);
    assertThat(result1.isRated()).isTrue();
    
    // Second submission (should be allowed)
    Result result2 = simulateSubmission(participation);
    assertThat(result2.isRated()).isTrue();
    
    // Third submission (should not be rated due to policy)
    Result result3 = simulateSubmission(participation);
    assertThat(result3.isRated()).isFalse();
    
    // Helper method to simulate a submission
    private Result simulateSubmission(ProgrammingExerciseStudentParticipation participation) {
        String repositoryName = programmingExercise.getProjectKey().toLowerCase() + "-" + participation.getStudent().getLogin();
        var resultNotification = ProgrammingExerciseFactory.generateTestResultDTO(/* ... */);
        var resultRequestBody = convertBuildResultToJsonObject(resultNotification);
        return gradingService.processNewProgrammingExerciseResult(participation, resultRequestBody);
    }
}

This end-to-end test would help verify that the core functionality remains intact after the refactoring.

src/test/java/de/tum/cit/aet/artemis/atlas/learningpath/LearningPathIntegrationTest.java (3)

376-379: LGTM: Updated Javadoc reference

The package reference in the Javadoc has been correctly updated to point to the atlas package instead of the service package. This change improves the accuracy of the documentation.


Line range hint 465-484: LGTM: Updated Javadoc reference

The package reference in the Javadoc has been correctly updated to point to the atlas package instead of the service package. This change enhances the accuracy of the documentation and maintains consistency with the previous update.


Line range hint 1-1010: Summary: Comprehensive and well-structured integration test

This file provides a thorough integration test for the LearningPath functionality. It covers various scenarios, user roles, and edge cases, which is crucial for ensuring the reliability of the system. The recent changes improve the accuracy of the documentation by updating package references.

Key strengths:

  1. Comprehensive test coverage
  2. Clear organization using nested test classes
  3. Consistent use of JUnit 5 features and AssertThat assertions

Areas for potential improvement:

  1. Some test methods could be refactored for better focus and readability
  2. Additional specific assertions could enhance test clarity in some areas

Overall, this test file is of high quality and the recent changes contribute positively to its maintenance.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseBuildPlanTest.java (2)

12-12: Update of base class to AbstractProgrammingIntegrationGitlabCIGitlabSamlTest

The class now extends AbstractProgrammingIntegrationGitlabCIGitlabSamlTest instead of AbstractSpringIntegrationGitlabCIGitlabSamlTest. This change aligns with the refactoring efforts to use specialized abstract test classes for different test setups.


Line range hint 17-19: Ensure services are accessible from the new base class

The init() method uses programmingExerciseUtilService and exerciseUtilService, but these fields are no longer declared in this class. Since the @Autowired fields have been removed, verify that these services are provided by the new base class AbstractProgrammingIntegrationGitlabCIGitlabSamlTest. If they are not available, you may need to reintroduce them or adjust the method to access the services appropriately.

src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationGitlabCIGitlabSamlTest.java (1)

27-81: ⚠️ Potential issue

Avoid direct database access in tests

The test class directly autowires repositories, which may lead to database access during tests. According to the coding guidelines (avoid_db_access: true), tests should avoid accessing the database to improve performance and reliability. Instead, use fixed data and mock dependencies.

Please check the test methods to ensure that they do not perform database operations. Mock the repositories and services as needed.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/TestwiseCoverageReportServiceTest.java (1)

16-16: Verify that necessary dependencies are provided by the new base class

The test class now extends AbstractProgrammingIntegrationLocalCILocalVCTestBase, and several @Autowired fields have been removed. Please verify that all required services and repositories are correctly initialized by the new base class to prevent NullPointerException or other issues.

Run the following script to confirm that the base class provides the necessary dependencies:

Also applies to: 25-25

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCLocalCIParticipationIntegrationTest.java (2)

15-15: Updated import aligns with new base class

The import statement has been updated to reflect the new base class AbstractProgrammingIntegrationLocalCILocalVCTest, which is appropriate given the change in inheritance.


25-25: ⚠️ Potential issue

Verify availability of autowired services after base class change

Changing the base class to AbstractProgrammingIntegrationLocalCILocalVCTest may affect the injection of services like programmingExerciseUtilService, vcsAccessLogRepository, and participationUtilService used in this test class. Please ensure that these services are provided by the new base class or reintroduce them to prevent potential NullPointerExceptions.

Apply this diff if the services are not available through the new base class:

+ @Autowired
+ private ProgrammingExerciseUtilService programmingExerciseUtilService;

+ @Autowired
+ private VcsAccessLogRepository vcsAccessLogRepository;

+ @Autowired
+ private ParticipationUtilService participationUtilService;
src/test/java/de/tum/cit/aet/artemis/programming/BuildPlanIntegrationTest.java (2)

17-17: Ensure compatibility with the new base class

Changing the superclass from AbstractSpringIntegrationJenkinsGitlabTest to AbstractProgrammingIntegrationJenkinsGitlabTest may have implications on the test configuration and dependency injection. Please verify that all necessary beans and configurations are correctly inherited and that the tests execute as expected.


Line range hint 19-36: Confirm dependencies are properly provided by the new base class

In the init() method, the following repositories and services are used but are no longer declared in this class:

  • programmingExerciseRepository
  • programmingExerciseBuildConfigRepository
  • buildPlanRepository
  • programmingExerciseUtilService

Ensure that these dependencies are provided by AbstractProgrammingIntegrationJenkinsGitlabTest and are correctly initialized. Missing or improperly injected dependencies could lead to NullPointerException during test execution.

To verify if these dependencies are declared and autowired in the superclass, you can run the following script:

src/test/java/de/tum/cit/aet/artemis/programming/hestia/CodeHintIntegrationTest.java (3)

16-16: Import statement correctly updated

The import statement for AbstractProgrammingIntegrationIndependentTest is appropriately added to match the new base class.


22-22: Class extends the updated abstract test class

Changing the base class to AbstractProgrammingIntegrationIndependentTest ensures that the test class utilizes the correct setup for programming integration tests.


129-129: Repository usage updated to the appropriate repository

The update to use programmingExerciseSolutionEntryRepository.save(newEntry) ensures that the correct repository is used for saving ProgrammingExerciseSolutionEntry entities, maintaining consistency.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTestCaseServiceTest.java (2)

Line range hint 73-76: Check availability of testCaseRepository in shouldUpdateTestWeight

In the shouldUpdateTestWeight test method, testCaseRepository is used to retrieve and update test cases. Confirm that testCaseRepository is accessible to prevent potential NullPointerException.

Ensure that testCaseRepository is provided by the superclass or properly initialized.


31-31: 💡 Codebase verification

Inheritance of Required Services Missing

The superclass AbstractProgrammingIntegrationLocalCILocalVCTest does not provide the required protected services (userUtilService, programmingExerciseUtilService, exerciseUtilService, programmingExerciseRepository, testCaseRepository, participationUtilService, feedbackCreationService, gitService, groupNotificationService, websocketMessagingService) previously available. This may lead to uninitialized dependencies in ProgrammingExerciseTestCaseServiceTest.

🔗 Analysis chain

Verify inheritance of required services after superclass change

The class now extends AbstractProgrammingIntegrationLocalCILocalVCTest. Ensure that all necessary services and repositories previously autowired are correctly inherited from the new superclass.

You can run the following script to check if the required services are available in the superclass:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if superclass provides the required protected fields.

# List the declarations of the superclass
rg --type java -A 5 -B 2 'class AbstractProgrammingIntegrationLocalCILocalVCTest' -g '*.java'

# Search for the required services in the superclass
rg --type java 'protected .* (userUtilService|programmingExerciseUtilService|exerciseUtilService|programmingExerciseRepository|testCaseRepository|participationUtilService|feedbackCreationService|gitService|groupNotificationService|websocketMessagingService);' -g '*.java'

Length of output: 10441

⛔ Skipped due to learnings
Learnt from: Hialus
PR: ls1intum/Artemis#7451
File: src/test/java/de/tum/in/www1/artemis/exercise/programmingexercise/ProgrammingExerciseTestService.java:9-9
Timestamp: 2024-10-08T15:35:48.767Z
Learning: The use of wildcard imports is acceptable in this project as specified in the `.editorconfig` file.
Learnt from: Hialus
PR: ls1intum/Artemis#7451
File: src/test/java/de/tum/in/www1/artemis/exercise/programmingexercise/ProgrammingExerciseTestService.java:9-9
Timestamp: 2024-01-19T15:49:43.303Z
Learning: The use of wildcard imports is acceptable in this project as specified in the `.editorconfig` file.
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseGitIntegrationTest.java (2)

34-34: Confirm All Services Are Properly Initialized After Changing Base Class

By changing the base class to AbstractProgrammingIntegrationIndependentTest, ensure that all required services and repositories used in this test class (e.g., userUtilService, programmingExerciseUtilService, exerciseUtilService, programmingExerciseRepository, participationUtilService, gitUtilService, gitService) are properly initialized and available. This is essential to prevent NullPointerException or other runtime errors during test execution.


Line range hint 94-96: Consistent Use of Mock Strategies

The coding guidelines specify the use of static mocks (mock_strategy: static_mocks). In the initTestCase() method, methods like doReturn and doNothing are used to mock behaviors. Ensure that these mocks are consistent with the project's mock strategy and consider using static mocks if that aligns better with the guidelines.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/HestiaDatabaseTest.java (16)

13-13: Update import to new abstract test class

The import statement correctly updates to AbstractProgrammingIntegrationIndependentTest, aligning with the new test framework.


26-26: Extend from AbstractProgrammingIntegrationIndependentTest

Changing the superclass enhances the test structure and adheres to the updated testing architecture.


43-43: Saving the task using taskRepository

The task is appropriately saved to the repository, ensuring it is persisted for the tests.


62-62: Assert task retrieval after addition

The assertion correctly verifies that the added task is retrieved as expected from the repository.


69-69: Verify task deletion after exercise removal

The test properly checks that tasks are deleted when the programming exercise is removed.


76-76: Retrieve test cases for the programming exercise

Fetching test cases associated with the exercise is correctly implemented.


88-88: Confirm deletion of test cases and solution entries

The assertions ensure that test cases and solution entries are deleted alongside the programming exercise as expected.


96-96: Add test cases to task and verify associations

Associating test cases with the task is implemented correctly, maintaining the integrity of relationships.


100-101: Save and delete task in repository

The task is correctly saved and then deleted, testing the repository's handling of task lifecycle.


102-102: Verify test cases remain after task deletion

The assertion confirms that deleting a task does not erroneously remove associated test cases.


109-109: Initialize test cases for code hint association

Fetching and asserting test cases before associating them with a code hint is correctly handled.


113-113: Associate task with test cases and save

The task is properly associated with test cases and saved, maintaining correct relationships.


132-132: Save task with associated code hints

The task correctly includes the code hint in its exercise hints before saving, ensuring bidirectional relationships are maintained.


142-142: Verify remaining entities after code hint deletion

The assertions accurately confirm that tasks and solution entries persist after a code hint is deleted.


150-150: Confirm complete cleanup after exercise deletion

The test ensures all related entities are deleted when the programming exercise is removed, maintaining database integrity.

Also applies to: 153-153


159-160: Delete task with code hint and verify cascading deletes

Deleting the task and verifying that code hints are also deleted, while test cases and solution entries remain, is correctly implemented.

Also applies to: 162-162

src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationJenkinsGitlabTest.java (1)

173-208: Ensure utility services adhere to the factory pattern.

The utility services injected from lines 173 to 208 should align with the util_service_factory_pattern: true guideline. Confirm that these services are implemented following the factory pattern, promoting better modularity and reusability.

Please verify the implementation of these utility services to ensure they conform to the factory pattern. If they do not, consider refactoring them accordingly.

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIServiceTest.java (3)

28-28: Ensure the new base class provides necessary dependencies

The class now extends AbstractProgrammingIntegrationLocalCILocalVCTest instead of AbstractSpringIntegrationLocalCILocalVCTest. Please verify that the new base class initializes all required services and dependencies previously provided by the original base class.


Line range hint 154-203: Ensure consistency in GetCheckoutDirectoriesTests nested class

The nested test class GetCheckoutDirectoriesTests contains multiple test methods for different programming languages. Ensure that all programming languages supported by the application are covered, or document why certain languages are omitted.

Check if additional tests are needed for other programming languages like Python or C++.


Line range hint 71-85: Dependencies in testReturnCorrectBuildStatus() may be missing

The test method uses several services (userUtilService, programmingExerciseUtilService, exerciseUtilService, participationUtilService) that were removed from the autowired fields. Verify that these services are now provided by the new base class or initialize them appropriately.

Run the following script to check if these services are available in the new base class:

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseRepositoryServiceTest.java (2)

17-17: Change of base class aligns with refactoring objectives

Changing the base class to AbstractProgrammingIntegrationIndependentTest is appropriate and aligns with the refactoring efforts to improve the test architecture by introducing new abstract test classes. This enhances the organization and maintainability of the test code.


Line range hint 29-41: Verify initialization of services after changing the base class

With the removal of @Autowired annotations and the change to AbstractProgrammingIntegrationIndependentTest, ensure that all services and utilities used in this @BeforeEach method (e.g., userUtilService, programmingExerciseUtilService, exerciseUtilService, participationUtilService, programmingExerciseRepository) are properly initialized by the new base class. Confirm that these dependencies are available to prevent NullPointerException or other runtime errors during test execution.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseTaskIntegrationTest.java (5)

18-18: LGTM: Updated base class to AbstractProgrammingIntegrationIndependentTest

The import and change to the new base class align with the PR's objective to refactor tests using new abstract test classes, enhancing test structure and maintainability.


24-24: Confirmed: Test class extends the appropriate new base class

The test class now extends AbstractProgrammingIntegrationIndependentTest, which is consistent with the refactoring efforts and ensures the test uses the correct setup.


117-117: Avoid direct database access in tests

Accessing the database through taskRepository.findByExerciseIdWithTestCaseAndSolutionEntriesElseThrow should be avoided in tests as per the coding guidelines (avoid_db_access: true). Consider mocking the repository or using predefined data instead.


142-142: Avoid direct database access in tests

As previously mentioned, direct database access in tests should be avoided. The usage of taskRepository.findByExerciseId directly queries the database. Please consider using mocks or in-memory data to simulate database interactions.


83-83: ⚠️ Potential issue

Update variable name to maintain consistency

The variable programmingExerciseSolutionEntryRepository should be renamed to solutionEntryRepository to reflect the changes made in the repository variable names, ensuring consistency throughout the test class.

Apply this diff to update the variable name:

- assertThat(programmingExerciseSolutionEntryRepository.findAllById(solutionEntryIdsBeforeDeleting)).isEmpty();
+ assertThat(solutionEntryRepository.findAllById(solutionEntryIdsBeforeDeleting)).isEmpty();

Likely invalid or redundant comment.

src/test/java/de/tum/cit/aet/artemis/programming/AuxiliaryRepositoryServiceTest.java (1)

16-16: Ensure all dependencies are provided by the new base class

The autowired fields auxiliaryRepositoryRepository, auxiliaryRepositoryService, exerciseUtilService, programmingExerciseUtilService, and programmingExerciseRepository have been removed from this test class. Please verify that these dependencies are correctly provided by AbstractProgrammingIntegrationIndependentTest or its superclasses to prevent any NullPointerException during test execution.

You can run the following script to confirm that the base classes declare these fields:

This script searches for the protected field declarations of the required dependencies in the base classes. Ensure that these fields are properly initialized to avoid runtime issues.

✅ Verification successful

Dependencies Correctly Provided by the Superclass

All required dependencies (auxiliaryRepositoryRepository, auxiliaryRepositoryService, exerciseUtilService, programmingExerciseUtilService, and programmingExerciseRepository) are properly declared in AbstractProgrammingIntegrationIndependentTest.java. This ensures they are available to AuxiliaryRepositoryServiceTest, preventing any NullPointerException during test execution.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that the base classes provide the necessary dependencies.

# Expected: Fields are declared in the base class hierarchy.

# Find all superclass files
superclasses=(
  "AbstractProgrammingIntegrationIndependentTest.java"
  "AbstractSpringIntegrationTest.java"
  "AbstractArtemisIntegrationTest.java"
)

for superclass in "${superclasses[@]}"; do
  class_file=$(fd "$superclass")
  if [ -n "$class_file" ]; then
    echo "Checking in class file: $class_file"
    rg 'protected (AuxiliaryRepositoryRepository|AuxiliaryRepositoryService|ExerciseUtilService|ProgrammingExerciseUtilService|ProgrammingExerciseTestRepository) ' "$class_file"
  fi
done

Length of output: 2262

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseGitDiffReportIntegrationTest.java (2)

14-14: Adhere to the coding guidelines for test class hierarchy.

The change in the base class to AbstractProgrammingIntegrationLocalCILocalVCTestBase should ensure compliance with the coding guidelines, such as minimizing context restarts (context_restart_minimize: true) and using the utility service factory pattern (util_service_factory_pattern: true).


24-24: Confirm the test class provides necessary configurations and utilities.

By extending AbstractProgrammingIntegrationLocalCILocalVCTestBase, verify that this base class includes all required configurations, utilities, and context setups needed for the integration tests to function correctly.

You can run the following command to ensure that the base class includes the necessary beans and configurations:

Ensure that the output shows the services are available in the inheritance hierarchy.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/CodeHintServiceTest.java (8)

20-29: Update Base Test Class to Reflect Correct Integration Test

The change from AbstractSpringIntegrationIndependentTest to AbstractProgrammingIntegrationIndependentTest aligns the test class with the appropriate abstraction for programming exercises. This ensures that the test setup is correctly configured for programming integration tests.


58-58: Verify Repository Change for Solution Entries

In the addSolutionEntryToTestCase method, the repository has been updated to programmingExerciseSolutionEntryRepository. Ensure that this change is consistent throughout the test class and that the repository is properly initialized and injected.


84-84: Ensure Correct Saving of Solution Entries

The use of programmingExerciseSolutionEntryRepository.saveAll(solutionEntries); in the addCodeHintToTask method replaces the previous repository interaction. Confirm that all solution entries are being saved as expected and that the repository correctly handles the batch operation.


165-165: Confirm Retrieval of Solution Entries with Test Cases

The method programmingExerciseSolutionEntryRepository.findByExerciseIdWithTestCases(exercise.getId()); is used to fetch all solution entries associated with the exercise, including their linked test cases. This appears to be an appropriate use of the repository method.


186-186: Validate Persistence of Updated Solution Entry

The test verifies that updates to a ProgrammingExerciseSolutionEntry are correctly persisted and retrieved. This ensures that any modifications to solution entries are accurately reflected in the database.


203-203: Check Association of New Solution Entries

After adding a new solution entry to a code hint, the test confirms that it is correctly associated with the exercise. This enhances the robustness of the test by ensuring that new entries are properly linked.


219-222: Verify Removal of Solution Entries from Code Hints

The test confirms that when a solution entry is removed from a code hint, it is no longer associated with that hint but remains in the database. This behavior is important for maintaining data integrity without unintended deletions.


243-246: Prevent Saving Invalid Solution Entries

By throwing a BadRequestAlertException when trying to save a solution entry with a test case unrelated to the hint's task, the test ensures data consistency and prevents invalid associations.

src/test/java/de/tum/cit/aet/artemis/programming/service/GitlabCIServiceTest.java (2)

30-30: Import statement for the new abstract test class

The import statement correctly adds AbstractProgrammingIntegrationGitlabCIGitlabSamlTest, aligning with the refactoring to use the new abstract test classes.


39-39: Ensure compatibility with the new base class

By extending AbstractProgrammingIntegrationGitlabCIGitlabSamlTest, please verify that all necessary beans, configurations, and autowired components are properly initialized. This change may affect dependency injection, so ensure that the tests run without any issues.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseSolutionEntryIntegrationTest.java (1)

14-14: Ensure the new base class aligns with testing guidelines

By changing the superclass to AbstractProgrammingIntegrationIndependentTest, please verify that this base class adheres to the coding guidelines specified, particularly:

  • avoid_db_access: true: Tests should avoid direct database access.
  • mock_strategy: static_mocks: Ensure that static mocks are used appropriately.
  • context_restart_minimize: true: Minimize unnecessary application context restarts.

Also applies to: 21-21

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTest.java (3)

39-39: Appropriate change of base class to AbstractProgrammingIntegrationJenkinsGitlabTest

The update to extend AbstractProgrammingIntegrationJenkinsGitlabTest aligns with the refactoring efforts to use new abstract test classes tailored for various test setups. This enhances the test structure and maintains consistency with the project's testing architecture.


139-139: Updated repository usage to testCaseRepository

Replacing programmingExerciseTestCaseRepository with testCaseRepository is appropriate due to the removal of the autowired field. This ensures that the test continues to function correctly with the new repository structure.


167-169: Consistent use of testCaseRepository and updating test cases

The change to use testCaseRepository for fetching and saving test cases maintains consistency after the repository refactoring. This update ensures that the test cases are appropriately managed within the new test setup.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ExerciseHintServiceTest.java (2)

21-21: Update superclass to AbstractProgrammingIntegrationIndependentTest

The change to extend AbstractProgrammingIntegrationIndependentTest is appropriate and aligns with the refactoring objectives stated in the PR to use new abstract test classes for programming exercises.

Also applies to: 29-29


31-31: Ensure consistency in test prefix naming

The TEST_PREFIX is correctly defined. Ensure that this prefix is consistently used across all test data to prevent conflicts with other tests.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseTemplateIntegrationTest.java (2)

61-61: Update of class inheritance reflects appropriate refactoring

Changing the superclass to AbstractProgrammingIntegrationJenkinsGitlabTest aligns with the introduction of new abstract test classes tailored for different setups. This enhances code reuse and maintains consistency across integration tests.


61-61: Verify that removed autowired fields are provided by the superclass

The fields programmingExerciseTestService and programmingLanguageFeatureService have been removed from this class but are still used within its methods. Ensure that these services are available in the new superclass AbstractProgrammingIntegrationJenkinsGitlabTest or are otherwise properly initialized to avoid NullPointerException.

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIResourceIntegrationTest.java (2)

Line range hint 223-225: Exception handling in test may hide errors

The try...finally block in the test testGetBuildLogsForResult may suppress exceptions thrown within the test body, leading to false positives.

Ensure that exceptions are properly caught and asserted within the test. Consider using @AfterEach for cleanup operations like deleting files.


38-38: Class extension change verification

The test class now extends AbstractProgrammingIntegrationLocalCILocalVCTestBase instead of AbstractLocalCILocalVCIntegrationTest.

Ensure that the new base class provides all the necessary setup and utilities required for the tests to function correctly. This is crucial to prevent any unintended side effects due to the change in inheritance.

src/test/java/de/tum/cit/aet/artemis/programming/service/ProgrammingExerciseFeedbackCreationServiceTest.java (1)

31-31: Verify dependency injection after changing the superclass

With the test class now extending AbstractProgrammingIntegrationIndependentTest and the removal of several @Autowired fields, please ensure that all necessary services and repositories are correctly provided by the superclass or through other means. Specifically, verify that:

  • feedbackCreationService
  • programmingExerciseRepository
  • programmingExerciseBuildConfigRepository
  • testCaseRepository
  • programmingExerciseUtilService
  • examUtilService

are properly initialized to prevent NullPointerException and ensure the tests run successfully.

src/test/java/de/tum/cit/aet/artemis/programming/icl/ProgrammingExerciseLocalVCLocalCIIntegrationTest.java (2)

35-35: Appropriate import of the new base test class

The import of AbstractProgrammingIntegrationLocalCILocalVCTest is necessary due to the change in the base class. This aligns with the refactoring objectives to use new abstract test classes.


58-58: Update test class to extend the new abstract base class

Changing the base class to AbstractProgrammingIntegrationLocalCILocalVCTest is consistent with the PR's goal of restructuring the test architecture. This change enhances code organization and maintainability.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ProgrammingExerciseTaskServiceTest.java (3)

Line range hint 139-149: Ensure proper cleanup of related entities when deleting tasks

When deleting a ProgrammingExerciseTask, related entities such as CodeHint should also be properly deleted to maintain data integrity. The test verifies that the code hints are deleted, which is good practice. Ensure that this cascading delete behavior is consistently implemented across all related entities.


215-218: Validate the correctness of test case retrieval

The test asserts that the task contains the correct test cases:

assertThat(actualTaskWithTestCases.getTaskName()).isEqualTo("Task 1");
var actualTestCaseNames = actualTaskWithTestCases.getTestCases().stream().map(ProgrammingExerciseTestCase::getTestName).toList();
assertThat(actualTestCaseNames).containsExactlyInAnyOrder(testCaseNames);

This is a good practice to ensure that tasks are associated with the correct test cases.


227-235: Confirm that test IDs are correctly parsed and associated

The test checks that test cases are correctly associated with tasks using test IDs. It's important to ensure that parsing and association logic works as expected, especially when using IDs within problem statements.

src/test/java/de/tum/cit/aet/artemis/programming/hestia/ExerciseHintIntegrationTest.java (1)

23-32: Ensure correct inheritance from the abstract test class

The test class now extends AbstractProgrammingIntegrationIndependentTest:

class ExerciseHintIntegrationTest extends AbstractProgrammingIntegrationIndependentTest {

Verify that this change aligns with the intended test context and that all necessary configurations and initializations provided by the new abstract class are appropriate for this test.

To confirm that all dependencies are correctly injected and configurations are set, you can review the abstract class:

✅ Verification successful

Inheritance Verification Successful

The ExerciseHintIntegrationTest correctly extends AbstractProgrammingIntegrationIndependentTest. All necessary dependencies and configurations are appropriately set up as per the abstract class.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the inheritance hierarchy and check for required initializations.

# Test: Find the abstract class definition.
rg --type java --files-with-matches 'abstract class AbstractProgrammingIntegrationIndependentTest' | xargs cat

# Expected Result: The abstract class should properly set up the test context required by ExerciseHintIntegrationTest.

Length of output: 7429

src/test/java/de/tum/cit/aet/artemis/programming/StaticCodeAnalysisIntegrationTest.java (1)

38-38: Update base class aligns with refactoring goals

Changing the base class to AbstractProgrammingIntegrationLocalCILocalVCTest aligns with the refactoring objectives mentioned in the PR description. This update enhances the test structure and promotes better organization of test classes tailored for different setups.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingSubmissionAndResultGitlabJenkinsIntegrationTest.java (1)

41-41: LGTM!

Extending AbstractProgrammingIntegrationJenkinsGitlabTest streamlines the test class and reduces dependencies, aligning with the refactoring objectives stated in the PR. This change enhances maintainability and follows the project’s architectural direction.

src/test/java/de/tum/cit/aet/artemis/programming/TestRepositoryResourceIntegrationTest.java (1)

46-46: Verify compatibility with new base class

Changing the base class to AbstractProgrammingIntegrationJenkinsGitlabTest may affect the test setup and utilities provided by the superclass. Ensure that all necessary configurations, mocks, and utilities are still available and that the tests behave as expected with the new base class.

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalCIIntegrationTest.java (2)

58-58: Updated import to new base class

The import statement has been updated to AbstractProgrammingIntegrationLocalCILocalVCTestBase, which aligns with the new abstract test classes introduced for better test organization.


77-77: Class now extends AbstractProgrammingIntegrationLocalCILocalVCTestBase

The LocalCIIntegrationTest class now extends AbstractProgrammingIntegrationLocalCILocalVCTestBase. This change is appropriate and matches the refactoring objectives to use the new abstract test classes, improving the test architecture.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseGitlabJenkinsIntegrationTest.java (1)

47-47: Ensure superclass provides required services

By changing the superclass to AbstractProgrammingIntegrationJenkinsGitlabTest, the @Autowired fields programmingExerciseTestService and programmingLanguageFeatureService have been removed from this class. Verify that these services are now provided by the new superclass to prevent NullPointerException or other issues when they are accessed in the test methods.

Run the following script to confirm that the superclass declares these fields:

src/test/java/de/tum/cit/aet/artemis/programming/CourseGitlabJenkinsIntegrationTest.java (1)

24-24: Verify that required fields are inherited from the new superclass

By extending AbstractProgrammingIntegrationJenkinsGitlabTest, ensure that all necessary fields like courseTestService, programmingExerciseUtilService, and objectMapper are appropriately inherited. Since the @Autowired fields have been removed, it's important to confirm that these services are accessible to the test methods.

Run the following script to verify that courseTestService is declared in AbstractProgrammingIntegrationJenkinsGitlabTest:

✅ Verification successful

Verification Successful: Required fields are inherited from AbstractProgrammingIntegrationJenkinsGitlabTest.

  • courseTestService is declared in AbstractProgrammingIntegrationJenkinsGitlabTest.
  • programmingExerciseUtilService is declared in AbstractProgrammingIntegrationJenkinsGitlabTest.
  • objectMapper is declared in AbstractProgrammingIntegrationJenkinsGitlabTest.
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that the field `protected CourseTestService courseTestService` is declared in `AbstractProgrammingIntegrationJenkinsGitlabTest`

# Test: Search for the field declaration in the superclass. Expect: The field declaration exists.

ast-grep --lang java --pattern $'class AbstractProgrammingIntegrationJenkinsGitlabTest {
  $$$
  protected CourseTestService courseTestService;
  $$$
}'

Length of output: 277


Script:

#!/bin/bash
# Description: Verify that the field `protected CourseTestService courseTestService` is declared in `AbstractProgrammingIntegrationJenkinsGitlabTest` using ripgrep.

# Search for the field declaration in Java files, excluding binary files.
rg 'protected\s+CourseTestService\s+courseTestService;' --type java

Length of output: 222


Script:

#!/bin/bash
# Description: Verify that the fields `protected ProgrammingExerciseUtilService programmingExerciseUtilService` and `protected ObjectMapper objectMapper` are declared in `AbstractProgrammingIntegrationJenkinsGitlabTest`

# Search for the field `programmingExerciseUtilService`
rg 'protected\s+ProgrammingExerciseUtilService\s+programmingExerciseUtilService;' --type java

# Search for the field `objectMapper`
rg 'protected\s+ObjectMapper\s+objectMapper;' --type java

Length of output: 1607

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseIntegrationJenkinsGitlabTest.java (1)

25-25: Verify that required services are available in the new superclass

The class now extends AbstractProgrammingIntegrationJenkinsGitlabTest instead of AbstractSpringIntegrationJenkinsGitlabTest. Since programmingExerciseIntegrationTestService and programmingExerciseService are no longer declared in this class, please verify that these services are provided by the new superclass to ensure that all method calls to programmingExerciseIntegrationTestService and programmingExerciseService function correctly.

Run the following script to confirm that programmingExerciseIntegrationTestService and programmingExerciseService are declared in AbstractProgrammingIntegrationJenkinsGitlabTest:

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseParticipationIntegrationTest.java (1)

40-40: Confirm the new superclass provides necessary dependencies

By changing the superclass from AbstractSpringIntegrationIndependentTest to AbstractProgrammingIntegrationIndependentTest, ensure that all required services and repositories previously provided via @Autowired fields are now available through the new superclass. This is crucial for the test methods to function correctly without dependency issues.

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingSubmissionIntegrationTest.java (2)

59-59: Change of base class to AbstractProgrammingIntegrationJenkinsGitlabTest is appropriate

The class now extends AbstractProgrammingIntegrationJenkinsGitlabTest, which aligns with the new abstract test classes introduced to improve test structure. This change enhances test organization and maintainability as per the PR objectives.


360-360: Ensure participationRepository properly handles ProgrammingExerciseStudentParticipation entities

The code replaces programmingExerciseStudentParticipationRepository with participationRepository. Verify that participationRepository correctly manages ProgrammingExerciseStudentParticipation entities and that all method calls (e.g., findById, save) behave as expected.

Also applies to: 412-412, 416-416, 808-808

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingAssessmentIntegrationTest.java (1)

55-55: Extending the appropriate abstract test class.

The class now extends AbstractProgrammingIntegrationIndependentTest, which aligns with the intended test structure for programming integration tests.

src/test/java/de/tum/cit/aet/artemis/programming/icl/LocalVCLocalCIIntegrationTest.java (3)

53-53: Approved: Import of the new base class

The import statement correctly includes AbstractProgrammingIntegrationLocalCILocalVCTestBase, which matches the new base class being extended. This ensures that all necessary methods and configurations from the new abstract class are available.


Line range hint 67-74: Efficient test execution with minimized context restarts

Good use of @TestInstance(TestInstance.Lifecycle.PER_CLASS) and @Execution(ExecutionMode.SAME_THREAD) annotations. This approach reduces the overhead of repeatedly creating and tearing down the Spring application context, aligning with the guideline to minimize context restarts (context_restart_minimize: true). It also ensures thread-safe execution and improves test performance.


79-79: Verify removal of @Autowired dependencies

The class now extends AbstractProgrammingIntegrationLocalCILocalVCTestBase, and several @Autowired fields have been removed. Ensure that any functionalities provided by the removed dependencies (examUtilService, buildJobRepository, localCITriggerService, sharedQueueProcessingService, hazelcastInstance) are either no longer needed or are adequately provided by the new base class.

Run the following script to check for any remaining references to the removed dependencies in the test class:

✅ Verification successful

To properly verify the removal of @Autowired dependencies and ensure that the functionality is adequately provided, we need to examine the content of the LocalVCLocalCIIntegrationTest class. Let's search for this specific file and analyze its content.


The refactoring of the LocalVCLocalCIIntegrationTest class has been successfully implemented. The @Autowired annotations for the mentioned dependencies (examUtilService, buildJobRepository, localCITriggerService, sharedQueueProcessingService, hazelcastInstance) have been removed, and the class now extends AbstractProgrammingIntegrationLocalCILocalVCTestBase.

The functionality previously provided by these dependencies is now handled by the base class:

  1. examUtilService is accessed through method calls, likely provided by the base class.
  2. buildJobRepository is used via method calls, suggesting it's available through the base class.
  3. sharedQueueProcessingService and hazelcastInstance are accessed as fields, indicating they are inherited from the base class.

This refactoring improves code organization and reduces duplication. The removal of direct @Autowired annotations in favor of inheriting from a base class is a good practice for maintaining clean and modular test code.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Search for usages of removed dependencies in test classes

# Test: Search for references to the removed dependencies
rg 'examUtilService|buildJobRepository|localCITriggerService|sharedQueueProcessingService|hazelcastInstance' -g 'src/test/java/**/*.java' -A 5

Length of output: 321119


Script:

#!/bin/bash
# Search for LocalVCLocalCIIntegrationTest class and display its content
echo "Searching for LocalVCLocalCIIntegrationTest class:"
fd LocalVCLocalCIIntegrationTest.java
echo "\nContent of LocalVCLocalCIIntegrationTest class:"
cat $(fd LocalVCLocalCIIntegrationTest.java)

Length of output: 89686

src/test/java/de/tum/cit/aet/artemis/programming/RepositoryIntegrationTest.java (2)

82-82: Verify the impact of changing the superclass to AbstractProgrammingIntegrationJenkinsGitlabTest.

Switching the superclass from AbstractSpringIntegrationJenkinsGitlabTest to AbstractProgrammingIntegrationJenkinsGitlabTest may affect the test setup and configurations provided by the parent class. Please ensure that all necessary initializations, dependency injections, and configurations required for the tests are still appropriately handled. Verify that this change does not omit any critical setup steps that were present in the original superclass.


1030-1030: Confirm that participationRepository correctly replaces programmingExerciseStudentParticipationRepository.

The method updateLockedById is now called on participationRepository instead of programmingExerciseStudentParticipationRepository. Ensure that participationRepository has the appropriate implementation for this method and that it correctly updates the lock status of the participation. Verify that this change does not impact the correctness of the tests and that all references to the old repository have been properly updated.

Also applies to: 1053-1053

src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseGradingServiceTest.java (1)

65-65: Class inheritance updated correctly

The class now extends AbstractProgrammingIntegrationIndependentTest, which aligns with the new testing architecture and enhances code modularity and maintainability.

Comment on lines +16 to +17
protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
return Set.of(AbstractLtiIntegrationTest.class);
Copy link

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

LGTM: Method signature and implementation updated for improved flexibility.

The changes to the method signature and implementation are well-thought-out:

  1. The return type Set<Class<?>> allows for multiple integration test classes in the future.
  2. The method name change accurately reflects the new return type.
  3. The implementation correctly uses Set.of() to create an immutable set.

These updates improve the extensibility of the test architecture.

Consider renaming the method to getAbstractModuleIntegrationTestClassSet for even more clarity, as it emphasizes that a Set is being returned:

-    protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
+    protected Set<Class<?>> getAbstractModuleIntegrationTestClassSet() {
         return Set.of(AbstractLtiIntegrationTest.class);
     }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
return Set.of(AbstractLtiIntegrationTest.class);
protected Set<Class<?>> getAbstractModuleIntegrationTestClassSet() {
return Set.of(AbstractLtiIntegrationTest.class);

Comment on lines +16 to +17
protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
return Set.of(AbstractAtlasIntegrationTest.class);
Copy link

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

LGTM: Method signature and implementation changes improve extensibility.

The changes to the getAbstractModuleIntegrationTestClasses method (previously getAbstractModuleIntegrationTestClass) are well-implemented and align with the PR objectives. The new signature allows for returning multiple integration test classes, which improves future extensibility.

Consider renaming the method to getAbstractModuleIntegrationTestClassSet to more accurately reflect its return type. This would improve code readability and maintain consistency with Java naming conventions for methods returning collections.

-    protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
+    protected Set<Class<?>> getAbstractModuleIntegrationTestClassSet() {
         return Set.of(AbstractAtlasIntegrationTest.class);
     }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
return Set.of(AbstractAtlasIntegrationTest.class);
protected Set<Class<?>> getAbstractModuleIntegrationTestClassSet() {
return Set.of(AbstractAtlasIntegrationTest.class);

Comment on lines +16 to +17
protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
return Set.of(AbstractFileUploadIntegrationTest.class);
Copy link

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

LGTM: Method signature and implementation updated correctly.

The change from getAbstractModuleIntegrationTestClass() to getAbstractModuleIntegrationTestClasses() improves flexibility by allowing multiple integration test classes to be returned. The implementation is concise and clear, using a Set as recommended for collections.

Consider renaming the method to getAbstractFileUploadIntegrationTestClasses() to be more specific about the type of integration tests being returned, adhering to the test naming guideline for descriptive names.

Comment on lines +19 to +30
@Override
protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
// @formatter:off
return Set.of(
AbstractProgrammingIntegrationGitlabCIGitlabSamlTest.class,
AbstractProgrammingIntegrationIndependentTest.class,
AbstractProgrammingIntegrationJenkinsGitlabTest.class,
AbstractProgrammingIntegrationLocalCILocalVCTest.class,
AbstractProgrammingIntegrationLocalCILocalVCTestBase.class
);
// @formatter:on
}
Copy link

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

LGTM: getAbstractModuleIntegrationTestClasses() method is well-implemented.

The method correctly returns a set of abstract programming integration test classes, aligning with the PR objectives. The use of a formatted block improves readability.

Minor suggestion for consistency:

Consider adding a blank line before the // @formatter:off comment to match the blank line after // @formatter:on. This would improve consistency in the formatting:

    @Override
    protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
+
        // @formatter:off
        return Set.of(
            AbstractProgrammingIntegrationGitlabCIGitlabSamlTest.class,
            AbstractProgrammingIntegrationIndependentTest.class,
            AbstractProgrammingIntegrationJenkinsGitlabTest.class,
            AbstractProgrammingIntegrationLocalCILocalVCTest.class,
            AbstractProgrammingIntegrationLocalCILocalVCTestBase.class
        );
        // @formatter:on
    }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
@Override
protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
// @formatter:off
return Set.of(
AbstractProgrammingIntegrationGitlabCIGitlabSamlTest.class,
AbstractProgrammingIntegrationIndependentTest.class,
AbstractProgrammingIntegrationJenkinsGitlabTest.class,
AbstractProgrammingIntegrationLocalCILocalVCTest.class,
AbstractProgrammingIntegrationLocalCILocalVCTestBase.class
);
// @formatter:on
}
@Override
protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
// @formatter:off
return Set.of(
AbstractProgrammingIntegrationGitlabCIGitlabSamlTest.class,
AbstractProgrammingIntegrationIndependentTest.class,
AbstractProgrammingIntegrationJenkinsGitlabTest.class,
AbstractProgrammingIntegrationLocalCILocalVCTest.class,
AbstractProgrammingIntegrationLocalCILocalVCTestBase.class
);
// @formatter:on
}

@Autowired
@Qualifier("hazelcastInstance")
private HazelcastInstance hazelcastInstance;
class SharedQueueManagementServiceTest extends AbstractProgrammingIntegrationLocalCILocalVCTest {
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

Additional Test Classes Require Refactoring

The following test classes are still extending AbstractSpringIntegrationLocalCILocalVCTest and should be updated to extend AbstractProgrammingIntegrationLocalCILocalVCTest to maintain consistency with the refactoring objectives:

  • CourseServiceTest
  • UserAccountLocalVcsIntegrationTest
  • ManagementResourceIntegrationTest
  • AbstractTutorialGroupIntegrationTest
  • QuizSubmissionIntegrationTest
  • LdapAuthenticationIntegrationTest
  • PlagiarismPostIntegrationTest
  • AuthorizationLocalCILocalVCEndpointTest
  • ModelingAssessmentIntegrationTest
  • ModelingExerciseIntegrationTest
  • ModelingSubmissionIntegrationTest
  • ExamRegistrationIntegrationTest
  • AbstractIrisIntegrationTest
  • AeolusTemplateResourceTest
  • AeolusBuildScriptGenerationServiceTest
  • ExamStartTest
  • BuildAgentDockerServiceTest
  • BuildResultTest
  • BuildAgentSshAuthenticationIntegrationTest
  • NotificationScheduleServiceTest
  • ResultListenerIntegrationTest
  • ResultServiceIntegrationTest
  • ParticipantScoreIntegrationTest

Please ensure that these classes are updated accordingly.

🔗 Analysis chain

Class now extends AbstractProgrammingIntegrationLocalCILocalVCTest.

The class signature has been updated to extend AbstractProgrammingIntegrationLocalCILocalVCTest. This change is in line with the PR objectives to refactor programming tests and create new abstract test classes for various test setups.

To ensure this change is consistent across the codebase, let's verify other test classes:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for other test classes that might need similar updates
rg --type java -g 'src/test/java/**/*.java' 'class \w+Test extends AbstractSpringIntegrationLocalCILocalVCTest'

Length of output: 4427


Script:

#!/bin/bash
# Description: Identify test classes extending AbstractSpringIntegrationLocalCILocalVCTest but not AbstractProgrammingIntegrationLocalCILocalVCTest
rg --type java -g 'src/test/java/**/*.java' 'class \w+Test extends AbstractSpringIntegrationLocalCILocalVCTest' | grep -v 'AbstractProgrammingIntegrationLocalCILocalVCTest'

Length of output: 4258

Comment on lines +48 to +49
assertThat(taskRepository.findByExerciseId(programmingExercise.getId())).hasSize(2);
var tasks = taskRepository.findByExerciseIdWithTestCases(programmingExercise.getId());
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

⚠️ Potential issue

Avoid direct database interactions in test methods

The test methods are performing database operations using repositories directly. This practice goes against the coding guidelines specified for test files:

  • avoid_db_access: true
  • mock_strategy: static_mocks

For example:

assertThat(taskRepository.findByExerciseId(programmingExercise.getId())).hasSize(2);
var tasks = taskRepository.findByExerciseIdWithTestCases(programmingExercise.getId());

Consider using static mocks for repositories to simulate database interactions without hitting the actual database.

Also applies to: 56-56, 63-64, 77-77, 83-84, 99-99, 106-107, 112-112, 123-123, 131-131, 133-133, 139-139, 148-149, 159-159, 167-167, 174-174, 197-197, 205-205, 215-215, 218-218, 227-228, 232-232, 235-235, 248-248, 265-265, 267-267, 278-278, 379-379, 382-382

Comment on lines +16 to +22
import de.tum.cit.aet.artemis.programming.AbstractProgrammingIntegrationIndependentTest;
import de.tum.cit.aet.artemis.programming.domain.ProgrammingExercise;
import de.tum.cit.aet.artemis.programming.domain.ProgrammingExerciseTestCase;
import de.tum.cit.aet.artemis.programming.domain.hestia.CodeHint;
import de.tum.cit.aet.artemis.programming.domain.hestia.ProgrammingExerciseTask;
import de.tum.cit.aet.artemis.programming.repository.hestia.CodeHintRepository;
import de.tum.cit.aet.artemis.programming.repository.hestia.ProgrammingExerciseTaskRepository;
import de.tum.cit.aet.artemis.programming.service.hestia.ProgrammingExerciseTaskService;
import de.tum.cit.aet.artemis.programming.test_repository.ProgrammingExerciseTestCaseTestRepository;
import de.tum.cit.aet.artemis.programming.test_repository.ProgrammingExerciseTestRepository;
import de.tum.cit.aet.artemis.programming.util.ProgrammingExerciseUtilService;
import de.tum.cit.aet.artemis.shared.base.AbstractSpringIntegrationIndependentTest;

class ProgrammingExerciseTaskServiceTest extends AbstractSpringIntegrationIndependentTest {
class ProgrammingExerciseTaskServiceTest extends AbstractProgrammingIntegrationIndependentTest {
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

⚠️ Potential issue

Consider refactoring to use static mocks instead of direct database access

The test class ProgrammingExerciseTaskServiceTest now extends AbstractProgrammingIntegrationIndependentTest and directly accesses the database using repositories such as taskRepository, testCaseRepository, and codeHintRepository. According to the coding guidelines for files matching src/test/java/**/*.java, you should avoid direct database access (avoid_db_access: true) and use static mocks (mock_strategy: static_mocks). Refactoring the tests to use static mocks will improve test performance and isolation.

programmingExerciseTestCaseRepository
.saveAll(programmingExerciseTestCaseRepository.findByExerciseId(programmingExercise.getId()).stream().peek(testCase -> testCase.setActive(true)).toList());
exerciseLite = exerciseRepository.findByIdElseThrow(programmingExercise.getId());
testCaseRepository.saveAll(testCaseRepository.findByExerciseId(programmingExercise.getId()).stream().peek(testCase -> testCase.setActive(true)).toList());
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Avoid direct database access in tests

According to the coding guidelines (avoid_db_access: true), tests should avoid direct database interactions. The line:

testCaseRepository.saveAll(testCaseRepository.findByExerciseId(programmingExercise.getId()).stream().peek(testCase -> testCase.setActive(true)).toList());

performs a database operation to fetch and save test cases. Consider mocking the testCaseRepository or using test utilities to set up test data without accessing the database directly.


🛠️ Refactor suggestion

Refactor stream operation to avoid using peek() for state modification

Using peek() to modify the state of objects in a stream is discouraged, as peek() is intended for debugging purposes. Instead, use map() to modify and return the objects:

Refactored code:

testCaseRepository.saveAll(
    testCaseRepository.findByExerciseId(programmingExercise.getId()).stream()
        .map(testCase -> {
            testCase.setActive(true);
            return testCase;
        })
        .toList()
);

Alternatively, for better readability and adherence to the util_service_factory_pattern: true guideline, consider using a simple loop:

List<ProgrammingExerciseTestCase> testCases = testCaseRepository.findByExerciseId(programmingExercise.getId());
for (ProgrammingExerciseTestCase testCase : testCases) {
    testCase.setActive(true);
}
testCaseRepository.saveAll(testCases);

.saveAll(programmingExerciseTestCaseRepository.findByExerciseId(programmingExercise.getId()).stream().peek(testCase -> testCase.setActive(true)).toList());
exerciseLite = exerciseRepository.findByIdElseThrow(programmingExercise.getId());
testCaseRepository.saveAll(testCaseRepository.findByExerciseId(programmingExercise.getId()).stream().peek(testCase -> testCase.setActive(true)).toList());
exerciseLite = programmingExerciseRepository.findByIdElseThrow(programmingExercise.getId());
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Eliminate unnecessary database retrieval

The line:

exerciseLite = programmingExerciseRepository.findByIdElseThrow(programmingExercise.getId());

retrieves the ProgrammingExercise from the database, even though programmingExercise is already available in the test context. To adhere to the guideline of minimizing database access (avoid_db_access: true), use the existing programmingExercise object instead:

-exerciseLite = programmingExerciseRepository.findByIdElseThrow(programmingExercise.getId());
+exerciseLite = programmingExercise;


class ProgrammingExerciseScheduleServiceTest extends AbstractSpringIntegrationGitlabCIGitlabSamlTest {
class ProgrammingExerciseScheduleServiceTest extends AbstractProgrammingIntegrationGitlabCIGitlabSamlTest {
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Change of superclass requires dependency adjustments

By changing the superclass from AbstractSpringIntegrationGitlabCIGitlabSamlTest to AbstractProgrammingIntegrationGitlabCIGitlabSamlTest, ensure that all required services and dependencies are properly provided. The removal of @Autowired fields necessitates that these services are accessible through the new superclass or are appropriately instantiated.

cremertim
cremertim previously approved these changes Oct 17, 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.

refactoring lgtm

SimonEntholzer
SimonEntholzer previously approved these changes Oct 19, 2024
Copy link
Contributor

@SimonEntholzer SimonEntholzer left a comment

Choose a reason for hiding this comment

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

Good first step in cleaning up our server tests 👍

sarpsahinalp
sarpsahinalp previously approved these changes Oct 21, 2024
Copy link
Contributor

@sarpsahinalp sarpsahinalp left a comment

Choose a reason for hiding this comment

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

Changes lgtm

@github-actions github-actions bot added the tutorialgroup Pull requests that affect the corresponding module label Oct 22, 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: 3

🧹 Outside diff range and nitpick comments (1)
src/test/java/de/tum/cit/aet/artemis/tutorialgroup/architecture/TutorialGroupTestArchitectureTest.java (1)

16-17: Approve changes with a minor suggestion for method name.

The updates to the method signature and implementation are well-aligned with the architectural changes. The shift from returning a single class to a set of classes provides more flexibility.

Consider renaming the method to getAbstractModuleIntegrationTestClassSet() for even more clarity about the return type. Here's a suggested change:

-    protected Set<Class<?>> getAbstractModuleIntegrationTestClasses() {
+    protected Set<Class<?>> getAbstractModuleIntegrationTestClassSet() {
         return Set.of(AbstractTutorialGroupIntegrationTest.class);
     }
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between b9cd26f and 7dc0966.

📒 Files selected for processing (3)
  • src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationIndependentTest.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseIntegrationTestService.java (1 hunks)
  • src/test/java/de/tum/cit/aet/artemis/tutorialgroup/architecture/TutorialGroupTestArchitectureTest.java (1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
src/test/java/de/tum/cit/aet/artemis/programming/AbstractProgrammingIntegrationIndependentTest.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/programming/ProgrammingExerciseIntegrationTestService.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/tutorialgroup/architecture/TutorialGroupTestArchitectureTest.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

🔇 Additional comments (2)
src/test/java/de/tum/cit/aet/artemis/tutorialgroup/architecture/TutorialGroupTestArchitectureTest.java (2)

3-3: LGTM: Import statement added for Set.

The import of java.util.Set is correctly added to support the updated method signature.


1-19: Summary: Architectural improvements enhance flexibility and maintainability.

The changes in this file successfully contribute to the overall objectives of the PR. By modifying the TutorialGroupTestArchitectureTest class to support multiple integration test classes, the code becomes more flexible and easier to maintain. This new structure aligns well with the goal of refactoring programming tests and addressing scattered use of autowired components.

The modifications lay a solid foundation for future enhancements and additions to the test suite. Great job on improving the architecture!

Copy link
Contributor

@JohannesStoehr JohannesStoehr left a comment

Choose a reason for hiding this comment

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

Reapprove after merge

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.

Reapprove after merge conflict

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: 1

🧹 Outside diff range and nitpick comments (1)
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseParticipationIntegrationTest.java (1)

Line range hint 1160-1171: Use fixed data instead of generating data dynamically in tests

The setupExamExerciseWithParticipationAndResult method generates dynamic dates and data during tests. To comply with the guideline fixed_data: true, consider using fixed dates and predefined data to enhance test reliability and predictability.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 7dc0966 and 69c485b.

📒 Files selected for processing (1)
  • src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseParticipationIntegrationTest.java (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
src/test/java/de/tum/cit/aet/artemis/programming/ProgrammingExerciseParticipationIntegrationTest.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

// TODO remove again after refactoring and cleanup
@Autowired
private ProgrammingExerciseIntegrationTestService programmingExerciseIntegrationTestService;

private ProgrammingExercise programmingExercise;

Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Avoid direct database access in tests

Directly accessing the database in tests using programmingExerciseRepository contravenes the guideline avoid_db_access: true. Please consider using the provided UtilService methods to handle test data instead.

Apply this diff to replace direct repository access with UtilService methods:

- programmingExercise = programmingExerciseRepository.findWithEagerStudentParticipationsById(programmingExercise.getId()).orElseThrow();
+ programmingExercise = programmingExerciseUtilService.findProgrammingExerciseWithEagerStudentParticipationsById(programmingExercise.getId());
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
programmingExercise = programmingExerciseUtilService.findProgrammingExerciseWithEagerStudentParticipationsById(programmingExercise.getId());

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
atlas Pull requests that affect the corresponding module fileupload Pull requests that affect the corresponding module lti Pull requests that affect the corresponding module programming Pull requests that affect the corresponding module ready to merge tests tutorialgroup Pull requests that affect the corresponding module
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

6 participants