text: """Define test fixtures for SimpliSafe."""
  import json
  from unittest.mock import AsyncMock, Mock, patch
  
  import pytest
  from simplipy.api import AuthStates
  from simplipy.system.v3 import SystemV3
  
  from homeassistant.components.simplisafe.const import DOMAIN
  from homeassistant.const import CONF_CODE, CONF_PASSWORD, CONF_TOKEN, CONF_USERNAME
  from homeassistant.setup import async_setup_component
  
  from .common import REFRESH_TOKEN, USER_ID, USERNAME
  
  from tests.common import MockConfigEntry, load_fixture
  
  CODE = "12345"
  PASSWORD = "password"
  SYSTEM_ID = "system_123"
  
  
  @pytest.fixture(name="api_auth_state")
  def api_auth_state_fixture():
      """Define a SimpliSafe API auth state."""
      return AuthStates.PENDING_2FA_SMS
  
  
  @pytest.fixture(name="api")
  def api_fixture(api_auth_state, data_subscription, system_v3, websocket):
      """Define a simplisafe-python API object."""
      return Mock(
          async_get_systems=AsyncMock(return_value={SYSTEM_ID: system_v3}),
          async_verify_2fa_email=AsyncMock(),
          async_verify_2fa_sms=AsyncMock(),
          auth_state=api_auth_state,
          refresh_token=REFRESH_TOKEN,
          subscription_data=data_subscription,
          user_id=USER_ID,
          websocket=websocket,
      )
  
  
  @pytest.fixture(name="config_entry")
  def config_entry_fixture(hass, config, unique_id):
      """Define a config entry."""
      entry = MockConfigEntry(domain=DOMAIN, unique_id=unique_id, data=config)
      entry.add_to_hass(hass)
      return entry
  
  
  @pytest.fixture(name="config")
  def config_fixture():
      """Define config entry data config."""
      return {
          CONF_TOKEN: REFRESH_TOKEN,
          CONF_USERNAME: USERNAME,
      }
  
  
  @pytest.fixture(name="credentials_config")
  def credentials_config_fixture():
      """Define a username/password config."""
      return {
          CONF_USERNAME: USERNAME,
          CONF_PASSWORD: PASSWORD,
      }
  
  
  @pytest.fixture(name="data_latest_event", scope="session")
  def data_latest_event_fixture():
      """Define latest event data."""
      return json.loads(load_fixture("latest_event_data.json", "simplisafe"))
  
  
  @pytest.fixture(name="data_sensor", scope="session")
  def data_sensor_fixture():
      """Define sensor data."""
      return json.loads(load_fixture("sensor_data.json", "simplisafe"))
  
  
  @pytest.fixture(name="data_settings", scope="session")
  def data_settings_fixture():
      """Define settings data."""
      return json.loads(load_fixture("settings_data.json", "simplisafe"))
  
  
  @pytest.fixture(name="data_subscription", scope="session")
  def data_subscription_fixture():
      """Define subscription data."""
      return json.loads(load_fixture("subscription_data.json", "simplisafe"))
  
  
  @pytest.fixture(name="reauth_config")
  def reauth_config_fixture():
      """Define a reauth config."""
      return {
          CONF_PASSWORD: PASSWORD,
      }
  
  
  @pytest.fixture(name="setup_simplisafe")
  async def setup_simplisafe_fixture(hass, api, config):
      """Define a fixture to set up SimpliSafe."""
      with patch(
          "homeassistant.components.simplisafe.config_flow.DEFAULT_EMAIL_2FA_SLEEP", 0
      ), patch(
          "homeassistant.components.simplisafe.config_flow.API.async_from_credentials",
          return_value=api,
      ), patch(
          "homeassistant.components.simplisafe.API.async_from_credentials",
          return_value=api,
      ), patch(
          "homeassistant.components.simplisafe.API.async_from_refresh_token",
          return_value=api,
      ), patch(
          "homeassistant.components.simplisafe.SimpliSafe._async_start_websocket_loop"
      ), patch(
          "homeassistant.components.simplisafe.PLATFORMS", []
      ):
          assert await async_setup_component(hass, DOMAIN, config)
          await hass.async_block_till_done()
          yield
  
  
  @pytest.fixture(name="sms_config")
  def sms_config_fixture():
      """Define a SMS-based two-factor authentication config."""
      return {
          CONF_CODE: CODE,
      }
  
  
  @pytest.fixture(name="system_v3")
  def system_v3_fixture(data_latest_event, data_sensor, data_settings, data_subscription):
      """Define a simplisafe-python V3 System object."""
      system = SystemV3(Mock(subscription_data=data_subscription), SYSTEM_ID)
      system.async_get_latest_event = AsyncMock(return_value=data_latest_event)
      system.sensor_data = data_sensor
      system.settings_data = data_settings
      system.generate_device_objects()
      return system
  
  
  @pytest.fixture(name="unique_id")
  def unique_id_fixture():
      """Define a unique ID."""
      return USER_ID
  
  
  @pytest.fixture(name="websocket")
  def websocket_fixture():
      """Define a simplisafe-python websocket object."""
      return Mock(
          async_connect=AsyncMock(),
          async_disconnect=AsyncMock(),
          async_listen=AsyncMock(),
      )
  