/*
* 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.core;
import android.test.InstrumentationTestCase;
import com.google.common.collect.Sets;
import com.squareup.otto.Bus;
import org.kegbot.app.config.ConfigurationStore;
import org.kegbot.proto.Models.Controller;
import org.kegbot.proto.Models.FlowMeter;
import org.kegbot.proto.Models.KegTap;
import java.util.Collections;
import java.util.Set;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
* Tests for {@link TapManager}.
*
* @author mike wakerly (opensource@hoho.com)
*/
public class TapManagerTest extends InstrumentationTestCase {
private TapManager mTapManager;
private Bus mMockBus;
private ConfigurationStore mMockConfigStore;
@Override
protected void setUp() throws Exception {
super.setUp();
// http://stackoverflow.com/q/12267572
System.setProperty("dexmaker.dexcache",
getInstrumentation().getTargetContext().getCacheDir().getPath());
mMockBus = mock(Bus.class);
mMockConfigStore = mock(ConfigurationStore.class);
mTapManager = new TapManager(mMockBus, mMockConfigStore);
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
@SuppressWarnings("deprecation")
public void testBasics() {
assertEquals(0, mTapManager.getTaps().size());
assertEquals(0, mTapManager.getVisibleTaps().size());
final KegTap tap = KegTap.newBuilder()
.setId(1)
.setName("Test Tap")
.setMeter(FlowMeter.newBuilder()
.setId(1)
.setName("test.flow0")
.setPortName("flow0")
.setTicksPerMl(1.0f)
.setController(Controller.newBuilder()
.setId(1)
.setName("test")
.build())
.build())
.build();
mTapManager.addTap(tap);
assertEquals(Collections.singletonList(tap), mTapManager.getTaps());
assertEquals(Collections.singletonList(tap), mTapManager.getVisibleTaps());
assertNull(mTapManager.getTapForMeterName("unknown"));
assertSame(tap, mTapManager.getTapForMeterName("test.flow0"));
final Set<String> hiddenTaps = Sets.newHashSet();
hiddenTaps.add("1");
hiddenTaps.add("2"); // bogus tap id, preserved across add/remove
when(mMockConfigStore.getStringSet(
TapManager.KEY_HIDDEN_TAP_IDS, Collections.<String>emptySet()))
.thenReturn(hiddenTaps);
assertEquals(Collections.singletonList(tap), mTapManager.getTaps());
assertEquals(0, mTapManager.getVisibleTaps().size());
mTapManager.setTapVisibility(tap, true);
verify(mMockConfigStore).putStringSet(
TapManager.KEY_HIDDEN_TAP_IDS, Collections.singleton("2"));
}
}