Support different Sensor update types

This commit is contained in:
Carl Philipp Klemm 2026-04-21 16:31:13 +02:00
parent ff07551a59
commit 09f7e55b4e
20 changed files with 258 additions and 41 deletions

View file

@ -219,6 +219,161 @@ private slots:
QVERIFY(audio.type == Sensor::TYPE_AUDIO_OUTPUT);
}
void testSensorStoreUserUpdateUpdatesNameAndHidden()
{
// Create a SensorStore
SensorStore store;
store.getSensors()->clear();
// Add initial sensor
Sensor initialSensor(Sensor::TYPE_TEMPERATURE, 1, 20.0, "Initial Name", false);
store.sensorGotState(initialSensor, SENSOR_UPDATE_BACKEND);
// Verify initial state
std::vector<Sensor>* sensors = store.getSensors();
QVERIFY(sensors->size() == 1);
QVERIFY(sensors->at(0).name == "Initial Name");
QVERIFY(sensors->at(0).hidden == false);
// Send USER update with new name and hidden state
Sensor userUpdate(Sensor::TYPE_TEMPERATURE, 1, 25.0, "New Name", true);
store.sensorGotState(userUpdate, SENSOR_UPDATE_USER);
// Verify name and hidden were updated
QVERIFY(sensors->size() == 1);
QVERIFY(sensors->at(0).name == "New Name");
QVERIFY(sensors->at(0).hidden == true);
QVERIFY(sensors->at(0).field == 25.0);
}
void testSensorStoreNonUserUpdateIgnoresNameAndHidden()
{
// Create a SensorStore
SensorStore store;
store.getSensors()->clear();
// Add initial sensor
Sensor initialSensor(Sensor::TYPE_TEMPERATURE, 1, 20.0, "Initial Name", false);
store.sensorGotState(initialSensor, SENSOR_UPDATE_BACKEND);
// Verify initial state
std::vector<Sensor>* sensors = store.getSensors();
QVERIFY(sensors->size() == 1);
QVERIFY(sensors->at(0).name == "Initial Name");
QVERIFY(sensors->at(0).hidden == false);
// Send BACKEND update with new name and hidden state
Sensor backendUpdate(Sensor::TYPE_TEMPERATURE, 1, 25.0, "Backend Name", true);
store.sensorGotState(backendUpdate, SENSOR_UPDATE_BACKEND);
// Verify name and hidden were NOT updated
QVERIFY(sensors->size() == 1);
QVERIFY(sensors->at(0).name == "Initial Name");
QVERIFY(sensors->at(0).hidden == false);
QVERIFY(sensors->at(0).field == 25.0);
}
void testSensorStoreUserUpdateUpdatesKnownSensors()
{
// Create a SensorStore
SensorStore store;
store.getSensors()->clear();
// Add initial sensor
Sensor initialSensor(Sensor::TYPE_TEMPERATURE, 1, 20.0, "Initial Name", false);
store.sensorGotState(initialSensor, SENSOR_UPDATE_BACKEND);
// Send USER update with new name and hidden state
Sensor userUpdate(Sensor::TYPE_TEMPERATURE, 1, 25.0, "New Name", true);
store.sensorGotState(userUpdate, SENSOR_UPDATE_USER);
// Store to JSON and reload
QJsonObject json;
store.store(json);
SensorStore store2;
store2.getSensors()->clear();
store2.load(json);
// Add the sensor again - should use the updated name from knownSensors_
Sensor newSensor(Sensor::TYPE_TEMPERATURE, 1, 30.0, "Original Name", false);
store2.sensorGotState(newSensor, SENSOR_UPDATE_BACKEND);
// Verify the name was taken from knownSensors_
std::vector<Sensor>* sensors = store2.getSensors();
QVERIFY(sensors->size() == 1);
QVERIFY(sensors->at(0).name == "New Name");
QVERIFY(sensors->at(0).hidden == true);
}
void testSensorStoreNewSensorNotInKnownSensors()
{
// Create a SensorStore
SensorStore store;
store.getSensors()->clear();
// Add a new sensor (not in knownSensors_)
Sensor newSensor(Sensor::TYPE_TEMPERATURE, 99, 25.0, "New Sensor Name", true);
store.sensorGotState(newSensor, SENSOR_UPDATE_BACKEND);
// Verify sensor was added with its original name
std::vector<Sensor>* sensors = store.getSensors();
QVERIFY(sensors->size() == 1);
QVERIFY(sensors->at(0).name == "New Sensor Name");
QVERIFY(sensors->at(0).hidden == true);
}
void testSensorStoreNewSensorInKnownSensors()
{
// Create a SensorStore
SensorStore store;
store.getSensors()->clear();
// Load known sensors
QJsonObject json;
QJsonArray sensorsArray;
QJsonObject knownSensor;
knownSensor["SensorType"] = Sensor::TYPE_TEMPERATURE;
knownSensor["Id"] = 99;
knownSensor["Name"] = "Known Sensor Name";
knownSensor["Hidden"] = true;
sensorsArray.append(knownSensor);
json["Sensors"] = sensorsArray;
store.load(json);
// Add a new sensor that matches knownSensors_
Sensor newSensor(Sensor::TYPE_TEMPERATURE, 99, 25.0, "Original Name", false);
store.sensorGotState(newSensor, SENSOR_UPDATE_BACKEND);
// Verify name was overridden from knownSensors_
std::vector<Sensor>* sensors = store.getSensors();
QVERIFY(sensors->size() == 1);
QVERIFY(sensors->at(0).name == "Known Sensor Name");
QVERIFY(sensors->at(0).hidden == true);
}
void testSensorStoreRemoteUpdateIgnored()
{
// Create a SensorStore
SensorStore store;
store.getSensors()->clear();
// Add initial sensor
Sensor initialSensor(Sensor::TYPE_TEMPERATURE, 1, 20.0, "Initial Name", false);
store.sensorGotState(initialSensor, SENSOR_UPDATE_BACKEND);
// Send REMOTE update with new name and hidden state
Sensor remoteUpdate(Sensor::TYPE_TEMPERATURE, 1, 25.0, "Remote Name", true);
store.sensorGotState(remoteUpdate, SENSOR_UPDATE_REMOTE);
// Verify name and hidden were NOT updated
std::vector<Sensor>* sensors = store.getSensors();
QVERIFY(sensors->size() == 1);
QVERIFY(sensors->at(0).name == "Initial Name");
QVERIFY(sensors->at(0).hidden == false);
QVERIFY(sensors->at(0).field == 25.0);
}
void cleanupTestCase()
{
// Cleanup after all tests