public async Task ReadAsync_fetches_Buckets_from_the_buckets_endpoint_and_returns_SyncableBuckets() { //Arrange var story = new Story { Id = 278, Title = "Foobar", IsInBucket = true }; var stories = new[] { story }; var buckets = new[] { new Bucket { Id = 1, Stories = stories } }; var httpclient = new Mock <IHttpClient>(); httpclient .Setup(mock => mock.GetJsonAsync <Bucket[]>(It.IsAny <string>())) .ReturnsAsync(buckets); var reader = new BucketSync(httpclient.Object); //Act var result = await reader.ReadAsync(); //Assert httpclient.Verify(mock => mock.GetJsonAsync <Bucket[]>(BUCKETS), Times.Once); var singleBucketInResult = result.Single(); Assert.IsInstanceOfType(singleBucketInResult, typeof(SyncableBucket)); Assert.AreEqual(buckets.Single().Id, singleBucketInResult.Id); }
public async Task ReadAsync_sets_the_NextBiggerBucket_on_SyncableBucket_based_on_NextBiggerBucketId_of_corresponding_Bucket() { //Arrange var smallBucketId = 1; var biggerBucketId = 278; var buckets = new[] { new Bucket { Id = smallBucketId, NextBiggerBucketId = biggerBucketId }, new Bucket { Id = biggerBucketId } }; var httpclient = new Mock <IHttpClient>(); httpclient .Setup(mock => mock.GetJsonAsync <Bucket[]>(It.IsAny <string>())) .ReturnsAsync(buckets); var reader = new BucketSync(httpclient.Object); //Act var result = await reader.ReadAsync(); //Assert var smallBucket = result.Single(bucket => bucket.Id == smallBucketId); Assert.IsNotNull(smallBucket.NextBiggerBucket); Assert.AreEqual(biggerBucketId, smallBucket.NextBiggerBucket.Id); var biggerBucket = result.Single(bucket => bucket.Id == biggerBucketId); Assert.IsNull(biggerBucket.NextBiggerBucket); }
public async Task ReadAsync_buckets_are_PUT_to_the_server_when_updated() { //Arrange var id1 = 2718; var id2 = 31415; var buckets = new[] { new Bucket { Id = id1 }, new Bucket { Id = id2 } }; var updatedIds = new List <int>(); var httpclient = new Mock <IHttpClient>(); httpclient .Setup(fake => fake.GetJsonAsync <Bucket[]>(It.IsAny <string>())) .ReturnsAsync(buckets); httpclient .Setup(mock => mock.PutJsonAsync(It.IsAny <string>(), It.IsAny <Bucket>())) .Callback <string, Bucket>((_, updatedBucket) => updatedIds.Add(updatedBucket.Id)); var reader = new BucketSync(httpclient.Object); var fetchedBuckets = await reader.ReadAsync(); Assert.AreEqual(buckets.Count(), fetchedBuckets.Count(), "Test aborted because the reading precondition did not work as expected"); //Act foreach (var bucket in fetchedBuckets) { bucket.Add(new Story()); } //Assert httpclient.Verify(mock => mock.PutJsonAsync(BUCKETS, It.IsAny <Bucket>()), Times.Exactly(buckets.Count())); foreach (var bucket in buckets) { Assert.IsTrue(updatedIds.Contains(bucket.Id), $"Bucket Id {bucket.Id} was not updated!"); } }