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"); }
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"); } }
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"); }
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"); }
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"); } }
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"); } }
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"); }
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"); } }
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"); } }
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"); }
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"); } }
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); } }
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"); } }
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(); } }
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)); } } }