content: package uk.co.alt236.btlescan.containers;
  
  import org.junit.Before;
  import org.junit.Test;
  import org.mockito.Mockito;
  
  import dev.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());
      }
  }