package uk.co.alt236.btlescan.containers;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
public class BluetoothLeDeviceStoreTest {
private BluetoothLeDeviceStore cut;
@Before
public void setUp() {
cut = new BluetoothLeDeviceStore();
}
@Test
public void testAddOne() {
assertStoreSize(0);
cut.addDevice(createDevice("foo"));
assertStoreSize(1);
cut.clear();
assertStoreSize(0);
}
@Test
public void testAddTwo() {
assertStoreSize(0);
cut.addDevice(createDevice("foo"));
assertStoreSize(1);
cut.addDevice(createDevice("bar"));
assertStoreSize(2);
cut.clear();
assertStoreSize(0);
}
@Test
public void testUpdateOne() {
assertStoreSize(0);
cut.addDevice(createDevice("foo", 100, 101));
assertStoreSize(1);
final BluetoothLeDevice device1 = cut.getDeviceList().get(0);
assertEquals(100, device1.getTimestamp());
assertEquals(101, device1.getRssi());
cut.addDevice(createDevice("foo", 200, 201));
assertStoreSize(1);
final BluetoothLeDevice device2 = cut.getDeviceList().get(0);
assertSame(device1, device2);
Mockito
.verify(device2, Mockito.times(1))
.updateRssiReading(200, 201);
cut.clear();
assertStoreSize(0);
}
private BluetoothLeDevice createDevice(final String mac) {
final BluetoothLeDevice mock = Mockito.mock(BluetoothLeDevice.class);
return createDevice(mac, 0, 0);
}
private BluetoothLeDevice createDevice(final String mac, long rssiTime, int rssi) {
final BluetoothLeDevice mock = Mockito.mock(BluetoothLeDevice.class);
Mockito.when(mock.getAddress()).thenReturn(mac);
Mockito.when(mock.getTimestamp()).thenReturn(rssiTime);
Mockito.when(mock.getRssi()).thenReturn(rssi);
return mock;
}
private void assertStoreSize(final int expected) {
assertEquals(expected, cut.getSize());
assertEquals(expected, cut.getDeviceCursor().getCount());
assertEquals(expected, cut.getDeviceList().size());
}
}