|
101 | 101 | CONF_PLATFORM, |
102 | 102 | CONF_SCAN_INTERVAL, |
103 | 103 | CONF_SLAVE, |
| 104 | + CONF_TEMPERATURE_UNIT, |
104 | 105 | STATE_UNAVAILABLE, |
105 | 106 | STATE_UNKNOWN, |
| 107 | + UnitOfTemperature, |
106 | 108 | ) |
107 | 109 | from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN, HomeAssistant, State |
108 | 110 | from homeassistant.setup import async_setup_component |
@@ -1656,6 +1658,140 @@ async def test_restore_state_climate( |
1656 | 1658 | assert state.attributes[ATTR_TEMPERATURE] == 37 |
1657 | 1659 |
|
1658 | 1660 |
|
| 1661 | +@pytest.mark.parametrize( |
| 1662 | + ("mock_test_state", "do_config"), |
| 1663 | + [ |
| 1664 | + pytest.param( |
| 1665 | + ( |
| 1666 | + State( |
| 1667 | + ENTITY_ID, |
| 1668 | + HVACMode.AUTO, |
| 1669 | + { |
| 1670 | + ATTR_TEMPERATURE: 17, |
| 1671 | + "temperature_unit": UnitOfTemperature.CELSIUS, |
| 1672 | + }, |
| 1673 | + ), |
| 1674 | + ), |
| 1675 | + { |
| 1676 | + CONF_CLIMATES: [ |
| 1677 | + { |
| 1678 | + CONF_NAME: TEST_ENTITY_NAME, |
| 1679 | + CONF_TARGET_TEMP: 117, |
| 1680 | + CONF_ADDRESS: 117, |
| 1681 | + CONF_TEMPERATURE_UNIT: "C", |
| 1682 | + } |
| 1683 | + ], |
| 1684 | + }, |
| 1685 | + id="celsius_to_celsius", |
| 1686 | + ), |
| 1687 | + pytest.param( |
| 1688 | + ( |
| 1689 | + State( |
| 1690 | + ENTITY_ID, |
| 1691 | + HVACMode.AUTO, |
| 1692 | + { |
| 1693 | + ATTR_TEMPERATURE: 17, |
| 1694 | + "temperature_unit": UnitOfTemperature.CELSIUS, |
| 1695 | + }, |
| 1696 | + ), |
| 1697 | + ), |
| 1698 | + { |
| 1699 | + CONF_CLIMATES: [ |
| 1700 | + { |
| 1701 | + CONF_NAME: TEST_ENTITY_NAME, |
| 1702 | + CONF_TARGET_TEMP: 117, |
| 1703 | + CONF_ADDRESS: 117, |
| 1704 | + CONF_TEMPERATURE_UNIT: "F", |
| 1705 | + } |
| 1706 | + ], |
| 1707 | + }, |
| 1708 | + id="celsius_to_fahrenheit", |
| 1709 | + ), |
| 1710 | + pytest.param( |
| 1711 | + ( |
| 1712 | + State( |
| 1713 | + ENTITY_ID, |
| 1714 | + HVACMode.AUTO, |
| 1715 | + { |
| 1716 | + ATTR_TEMPERATURE: 63, |
| 1717 | + "temperature_unit": UnitOfTemperature.FAHRENHEIT, |
| 1718 | + }, |
| 1719 | + ), |
| 1720 | + ), |
| 1721 | + { |
| 1722 | + CONF_CLIMATES: [ |
| 1723 | + { |
| 1724 | + CONF_NAME: TEST_ENTITY_NAME, |
| 1725 | + CONF_TARGET_TEMP: 117, |
| 1726 | + CONF_ADDRESS: 117, |
| 1727 | + CONF_TEMPERATURE_UNIT: "C", |
| 1728 | + } |
| 1729 | + ], |
| 1730 | + }, |
| 1731 | + id="fahrenheit_to_celsius", |
| 1732 | + ), |
| 1733 | + pytest.param( |
| 1734 | + ( |
| 1735 | + State( |
| 1736 | + ENTITY_ID, |
| 1737 | + HVACMode.AUTO, |
| 1738 | + { |
| 1739 | + ATTR_TEMPERATURE: 63, |
| 1740 | + "temperature_unit": UnitOfTemperature.FAHRENHEIT, |
| 1741 | + }, |
| 1742 | + ), |
| 1743 | + ), |
| 1744 | + { |
| 1745 | + CONF_CLIMATES: [ |
| 1746 | + { |
| 1747 | + CONF_NAME: TEST_ENTITY_NAME, |
| 1748 | + CONF_TARGET_TEMP: 117, |
| 1749 | + CONF_ADDRESS: 117, |
| 1750 | + CONF_TEMPERATURE_UNIT: "F", |
| 1751 | + } |
| 1752 | + ], |
| 1753 | + }, |
| 1754 | + id="fahrenheit_to_fahrenheit", |
| 1755 | + ), |
| 1756 | + pytest.param( |
| 1757 | + (State(ENTITY_ID, HVACMode.AUTO, {ATTR_TEMPERATURE: 17}),), |
| 1758 | + { |
| 1759 | + CONF_CLIMATES: [ |
| 1760 | + { |
| 1761 | + CONF_NAME: TEST_ENTITY_NAME, |
| 1762 | + CONF_TARGET_TEMP: 117, |
| 1763 | + CONF_ADDRESS: 117, |
| 1764 | + CONF_TEMPERATURE_UNIT: "C", |
| 1765 | + } |
| 1766 | + ], |
| 1767 | + }, |
| 1768 | + id="legacy_to_celsius", |
| 1769 | + ), |
| 1770 | + pytest.param( |
| 1771 | + (State(ENTITY_ID, HVACMode.AUTO, {ATTR_TEMPERATURE: 17}),), |
| 1772 | + { |
| 1773 | + CONF_CLIMATES: [ |
| 1774 | + { |
| 1775 | + CONF_NAME: TEST_ENTITY_NAME, |
| 1776 | + CONF_TARGET_TEMP: 117, |
| 1777 | + CONF_ADDRESS: 117, |
| 1778 | + CONF_TEMPERATURE_UNIT: "F", |
| 1779 | + } |
| 1780 | + ], |
| 1781 | + }, |
| 1782 | + id="legacy_to_fahrenheit", |
| 1783 | + ), |
| 1784 | + ], |
| 1785 | + indirect=["mock_test_state"], |
| 1786 | +) |
| 1787 | +@pytest.mark.usefixtures("mock_test_state", "mock_modbus_to_test_errors_config") |
| 1788 | +async def test_restore_temperature_unit(hass: HomeAssistant) -> None: |
| 1789 | + """Test restoration uses the saved unit, falling back to the configured unit.""" |
| 1790 | + # The fixture does not poll, so the restored target temperature is kept. |
| 1791 | + state = hass.states.get(ENTITY_ID) |
| 1792 | + assert state.attributes[ATTR_TEMPERATURE] == 17 |
| 1793 | + |
| 1794 | + |
1659 | 1795 | @pytest.mark.parametrize( |
1660 | 1796 | "do_config", |
1661 | 1797 | [ |
|
0 commit comments