"""Tests for hassfest dependency finder.""" import ast import pytest from script.hassfest.dependencies import ImportCollector @pytest.fixture def mock_collector(): """Fixture with import collector that adds all referenced nodes.""" collector = ImportCollector(None) collector.unfiltered_referenced = set() collector._add_reference = collector.unfiltered_referenced.add return collector def test_child_import(mock_collector): """Test detecting a child_import reference.""" mock_collector.visit( ast.parse( """ from homeassistant.components import child_import """ ) ) assert mock_collector.unfiltered_referenced == {"child_import"} def test_subimport(mock_collector): """Test detecting a subimport reference.""" mock_collector.visit( ast.parse( """ from homeassistant.components.subimport.smart_home import EVENT_ALEXA_SMART_HOME """ ) ) assert mock_collector.unfiltered_referenced == {"subimport"} def test_child_import_field(mock_collector): """Test detecting a child_import_field reference.""" mock_collector.visit( ast.parse( """ from homeassistant.components.child_import_field import bla """ ) ) assert mock_collector.unfiltered_referenced == {"child_import_field"} def test_renamed_absolute(mock_collector): """Test detecting a renamed_absolute reference.""" mock_collector.visit( ast.parse( """ import homeassistant.components.renamed_absolute as hue """ ) ) assert mock_collector.unfiltered_referenced == {"renamed_absolute"} def test_hass_components_var(mock_collector): """Test detecting a hass_components_var reference.""" mock_collector.visit( ast.parse( """ def bla(hass): hass.components.hass_components_var.async_do_something() """ ) ) assert mock_collector.unfiltered_referenced == {"hass_components_var"} def test_hass_components_class(mock_collector): """Test detecting a hass_components_class reference.""" mock_collector.visit( ast.parse( """ class Hello: def something(self): self.hass.components.hass_components_class.async_yo() """ ) ) assert mock_collector.unfiltered_referenced == {"hass_components_class"} def test_all_imports(mock_collector): """Test all imports together.""" mock_collector.visit( ast.parse( """ from homeassistant.components import child_import from homeassistant.components.subimport.smart_home import EVENT_ALEXA_SMART_HOME from homeassistant.components.child_import_field import bla import homeassistant.components.renamed_absolute as hue def bla(hass): hass.components.hass_components_var.async_do_something() class Hello: def something(self): self.hass.components.hass_components_class.async_yo() """ ) ) assert mock_collector.unfiltered_referenced == { "child_import", "subimport", "child_import_field", "renamed_absolute", "hass_components_var", "hass_components_class", }