Skip to content

Commit 37d92a4

Browse files
Add and update additional test cases
1 parent abf55ad commit 37d92a4

File tree

6 files changed

+351
-34
lines changed

6 files changed

+351
-34
lines changed

drivers/SmartThings/matter-thermostat/src/init.lua

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -940,7 +940,7 @@ local function unit_conversion(value, from_unit, to_unit, capability_name)
940940
return conversion_function(value, molecular_weights[capability_name])
941941
end
942942

943-
local function measurementHandlerFactory(capability_name, attribute, target_unit)
943+
local function measurement_handler_factory(capability_name, attribute, target_unit)
944944
return function(driver, device, ib, response)
945945
local reporting_unit = device:get_field(capability_name.."_unit")
946946

@@ -964,7 +964,7 @@ local function measurementHandlerFactory(capability_name, attribute, target_unit
964964
end
965965
end
966966

967-
local function levelHandlerFactory(attribute)
967+
local function level_handler_factory(attribute)
968968
return function(driver, device, ib, response)
969969
device:emit_event_for_endpoint(ib.endpoint_id, attribute(level_strings[ib.data.value]))
970970
end
@@ -1119,6 +1119,7 @@ local function sequence_of_operation_handler(driver, device, ib, response)
11191119
device:set_field(OPTIONAL_THERMOSTAT_MODES_SEEN, {capabilities.thermostatMode.thermostatMode.off.NAME}, {persist=true})
11201120
end
11211121
local supported_modes = utils.deep_copy(device:get_field(OPTIONAL_THERMOSTAT_MODES_SEEN))
1122+
print(utils.stringify_table(supported_modes, "", true))
11221123
local disallowed_mode_operations = {}
11231124

11241125
local modes_for_inclusion = {}
@@ -1879,54 +1880,54 @@ local matter_driver_template = {
18791880
[clusters.AirQuality.attributes.AirQuality.ID] = air_quality_attr_handler,
18801881
},
18811882
[clusters.CarbonMonoxideConcentrationMeasurement.ID] = {
1882-
[clusters.CarbonMonoxideConcentrationMeasurement.attributes.MeasuredValue.ID] = measurementHandlerFactory(capabilities.carbonMonoxideMeasurement.NAME, capabilities.carbonMonoxideMeasurement.carbonMonoxideLevel, units.PPM),
1883+
[clusters.CarbonMonoxideConcentrationMeasurement.attributes.MeasuredValue.ID] = measurement_handler_factory(capabilities.carbonMonoxideMeasurement.NAME, capabilities.carbonMonoxideMeasurement.carbonMonoxideLevel, units.PPM),
18831884
[clusters.CarbonMonoxideConcentrationMeasurement.attributes.MeasurementUnit.ID] = store_unit_factory(capabilities.carbonMonoxideMeasurement.NAME),
1884-
[clusters.CarbonMonoxideConcentrationMeasurement.attributes.LevelValue.ID] = levelHandlerFactory(capabilities.carbonMonoxideHealthConcern.carbonMonoxideHealthConcern),
1885+
[clusters.CarbonMonoxideConcentrationMeasurement.attributes.LevelValue.ID] = level_handler_factory(capabilities.carbonMonoxideHealthConcern.carbonMonoxideHealthConcern),
18851886
},
18861887
[clusters.CarbonDioxideConcentrationMeasurement.ID] = {
1887-
[clusters.CarbonDioxideConcentrationMeasurement.attributes.MeasuredValue.ID] = measurementHandlerFactory(capabilities.carbonDioxideMeasurement.NAME, capabilities.carbonDioxideMeasurement.carbonDioxide, units.PPM),
1888+
[clusters.CarbonDioxideConcentrationMeasurement.attributes.MeasuredValue.ID] = measurement_handler_factory(capabilities.carbonDioxideMeasurement.NAME, capabilities.carbonDioxideMeasurement.carbonDioxide, units.PPM),
18881889
[clusters.CarbonDioxideConcentrationMeasurement.attributes.MeasurementUnit.ID] = store_unit_factory(capabilities.carbonDioxideMeasurement.NAME),
1889-
[clusters.CarbonDioxideConcentrationMeasurement.attributes.LevelValue.ID] = levelHandlerFactory(capabilities.carbonDioxideHealthConcern.carbonDioxideHealthConcern),
1890+
[clusters.CarbonDioxideConcentrationMeasurement.attributes.LevelValue.ID] = level_handler_factory(capabilities.carbonDioxideHealthConcern.carbonDioxideHealthConcern),
18901891
},
18911892
[clusters.NitrogenDioxideConcentrationMeasurement.ID] = {
1892-
[clusters.NitrogenDioxideConcentrationMeasurement.attributes.MeasuredValue.ID] = measurementHandlerFactory(capabilities.nitrogenDioxideMeasurement.NAME, capabilities.nitrogenDioxideMeasurement.nitrogenDioxide, units.PPM),
1893+
[clusters.NitrogenDioxideConcentrationMeasurement.attributes.MeasuredValue.ID] = measurement_handler_factory(capabilities.nitrogenDioxideMeasurement.NAME, capabilities.nitrogenDioxideMeasurement.nitrogenDioxide, units.PPM),
18931894
[clusters.NitrogenDioxideConcentrationMeasurement.attributes.MeasurementUnit.ID] = store_unit_factory(capabilities.nitrogenDioxideMeasurement.NAME),
1894-
[clusters.NitrogenDioxideConcentrationMeasurement.attributes.LevelValue.ID] = levelHandlerFactory(capabilities.nitrogenDioxideHealthConcern.nitrogenDioxideHealthConcern)
1895+
[clusters.NitrogenDioxideConcentrationMeasurement.attributes.LevelValue.ID] = level_handler_factory(capabilities.nitrogenDioxideHealthConcern.nitrogenDioxideHealthConcern)
18951896
},
18961897
[clusters.OzoneConcentrationMeasurement.ID] = {
1897-
[clusters.OzoneConcentrationMeasurement.attributes.MeasuredValue.ID] = measurementHandlerFactory(capabilities.ozoneMeasurement.NAME, capabilities.ozoneMeasurement.ozone, units.PPM),
1898+
[clusters.OzoneConcentrationMeasurement.attributes.MeasuredValue.ID] = measurement_handler_factory(capabilities.ozoneMeasurement.NAME, capabilities.ozoneMeasurement.ozone, units.PPM),
18981899
[clusters.OzoneConcentrationMeasurement.attributes.MeasurementUnit.ID] = store_unit_factory(capabilities.ozoneMeasurement.NAME),
1899-
[clusters.OzoneConcentrationMeasurement.attributes.LevelValue.ID] = levelHandlerFactory(capabilities.ozoneHealthConcern.ozoneHealthConcern)
1900+
[clusters.OzoneConcentrationMeasurement.attributes.LevelValue.ID] = level_handler_factory(capabilities.ozoneHealthConcern.ozoneHealthConcern)
19001901
},
19011902
[clusters.FormaldehydeConcentrationMeasurement.ID] = {
1902-
[clusters.FormaldehydeConcentrationMeasurement.attributes.MeasuredValue.ID] = measurementHandlerFactory(capabilities.formaldehydeMeasurement.NAME, capabilities.formaldehydeMeasurement.formaldehydeLevel, units.PPM),
1903+
[clusters.FormaldehydeConcentrationMeasurement.attributes.MeasuredValue.ID] = measurement_handler_factory(capabilities.formaldehydeMeasurement.NAME, capabilities.formaldehydeMeasurement.formaldehydeLevel, units.PPM),
19031904
[clusters.FormaldehydeConcentrationMeasurement.attributes.MeasurementUnit.ID] = store_unit_factory(capabilities.formaldehydeMeasurement.NAME),
1904-
[clusters.FormaldehydeConcentrationMeasurement.attributes.LevelValue.ID] = levelHandlerFactory(capabilities.formaldehydeHealthConcern.formaldehydeHealthConcern),
1905+
[clusters.FormaldehydeConcentrationMeasurement.attributes.LevelValue.ID] = level_handler_factory(capabilities.formaldehydeHealthConcern.formaldehydeHealthConcern),
19051906
},
19061907
[clusters.Pm1ConcentrationMeasurement.ID] = {
1907-
[clusters.Pm1ConcentrationMeasurement.attributes.MeasuredValue.ID] = measurementHandlerFactory(capabilities.veryFineDustSensor.NAME, capabilities.veryFineDustSensor.veryFineDustLevel, units.UGM3),
1908+
[clusters.Pm1ConcentrationMeasurement.attributes.MeasuredValue.ID] = measurement_handler_factory(capabilities.veryFineDustSensor.NAME, capabilities.veryFineDustSensor.veryFineDustLevel, units.UGM3),
19081909
[clusters.Pm1ConcentrationMeasurement.attributes.MeasurementUnit.ID] = store_unit_factory(capabilities.veryFineDustSensor.NAME),
1909-
[clusters.Pm1ConcentrationMeasurement.attributes.LevelValue.ID] = levelHandlerFactory(capabilities.veryFineDustHealthConcern.veryFineDustHealthConcern),
1910+
[clusters.Pm1ConcentrationMeasurement.attributes.LevelValue.ID] = level_handler_factory(capabilities.veryFineDustHealthConcern.veryFineDustHealthConcern),
19101911
},
19111912
[clusters.Pm25ConcentrationMeasurement.ID] = {
1912-
[clusters.Pm25ConcentrationMeasurement.attributes.MeasuredValue.ID] = measurementHandlerFactory(capabilities.fineDustSensor.NAME, capabilities.fineDustSensor.fineDustLevel, units.UGM3),
1913+
[clusters.Pm25ConcentrationMeasurement.attributes.MeasuredValue.ID] = measurement_handler_factory(capabilities.fineDustSensor.NAME, capabilities.fineDustSensor.fineDustLevel, units.UGM3),
19131914
[clusters.Pm25ConcentrationMeasurement.attributes.MeasurementUnit.ID] = store_unit_factory(capabilities.fineDustSensor.NAME),
1914-
[clusters.Pm25ConcentrationMeasurement.attributes.LevelValue.ID] = levelHandlerFactory(capabilities.fineDustHealthConcern.fineDustHealthConcern),
1915+
[clusters.Pm25ConcentrationMeasurement.attributes.LevelValue.ID] = level_handler_factory(capabilities.fineDustHealthConcern.fineDustHealthConcern),
19151916
},
19161917
[clusters.Pm10ConcentrationMeasurement.ID] = {
1917-
[clusters.Pm10ConcentrationMeasurement.attributes.MeasuredValue.ID] = measurementHandlerFactory(capabilities.dustSensor.NAME, capabilities.dustSensor.dustLevel, units.UGM3),
1918+
[clusters.Pm10ConcentrationMeasurement.attributes.MeasuredValue.ID] = measurement_handler_factory(capabilities.dustSensor.NAME, capabilities.dustSensor.dustLevel, units.UGM3),
19181919
[clusters.Pm10ConcentrationMeasurement.attributes.MeasurementUnit.ID] = store_unit_factory(capabilities.dustSensor.NAME),
1919-
[clusters.Pm10ConcentrationMeasurement.attributes.LevelValue.ID] = levelHandlerFactory(capabilities.dustHealthConcern.dustHealthConcern),
1920+
[clusters.Pm10ConcentrationMeasurement.attributes.LevelValue.ID] = level_handler_factory(capabilities.dustHealthConcern.dustHealthConcern),
19201921
},
19211922
[clusters.RadonConcentrationMeasurement.ID] = {
1922-
[clusters.RadonConcentrationMeasurement.attributes.MeasuredValue.ID] = measurementHandlerFactory(capabilities.radonMeasurement.NAME, capabilities.radonMeasurement.radonLevel, units.PCIL),
1923+
[clusters.RadonConcentrationMeasurement.attributes.MeasuredValue.ID] = measurement_handler_factory(capabilities.radonMeasurement.NAME, capabilities.radonMeasurement.radonLevel, units.PCIL),
19231924
[clusters.RadonConcentrationMeasurement.attributes.MeasurementUnit.ID] = store_unit_factory(capabilities.radonMeasurement.NAME),
1924-
[clusters.RadonConcentrationMeasurement.attributes.LevelValue.ID] = levelHandlerFactory(capabilities.radonHealthConcern.radonHealthConcern)
1925+
[clusters.RadonConcentrationMeasurement.attributes.LevelValue.ID] = level_handler_factory(capabilities.radonHealthConcern.radonHealthConcern)
19251926
},
19261927
[clusters.TotalVolatileOrganicCompoundsConcentrationMeasurement.ID] = {
1927-
[clusters.TotalVolatileOrganicCompoundsConcentrationMeasurement.attributes.MeasuredValue.ID] = measurementHandlerFactory(capabilities.tvocMeasurement.NAME, capabilities.tvocMeasurement.tvocLevel, units.PPB),
1928+
[clusters.TotalVolatileOrganicCompoundsConcentrationMeasurement.attributes.MeasuredValue.ID] = measurement_handler_factory(capabilities.tvocMeasurement.NAME, capabilities.tvocMeasurement.tvocLevel, units.PPB),
19281929
[clusters.TotalVolatileOrganicCompoundsConcentrationMeasurement.attributes.MeasurementUnit.ID] = store_unit_factory(capabilities.tvocMeasurement.NAME),
1929-
[clusters.TotalVolatileOrganicCompoundsConcentrationMeasurement.attributes.LevelValue.ID] = levelHandlerFactory(capabilities.tvocHealthConcern.tvocHealthConcern)
1930+
[clusters.TotalVolatileOrganicCompoundsConcentrationMeasurement.attributes.LevelValue.ID] = level_handler_factory(capabilities.tvocHealthConcern.tvocHealthConcern)
19301931
},
19311932
[clusters.ElectricalPowerMeasurement.ID] = {
19321933
[clusters.ElectricalPowerMeasurement.attributes.ActivePower.ID] = active_power_handler

drivers/SmartThings/matter-thermostat/src/test/test_matter_air_purifier.lua

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,4 +1160,149 @@ test.register_message_test(
11601160
}
11611161
)
11621162

1163+
1164+
test.register_coroutine_test("Test air quality handler",
1165+
function()
1166+
test.socket.matter:__queue_receive(
1167+
{
1168+
mock_device_ap_thermo_aqs_preconfigured.id,
1169+
clusters.AirQuality.attributes.AirQuality:build_test_report_data(mock_device_ap_thermo_aqs_preconfigured, 1, 0)
1170+
}
1171+
)
1172+
test.socket.capability:__expect_send(
1173+
mock_device_ap_thermo_aqs_preconfigured:generate_test_message(
1174+
"main", capabilities.airQualityHealthConcern.airQualityHealthConcern.unknown()
1175+
)
1176+
)
1177+
test.socket.matter:__queue_receive(
1178+
{
1179+
mock_device_ap_thermo_aqs_preconfigured.id,
1180+
clusters.AirQuality.attributes.AirQuality:build_test_report_data(mock_device_ap_thermo_aqs_preconfigured, 1, 1)
1181+
}
1182+
)
1183+
test.socket.capability:__expect_send(
1184+
mock_device_ap_thermo_aqs_preconfigured:generate_test_message(
1185+
"main", capabilities.airQualityHealthConcern.airQualityHealthConcern.good()
1186+
)
1187+
)
1188+
test.socket.matter:__queue_receive(
1189+
{
1190+
mock_device_ap_thermo_aqs_preconfigured.id,
1191+
clusters.AirQuality.attributes.AirQuality:build_test_report_data(mock_device_ap_thermo_aqs_preconfigured, 1, 2)
1192+
}
1193+
)
1194+
test.socket.capability:__expect_send(
1195+
mock_device_ap_thermo_aqs_preconfigured:generate_test_message(
1196+
"main", capabilities.airQualityHealthConcern.airQualityHealthConcern.moderate()
1197+
)
1198+
)
1199+
test.socket.matter:__queue_receive(
1200+
{
1201+
mock_device_ap_thermo_aqs_preconfigured.id,
1202+
clusters.AirQuality.attributes.AirQuality:build_test_report_data(mock_device_ap_thermo_aqs_preconfigured, 1, 3)
1203+
}
1204+
)
1205+
test.socket.capability:__expect_send(
1206+
mock_device_ap_thermo_aqs_preconfigured:generate_test_message(
1207+
"main", capabilities.airQualityHealthConcern.airQualityHealthConcern.slightlyUnhealthy()
1208+
)
1209+
)
1210+
test.socket.matter:__queue_receive(
1211+
{
1212+
mock_device_ap_thermo_aqs_preconfigured.id,
1213+
clusters.AirQuality.attributes.AirQuality:build_test_report_data(mock_device_ap_thermo_aqs_preconfigured, 1, 4)
1214+
}
1215+
)
1216+
test.socket.capability:__expect_send(
1217+
mock_device_ap_thermo_aqs_preconfigured:generate_test_message(
1218+
"main", capabilities.airQualityHealthConcern.airQualityHealthConcern.unhealthy()
1219+
)
1220+
)
1221+
test.socket.matter:__queue_receive(
1222+
{
1223+
mock_device_ap_thermo_aqs_preconfigured.id,
1224+
clusters.AirQuality.attributes.AirQuality:build_test_report_data(mock_device_ap_thermo_aqs_preconfigured, 1, 5)
1225+
}
1226+
)
1227+
test.socket.capability:__expect_send(
1228+
mock_device_ap_thermo_aqs_preconfigured:generate_test_message(
1229+
"main", capabilities.airQualityHealthConcern.airQualityHealthConcern.veryUnhealthy()
1230+
)
1231+
)
1232+
test.socket.matter:__queue_receive(
1233+
{
1234+
mock_device_ap_thermo_aqs_preconfigured.id,
1235+
clusters.AirQuality.attributes.AirQuality:build_test_report_data(mock_device_ap_thermo_aqs_preconfigured, 1, 6)
1236+
}
1237+
)
1238+
test.socket.capability:__expect_send(
1239+
mock_device_ap_thermo_aqs_preconfigured:generate_test_message(
1240+
"main", capabilities.airQualityHealthConcern.airQualityHealthConcern.hazardous()
1241+
)
1242+
)
1243+
end,
1244+
{ test_init = test_init_ap_thermo_aqs_preconfigured }
1245+
)
1246+
1247+
test.register_coroutine_test("Test level value handler",
1248+
function()
1249+
test.socket.matter:__queue_receive(
1250+
{
1251+
mock_device_ap_thermo_aqs_preconfigured.id,
1252+
clusters.NitrogenDioxideConcentrationMeasurement.attributes.LevelValue:build_test_report_data(mock_device_ap_thermo_aqs_preconfigured, 1, clusters.CarbonMonoxideConcentrationMeasurement.types.LevelValueEnum.UNKNOWN)
1253+
}
1254+
)
1255+
test.socket.capability:__expect_send(
1256+
mock_device_ap_thermo_aqs_preconfigured:generate_test_message(
1257+
"main", capabilities.nitrogenDioxideHealthConcern.nitrogenDioxideHealthConcern("unknown")
1258+
)
1259+
)
1260+
test.socket.matter:__queue_receive(
1261+
{
1262+
mock_device_ap_thermo_aqs_preconfigured.id,
1263+
clusters.NitrogenDioxideConcentrationMeasurement.attributes.LevelValue:build_test_report_data(mock_device_ap_thermo_aqs_preconfigured, 1, clusters.CarbonMonoxideConcentrationMeasurement.types.LevelValueEnum.LOW)
1264+
}
1265+
)
1266+
test.socket.capability:__expect_send(
1267+
mock_device_ap_thermo_aqs_preconfigured:generate_test_message(
1268+
"main", capabilities.nitrogenDioxideHealthConcern.nitrogenDioxideHealthConcern("good")
1269+
)
1270+
)
1271+
test.socket.matter:__queue_receive(
1272+
{
1273+
mock_device_ap_thermo_aqs_preconfigured.id,
1274+
clusters.NitrogenDioxideConcentrationMeasurement.attributes.LevelValue:build_test_report_data(mock_device_ap_thermo_aqs_preconfigured, 1, clusters.CarbonMonoxideConcentrationMeasurement.types.LevelValueEnum.MEDIUM)
1275+
}
1276+
)
1277+
test.socket.capability:__expect_send(
1278+
mock_device_ap_thermo_aqs_preconfigured:generate_test_message(
1279+
"main", capabilities.nitrogenDioxideHealthConcern.nitrogenDioxideHealthConcern("moderate")
1280+
)
1281+
)
1282+
test.socket.matter:__queue_receive(
1283+
{
1284+
mock_device_ap_thermo_aqs_preconfigured.id,
1285+
clusters.NitrogenDioxideConcentrationMeasurement.attributes.LevelValue:build_test_report_data(mock_device_ap_thermo_aqs_preconfigured, 1, clusters.CarbonMonoxideConcentrationMeasurement.types.LevelValueEnum.HIGH)
1286+
}
1287+
)
1288+
test.socket.capability:__expect_send(
1289+
mock_device_ap_thermo_aqs_preconfigured:generate_test_message(
1290+
"main", capabilities.nitrogenDioxideHealthConcern.nitrogenDioxideHealthConcern("unhealthy")
1291+
)
1292+
)
1293+
test.socket.matter:__queue_receive(
1294+
{
1295+
mock_device_ap_thermo_aqs_preconfigured.id,
1296+
clusters.NitrogenDioxideConcentrationMeasurement.attributes.LevelValue:build_test_report_data(mock_device_ap_thermo_aqs_preconfigured, 1, clusters.CarbonMonoxideConcentrationMeasurement.types.LevelValueEnum.CRITICAL)
1297+
}
1298+
)
1299+
test.socket.capability:__expect_send(
1300+
mock_device_ap_thermo_aqs_preconfigured:generate_test_message(
1301+
"main", capabilities.nitrogenDioxideHealthConcern.nitrogenDioxideHealthConcern("hazardous")
1302+
)
1303+
)
1304+
end,
1305+
{ test_init = test_init_ap_thermo_aqs_preconfigured }
1306+
)
1307+
11631308
test.run_registered_tests()

drivers/SmartThings/matter-thermostat/src/test/test_matter_room_ac.lua

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -727,4 +727,36 @@ test.register_message_test(
727727
}
728728
)
729729

730+
test.register_message_test(
731+
"Test on off handler",
732+
{
733+
{
734+
channel = "matter",
735+
direction = "receive",
736+
message = {
737+
mock_device.id,
738+
clusters.OnOff.attributes.OnOff:build_test_report_data(mock_device, 1, true)
739+
}
740+
},
741+
{
742+
channel = "capability",
743+
direction = "send",
744+
message = mock_device:generate_test_message("main", capabilities.switch.switch.on())
745+
},
746+
{
747+
channel = "matter",
748+
direction = "receive",
749+
message = {
750+
mock_device.id,
751+
clusters.OnOff.attributes.OnOff:build_test_report_data(mock_device, 1, false)
752+
}
753+
},
754+
{
755+
channel = "capability",
756+
direction = "send",
757+
message = mock_device:generate_test_message("main", capabilities.switch.switch.off())
758+
},
759+
}
760+
)
761+
730762
test.run_registered_tests()

0 commit comments

Comments
 (0)