Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion project-properties.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ project.ext {
releaseMode = project.hasProperty("releaseMode") ? project.releaseMode.toBoolean() : false
hasDBSchema = project.hasProperty("DB_SCHEMA_POSTGRES")
scriptsUrl = commonScriptsUrl + (releaseMode ? getProperty('scripts.version') : 'develop')
migrationsUrl = migrationsScriptsUrl + (releaseMode ? getProperty('migrations.version') : 'feature/EPMRPP-migrate-tms-to-develop')
migrationsUrl = migrationsScriptsUrl + (releaseMode ? getProperty('migrations.version') : 'feature/EPMRPP-manual-launches-to-migrate-tms-to-develop')

//TODO refactor with archive download
testScriptsSrc = [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,12 @@
import static com.epam.ta.reportportal.commons.querygen.constant.tms.TmsTestCaseCriteriaConstant.CRITERIA_TMS_TEST_CASE_PROJECT_ID;
import static com.epam.ta.reportportal.commons.querygen.constant.tms.TmsTestCaseCriteriaConstant.CRITERIA_TMS_TEST_CASE_SEARCH;
import static com.epam.ta.reportportal.commons.querygen.constant.tms.TmsTestCaseCriteriaConstant.CRITERIA_TMS_TEST_CASE_UPDATED_AT;
import static com.epam.ta.reportportal.commons.querygen.constant.tms.TmsTestCaseExecutionCriteriaConstant.CRITERIA_TMS_TEST_CASE_EXECUTION_ID;
import static com.epam.ta.reportportal.commons.querygen.constant.tms.TmsTestCaseExecutionCriteriaConstant.CRITERIA_TMS_TEST_CASE_EXECUTION_LAUNCH_ID;
import static com.epam.ta.reportportal.commons.querygen.constant.tms.TmsTestCaseExecutionCriteriaConstant.CRITERIA_TMS_TEST_CASE_EXECUTION_STATUS;
import static com.epam.ta.reportportal.commons.querygen.constant.tms.TmsTestCaseExecutionCriteriaConstant.CRITERIA_TMS_TEST_CASE_EXECUTION_TEST_CASE_ID;
import static com.epam.ta.reportportal.commons.querygen.constant.tms.TmsTestCaseExecutionCriteriaConstant.CRITERIA_TMS_TEST_CASE_EXECUTION_TEST_CASE_VERSION_ID;
import static com.epam.ta.reportportal.commons.querygen.constant.tms.TmsTestCaseExecutionCriteriaConstant.CRITERIA_TMS_TEST_CASE_EXECUTION_TEST_ITEM_ID;
import static com.epam.ta.reportportal.commons.querygen.constant.tms.TmsTestFolderCriteriaConstant.CRITERIA_TMS_TEST_FOLDER_DESCRIPTION;
import static com.epam.ta.reportportal.commons.querygen.constant.tms.TmsTestFolderCriteriaConstant.CRITERIA_TMS_TEST_FOLDER_ID;
import static com.epam.ta.reportportal.commons.querygen.constant.tms.TmsTestFolderCriteriaConstant.CRITERIA_TMS_TEST_FOLDER_NAME;
Expand Down Expand Up @@ -202,6 +208,7 @@
import static com.epam.ta.reportportal.jooq.Tables.USERS;
import static com.epam.ta.reportportal.jooq.Tables.WIDGET;
import static com.epam.ta.reportportal.jooq.tables.JOwnedEntity.OWNED_ENTITY;
import static com.epam.ta.reportportal.jooq.tables.JTmsTestCaseExecution.TMS_TEST_CASE_EXECUTION;
import static org.jooq.impl.DSL.choose;
import static org.jooq.impl.DSL.coalesce;
import static org.jooq.impl.DSL.field;
Expand All @@ -224,6 +231,7 @@
import com.epam.ta.reportportal.entity.project.ProjectProfile;
import com.epam.ta.reportportal.entity.tms.TmsAttribute;
import com.epam.ta.reportportal.entity.tms.TmsTestCase;
import com.epam.ta.reportportal.entity.tms.TmsTestCaseExecution;
import com.epam.ta.reportportal.entity.tms.TmsTestFolder;
import com.epam.ta.reportportal.entity.tms.TmsTestPlan;
import com.epam.ta.reportportal.entity.user.User;
Expand Down Expand Up @@ -1961,6 +1969,58 @@ protected void joinTables(QuerySupplier query) {
protected Field<Long> idField() {
return TMS_ATTRIBUTE.ID;
}
},

TMS_TEST_CASE_EXECUTION_TARGET(TmsTestCaseExecution.class,
Arrays.asList(
new CriteriaHolderBuilder().newBuilder(CRITERIA_TMS_TEST_CASE_EXECUTION_ID,
TMS_TEST_CASE_EXECUTION.ID, Long.class).get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_TMS_TEST_CASE_EXECUTION_TEST_ITEM_ID,
TMS_TEST_CASE_EXECUTION.TEST_ITEM_ID, Long.class).get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_TMS_TEST_CASE_EXECUTION_TEST_CASE_ID,
TMS_TEST_CASE_EXECUTION.TEST_CASE_ID, Long.class).get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_TMS_TEST_CASE_EXECUTION_LAUNCH_ID,
TMS_TEST_CASE_EXECUTION.LAUNCH_ID, Long.class).get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_TMS_TEST_CASE_EXECUTION_TEST_CASE_VERSION_ID,
TMS_TEST_CASE_EXECUTION.TEST_CASE_VERSION_ID, Long.class).get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_TMS_TEST_CASE_EXECUTION_STATUS,
TEST_ITEM_RESULTS.STATUS,
JStatusEnum.class
).get()
)
) {
@Override
protected Collection<? extends SelectField> selectFields() {
return Lists.newArrayList(
TMS_TEST_CASE_EXECUTION.ID,
TMS_TEST_CASE_EXECUTION.TEST_ITEM_ID,
TMS_TEST_CASE_EXECUTION.TEST_CASE_ID,
TMS_TEST_CASE_EXECUTION.LAUNCH_ID,
TMS_TEST_CASE_EXECUTION.TEST_CASE_VERSION_ID,
TMS_TEST_CASE_EXECUTION.TEST_CASE_SNAPSHOT,
TEST_ITEM.START_TIME,
TEST_ITEM_RESULTS.STATUS,
TEST_ITEM_RESULTS.END_TIME
);
}

@Override
protected void addFrom(SelectQuery<? extends Record> query) {
query.addFrom(TMS_TEST_CASE_EXECUTION);
}

@Override
protected void joinTables(QuerySupplier query) {
query.addJoin(TEST_ITEM, JoinType.LEFT_OUTER_JOIN,
TMS_TEST_CASE_EXECUTION.TEST_ITEM_ID.eq(TEST_ITEM.ITEM_ID));
query.addJoin(TEST_ITEM_RESULTS, JoinType.LEFT_OUTER_JOIN,
TEST_ITEM.ITEM_ID.eq(TEST_ITEM_RESULTS.RESULT_ID));
}

@Override
protected Field<Long> idField() {
return TMS_TEST_CASE_EXECUTION.ID;
}
};

public static final String FILTERED_QUERY = "filtered";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.epam.ta.reportportal.commons.querygen.constant.tms;

/**
* Criteria constants for TMS Test Case Execution filtering.
*
* @author Report Portal Team
*/
public class TmsTestCaseExecutionCriteriaConstant {

private TmsTestCaseExecutionCriteriaConstant() {
// Hide utility class constructor
}

public static final String CRITERIA_TMS_TEST_CASE_EXECUTION_ID = "id";
public static final String CRITERIA_TMS_TEST_CASE_EXECUTION_TEST_ITEM_ID = "testItemId";
public static final String CRITERIA_TMS_TEST_CASE_EXECUTION_TEST_CASE_ID = "testCaseId";
public static final String CRITERIA_TMS_TEST_CASE_EXECUTION_LAUNCH_ID = "launchId";
public static final String CRITERIA_TMS_TEST_CASE_EXECUTION_TEST_CASE_VERSION_ID = "testCaseVersionId";
public static final String CRITERIA_TMS_TEST_CASE_EXECUTION_STATUS = "status";
}
18 changes: 18 additions & 0 deletions src/main/java/com/epam/ta/reportportal/dao/LaunchRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -174,4 +174,22 @@ Optional<Launch> findLaunchByProjectIdAndNameAndNumberAndIdNotAndModeNot(Long pr
String name, Long number, Long launchId, LaunchModeEnum mode);

Optional<Launch> findByIdAndProjectId(@Param("id") Long id, @Param("projectId") Long projectId);

/**
* Checks if launch exists by ID and project ID.
*
* @param launchId launch ID
* @param projectId project ID
* @return true if launch exists in a project, false otherwise
*/
boolean existsByIdAndProjectId(Long launchId, Long projectId);

/**
* Finds test plan ID by launch ID.
*
* @param launchId the launch ID
* @return optional test plan ID
*/
@Query("SELECT l.testPlanId FROM Launch l WHERE l.id = :launchId")
Optional<Long> findTestPlanIdById(@Param("launchId") Long launchId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.epam.ta.reportportal.dao.tms;

import com.epam.ta.reportportal.dao.ReportPortalRepository;
import com.epam.ta.reportportal.entity.tms.TmsManualLaunchAttribute;
import com.epam.ta.reportportal.entity.tms.TmsManualLaunchAttributeId;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

/**
* Repository for {@link TmsManualLaunchAttribute} entity.
*/
public interface TmsManualLaunchAttributeRepository extends
ReportPortalRepository<TmsManualLaunchAttribute, TmsManualLaunchAttributeId> {

/**
* Finds all attributes by launch ID.
*
* @param launchId launch ID
* @return list of attributes
*/
@Query("SELECT mla FROM TmsManualLaunchAttribute mla WHERE mla.launch.id = :launchId")
List<TmsManualLaunchAttribute> findByLaunchId(@Param("launchId") Long launchId);

/**
* Deletes all attributes by launch ID.
*
* @param launchId launch ID
*/
@Modifying
@Query("DELETE FROM TmsManualLaunchAttribute mla WHERE mla.launch.id = :launchId")
void deleteByLaunchId(@Param("launchId") Long launchId);

/**
* Checks if attribute exists for launch.
*
* @param attributeId attribute ID
* @param launchId launch ID
* @return true if exists
*/
@Query("SELECT CASE WHEN COUNT(mla) > 0 THEN true ELSE false END FROM TmsManualLaunchAttribute mla " +
"WHERE mla.attribute.id = :attributeId AND mla.launch.id = :launchId")
boolean existsByAttributeIdAndLaunchId(@Param("attributeId") Long attributeId,
@Param("launchId") Long launchId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.epam.ta.reportportal.dao.tms;

import com.epam.ta.reportportal.dao.ReportPortalRepository;
import com.epam.ta.reportportal.entity.tms.TmsTestCaseExecutionCommentAttachment;
import com.epam.ta.reportportal.entity.tms.TmsTestCaseExecutionCommentAttachmentId;
import java.util.List;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

/**
* Repository interface for managing TMS test case execution comment attachment relationships.
*/
@Repository
public interface TmsTestCaseExecutionCommentAttachmentRepository extends
ReportPortalRepository<TmsTestCaseExecutionCommentAttachment, TmsTestCaseExecutionCommentAttachmentId> {

/**
* Deletes attachment relationships by execution comment ID.
*/
@Modifying
@Query("DELETE FROM TmsTestCaseExecutionCommentAttachment tca WHERE tca.executionComment.id = :executionCommentId")
void deleteByExecutionCommentId(@Param("executionCommentId") Long executionCommentId);

/**
* Deletes attachment relationships by execution comment IDs.
*/
@Modifying
@Query("DELETE FROM TmsTestCaseExecutionCommentAttachment tca WHERE tca.executionComment.id IN (:executionCommentIds)")
void deleteByExecutionCommentIds(@Param("executionCommentIds") List<Long> executionCommentIds);

/**
* Deletes attachment relationships by execution ID.
*/
@Modifying
@Query("DELETE FROM TmsTestCaseExecutionCommentAttachment tca WHERE tca.executionComment.execution.id = :executionId")
void deleteByExecutionId(@Param("executionId") Long executionId);

/**
* Deletes attachment relationships by execution IDs.
*/
@Modifying
@Query("DELETE FROM TmsTestCaseExecutionCommentAttachment tca WHERE tca.executionComment.execution.id IN (:executionIds)")
void deleteByExecutionIds(@Param("executionIds") List<Long> executionIds);

/**
* Deletes attachment relationships by launch ID.
*/
@Modifying
@Query("DELETE FROM TmsTestCaseExecutionCommentAttachment tca WHERE tca.executionComment.execution.launchId = :launchId")
void deleteByLaunchId(@Param("launchId") Long launchId);

/**
* Finds all attachment IDs for TTL management.
*/
@Query("SELECT DISTINCT tca.attachment.id FROM TmsTestCaseExecutionCommentAttachment tca")
List<Long> findAllAttachmentIds();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.epam.ta.reportportal.dao.tms;

import com.epam.ta.reportportal.dao.ReportPortalRepository;
import com.epam.ta.reportportal.entity.tms.TmsTestCaseExecutionComment;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

/**
* Repository interface for managing TMS test case execution comments.
*/
@Repository
public interface TmsTestCaseExecutionCommentRepository extends
ReportPortalRepository<TmsTestCaseExecutionComment, Long> {

/**
* Finds execution comment by execution ID.
*/
Optional<TmsTestCaseExecutionComment> findByExecutionId(Long executionId);

/**
* Finds all execution comments by execution IDs.
*/
List<TmsTestCaseExecutionComment> findByExecutionIdIn(List<Long> executionIds);

/**
* Finds all execution comments by launch ID.
*/
@Query("SELECT tec FROM TmsTestCaseExecutionComment tec WHERE tec.execution.launchId = :launchId")
List<TmsTestCaseExecutionComment> findByLaunchId(@Param("launchId") Long launchId);

/**
* Deletes execution comment by execution ID.
*/
@Modifying
@Query("DELETE FROM TmsTestCaseExecutionComment tec WHERE tec.execution.id = :executionId")
void deleteByExecutionId(@Param("executionId") Long executionId);

/**
* Deletes execution comments by execution IDs.
*/
@Modifying
@Query("DELETE FROM TmsTestCaseExecutionComment tec WHERE tec.execution.id IN (:executionIds)")
void deleteByExecutionIds(@Param("executionIds") List<Long> executionIds);

/**
* Deletes execution comments by launch ID.
*/
@Modifying
@Query("DELETE FROM TmsTestCaseExecutionComment tec WHERE tec.execution.launchId = :launchId")
void deleteByLaunchId(@Param("launchId") Long launchId);

/**
* Checks if execution comment exists for execution.
*/
boolean existsByExecutionId(Long executionId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import com.epam.ta.reportportal.entity.tms.TmsTestCaseExecution;
import java.util.List;
import java.util.Optional;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
Expand Down Expand Up @@ -147,7 +149,7 @@ Optional<TmsTestCaseExecution> findLastExecutionByTestCaseIdAndTestPlanId(
* Finds execution by test case execution ID and launch ID.
*
* @param testCaseExecutionId test case execution ID
* @param launchId launch ID
* @param launchId launch ID
* @return optional execution
*/
@Query("SELECT e FROM TmsTestCaseExecution e "
Expand Down Expand Up @@ -280,4 +282,34 @@ List<TmsTestCaseExecution> findByLaunchIdAndTestCaseIdIn(
ORDER BY ti.startTime ASC
""")
List<TmsTestCaseExecution> findByLaunchIdWithDetails(@Param("launchId") Long launchId);

/**
* Finds all executions by test case ID and launch ID.
*
* @param testCaseId test case ID
* @param launchId launch ID
* @return list of executions
*/
@Query("SELECT e FROM TmsTestCaseExecution e "
+ "WHERE e.testCaseId = :testCaseId "
+ "AND e.launchId = :launchId "
+ "ORDER BY e.id ASC")
Page<TmsTestCaseExecution> findByTestCaseIdAndLaunchId(
@Param("testCaseId") Long testCaseId,
@Param("launchId") Long launchId,
Pageable pageable
);

/**
* Checks if execution exists for test case in launch.
*
* @param testCaseExecutionId test case execution ID
* @param launchId launch ID
* @return true if exists
*/
@Query("SELECT CASE WHEN COUNT(e) > 0 THEN true ELSE false END FROM TmsTestCaseExecution e WHERE e.id = :testCaseExecutionId AND e.launchId = :launchId")
boolean existsByTestCaseExecutionIdAndLaunchId(
@Param("testCaseExecutionId") Long testCaseExecutionId,
@Param("launchId") Long launchId
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -324,4 +324,27 @@ void updateTestCaseFolder(
@Param("testCaseIds") List<Long> testCaseIds,
@Param("folderId") Long folderId
);

/**
* Finds unique test folders from test cases in a specific launch with test case counts.
*
* @param launchId launch ID
* @param pageable pagination information
* @return paginated list of unique folders with test case counts
*/
@Query("""
SELECT new com.epam.ta.reportportal.entity.tms.TmsTestFolderWithCountOfTestCases(
tc.testFolder,
COUNT(DISTINCT tc.id)
)
FROM TmsTestCaseExecution e
JOIN TmsTestCase tc ON e.testCaseId = tc.id
WHERE e.launchId = :launchId
GROUP BY tc.testFolder.id, tc.testFolder.name, tc.testFolder.description, tc.testFolder.project.id, tc.testFolder.parentTestFolder.id
ORDER BY tc.testFolder.name
""")
Page<TmsTestFolderWithCountOfTestCases> findUniqueFoldersByLaunchIdWithTestCaseCount(
@Param("launchId") Long launchId,
Pageable pageable
);
}
Loading