001 package org.cocome.tradingsystem.systests.scenarios;
002
003 /**
004 * This is an abstract base class for specifiying test scenarios which should be
005 * executed in the express sales mode. It provides methods for putting the
006 * system to express mode and verify express mode.
007 *
008 * @author Christian Pfaller
009 * @author $Author: hummel $
010 * @version $Rev: 64 $
011 * @levd.rating GREEN Rev: 64
012 */
013 public abstract class ManageExpressCheckoutBase extends ProcessSaleBase {
014
015 /** The maximum number of items allowed in an express sale. */
016 public static int MAXIMUM_ITEMS_AT_EXPRESS_SALE = 8;
017
018 /**
019 * Executes the test scenario.
020 *
021 * @throws Exception
022 */
023 public abstract void testScenario() throws Exception;
024
025 /**
026 * Executes some express sales to put cash desk in express mode.
027 */
028 protected void putCashDeskInExpressMode() throws Exception {
029
030 // 1. The system records a certain amount of express sales
031 // (since the are executed in a row timing shouldn't worth considering)
032 for (int s = 0; s < cashDesk
033 .getNumberOfExpressSalesForExpressModeSwitch(); s++) {
034 performExpressSale();
035 }
036 }
037
038 /**
039 * Executes actions to check notification of express mode.
040 */
041 protected void checkNotificationOfExpressMode() throws Exception {
042 // 2. The system notifies the cashier, that it will swith to express
043 // mode
044 cashDesk.getUserDisplay().waitForUpdate(500);
045 assertTrue("Message for express mode should be shown.", cashDesk
046 .getUserDisplay().isMessageForExpressModeShown());
047 }
048
049 /**
050 * Executes actions to check the Lights display is switched on correctly.
051 */
052 protected void checkExpressModeLightsOn() throws Exception {
053 // 3. The system switches the cash desks express light and no credit
054 // card light on
055 cashDesk.getLightsDisplay().waitForUpdate(500);
056 assertTrue("Express light should be on.", cashDesk.getLightsDisplay()
057 .isExpressModeLightOn());
058 assertTrue("'No credit card' light should be on.", cashDesk
059 .getLightsDisplay().isNoCreditCardLightOn());
060 }
061
062 /**
063 * The methods performs a single sale with the maximum possible number of
064 * items for a express sale.
065 */
066 private void performExpressSale() throws Exception {
067
068 // The cashier starts new sale by pressing a button at the cash
069 // box.
070 startNewSale(MAXIMUM_ITEMS_AT_EXPRESS_SALE);
071
072 // Purchase goods
073 enterProducts(MAXIMUM_ITEMS_AT_EXPRESS_SALE);
074
075 // The cashier indicates the end of entering items by pressing
076 // the SaleFinished-button at the cash box.
077 finishSale();
078
079 // customer pays cash
080 handleCashPayment();
081
082 // update inventroy, print printout
083 updateInventory();
084 }
085 }