public void GetTasks_NullListsElement_InitsEmptyList() { var fakeResponseData = new GetListResponseData { Lists = new GetListResponseData.ListOfLists { Lists = null } }; var responseParser = GetItemUnderTest(); var actual = responseParser.GetTasks(fakeResponseData); Assert.AreEqual(0, actual.Count); }
public async Task GetTasksByListIdAsync_ListAlreadySynced_IgnoresLastSyncDate() { // Setup const string listId = "My Fake List ID"; var lastSync = DateTime.Parse("2018-01-23 12:34:56"); var fakeSyncTracker = Substitute.For <ISyncTracker>(); fakeSyncTracker.GetLastSync(listId).Returns(lastSync); var fakeResponseData = new GetListResponseData(); var fakeApiClient = Substitute.For <ITaskApiClient>(); fakeApiClient.GetTasksByListIdAsync(listId).Returns(Task.FromResult(fakeResponseData)); var fakeTaskList = new List <IRtmTask>(); var fakeDeletedTaskList = new List <IRtmTask>(); var fakeResponseParser = Substitute.For <IResponseParser>(); fakeResponseParser.GetTasks(fakeResponseData).Returns(fakeTaskList); fakeResponseParser.GetDeletedTasks(fakeResponseData).Returns(fakeDeletedTaskList); IList <IRtmTask> expectedTaskList = new List <IRtmTask>(); var mockTaskCache = Substitute.For <ITaskCache>(); mockTaskCache.GetAllAsync(listId).Returns(Task.FromResult(expectedTaskList)); // Execute var taskRepository = GetItemUnderTest(fakeApiClient, fakeResponseParser, mockTaskCache, fakeSyncTracker); var actual = await taskRepository.GetTasksByListIdAsync(listId).ConfigureAwait(false); // Verify Assert.AreSame(expectedTaskList, actual); #pragma warning disable 4014 mockTaskCache.DidNotReceive().ClearAsync(); mockTaskCache.Received(1).AddOrReplaceAsync(listId, fakeTaskList, true); mockTaskCache.DidNotReceive().RemoveAsync(fakeDeletedTaskList); #pragma warning restore 4014 }
public async Task GetAllTasksAsync_IncludeCompletedTasks_ExcludesIncompleteFilter() { // Setup var fakeAuthToken = new AuthenticationToken { Id = "My Fake Token ID", Permissions = PermissionLevel.Read }; const string fakeTasksUrl = "My Fake URL"; var fakeUrlFactory = Substitute.For <ITasksUrlFactory>(); fakeUrlFactory.CreateGetListsUrl(fakeAuthToken.Id).Returns(fakeTasksUrl); var fakeResponseData = new GetListResponseData(); var fakeApiClient = Substitute.For <IApiClient>(); fakeApiClient.GetAsync <GetListResponseData>(fakeTasksUrl).Returns(Task.FromResult(fakeResponseData)); // Execute var taskRepository = GetItemUnderTest(fakeUrlFactory, fakeApiClient, fakeAuthToken); var actual = await taskRepository.GetAllTasksAsync(true).ConfigureAwait(false); // Verify Assert.AreSame(fakeResponseData, actual); }
public async Task GetTasksByListIdAsync_HasTasksFromOtherLists_GetsOtherListsTooUsingLastSync() { // Setup const string masterListId = "My Master List ID"; const string firstForeignListId = "First Foreign List ID"; const string secondForeignListId = "Second Foreign List ID"; var masterLastSync = DateTime.Parse("2018-01-23 12:34:56"); var firstForeignLastSync = masterLastSync.Subtract(TimeSpan.FromSeconds(1)); var secondForeignLastSync = masterLastSync.Add(TimeSpan.FromSeconds(1)); var testSyncTracker = new InMemorySyncTracker(); testSyncTracker.SetLastSync(masterListId, masterLastSync); testSyncTracker.SetLastSync(firstForeignListId, firstForeignLastSync); testSyncTracker.SetLastSync(secondForeignListId, secondForeignLastSync); var masterResponseData = new GetListResponseData(); var firstForeignResponseData = new GetListResponseData(); var secondForeignResponseData = new GetListResponseData(); var fakeApiClient = Substitute.For <ITaskApiClient>(); fakeApiClient.GetTasksByListIdAsync(masterListId).Returns(Task.FromResult(masterResponseData)); fakeApiClient.GetTasksByListIdAsync(firstForeignListId, firstForeignLastSync).Returns(Task.FromResult(firstForeignResponseData)); fakeApiClient.GetTasksByListIdAsync(secondForeignListId, secondForeignLastSync).Returns(Task.FromResult(secondForeignResponseData)); var firstTask = Substitute.For <IRtmTask>(); firstTask.ListId.Returns(firstForeignListId); var secondTask = Substitute.For <IRtmTask>(); secondTask.ListId.Returns(secondForeignListId); var masterTaskList = new List <IRtmTask> { firstTask, secondTask }; var firstForeignTaskList = new List <IRtmTask> { firstTask, secondTask }; var secondForeignTaskList = new List <IRtmTask> { firstTask, secondTask }; var masterDeletedTaskList = new List <IRtmTask>(); var firstForeignDeletedTaskList = new List <IRtmTask>(); var secondForeignDeletedTaskList = new List <IRtmTask>(); var fakeResponseParser = Substitute.For <IResponseParser>(); fakeResponseParser.GetTasks(masterResponseData).Returns(masterTaskList); fakeResponseParser.GetDeletedTasks(masterResponseData).Returns(masterDeletedTaskList); fakeResponseParser.GetTasks(firstForeignResponseData).Returns(firstForeignTaskList); fakeResponseParser.GetDeletedTasks(firstForeignResponseData).Returns(firstForeignDeletedTaskList); fakeResponseParser.GetTasks(secondForeignResponseData).Returns(secondForeignTaskList); fakeResponseParser.GetDeletedTasks(secondForeignResponseData).Returns(secondForeignDeletedTaskList); IList <IRtmTask> expectedTaskList = new List <IRtmTask>(); var mockTaskCache = Substitute.For <ITaskCache>(); mockTaskCache.GetAllAsync(masterListId).Returns(Task.FromResult(expectedTaskList)); // Execute var taskRepository = GetItemUnderTest(fakeApiClient, fakeResponseParser, mockTaskCache, testSyncTracker); var actual = await taskRepository.GetTasksByListIdAsync(masterListId).ConfigureAwait(false); // Verify Assert.AreSame(expectedTaskList, actual); #pragma warning disable 4014 mockTaskCache.DidNotReceive().ClearAsync(); mockTaskCache.Received(1).AddOrReplaceAsync(masterListId, masterTaskList, true); mockTaskCache.DidNotReceive().RemoveAsync(masterDeletedTaskList); mockTaskCache.Received(1).AddOrReplaceAsync(firstForeignListId, firstForeignTaskList); mockTaskCache.Received(1).RemoveAsync(firstForeignDeletedTaskList); mockTaskCache.Received(1).AddOrReplaceAsync(secondForeignListId, secondForeignTaskList); mockTaskCache.Received(1).RemoveAsync(secondForeignDeletedTaskList); #pragma warning restore 4014 }