/* * Copyright 2014 Bevbot LLC <info@bevbot.com> * * This file is part of the Kegtab package from the Kegbot project. For * more information on Kegtab or Kegbot, see <http://kegbot.org/>. * * Kegtab is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free * Software Foundation, version 2. * * Kegtab is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with Kegtab. If not, see <http://www.gnu.org/licenses/>. */ package org.kegbot.backend; import android.test.AndroidTestCase; import org.kegbot.app.util.KegSizes; import org.kegbot.proto.Models.Beverage; import org.kegbot.proto.Models.BeverageProducer; import org.kegbot.proto.Models.Controller; import org.kegbot.proto.Models.Drink; import org.kegbot.proto.Models.FlowMeter; import org.kegbot.proto.Models.Keg; import org.kegbot.proto.Models.KegTap; import java.util.Collections; import java.util.List; public class LocalBackendTest extends AndroidTestCase { LocalBackend mBackend; @Override protected void setUp() throws Exception { mBackend = new LocalBackend(); mBackend.start(getContext()); } @Override protected void tearDown() throws Exception { getContext().deleteDatabase(LocalBackendDbHelper.DATABASE_NAME); } /** Tests default values in fresh database. */ public void testDefaults() throws BackendException { List<KegTap> taps = mBackend.getTaps(); assertFalse(taps.isEmpty()); assertEquals(1, taps.size()); KegTap tap = taps.get(0); assertEquals("Main Tap", tap.getName()); assertTrue(tap.hasMeter()); assertFalse(tap.hasCurrentKeg()); assertFalse(tap.hasCurrentKegId()); assertFalse(tap.hasToggle()); assertFalse(tap.hasThermoSensorId()); FlowMeter meter = tap.getMeter(); assertEquals("kegboard.flow0", meter.getName()); assertEquals("flow0", meter.getPortName()); assertEquals(2.2, meter.getTicksPerMl(), 0.001); assertTrue(meter.hasController()); Controller controller = meter.getController(); assertEquals("kegboard", controller.getName()); assertEquals("", controller.getSerialNumber()); assertEquals("", controller.getModelName()); // Check getFlowMeters() and getControllers() assertEquals(Collections.singletonList(meter), mBackend.getFlowMeters()); assertEquals(Collections.singletonList(controller), mBackend.getControllers()); // Other endpoints. assertTrue(mBackend.getEvents().isEmpty()); assertTrue(mBackend.getEventsSince(0).isEmpty()); assertTrue(mBackend.getUsers().isEmpty()); assertNull(mBackend.getCurrentSession()); assertNull(mBackend.getSessionStats(0)); } /** Starts several kegs, one for each {@link KegSizes KegSize}. */ public void testStartKeg() throws BackendException { int expectedKegId = 1; KegTap tap = mBackend.getTaps().get(0); for (final String kegSize : KegSizes.allLabelsAscendingVolume()) { tap = mBackend.startKeg(tap, "Test Beer", "Test Brewer", "Test Style", kegSize); assertNotNull(tap); assertEquals("kegboard.flow0", tap.getMeter().getName()); assertTrue(tap.hasCurrentKegId()); assertEquals(expectedKegId, tap.getCurrentKegId()); assertTrue(tap.hasCurrentKeg()); Keg keg = tap.getCurrentKeg(); assertEquals(expectedKegId, keg.getId()); assertTrue(keg.getOnline()); assertEquals(kegSize, keg.getKegType()); Beverage beverage = keg.getBeverage(); assertEquals(0, beverage.getId()); assertEquals("Test Beer", beverage.getName()); assertEquals("Test Style", beverage.getStyle()); BeverageProducer producer = beverage.getProducer(); assertEquals(0, producer.getId()); assertEquals("Test Brewer", producer.getName()); final double fullVolume = KegSizes.getVolumeMl(kegSize); assertEquals(fullVolume, keg.getFullVolumeMl()); assertEquals(fullVolume, keg.getRemainingVolumeMl()); assertEquals(0.0, keg.getServedVolumeMl()); assertEquals(0.0, keg.getSpilledVolumeMl()); // End the keg. keg = mBackend.endKeg(keg); assertFalse(keg.getOnline()); KegTap endedTap = mBackend.getTaps().get(0); assertEquals(tap.getId(), endedTap.getId()); assertFalse(endedTap.hasCurrentKegId()); assertFalse(endedTap.hasCurrentKeg()); expectedKegId++; } } public void testPourDrink() throws BackendException { KegTap tap = mBackend.getTaps().get(0); tap = mBackend.startKeg(tap, "Test Beer", "Test Brewer", "Test Style", KegSizes.HALF_BARREL); assertNotNull(tap); final double fullVolume = KegSizes.getVolumeMl(KegSizes.HALF_BARREL); Keg keg = mBackend.getTaps().get(0).getCurrentKeg(); assertNotNull(keg); assertEquals(fullVolume, keg.getRemainingVolumeMl()); Drink drink = mBackend.recordDrink("kegboard.flow0", 1000, 123, "", "", "", 0, null, null); assertNotNull(drink); assertEquals(1, drink.getId()); assertEquals(1000.0, drink.getVolumeMl(), 0.001); assertEquals(123, drink.getTicks()); assertFalse(drink.hasUser()); keg = mBackend.getTaps().get(0).getCurrentKeg(); assertEquals(1000.0, keg.getServedVolumeMl()); assertEquals(fullVolume - 1000.0, keg.getRemainingVolumeMl()); // Recording with a username is ignored. drink = mBackend.recordDrink("kegboard.flow0", 500, 123, "", "user", "", 0, null, null); assertNotNull(drink); assertEquals(2, drink.getId()); assertEquals(500.0, drink.getVolumeMl(), 0.001); assertEquals(123, drink.getTicks()); assertFalse(drink.hasUser()); keg = mBackend.getTaps().get(0).getCurrentKeg(); assertEquals(1500.0, keg.getServedVolumeMl()); assertEquals(fullVolume - 1500.0, keg.getRemainingVolumeMl()); // Recording against a bogus tap is ignored. try { drink = mBackend.recordDrink("kegboard.bogus", 1000, 123, "", "", "", 0, null, null); fail("Expected error."); } catch (NotFoundException e) { // Expected. } } }