From 6a3be87d5997255b92dbeff21433b3fb67ab85a7 Mon Sep 17 00:00:00 2001 From: SMKRV Date: Mon, 18 Nov 2024 02:06:15 +0300 Subject: [PATCH] Update files --- custom_components/ha_text_ai/sensor.py | 1 + ha_text_ai.zip | Bin 6818 -> 7312 bytes structure.md | 27 +++++++++ tests/test_init.py | 78 +++++++++++++++++++------ 4 files changed, 88 insertions(+), 18 deletions(-) create mode 100644 structure.md diff --git a/custom_components/ha_text_ai/sensor.py b/custom_components/ha_text_ai/sensor.py index 43ec019..655f1e9 100644 --- a/custom_components/ha_text_ai/sensor.py +++ b/custom_components/ha_text_ai/sensor.py @@ -56,3 +56,4 @@ class HATextAISensor(CoordinatorEntity, SensorEntity): ATTR_RESPONSE: last_response, ATTR_LAST_UPDATED: self.coordinator.last_update_success_time, } + diff --git a/ha_text_ai.zip b/ha_text_ai.zip index 591e34ab6a245b6ae960b932cc0bfec4e64c24dd..1e94ad9c716a2f6796921996fb6b1455b1a2e290 100644 GIT binary patch delta 3018 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 b=7aU%x{STeB}{&m9Sh?EQzvl#{g?j$Oxl;p delta 2451 zcmY+GcTf`u6U74wy(&#Y_3)4uM5UO}q)SHxq#c4HEkF{QV1PuAP?R2;fJOub5ksV7 zBoLw?geEOWy@SvMjDRReJMQNDX7taUd2eTD_BU@g6Z%Apw8K_Az(3C}9)WkSPh$rF zMmPZg9)L6;{AOr4A`EXKDu;RMWQ!=)5N_F2H7^!Vk>9#ET&YBMbP1{rlrJCY4r}v$ zNlF}lrjoWXqpK|k*FKfMjV0+L7J7@;w<&~kB|$v4W|3}mk-xY?j}NR?C;Ce5P*}M& z26sM#)gNIAh3>OyOU6yloXzA^#oG%PVF`bf#y|q*w~}wfU3XF@YGTA--EdQ0#kzY= za$(33kumPx$VPtA-!Z=>=M+Cb78zoH?DrWqOYOqxziiJqtA*gABL7&kQ$2xCbve3)`B?m{U_DOg(vBWpANA}bq~4i<0MT<^QS?Z#mZ)yhJQq(w+?`{ zsIq zUsmYJ{I7#$*NlZ>=r=Amtcj-13$VFsZ64hOqbmCEaF}_3;UY2DYB;D(Loa=SHgKYVh+^+k@Wc3vmJ7cx=BQS9IKbB2i-aELYc-MP z4ZaT2Eu;Iy-Yg7&)p6gR(&b`O}{k1-Y-}~jDCKD z&e!*x86r=WCruH)M_|HR$-Am#FN+sSPcV!|)(q?O`_V>CeQa}wLPdfj75rFqWCL7l z67c!hgJ45zL#W4a(2#}so;un@!IB2j1t?RQxwul&m~O0!{6{&#wdpEswnI0EPR{GF z)zT7m#+(N(ROh4;KC`~qfQB-uyF3I*ev<21@GepzOZC1kP~du(O}V#8w|mV4%w}SX zqXNOmJJukh@-Kp59rdk1g@g-Np6Ujj#Wd#~Oa0->l7%y?7Os_4$E(%Tmbz5*L++l5 zlbPg~Ps|r5uN8A0NOFG~noOU|4!EcycAH$~s|9s6W0PMV2x9gldEZeMmA-d6l&}n} zb`Kpifox)a2tFYN+0owZ<0>C86!~H$^iox;Pe~bJ6IzgJTNhvj~Sa36$Nu-2)KxfdYxn;6+X1iFCtSFNmAeVhqa;pku9>D zJax2z`?InwDNmDH_w8*_QZqn7E6dz*Gokh`#cm8;bW*a2s5-dsg7)95673MzI#^GhyJZ~ zL-|#Ux*DI9`Wk{*=NR_oX%MYv0?c`DC+0=LJ_UWpE}Y{6Z@K8Q#8A|@^U4*00kC1n z?cHsNOHE?5$*kR;o`(NMk#yjzWO@zW@jgk5EU(I6LtG zfby7|Fn=LGn15t6AAk+Cb)@^x8j@{gkxtUHt0f+$XVB}*UNap0XKKI9g3KMY5a)ze>L_1X_r=XW;}{fCynR_(!~ zg@k7tyFh8>22G=*(J6i#n&i|S?>lZV8R_#_V*C>IT|ywF_x=2JJw}s!qJ2g-v-0@U z+0L~aZE!Na&UY-<`KFEMW^ksEIDVPdad#q>s?<~AH7AVQ+=S}bOuZ?(IaeC<@K)l2 zbzfO?U#|E@=;Ki?f8E;7!v(U$?S**ce%?5An{fGkg)Z(+k=4B?;L`h-I`We-9iY8_ zHlYKF+HPSi4_;SFmYv0h_mI*#_3Qs~;)oFd;ArK5vO5DH!2iFQYtl0Ki(p>-7fBF4 zTMEqnm AsyncMock: + """Override async_setup_entry.""" + with patch( + "custom_components.ha_text_ai.async_setup_entry", + return_value=True, + ) as mock_setup_entry: + yield mock_setup_entry + +@pytest.fixture +def mock_coordinator() -> AsyncMock: + """Override coordinator.""" + with patch( + "custom_components.ha_text_ai.coordinator.HATextAICoordinator", + return_value=AsyncMock(), + ) as mock_coordinator: + yield mock_coordinator + +async def test_async_setup(hass: HomeAssistant, mock_setup_entry: AsyncMock) -> None: + """Test the initial setup.""" + assert await async_setup_component(hass, DOMAIN, { + DOMAIN: { + "api_key": "test_key", + "model": "gpt-3.5-turbo", + "temperature": 0.7, + "max_tokens": 1000, + "api_endpoint": "https://api.openai.com/v1", + "request_interval": 1.0 + } + }) + await hass.async_block_till_done() + assert DOMAIN in hass.data + +async def test_async_setup_entry( + hass: HomeAssistant, + mock_coordinator: AsyncMock +) -> None: + """Test setup entry.""" + entry = MockConfigEntry( + domain=DOMAIN, + data={ + "api_key": "test_key", + "model": "gpt-3.5-turbo", + "temperature": 0.7, + "max_tokens": 1000, + "api_endpoint": "https://api.openai.com/v1", + "request_interval": 1.0 + }, + ) + entry.add_to_hass(hass) + + assert await hass.config_entries.async_setup(entry.entry_id) + await hass.async_block_till_done() + + assert len(mock_coordinator.mock_calls) == 1 + assert DOMAIN in hass.data + assert entry.entry_id in hass.data[DOMAIN]