package io.oasp.gastronomy.restaurant.offermanagement.batch.impl.productimport;
import static org.junit.Assert.assertEquals;
import java.util.List;
import javax.inject.Inject;
import org.flywaydb.core.Flyway;
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.TestUtil;
import io.oasp.gastronomy.restaurant.general.common.api.constants.PermissionConstants;
import io.oasp.gastronomy.restaurant.offermanagement.common.api.Product;
import io.oasp.gastronomy.restaurant.offermanagement.common.api.datatype.ProductSortByHitEntry;
import io.oasp.gastronomy.restaurant.offermanagement.dataaccess.impl.dao.ProductDaoImpl;
import io.oasp.gastronomy.restaurant.offermanagement.logic.api.Offermanagement;
import io.oasp.gastronomy.restaurant.offermanagement.logic.api.to.ProductEto;
import io.oasp.gastronomy.restaurant.offermanagement.logic.api.to.ProductFilter;
import io.oasp.gastronomy.restaurant.offermanagement.logic.api.to.ProductSortBy;
import io.oasp.module.jpa.common.api.to.OrderDirection;
import io.oasp.module.test.common.base.ComponentTest;
/**
* This is the test case of {@link ProductDaoImpl}
*
* @since dev
*/
@SpringApplicationConfiguration(classes = { SpringBootApp.class })
@WebAppConfiguration
public class ProductManagementTest extends ComponentTest {
@Inject
private Offermanagement offerManagement;
@Inject
private Flyway flyway;
/**
* Login
*/
@Override
public void doSetUp() {
super.doSetUp();
this.flyway.clean();
this.flyway.migrate();
TestUtil.login("waiter", PermissionConstants.FIND_OFFER);
}
/**
* Logout
*/
@Override
public void doTearDown() {
super.doTearDown();
TestUtil.logout();
}
/**
* Tests if the {@link Product} is filtered correctly.
*/
@Test
public void testFindProductsFiltered() {
ProductFilter filter = new ProductFilter();
filter.setFetchMeals(true);
ProductSortBy sort = new ProductSortBy();
List<ProductEto> products = this.offerManagement.findProductsFiltered(filter, sort);
assertEquals(products.size(), 6);
filter.setFetchDrinks(true);
filter.setFetchMeals(false);
sort.setSortByEntry(ProductSortByHitEntry.DESCRIPTION);
products = this.offerManagement.findProductsFiltered(filter, sort);
assertEquals(products.size(), 4);
assertEquals(products.get(0).getId(), new Long(13));
assertEquals(products.get(1).getId(), new Long(12));
assertEquals(products.get(2).getId(), new Long(11));
assertEquals(products.get(3).getId(), new Long(14));
filter.setFetchSideDishes(true);
filter.setFetchDrinks(false);
products = this.offerManagement.findProductsFiltered(filter, sort);
assertEquals(products.size(), 4);
assertEquals(products.get(0).getId(), new Long(9));
assertEquals(products.get(1).getId(), new Long(10));
assertEquals(products.get(2).getId(), new Long(7));
assertEquals(products.get(3).getId(), new Long(8));
filter.setFetchMeals(true);
products = this.offerManagement.findProductsFiltered(filter, sort);
assertEquals(products.size(), 10);
filter.setFetchMeals(true);
filter.setFetchDrinks(true);
sort.setSortByEntry(ProductSortByHitEntry.ID);
products = this.offerManagement.findProductsFiltered(filter, sort);
assertEquals(products.size(), 14);
assertEquals(products.get(5).getDescription(), "Flammkuchen");
sort.setOrderBy(OrderDirection.DESC);
products = this.offerManagement.findProductsFiltered(filter, sort);
assertEquals(products.get(5).getDescription(), "Brot");
assertEquals(products.get(0).getId(), new Long(14));
assertEquals(products.get(1).getId(), new Long(13));
assertEquals(products.get(2).getId(), new Long(12));
assertEquals(products.get(3).getId(), new Long(11));
}
}