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");
    }
Пример #4
0
    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();
    }
Пример #6
0
    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);
    }
Пример #7
0
    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");
    }
Пример #13
0
    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");
    }
Пример #16
0
    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");
    }