async def test_sensor_creation_gen1() -> Any:
    """Test that an Awair gen 1 creates expected sensors."""
    target = datetime(2020, 4, 10, 10, 38, 30)
    async with aiohttp.ClientSession() as session:
        with VCR.use_cassette("latest.yaml"), time_travel(target):
            awair = Awair(session=session, access_token=ACCESS_TOKEN)
            device = mock_awair_device(client=awair.client)
            resp = await device.air_data_latest()

    assert hasattr(resp, "timestamp")
    assert hasattr(resp, "score")
    assert hasattr(resp, "sensors")
    assert hasattr(resp, "indices")
    expected_sensors = [
        "humidity",
        "temperature",
        "carbon_dioxide",
        "volatile_organic_compounds",
        "dust",
    ]
    assert resp is not None
    assert len(resp.sensors) == len(expected_sensors)
    assert len(resp.indices) == len(expected_sensors)
    for sensor in expected_sensors:
        assert hasattr(resp.sensors, sensor)
        assert hasattr(resp.indices, sensor)

    assert device.model == "Awair"
async def test_get_raw() -> Any:
    """Test that we can get the raw air data."""
    target = datetime(2020, 4, 10, 10, 38, 31, 720296)
    async with aiohttp.ClientSession() as session:
        with VCR.use_cassette("raw.yaml"), time_travel(target):
            awair = Awair(session=session, access_token=ACCESS_TOKEN)
            device = mock_awair_device(client=awair.client)
            resp = await device.air_data_raw(from_date=(target -
                                                        timedelta(minutes=30)))

    assert resp[0].timestamp == datetime(2020, 4, 10, 15, 38, 24, 111000)
    assert resp[0].score == 88.0
    assert resp[0].sensors["temperature"] == 21.770000457763672
    assert resp[0].indices["temperature"] == -1.0
async def test_get_fifteen_minute() -> Any:
    """Test that we can get the fifteen-minute avg air data."""
    target = datetime(2020, 4, 10, 10, 38, 31, 252873)
    async with aiohttp.ClientSession() as session:
        with VCR.use_cassette("fifteen_minute.yaml"), time_travel(target):
            awair = Awair(session=session, access_token=ACCESS_TOKEN)
            device = mock_awair_device(client=awair.client)
            resp = await device.air_data_fifteen_minute(
                from_date=(target - timedelta(minutes=30)))

    assert resp[0].timestamp == datetime(2020, 4, 10, 15, 30)
    assert resp[0].score == 88.0
    assert resp[0].sensors["temperature"] == 21.791961108936984
    assert resp[0].indices["temperature"] == -1.0
async def test_get_latest() -> Any:
    """Test that we can get the latest air data."""
    target = datetime(2020, 4, 10, 10, 38, 30)
    async with aiohttp.ClientSession() as session:
        with VCR.use_cassette("latest.yaml"), time_travel(target):
            awair = Awair(session=session, access_token=ACCESS_TOKEN)
            device = mock_awair_device(client=awair.client)
            resp = await device.air_data_latest()

    assert resp is not None
    assert resp.timestamp == datetime(2020, 4, 10, 15, 38, 24, 111000)
    assert resp.score == 88.0
    assert resp.sensors["temperature"] == 21.770000457763672
    assert resp.indices["temperature"] == -1.0
    assert "<AirData@2020-04-10" in str(resp)
async def test_get_latest_local() -> Any:
    """Test that we can get the latest air data."""
    target = datetime(2020, 8, 31, 22, 7, 3)
    async with aiohttp.ClientSession() as session:
        with VCR.use_cassette("latest_local.yaml"), time_travel(target):
            awair = AwairLocal(session=session,
                               device_addrs=["AWAIR-ELEM-1419E1.local"])
            devices = await awair.devices()
            assert len(devices) == 1
            device = devices[0]
            resp = await device.air_data_latest()

    assert resp is not None
    assert resp.timestamp == datetime(2020, 8, 31, 22, 7, 3, 831000)
    assert resp.score == 93
    assert resp.sensors["temperature"] == 19.59
    assert len(resp.indices) == 0
    assert "<AirData@2020-08-31" in str(resp)
async def test_sensor_creation_omni() -> Any:
    """Test that an Awair omni creates expected sensors."""
    target = datetime(2020, 4, 10, 10, 38, 30)
    async with aiohttp.ClientSession() as session:
        with VCR.use_cassette("omni.yaml"), time_travel(target):
            awair = Awair(session=session, access_token=ACCESS_TOKEN)
            device = mock_awair_device(client=awair.client,
                                       device=MOCK_OMNI_DEVICE_ATTRS)
            resp = await device.air_data_latest()

    assert hasattr(resp, "timestamp")
    assert hasattr(resp, "score")
    assert hasattr(resp, "sensors")
    assert hasattr(resp, "indices")

    expected_sensors = [
        "humidity",
        "temperature",
        "carbon_dioxide",
        "volatile_organic_compounds",
        "particulate_matter_2_5",
        "illuminance",
        "sound_pressure_level",
    ]
    assert resp is not None
    assert len(resp.sensors) == len(expected_sensors)
    for sensor in expected_sensors:
        assert hasattr(resp.sensors, sensor)

    expected_indices = [
        "humidity",
        "temperature",
        "carbon_dioxide",
        "volatile_organic_compounds",
        "particulate_matter_2_5",
    ]
    assert len(resp.indices) == len(expected_indices)
    for sensor in expected_indices:
        assert hasattr(resp.indices, sensor)