Add node volume

This commit is contained in:
Joey Yakimowich-Payne 2026-01-30 09:12:28 -07:00
commit e649dea9c1
3 changed files with 157 additions and 0 deletions

View file

@ -4,6 +4,7 @@
#include <fstream>
#include <string>
#include <catch2/catch_approx.hpp>
#include <catch2/catch_test_macros.hpp>
namespace {
@ -792,3 +793,63 @@ TEST_CASE("policy mode does not override user defaults") {
REQUIRE(defaults2.value.configured_sink_name == defaults.value.configured_sink_name);
REQUIRE(defaults2.value.configured_source_name == defaults.value.configured_source_name);
}
TEST_CASE("Test_SetNodeVolume sets and retrieves volume state") {
auto result = warppipe::Client::Create(DefaultOptions());
REQUIRE(result.ok());
auto &client = result.value;
warppipe::NodeInfo node;
node.id = warppipe::NodeId{900};
node.name = "vol-sink";
node.media_class = "Audio/Sink";
REQUIRE(client->Test_InsertNode(node).ok());
auto vol = client->Test_GetNodeVolume(warppipe::NodeId{900});
REQUIRE(vol.ok());
REQUIRE(vol.value.volume == Catch::Approx(1.0f));
REQUIRE(vol.value.mute == false);
REQUIRE(client->Test_SetNodeVolume(warppipe::NodeId{900}, 0.5f, false).ok());
vol = client->Test_GetNodeVolume(warppipe::NodeId{900});
REQUIRE(vol.ok());
REQUIRE(vol.value.volume == Catch::Approx(0.5f));
REQUIRE(vol.value.mute == false);
REQUIRE(client->Test_SetNodeVolume(warppipe::NodeId{900}, 0.75f, true).ok());
vol = client->Test_GetNodeVolume(warppipe::NodeId{900});
REQUIRE(vol.ok());
REQUIRE(vol.value.volume == Catch::Approx(0.75f));
REQUIRE(vol.value.mute == true);
}
TEST_CASE("Test_SetNodeVolume clamps volume") {
auto result = warppipe::Client::Create(DefaultOptions());
REQUIRE(result.ok());
auto &client = result.value;
warppipe::NodeInfo node;
node.id = warppipe::NodeId{901};
node.name = "vol-clamp";
node.media_class = "Audio/Sink";
REQUIRE(client->Test_InsertNode(node).ok());
REQUIRE(client->Test_SetNodeVolume(warppipe::NodeId{901}, 2.0f, false).ok());
auto vol = client->Test_GetNodeVolume(warppipe::NodeId{901});
REQUIRE(vol.ok());
REQUIRE(vol.value.volume == Catch::Approx(1.5f));
REQUIRE(client->Test_SetNodeVolume(warppipe::NodeId{901}, -1.0f, false).ok());
vol = client->Test_GetNodeVolume(warppipe::NodeId{901});
REQUIRE(vol.ok());
REQUIRE(vol.value.volume == Catch::Approx(0.0f));
}
TEST_CASE("Test_SetNodeVolume fails for nonexistent node") {
auto result = warppipe::Client::Create(DefaultOptions());
REQUIRE(result.ok());
auto status = result.value->Test_SetNodeVolume(warppipe::NodeId{999}, 0.5f, false);
REQUIRE_FALSE(status.ok());
REQUIRE(status.code == warppipe::StatusCode::kNotFound);
}