public void It_Creates_With_NoValue()
        {
            var source = new TaskCompletionSource <TestEntity>();

            var property = new DynamicPropertyFromTask <TestEntity>(DefaultPropertyName, _ => source.Task);

            property.Value.Should().BeNull();
        }
        public void It_Changes_Value_From_Source()
        {
            var source = new TaskCompletionSource <TestEntity>();
            var value  = new TestEntity();

            var property = new DynamicPropertyFromTask <TestEntity>(DefaultPropertyName, _ => source.Task);

            source.TrySetResult(value);

            property.Value.Should().Be(value);
        }
        public void It_Doesnt_Set_Value_After_Disposed()
        {
            var source = new TaskCompletionSource <TestEntity>();
            var value  = new TestEntity();

            var property = new DynamicPropertyFromTask <TestEntity>(DefaultPropertyName, _ => source.Task);

            property.Dispose();

            source.TrySetResult(value);

            property.Value.Should().NotBe(value);
        }
        public void It_Raises_ValueChanged()
        {
            var source         = new TaskCompletionSource <TestEntity>();
            var receivedValues = new List <IDynamicProperty>();
            var property       = new DynamicPropertyFromTask <TestEntity>(DefaultPropertyName, _ => source.Task);

            property.ValueChanged += OnValueChanged;

            source.TrySetResult(new TestEntity());

            receivedValues.Count().Should().Be(1);
            receivedValues[0].Should().Be(property);

            void OnValueChanged(IDynamicProperty p)
            {
                receivedValues.Add(p);
            }
        }
        public void It_Doesnt_Raise_ValueChanged_For_SameValue()
        {
            var source = new TaskCompletionSource <TestEntity>();
            var value  = new TestEntity();

            var receivedValues = new List <IDynamicProperty>();
            var property       = new DynamicPropertyFromTask <TestEntity>(DefaultPropertyName, _ => source.Task, value);

            property.ValueChanged += OnValueChanged;

            source.TrySetResult(value);

            receivedValues.Should().BeEmpty();

            void OnValueChanged(IDynamicProperty p)
            {
                receivedValues.Add(p);
            }
        }