package io.oasp.gastronomy.restaurant.salesmanagement.logic.impl; import javax.inject.Inject; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; import org.junit.Test; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.test.context.web.WebAppConfiguration; import io.oasp.gastronomy.restaurant.SpringBootApp; import io.oasp.gastronomy.restaurant.general.common.DbTestHelper; import io.oasp.gastronomy.restaurant.general.common.TestUtil; import io.oasp.gastronomy.restaurant.general.common.api.builders.OrderEtoBuilder; import io.oasp.gastronomy.restaurant.general.common.api.builders.OrderPositionEtoBuilder; import io.oasp.gastronomy.restaurant.general.common.api.constants.PermissionConstants; import io.oasp.gastronomy.restaurant.general.common.api.datatype.Money; import io.oasp.gastronomy.restaurant.salesmanagement.common.api.datatype.OrderPositionState; import io.oasp.gastronomy.restaurant.salesmanagement.common.api.datatype.ProductOrderState; import io.oasp.gastronomy.restaurant.salesmanagement.logic.api.Salesmanagement; import io.oasp.gastronomy.restaurant.salesmanagement.logic.api.to.OrderEto; import io.oasp.gastronomy.restaurant.salesmanagement.logic.api.to.OrderPositionEto; import io.oasp.module.test.common.base.ComponentTest; /** * This is the test-case of {@link Salesmanagement}. * */ @SpringApplicationConfiguration(classes = { SpringBootApp.class }) @WebAppConfiguration public class SalesManagementTest extends ComponentTest { @Inject private Salesmanagement salesManagement; @Inject private DbTestHelper dbTestHelper; /** * Initialization for the test. */ @Override public void doSetUp() { super.doSetUp(); TestUtil.login("waiter", PermissionConstants.FIND_ORDER_POSITION, PermissionConstants.SAVE_ORDER_POSITION, PermissionConstants.SAVE_ORDER, PermissionConstants.FIND_OFFER); this.dbTestHelper.setMigrationVersion("0002"); this.dbTestHelper.resetDatabase(); } /** * Log out utility for the test. */ @Override public void doTearDown() { TestUtil.logout(); } /** * Tests if the {@link OrderPositionState} is persisted correctly. The test modifies the {@link OrderPositionState} as * well as the drinkState {@link ProductOrderState}. The test focuses on saving {@link OrderPositionEto} saving and * verification of state change. Test data is created using Cobigen generated builders. */ @Test public void testOrderPositionStateChange() { try { // given OrderEto order = new OrderEtoBuilder().tableId(1L).createNew(); order = this.salesManagement.saveOrder(order); OrderPositionEto orderPosition = new OrderPositionEtoBuilder().offerId(5L).orderId(order.getId()) .offerName("Cola").price(new Money(1.2)).createNew(); orderPosition = this.salesManagement.saveOrderPosition(orderPosition); assertThat(orderPosition).isNotNull(); orderPosition.setState(OrderPositionState.ORDERED); orderPosition.setDrinkState(ProductOrderState.ORDERED); OrderPositionEto updatedOrderPosition = this.salesManagement.saveOrderPosition(orderPosition); assertThat(updatedOrderPosition.getState()).isEqualTo(OrderPositionState.ORDERED); // when updatedOrderPosition.setState(OrderPositionState.PREPARED); updatedOrderPosition.setDrinkState(ProductOrderState.PREPARED); updatedOrderPosition = this.salesManagement.saveOrderPosition(updatedOrderPosition); // then assertThat(updatedOrderPosition.getState()).isEqualTo(OrderPositionState.PREPARED); } catch (ConstraintViolationException e) { // BV is really painful as you need such code to see the actual error in JUnit. StringBuilder sb = new StringBuilder(64); sb.append("Constraints violated:"); for (ConstraintViolation<?> v : e.getConstraintViolations()) { sb.append("\n"); sb.append(v.getPropertyPath()); sb.append(":"); sb.append(v.getMessage()); } throw new IllegalStateException(sb.toString(), e); } } }