public async Task CreateDefaultsToPersist() { var mqttSetup = new MockMqttMessageSenderSetup(); var entityManager = new MqttEntityManager(mqttSetup.MessageSender, GetOptions()); await entityManager.CreateAsync("domain.sensor", new EntityCreationOptions()); mqttSetup.LastPublishedMessage.Retain.Should().BeTrue(); }
public async Task CanRemove() { var mqttSetup = new MockMqttMessageSenderSetup(); var entityManager = new MqttEntityManager(mqttSetup.MessageSender, GetOptions()); await entityManager.RemoveAsync("domain.sensor"); mqttSetup.LastPublishedMessage.Payload.Should().BeNull(); }
public async Task CreateSetsTopic() { var mqttSetup = new MockMqttMessageSenderSetup(); var entityManager = new MqttEntityManager(mqttSetup.MessageSender, GetOptions()); await entityManager.CreateAsync("domain.sensor", new EntityCreationOptions()); mqttSetup.LastPublishedMessage.Topic.Should().Be("homeassistant/domain/sensor/config"); }
public async Task RetainFlagCanBeSetFalse() { var mqttSetup = new MockMqttMessageSenderSetup(); await mqttSetup.MessageSender.SendMessageAsync("topic", "payload", false, MqttQualityOfServiceLevel.AtMostOnce); var publishedMessage = mqttSetup.LastPublishedMessage; publishedMessage.Retain.Should().BeFalse(); }
public async Task CanSetStateToBlank() { var mqttSetup = new MockMqttMessageSenderSetup(); var entityManager = new MqttEntityManager(mqttSetup.MessageSender, GetOptions()); await entityManager.SetStateAsync("domain.sensor", ""); mqttSetup.LastPublishedMessage.Topic.Should().Be("homeassistant/domain/sensor/state"); mqttSetup.LastPublishedMessage.Payload.Should().BeNull(); }
public async Task CanSetQosLevel() { var mqttSetup = new MockMqttMessageSenderSetup(); await mqttSetup.MessageSender.SendMessageAsync("topic", "payload", true, MqttQualityOfServiceLevel.ExactlyOnce); var publishedMessage = mqttSetup.LastPublishedMessage; publishedMessage.QualityOfServiceLevel.Should().Be(MqttQualityOfServiceLevel.ExactlyOnce); }
public async Task CanUnsetPersist() { var mqttSetup = new MockMqttMessageSenderSetup(); await mqttSetup.MessageSender.SendMessageAsync("topic", "payload", false, MqttQualityOfServiceLevel.ExactlyOnce); var publishedMessage = mqttSetup.LastPublishedMessage; publishedMessage.Retain.Should().BeFalse(); }
public async Task CreateAvailabilityTopicOffByDefault() { var mqttSetup = new MockMqttMessageSenderSetup(); var entityManager = new MqttEntityManager(mqttSetup.MessageSender, GetOptions()); await entityManager.CreateAsync("domain.sensor"); var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload); payload?.ContainsKey("availability_topic").Should().BeFalse(); }
public async Task CreateCanSetDeviceClass() { var mqttSetup = new MockMqttMessageSenderSetup(); var entityManager = new MqttEntityManager(mqttSetup.MessageSender, GetOptions()); await entityManager.CreateAsync("domain.sensor", new EntityCreationOptions(DeviceClass : "classy")); var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload); payload?["device_class"].ToString().Should().Be("classy"); }
public async Task CreateCanSetName() { var mqttSetup = new MockMqttMessageSenderSetup(); var entityManager = new MqttEntityManager(mqttSetup.MessageSender, GetOptions()); await entityManager.CreateAsync("domain.sensor", new EntityCreationOptions(Name : "george")); var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload); payload?["name"].ToString().Should().Be("george"); }
public async Task CanSetAvailability() { var mqttSetup = new MockMqttMessageSenderSetup(); var entityManager = new MqttEntityManager(mqttSetup.MessageSender, GetOptions()); await entityManager.SetAvailabilityAsync("domain.sensor", "up"); var payload = System.Text.Encoding.Default.GetString(mqttSetup.LastPublishedMessage.Payload); mqttSetup.LastPublishedMessage.Topic.Should().Be("homeassistant/domain/sensor/availability"); payload.Should().Be("up"); }
public async Task CreateAvailabilityTopicSetForAvailDown() { var mqttSetup = new MockMqttMessageSenderSetup(); var entityManager = new MqttEntityManager(mqttSetup.MessageSender, GetOptions()); await entityManager.CreateAsync("domain.sensor", new EntityCreationOptions(PayloadNotAvailable : "down")); var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload); payload?.ContainsKey("availability_topic").Should().BeTrue(); payload?["availability_topic"].ToString().Should().Be("homeassistant/domain/sensor/availability"); payload?["payload_not_available"].ToString().Should().Be("down"); }
public async Task TopicAndPayloadAreSet() { var mqttSetup = new MockMqttMessageSenderSetup(); await mqttSetup.MessageSender.SendMessageAsync("topic", "payload", true, MqttQualityOfServiceLevel.AtMostOnce); var publishedMessage = mqttSetup.LastPublishedMessage; var payloadAsText = System.Text.Encoding.Default.GetString(publishedMessage.Payload); publishedMessage.Topic.Should().Be("topic"); payloadAsText.Should().Be("payload"); }
public async Task CreateCanOverrideBaseConfig() { var mqttSetup = new MockMqttMessageSenderSetup(); var entityManager = new MqttEntityManager(mqttSetup.MessageSender, GetOptions()); var otherOptions = new { command_topic = "my/topic" }; await entityManager.CreateAsync("domain.sensor", additionalConfig : otherOptions); var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload); payload?["command_topic"].ToString().Should().Be("my/topic"); }
public async Task CreateCanSetAdditionalOptions() { var mqttSetup = new MockMqttMessageSenderSetup(); var entityManager = new MqttEntityManager(mqttSetup.MessageSender, GetOptions()); var otherOptions = new { sub_class = "lights", up_state = "live" }; await entityManager.CreateAsync("domain.sensor", additionalConfig : otherOptions); var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload); payload?["sub_class"].ToString().Should().Be("lights"); payload?["up_state"].ToString().Should().Be("live"); }
public async Task FailedSendThrows() { var mqttSetup = new MockMqttMessageSenderSetup(); mqttSetup.SetResponseCode(MqttClientPublishReasonCode.UnspecifiedError); Func <Task> f = async() => { await mqttSetup.MessageSender.SendMessageAsync("topic", "payload", true, MqttQualityOfServiceLevel.AtMostOnce); }; await f.Should().ThrowAsync <MqttPublishException>(); }
public async Task CanSetAttributes() { var mqttSetup = new MockMqttMessageSenderSetup(); var entityManager = new MqttEntityManager(mqttSetup.MessageSender, GetOptions()); var attributes = new { colour = "purple", ziggy = "stardust" }; await entityManager.SetAttributesAsync("domain.sensor", attributes); var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload); mqttSetup.LastPublishedMessage.Topic.Should().Be("homeassistant/domain/sensor/attributes"); payload?["colour"].ToString().Should().Be("purple"); payload?["ziggy"].ToString().Should().Be("stardust"); }
public async Task CreateWithDefaultOptionsSetsBaseConfig() { var mqttSetup = new MockMqttMessageSenderSetup(); var entityManager = new MqttEntityManager(mqttSetup.MessageSender, GetOptions()); await entityManager.CreateAsync("domain.sensor", new EntityCreationOptions()); var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload); payload?.Count.Should().Be(5); payload?["name"].ToString().Should().Be("sensor"); payload?["unique_id"].ToString().Should().Be("homeassistant_domain_sensor_config"); payload?["command_topic"].ToString().Should().Be("homeassistant/domain/sensor/set"); payload?["state_topic"].ToString().Should().Be("homeassistant/domain/sensor/state"); payload?["json_attributes_topic"].ToString().Should().Be("homeassistant/domain/sensor/attributes"); }