From cf7add7aaa22912e3f9a3a197f6cd689743d476f Mon Sep 17 00:00:00 2001 From: Sandeep Ravindranath <47850410+smy4kor@users.noreply.github.com> Date: Thu, 19 Mar 2020 10:16:30 +0100 Subject: [PATCH] add method to get a single action by externalRef (#942) * add method to get a single action by externalRef * adding junit test for ControllerManagement::getActionByExternalRef * fixing sonarQube findings * improve assert statement Signed-off-by: Ravindranath Sandeep --- .../repository/ControllerManagement.java | 10 ++++++++ .../repository/jpa/ActionRepository.java | 10 ++++++++ .../jpa/JpaControllerManagement.java | 5 ++++ .../jpa/ControllerManagementTest.java | 23 +++++++++++++++++++ 4 files changed, 48 insertions(+) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java index 562415c23..de8708e8a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java @@ -481,6 +481,16 @@ public interface ControllerManagement { @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) List getActiveActionsByExternalRef(@NotNull List externalRefs); + /** + * Retrieves an {@link Action} using {@link Action#getExternalRef()} + * + * @param externalRef + * of the action. See {@link Action#getExternalRef()} + * @return {@link Action} or {@code null} if it does not exist + */ + @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) + Optional getActionByExternalRef(@NotEmpty String externalRef); + /** * Delete a single target. * diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java index 23b22f1f1..737151ab7 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java @@ -264,6 +264,16 @@ public interface ActionRepository extends BaseEntityRepository, List findByExternalRefInAndActive(@Param("externalRefs") List externalRefs, @Param("active") boolean active); + + /** + * Retrieves an {@link Action} that matches the queried externalRef. + * + * @param externalRef + * of the action. See {@link Action#getExternalRef()} + * @return the found {@link Action} + */ + Optional findByExternalRef(@Param("externalRef") String externalRef); + /** * Switches the status of actions from one specific status into another for * given actions IDs, active flag and current status diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java index 3ab73a0b5..de18b4e6e 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java @@ -1050,6 +1050,11 @@ public class JpaControllerManagement extends JpaActionManagement implements Cont actionRepository.updateExternalRef(actionId, externalRef); } + @Override + public Optional getActionByExternalRef(@NotEmpty final String externalRef) { + return actionRepository.findByExternalRef(externalRef); + } + private void cancelAssignDistributionSetEvent(final JpaTarget target, final Long actionId) { afterCommit.afterCommit(() -> eventPublisherHolder.getEventPublisher().publishEvent( new CancelTargetAssignmentEvent(target, actionId, eventPublisherHolder.getApplicationId()))); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java index e37d01e20..fb27d0600 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java @@ -1365,6 +1365,29 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { } } + @Test + @Description("Verify that getting a single action using externalRef works") + public void getActionUsingSingleExternalRef() { + + final String knownControllerId = "controllerId"; + final String knownExternalRef = "externalRefId"; + final DistributionSet knownDistributionSet = testdataFactory.createDistributionSet(); + + // GIVEN + testdataFactory.createTarget(knownControllerId); + final DistributionSetAssignmentResult assignmentResult = assignDistributionSet(knownDistributionSet.getId(), + knownControllerId); + final Long actionId = getFirstAssignedActionId(assignmentResult); + controllerManagement.updateActionExternalRef(actionId, knownExternalRef); + + // WHEN + final Optional foundAction = controllerManagement.getActionByExternalRef(knownExternalRef); + + // THEN + assertThat(foundAction).isPresent(); + assertThat(foundAction.get().getId()).isEqualTo(actionId); + } + @Test @Description("Verify that a null externalRef cannot be assigned to an action") public void externalRefCannotBeNull() {