def test_badParameterEndDateString(self): start_date = datetime(2018, 10, 5, 12, 0, 0) client = SrpEnergyClient(self.accountid, self.username, self.password) with self.assertRaises(ValueError): client.usage(start_date, '20181001')
def test_bad_crendentials(self): start_date = datetime(2018, 9, 19, 0, 0, 0) end_date = datetime(2018, 9, 19, 23, 0, 0) client = SrpEnergyClient('a', 'b', 'c') with self.assertRaises(TypeError): client.usage(start_date, end_date)
def test_getUsage(self): start_date = datetime(2018, 10, 1, 6, 0, 0) end_date = datetime(2018, 10, 5, 12, 0, 0) client = SrpEnergyClient(self.accountid, self.username, self.password) usage = client.usage(start_date, end_date) self.assertEqual(len(usage), 120)
def test_badParameterStartDateAfterNow(self): start_date = datetime.now() + timedelta(days=10) end_date = datetime(2018, 10, 5, 12, 0, 0) client = SrpEnergyClient(self.accountid, self.username, self.password) with self.assertRaises(ValueError): client.usage(start_date, end_date)
def test_error_validate_user(): """Test error Validation of user.""" with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post: session_post.return_value = MOCK_BAD_LOGIN_RESPONSE session_get.side_effect = get_mock_requests(ROUTES) client = SrpEnergyClient(TEST_ACCOUNT_ID, TEST_USER_NAME, TEST_PASSWORD) is_valid = client.validate() assert is_valid is False
def test_latestDayUsageKw(self): start_date = datetime(2018, 9, 19, 0, 0, 0) end_date = datetime(2018, 9, 19, 23, 0, 0) client = SrpEnergyClient(self.accountid, self.username, self.password) usage = client.usage(start_date, end_date) self.assertEqual(len(usage), 24) date, hour, isodate, kwh, cost = usage[-1] self.assertEqual(kwh, '0.4') self.assertEqual(cost, '0.09')
def test_bad_parameter_end_date_string(): """Test end date is date.""" with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post: session_post.return_value = MOCK_LOGIN_RESPONSE session_get.side_effect = get_mock_requests(ROUTES) client = SrpEnergyClient(TEST_ACCOUNT_ID, TEST_USER_NAME, TEST_PASSWORD) start_date = datetime(2018, 10, 5, 12, 0, 0) with pytest.raises(ValueError): client.usage(start_date, "20181001")
def test_error_usage_payload(): """Test error with invalid usage payload.""" with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post: session_post.return_value = MOCK_LOGIN_RESPONSE session_get.side_effect = get_mock_requests(ROUTES) client = SrpEnergyClient(TEST_BAD_ACCOUNT_ID, TEST_USER_NAME, TEST_PASSWORD) start_date = datetime(2018, 9, 19, 0, 0, 0) end_date = datetime(2018, 9, 19, 23, 0, 0) with pytest.raises(Exception): client.usage(start_date, end_date)
def test_bad_parameter_start_date_after_now(): """Test start date is not after Now.""" with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post: session_post.return_value = MOCK_LOGIN_RESPONSE session_get.side_effect = get_mock_requests(ROUTES) client = SrpEnergyClient(TEST_ACCOUNT_ID, TEST_USER_NAME, TEST_PASSWORD) start_date = datetime.now() + timedelta(days=10) end_date = datetime.now() + timedelta(days=15) with pytest.raises(ValueError): client.usage(start_date, end_date)
def test_get_usage(): """Test usage.""" with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post: session_post.return_value = MOCK_LOGIN_RESPONSE session_get.side_effect = get_mock_requests(ROUTES) client = SrpEnergyClient(TEST_ACCOUNT_ID, TEST_USER_NAME, TEST_PASSWORD) start_date = datetime(2018, 10, 1, 6, 0, 0) end_date = datetime(2018, 10, 5, 12, 0, 0) usage = client.usage(start_date, end_date) assert len(usage) == 3
def test_bad_parameter_account_id_hyphens(): """Test accountid has hybhens in it.""" with pytest.raises(ValueError) as err_info: SrpEnergyClient("123-456", "b", "a") assert "Parameter account should only contain numbers." in str( err_info.value)
def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the SRP energy.""" name = config[CONF_NAME] username = config[CONF_USERNAME] password = config[CONF_PASSWORD] account_id = config[CONF_ID] from srpenergy.client import SrpEnergyClient srp_client = SrpEnergyClient(account_id, username, password) if not srp_client.validate(): _LOGGER.error("Couldn't connect to %s. Check credentials", name) return add_entities([SrpEnergy(name, srp_client)], True)
async def async_step_user(self, user_input=None): """Handle a flow initialized by the user.""" errors = {} if self._async_current_entries(): return self.async_abort(reason="single_instance_allowed") if user_input is not None: try: srp_client = SrpEnergyClient( user_input[CONF_ID], user_input[CONF_USERNAME], user_input[CONF_PASSWORD], ) is_valid = await self.hass.async_add_executor_job( srp_client.validate) if is_valid: return self.async_create_entry(title=user_input[CONF_NAME], data=user_input) errors["base"] = "invalid_auth" except ValueError: errors["base"] = "invalid_account" except Exception: # pylint: disable=broad-except _LOGGER.exception("Unexpected exception") errors["base"] = "unknown" return self.async_show_form(step_id="user", data_schema=vol.Schema(self.config), errors=errors)
def test_daily_aggregation_tou(): """Test that hourly roll up matches SRP Daily.""" # "dailyReadList": [{ # "day": "2018-06-28T07:00:00Z", # "date": "2018-06-28T07:00:00Z", # "meterReadDate": "2018-06-29T00:00:00-07:00", # "superOffPeakKwh": 0.0, # "shoulderKwh": 0.0, # "offPeakKwh": 61.0, # "onPeakKwh": 39.0, # "totalKwh": 0.0, # "onPeakCost": 9.33, # "offPeakCost": 5.51, # "shoulderCost": 0.0, # "superOffPeakCost": 0.0, # "totalCost": 0.0, # "dailyCost": 14.84 # } with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post: session_post.return_value = MOCK_LOGIN_RESPONSE session_get.side_effect = get_mock_requests(ROUTES) client = SrpEnergyClient(TEST_ACCOUNT_TOU_ID, TEST_USER_NAME, TEST_PASSWORD) start_date = datetime(2020, 6, 28, 0, 0, 0) end_date = datetime(2020, 6, 28, 23, 0, 0) usage = client.usage(start_date, end_date, True) total_kwh = 0 total_cost = 0 for line in usage: _date, _hour, _isodate, kwh, cost = line total_kwh = total_kwh + kwh total_cost = total_cost + cost assert len(usage) == 24 assert total_kwh == 123 assert total_cost == 8.92
def test_latest_day_usage_kw(): """Test Latest Day Usage for kwh.""" with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post: session_post.return_value = MOCK_LOGIN_RESPONSE session_get.side_effect = get_mock_requests(ROUTES) client = SrpEnergyClient(TEST_ACCOUNT_ID, TEST_USER_NAME, TEST_PASSWORD) start_date = datetime(2018, 9, 19, 0, 0, 0) end_date = datetime(2018, 9, 19, 23, 0, 0) usage = client.usage(start_date, end_date) assert len(usage) == 3 _date, _hour, _isodate, kwh, cost = usage[-1] assert kwh == 0.4 assert cost == 0.08
def test_time_of_use_winter_on_peak_usage(): """Test Time of Use for winter on Peak Usage for kwh.""" with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post: session_post.return_value = MOCK_LOGIN_RESPONSE session_get.side_effect = get_mock_requests(ROUTES) client = SrpEnergyClient(TEST_ACCOUNT_TOU_ID, TEST_USER_NAME, TEST_PASSWORD) start_date = datetime(2019, 12, 19, 0, 0, 0) end_date = datetime(2019, 12, 19, 23, 0, 0) usage = client.usage(start_date, end_date, True) assert len(usage) == 3 _date, _hour, _isodate, kwh, cost = usage[0] assert kwh == 2.5 assert cost == 0.24
def test_date_timezone_error(): """Test error with invalid usage payload.""" with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post: session_post.return_value = MOCK_LOGIN_RESPONSE session_get.side_effect = get_mock_requests(ROUTES) client = SrpEnergyClient(TEST_ACCOUNT_ID, TEST_USER_NAME, TEST_PASSWORD) start_date = datetime.now(timezone.utc) + timedelta(days=-1) end_date = datetime.now(timezone.utc) usage = client.usage(start_date, end_date) assert len(usage) == 3 _date, _hour, _isodate, kwh, cost = usage[-1] assert kwh == 0.4 assert cost == 0.08
def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the SRP energy.""" _LOGGER.warning( "The srp_energy integration is deprecated and will be removed " "in Home Assistant 0.100.0. For more information see ADR-0004:" "https://github.com/home-assistant/architecture/blob/master/adr/0004-webscraping.md" ) name = config[CONF_NAME] username = config[CONF_USERNAME] password = config[CONF_PASSWORD] account_id = config[CONF_ID] from srpenergy.client import SrpEnergyClient srp_client = SrpEnergyClient(account_id, username, password) if not srp_client.validate(): _LOGGER.error("Couldn't connect to %s. Check credentials", name) return add_entities([SrpEnergy(name, srp_client)], True)
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up the SRP Energy component from a config entry.""" # Store an SrpEnergyClient object for your srp_energy to access try: srp_energy_client = SrpEnergyClient( entry.data.get(CONF_ID), entry.data.get(CONF_USERNAME), entry.data.get(CONF_PASSWORD), ) hass.data[SRP_ENERGY_DOMAIN] = srp_energy_client except (Exception) as ex: _LOGGER.error("Unable to connect to Srp Energy: %s", str(ex)) raise ConfigEntryNotReady from ex await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) return True
async def async_setup_entry(opp: OpenPeerPower, entry: ConfigEntry): """Set up the SRP Energy component from a config entry.""" # Store an SrpEnergyClient object for your srp_energy to access try: srp_energy_client = SrpEnergyClient( entry.data.get(CONF_ID), entry.data.get(CONF_USERNAME), entry.data.get(CONF_PASSWORD), ) opp.data[SRP_ENERGY_DOMAIN] = srp_energy_client except (Exception) as ex: _LOGGER.error("Unable to connect to Srp Energy: %s", str(ex)) raise ConfigEntryNotReady from ex opp.config_entries.async_setup_platforms(entry, PLATFORMS) return True
def test_none_password(self): with self.assertRaises(TypeError): client = SrpEnergyClient('a', 'b', None)
def test_none_password(): """Test No password parameter exception.""" with pytest.raises(TypeError): SrpEnergyClient(TEST_ACCOUNT_ID, "b", None)
def test_none_accountid(self): with self.assertRaises(TypeError): client = SrpEnergyClient(None, 'b', 'c')
def test_none_username(self): with self.assertRaises(TypeError): client = SrpEnergyClient('a', None, 'c')
def test_blank_accountid(): """Test blank account parameter exception.""" with pytest.raises(ValueError): SrpEnergyClient("", "b", "c")
def test_blank_accountid(self): with self.assertRaises(ValueError): client = SrpEnergyClient('', 'b', 'c')
def test_invalid_crendentials(self): client = SrpEnergyClient('a', 'b', 'c') self.assertFalse(client.validate())
def test_valid_crendentials(self): client = SrpEnergyClient(self.accountid, self.username, self.password) self.assertTrue(client.validate())
def test_blank_username(self): with self.assertRaises(ValueError): client = SrpEnergyClient('a', '', 'c')
def test_blank_password(self): with self.assertRaises(ValueError): client = SrpEnergyClient('a', 'b', '')