001    package org.cocome.tradingsystem.systests.scenarios;
002    
003    import java.util.concurrent.TimeoutException;
004    
005    import org.cocome.tradingsystem.systests.interfaces.IProduct;
006    import org.cocome.tradingsystem.systests.interfaces.IStorePC;
007    import org.cocome.tradingsystem.systests.util.GeneratedStockItem;
008    
009    /**
010     * This test case covers use case 8 - prodcut exchange among stores
011     * 
012     * @author Christian Pfaller
013     */
014    public class ProductExchangeAmongStoresTest extends ProcessSaleBase {
015    
016            private int productIndex;
017    
018            @Override
019            protected void setUp() throws Exception {
020                    super.setUp();
021    
022                    // create two more sores, store no. 0 was already created in
023                    // super.setUp();
024                    createStore(0); // store no. 1
025                    createStore(0); // store no. 2
026    
027                    productIndex = productGenerator.generate();
028    
029                    // set stock amount almost low for store no. 0
030                    stores.get(0).getStockGenerator().generate(productIndex, 100, 100, 200);
031    
032                    // set enough amount in store no. 1
033                    stores.get(1).getStockGenerator().generate(productIndex, 10, 300, 300);
034    
035                    // set nothing to store no. 2 --> they don't have it at all
036    
037            }
038    
039            /** Execute the test scenario. */
040            public void testScenario() throws Exception {
041    
042                    // execute sales szenario
043                    initializeCashDesk(0, 0);
044    
045                    // we  buy one item of the product --> low on stock  (amount < minAmount)
046                    startNewSale(1);
047                    enterProduct(); // first piece
048    
049                    finishSale();
050                    handleCashPayment();
051    
052                    // check for products transfer between store
053                    IProduct product = productGenerator.getGeneratedProduct(productIndex)
054                                    .getProduct();
055                    IStorePC store0 = stores.get(0).getStorePC();
056                    IStorePC store1 = stores.get(1).getStorePC();
057                    IStorePC store2 = stores.get(2).getStorePC();
058                    
059                    Thread.sleep(5000);
060    
061                    // there should be transfer form store 1 to store 0
062                    assertTrue("There should be transfer form store 1 to store 0",
063                                    enterprise.existsProductTransfer(product, store1, store0));
064    
065                    // there should be no transfer form store 2 to store 0
066                    assertFalse("There should be NO transfer form store 2 to store 0",
067                                    enterprise.existsProductTransfer(product, store2, store0));
068    
069                    // there should be no transfer form store 1 to store 2
070                    assertFalse("There should be NO transfer form store 1 to store 2",
071                                    enterprise.existsProductTransfer(product, store1, store2));
072    
073            }
074    
075            /**
076             * Executes actions for entering the specific product
077             */
078            private void enterProduct() throws Exception, TimeoutException {
079    
080                    // The cashier enters item identifier.
081                    GeneratedStockItem stockItem = stores.get(0).getStockGenerator()
082                                    .getGeneratedStockItem(productIndex);
083    
084                    int barcode = stockItem.getProduct().getBarcode();
085                    // This can be done ... by using the barcode scanner.
086                    cashDesk.getBarcodeScanner().sendBarcode(barcode);
087    
088            }
089    
090    }