Skip to content

Commit

Permalink
Merge pull request #32 from OpenLMIS/OAM-200
Browse files Browse the repository at this point in the history
OAM-200: Delele orders
  • Loading branch information
tsznaj committed Jun 18, 2024
2 parents 9619c90 + 4a876b9 commit 1bd60f6
Show file tree
Hide file tree
Showing 11 changed files with 1,483 additions and 1,248 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import static org.mockito.Mockito.anyMap;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
Expand Down Expand Up @@ -69,7 +70,6 @@
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.openlmis.fulfillment.OrderDataBuilder;
import org.openlmis.fulfillment.OrderLineItemDataBuilder;
import org.openlmis.fulfillment.domain.ExternalStatus;
Expand Down Expand Up @@ -132,9 +132,8 @@ public class OrderControllerIntegrationTest extends BaseWebIntegrationTest {
private static final String EXPORT_URL = ID_URL + "/export";
private static final String RETRY_URL = ID_URL + "/retry";
private static final String PRINT_URL = ID_URL + "/print";

private static final String REQUISITION_LESS_URL = RESOURCE_URL + "/requisitionLess";
private static final String SEND_REQUISITION_LESS_URL = ID_URL + "/requisitionLess/send";
private static final String REQUISITION_LESS_URL = RESOURCE_URL + "/requisitionLess";
private static final String NUMBER_OF_ORDERS_URL = RESOURCE_URL + "/numberOfOrdersData";
private static final String STATUSES_STATS_DATA_URL = RESOURCE_URL + "/statusesStatsData";

Expand Down Expand Up @@ -279,7 +278,7 @@ public void setUp() {
when(facilityService.findByIds(anySetOf(UUID.class))).thenReturn(Arrays.asList(
facility, facility1, facility2));

EntityManager entityManager = Mockito.mock(EntityManager.class);
EntityManager entityManager = mock(EntityManager.class);
ReflectionTestUtils.setField(shipmentService, "entityManager", entityManager);

product1 = new OrderableDataBuilder().withId(product1Id).build();
Expand Down Expand Up @@ -326,8 +325,8 @@ period2Id, program2Id, facility2Id, facility1Id, new BigDecimal(200),
}

private Order createOrder(UUID processingPeriodId, UUID program, UUID facilityId,
UUID supplyingFacilityId, BigDecimal cost,
OrderLineItem... lineItems) {
UUID supplyingFacilityId, BigDecimal cost,
OrderLineItem... lineItems) {
Order order = new OrderDataBuilder()
.withProcessingPeriodId(processingPeriodId)
.withQuotedCost(cost)
Expand Down Expand Up @@ -499,6 +498,76 @@ public void shouldCreateOrder() {
is(firstOrderDto.getExternalId()));
}

@Test
public void shouldDeleteMultipleOrders() {

firstOrder.setStatus(OrderStatus.CREATING);
secondOrder.setStatus(OrderStatus.CREATING);

UUID firstOrderId = firstOrder.getId();
UUID secondOrderId = secondOrder.getId();

List<UUID> uuids = new ArrayList<>();
uuids.add(firstOrderId);
uuids.add(secondOrderId);

List<Order> orders = new ArrayList<>();
orders.add(firstOrder);
orders.add(secondOrder);

given(orderRepository.findByIdInAndStatus(uuids, OrderStatus.CREATING.name()))
.willReturn(orders);

restAssured.given()
.header(HttpHeaders.AUTHORIZATION, getTokenHeader())
.contentType(APPLICATION_JSON_VALUE)
.body(uuids)
.when()
.delete(RESOURCE_URL)
.then()
.statusCode(204);

verify(orderRepository).findByIdInAndStatus(uuids, OrderStatus.CREATING.name());

verify(orderRepository).deleteById(firstOrderId);
verify(orderRepository).deleteById(secondOrderId);
}

@Test
public void shouldNotDeleteMultipleOrdersAsSomeOfTheIdsPointToOrdersWithAnotherStatus() {

firstOrder.setStatus(OrderStatus.CREATING);
secondOrder.setStatus(OrderStatus.ORDERED);

UUID firstOrderId = firstOrder.getId();
UUID secondOrderId = secondOrder.getId();
UUID notAvailableId = UUID.randomUUID();

List<UUID> uuids = new ArrayList<>();
uuids.add(firstOrderId);
uuids.add(secondOrderId);
uuids.add(notAvailableId);

List<Order> orders = new ArrayList<>();
orders.add(firstOrder);

given(orderRepository.findByIdInAndStatus(uuids, OrderStatus.CREATING.name()))
.willReturn(orders);

restAssured.given()
.header(HttpHeaders.AUTHORIZATION, getTokenHeader())
.contentType(APPLICATION_JSON_VALUE)
.body(uuids)
.when()
.delete(RESOURCE_URL)
.then()
.statusCode(404);

verify(orderRepository).findByIdInAndStatus(uuids, OrderStatus.CREATING.name());

verify(orderRepository, times(0)).deleteById(any(UUID.class));
}

@Test
public void shouldCreateRequisitionLessOrder() {
given(orderService.createRequisitionLessOrder(any(OrderDto.class), eq(user.getId())))
Expand Down Expand Up @@ -1073,4 +1142,11 @@ private List<StatusChangeDto> sampleStatusChanges() {

return list;
}

private Order mockOrder(UUID id) {
Order mockOrder = mock(Order.class);
given(mockOrder.getId()).willReturn(id);
given(mockOrder.getReceivingFacilityId()).willReturn(UUID.randomUUID());
return mockOrder;
}
}
3 changes: 3 additions & 0 deletions src/main/java/org/openlmis/fulfillment/i18n/MessageKeys.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ public abstract class MessageKeys {
private static final String FOUND = "found";
private static final String MUST_BE_UNIQUE = "mustBeUnique";
private static final String MUST_BE_POSITIVE = "mustBePositive";
private static final String NOT_FOUND_OR_WRONG_STATUS = "notFoundOrWrongStatus";

public static final String USER_NOT_FOUND =
join(ERROR_PREFIX, AUTHENTICATION, USER, NOT_FOUND);
Expand All @@ -92,6 +93,8 @@ public abstract class MessageKeys {
public static final String ORDER_EXISTS = join(ERROR_PREFIX, ORDER, EXISTS);
public static final String ORDER_NOT_FOUND = join(ERROR_PREFIX, ORDER, NOT_FOUND);
public static final String ORDER_INVALID_STATUS = join(ERROR_PREFIX, ORDER, INVALID_STATUS);
public static final String ORDER_NOT_FOUND_OR_WRONG_STATUS =
join(ERROR_PREFIX, ORDER, NOT_FOUND_OR_WRONG_STATUS);

public static final String ORDER_RETRY_INVALID_STATUS =
join(ERROR_PREFIX, ORDER_RETRY, INVALID_STATUS);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

package org.openlmis.fulfillment.repository;

import java.util.List;
import java.util.UUID;
import org.openlmis.fulfillment.domain.Order;
import org.openlmis.fulfillment.domain.OrderStatus;
Expand All @@ -31,4 +32,5 @@ public interface OrderRepository extends PagingAndSortingRepository<Order, UUID>

Long countByFacilityIdAndStatus(UUID facilityId, OrderStatus status);

List<Order> findByIdInAndStatus(List<UUID> ids, String status);
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import static org.apache.commons.lang3.StringUtils.startsWith;
import static org.openlmis.fulfillment.i18n.MessageKeys.ORDER_NOT_FOUND;

import java.util.List;
import java.util.UUID;
import javax.validation.constraints.NotNull;
import org.openlmis.fulfillment.domain.Order;
Expand Down Expand Up @@ -51,6 +52,7 @@ public class PermissionService {
public static final String PODS_VIEW = "PODS_VIEW";
public static final String ORDERS_VIEW = "ORDERS_VIEW";
public static final String ORDERS_EDIT = "ORDERS_EDIT";
public static final String ORDERS_DELETE = "ORDERS_DELETE";
public static final String ORDER_CREATE = "ORDER_CREATE";
public static final String SHIPMENTS_VIEW = "SHIPMENTS_VIEW";
public static final String SHIPMENTS_EDIT = "SHIPMENTS_EDIT";
Expand Down Expand Up @@ -152,6 +154,22 @@ public void canCreateOrder(Order order) {
checkPermission(ORDER_CREATE, order.getReceivingFacilityId());
}

/**
* Delete orders.
*
* @param ids ids of orders to be checked
*/
public void canDeleteOrders(List<UUID> ids) {
for (UUID id : ids) {
if (hasPermission(ORDER_CREATE, id)
|| hasPermission(ORDERS_DELETE, id)) {
return;
}

throw new MissingPermissionException(ORDER_CREATE, ORDERS_DELETE);
}
}

/**
* Checks if user has permission to view Shipments.
*
Expand Down Expand Up @@ -301,5 +319,4 @@ private boolean checkServiceToken(boolean allowApiKey,

return false;
}

}
Loading

0 comments on commit 1bd60f6

Please sign in to comment.