Esempio n. 1
0
        public void HandleError()
        {
            using (var stub = new TransformStub(p =>
            {
                if (p.Age <= 50)
                {
                    return(new PersonWithGender(p, p.Age % 2 == 0 ? "M" : "F"));
                }

                throw new Exception("Broken");
            }))
            {
                var people = Enumerable.Range(1, 100).Select(l => new Person("Name" + l, l)).ToArray();
                stub.Source.AddOrUpdate(people);

                stub.Results.Error.Should().BeNull();

                Exception error = null;
                stub.Source.Connect()
                .Subscribe(changes => { }, ex => error = ex);


                error.Should().BeNull();

                stub.HandledErrors.Count.Should().Be(50);
                stub.Results.Data.Count.Should().Be(50);
            }
        }
        public void Add()
        {
            using var stub = new TransformStub();
            var person = new Person("Adult1", 50);

            stub.Source.AddOrUpdate(person);

            stub.Results.Messages.Count.Should().Be(1, "Should be 1 updates");
            stub.Results.Data.Count.Should().Be(1, "Should be 1 item in the cache");
            stub.Results.Data.Items.First().Should().Be(stub.TransformFactory(person), "Should be same person");
        }
Esempio n. 3
0
        public void Add()
        {
            using (var stub = new TransformStub())
            {
                var person = new Person("Adult1", 50);
                stub.Source.AddOrUpdate(person);

                Assert.AreEqual(1, stub.Results.Messages.Count, "Should be 1 updates");
                Assert.AreEqual(1, stub.Results.Data.Count, "Should be 1 item in the cache");
                Assert.AreEqual(stub.TransformFactory(person), stub.Results.Data.Items.First(), "Should be same person");
            }
        }
Esempio n. 4
0
        public void Clear()
        {
            using var stub = new TransformStub();
            var people = Enumerable.Range(1, 100).Select(l => new Person("Name" + l, l)).ToArray();

            stub.Source.AddOrUpdate(people);
            stub.Source.Clear();

            stub.Results.Messages.Count.Should().Be(2, "Should be 2 updates");
            stub.Results.Messages[0].Adds.Should().Be(100, "Should be 80 adds");
            stub.Results.Messages[1].Removes.Should().Be(100, "Should be 80 removes");
            stub.Results.Data.Count.Should().Be(0, "Should be nothing cached");
        }
Esempio n. 5
0
        public void Update()
        {
            const string key       = "Adult1";
            var          newperson = new Person(key, 50);
            var          updated   = new Person(key, 51);

            using var stub = new TransformStub();
            stub.Source.AddOrUpdate(newperson);
            stub.Source.AddOrUpdate(updated);

            stub.Results.Messages.Count.Should().Be(2, "Should be 2 updates");
            stub.Results.Messages[0].Adds.Should().Be(1, "Should be 1 adds");
            stub.Results.Messages[1].Updates.Should().Be(1, "Should be 1 update");
        }
        public void BatchOfUniqueUpdates()
        {
            var people = Enumerable.Range(1, 100).Select(i => new Person("Name" + i, i)).ToArray();

            using var stub = new TransformStub();
            stub.Source.AddOrUpdate(people);

            stub.Results.Messages.Count.Should().Be(1, "Should be 1 updates");
            stub.Results.Messages[0].Adds.Should().Be(100, "Should return 100 adds");

            var transformed = people.Select(stub.TransformFactory).OrderBy(p => p.Age).ToArray();

            stub.Results.Data.Items.OrderBy(p => p.Age).Should().BeEquivalentTo(transformed, "Incorrect transform result");
        }
Esempio n. 7
0
        public void BatchOfUniqueUpdates()
        {
            var people = Enumerable.Range(1, 100).Select(i => new Person("Name" + i, i)).ToArray();

            using (var stub = new TransformStub())
            {
                stub.Source.AddOrUpdate(people);

                Assert.AreEqual(1, stub.Results.Messages.Count, "Should be 1 updates");
                Assert.AreEqual(100, stub.Results.Messages[0].Adds, "Should return 100 adds");

                var transformed = people.Select(stub.TransformFactory).OrderBy(p => p.Age).ToArray();
                CollectionAssert.AreEqual(transformed, stub.Results.Data.Items.OrderBy(p => p.Age), "Incorrect transform result");
            }
        }
Esempio n. 8
0
        public async Task Add()
        {
            using (var stub = new TransformStub())
            {
                var person = new Person("Adult1", 50);
                stub.Source.AddOrUpdate(person);

                stub.Results.Messages.Count.Should().Be(1, "Should be 1 updates");
                stub.Results.Data.Count.Should().Be(1, "Should be 1 item in the cache");

                var firstPerson = await stub.TransformFactory(person);

                stub.Results.Data.Items.First().Should().Be(firstPerson, "Should be same person");
            }
        }
Esempio n. 9
0
        public void Remove()
        {
            const string key    = "Adult1";
            var          person = new Person(key, 50);

            using var stub = new TransformStub();
            stub.Source.AddOrUpdate(person);
            stub.Source.Remove(key);

            stub.Results.Messages.Count.Should().Be(2, "Should be 2 updates");
            stub.Results.Messages.Count.Should().Be(2, "Should be 2 updates");
            stub.Results.Messages[0].Adds.Should().Be(1, "Should be 80 addes");
            stub.Results.Messages[1].Removes.Should().Be(1, "Should be 80 removes");
            stub.Results.Data.Count.Should().Be(0, "Should be nothing cached");
        }
Esempio n. 10
0
        public void Update()
        {
            const string key       = "Adult1";
            var          newperson = new Person(key, 50);
            var          updated   = new Person(key, 51);

            using (var stub = new TransformStub())
            {
                stub.Source.AddOrUpdate(newperson);
                stub.Source.AddOrUpdate(updated);

                Assert.AreEqual(2, stub.Results.Messages.Count, "Should be 2 updates");
                Assert.AreEqual(1, stub.Results.Messages[0].Adds, "Should be 1 adds");
                Assert.AreEqual(1, stub.Results.Messages[1].Updates, "Should be 1 update");
            }
        }
Esempio n. 11
0
        public void Remove()
        {
            const string key    = "Adult1";
            var          person = new Person(key, 50);

            using (var stub = new TransformStub())
            {
                stub.Source.AddOrUpdate(person);
                stub.Source.Remove(key);

                Assert.AreEqual(2, stub.Results.Messages.Count, "Should be 2 updates");
                Assert.AreEqual(2, stub.Results.Messages.Count, "Should be 2 updates");
                Assert.AreEqual(1, stub.Results.Messages[0].Adds, "Should be 80 addes");
                Assert.AreEqual(1, stub.Results.Messages[1].Removes, "Should be 80 removes");
                Assert.AreEqual(0, stub.Results.Data.Count, "Should be nothing cached");
            }
        }
Esempio n. 12
0
        public void SameKeyChanges()
        {
            using var stub = new TransformStub();
            var people = Enumerable.Range(1, 10).Select(i => new Person("Name", i)).ToArray();

            stub.Source.AddOrUpdate(people);

            stub.Results.Messages.Count.Should().Be(1, "Should be 1 updates");
            stub.Results.Messages[0].Adds.Should().Be(1, "Should return 1 adds");
            stub.Results.Messages[0].Updates.Should().Be(9, "Should return 9 adds");
            stub.Results.Data.Count.Should().Be(1, "Should result in 1 record");

            var lastTransformed = stub.TransformFactory(people.Last());
            var onlyItemInCache = stub.Results.Data.Items.First();

            onlyItemInCache.Should().Be(lastTransformed, "Incorrect transform result");
        }
Esempio n. 13
0
        public async Task BatchOfUniqueUpdates()
        {
            var people = Enumerable.Range(1, 100).Select(i => new Person("Name" + i, i)).ToArray();

            using (var stub = new TransformStub())
            {
                stub.Source.AddOrUpdate(people);

                //     Thread.Sleep(10000);

                stub.Results.Messages.Count.Should().Be(1, "Should be 1 updates");
                stub.Results.Messages[0].Adds.Should().Be(100, "Should return 100 adds");

                var result = await Task.WhenAll(people.Select(stub.TransformFactory));

                var transformed = result.OrderBy(p => p.Age).ToArray();
                stub.Results.Data.Items.OrderBy(p => p.Age).Should().BeEquivalentTo(stub.Results.Data.Items.OrderBy(p => p.Age), "Incorrect transform result");
            }
        }
Esempio n. 14
0
        public void HandleError()
        {
            using (var stub = new TransformStub(p =>
            {
                throw new Exception("Broken");
            }))
            {
                var people = Enumerable.Range(1, 100).Select(l => new Person("Name" + l, l)).ToArray();
                stub.Source.AddOrUpdate(people);

                Assert.IsNotNull(stub.Results.Error);

                Exception error = null;
                stub.Source.Connect()
                .Subscribe(changes => { }, ex => error = ex);


                Assert.IsNotNull(error);
            }
        }
Esempio n. 15
0
        public async Task SameKeyChanges()
        {
            using (var stub = new TransformStub())
            {
                var people = Enumerable.Range(1, 10).Select(i => new Person("Name", i)).ToArray();

                stub.Source.AddOrUpdate(people);

                Assert.AreEqual(1, stub.Results.Messages.Count, "Should be 1 updates");
                Assert.AreEqual(1, stub.Results.Messages[0].Adds, "Should return 1 adds");
                Assert.AreEqual(9, stub.Results.Messages[0].Updates, "Should return 9 adds");
                Assert.AreEqual(1, stub.Results.Data.Count, "Should result in 1 record");

                var lastTransformed = await stub.TransformFactory(people.Last());

                var onlyItemInCache = stub.Results.Data.Items.First();

                Assert.AreEqual(lastTransformed, onlyItemInCache, "Incorrect transform result");
            }
        }
Esempio n. 16
0
        public void ReTransformSelected()
        {
            var people         = Enumerable.Range(1, 10).Select(i => new Person("Name" + i, i)).ToArray();
            var forceTransform = new Subject <Func <Person, bool> >();

            using var stub = new TransformStub(forceTransform);
            stub.Source.AddOrUpdate(people);
            forceTransform.OnNext(person => person.Age <= 5);

            stub.Results.Messages.Count.Should().Be(2);
            stub.Results.Messages[1].Updates.Should().Be(5);

            for (int i = 1; i <= 5; i++)
            {
                var original = stub.Results.Messages[0].ElementAt(i - 1).Current;
                var updated  = stub.Results.Messages[1].ElementAt(i - 1).Current;
                updated.Should().Be(original);
                ReferenceEquals(original, updated).Should().BeFalse();
            }
        }
Esempio n. 17
0
        public void ReTransformAll()
        {
            var people         = Enumerable.Range(1, 10).Select(i => new Person("Name" + i, i)).ToArray();
            var forceTransform = new Subject <Unit>();

            using (var stub = new TransformStub(forceTransform))
            {
                stub.Source.AddOrUpdate(people);
                forceTransform.OnNext(Unit.Default);

                Assert.AreEqual(2, stub.Results.Messages.Count);
                Assert.AreEqual(10, stub.Results.Messages[1].Updates);

                for (int i = 1; i <= 10; i++)
                {
                    var original = stub.Results.Messages[0].ElementAt(i - 1).Current;
                    var updated  = stub.Results.Messages[1].ElementAt(i - 1).Current;

                    Assert.AreEqual(original, updated);
                    Assert.IsFalse(ReferenceEquals(original, updated));
                }
            }
        }