public async Task Updates_all_properties_of_the_local_item() { await AddTablesAsync(); var localItems = new List <TestItem> { new TestItem { Id = "123", Name = "LocalName1" }, new TestItem { Id = "456", Name = "LocalName2" }, }; DataStore.FindByIdAsync <TestItem>(localItems[0].Id).Returns(localItems[0]); DataStore.FindByIdAsync <TestItem>(localItems[1].Id).Returns(localItems[1]); await NubeClient.PullTableAsync <TestItem>(); await DataStore.DidNotReceive().InsertAsync(Arg.Any <TestItem>()); await DataStore.Received().UpdateAsync(Arg.Is <TestItem>(i => i.Id == localItems[0].Id && i.Name == HttpMessageHandler.Results[0].Name)); await DataStore.Received().UpdateAsync(Arg.Is <TestItem>(i => i.Id == localItems[1].Id && i.Name == HttpMessageHandler.Results[1].Name)); await ChangeTracker.DidNotReceive().TrackAddAsync(Arg.Any <TestItem>()); await ChangeTracker.DidNotReceive().TrackModifyAsync(Arg.Any <TestItem>(), Arg.Any <TestItem>()); }
public async Task Saves_the_last_sync_timestamp() { await AddTablesAsync(); await NubeClient.PullTableAsync <TestItem>(); await DataStore.Received().SetSettingAsync("lastSync-TestItem", Arg.Any <string>()); }
public async Task Queries_the_last_sync_timestamp() { await AddTablesAsync(); await NubeClient.PullTableAsync <TestItem>(); await DataStore.Received().GetSettingAsync("lastSync-TestItem"); }
public async Task Uses_default_path_for_table() { await AddTablesAsync(); await NubeClient.PullTableAsync <TestItem>(); Assert.StartsWith("https://myserver/TestItem", HttpMessageHandler.LastRequest.RequestUri.AbsoluteUri); }
public async Task Uses_special_table_path_when_set() { await AddTablesAsync(); await NubeClient.PullTableAsync <TestItem2>(); Assert.StartsWith("https://myserver/differentPath", HttpMessageHandler.LastRequest.RequestUri.AbsoluteUri); }
public async Task Adds_the_pagination_parameters() { await AddTablesAsync(); await NubeClient.PullTableAsync <TestItem>(); Assert.Equal("https://myserver/TestItem?pageNumber=1&pageSize=100", HttpMessageHandler.LastRequest.RequestUri.AbsoluteUri); }
public async Task Returns_the_number_of_pulled_records() { await AddTablesAsync(); var result = await NubeClient.PullTableAsync <TestItem>(); Assert.Equal(HttpMessageHandler.Results.Count, result); }
public async Task Stops_when_no_more_items_are_returned() { HttpMessageHandler.UserLargeResultSet(170); await AddTablesAsync(); var result = await NubeClient.PullTableAsync <TestItem>(); Assert.Equal(170, result); }
public async Task Stops_when_the_number_of_returned_items_is_not_equal_to_the_page_size() { HttpMessageHandler.UserLargeResultSet(7); await AddTablesAsync(); var result = await NubeClient.PullTableAsync <TestItem>(); Assert.Equal(7, result); }
public async Task Includes_the_last_sync_timestamp_in_the_request() { await AddTablesAsync(); DataStore.GetSettingAsync("lastSync-TestItem").Returns("2001-1-1"); await NubeClient.PullTableAsync <TestItem>(); Assert.Equal("https://myserver/TestItem?pageNumber=1&pageSize=100&laterThan=2000-12-31T23:00:00.000Z", HttpMessageHandler.LastRequest.RequestUri.AbsoluteUri); }
public async Task Creates_a_new_item() { await AddTablesAsync(); await NubeClient.PullTableAsync <TestItem>(); await DataStore.Received().InsertAsync(Arg.Is <TestItem>(i => i.Id == HttpMessageHandler.Results[0].Id)); await DataStore.Received().InsertAsync(Arg.Is <TestItem>(i => i.Id == HttpMessageHandler.Results[1].Id)); }
public async Task Returns_0_when_cancelled() { var tokenSource = new CancellationTokenSource(); tokenSource.Cancel(); var result = await NubeClient.PullTableAsync <TestItem>(tokenSource.Token); Assert.Equal(0, result); }
private async Task SyncAsync() { if (Connectivity.NetworkAccess != NetworkAccess.Internet) { return; } await _nubeClient.PushChangesAsync(); await _nubeClient.PullTableAsync <TodoItem>(); await RefreshItemsAsync(); }
public async Task Adds_authentication_to_the_request_header() { var token = "myToken"; await AddTablesAsync(); Authentication.GetBearerTokenAsync().Returns(token); await NubeClient.PullTableAsync <TestItem>(); await Authentication.Received().GetBearerTokenAsync(); Assert.Equal("Bearer", HttpClient.DefaultRequestHeaders.Authorization.Scheme); Assert.Equal(token, HttpClient.DefaultRequestHeaders.Authorization.Parameter); }
public async Task Does_not_try_to_delete_the_item_when_it_is_not_found_in_the_local_store() { await AddTablesAsync(); var item = new TestItem { Id = "123" }; HttpMessageHandler.Results = new List <TestItem> { item }; DataStore.DeleteAsync(Arg.Any <TestItem>()).Returns(true); await NubeClient.PullTableAsync <TestItem>(); await DataStore.DidNotReceive().DeleteAsync(item); }
public async Task Does_not_delete_the_item_if_it_is_not_deleted_on_the_server() { await AddTablesAsync(); var item = new TestItem { Id = "123" }; HttpMessageHandler.Results = new List <TestItem> { item }; DataStore.FindByIdAsync <TestItem>(item.Id).Returns(item); DataStore.DeleteAsync(Arg.Any <TestItem>()).Returns(true); await NubeClient.PullTableAsync <TestItem>(); await DataStore.DidNotReceive().DeleteAsync(item); }
public async Task Adds_the_installation_id_to_the_headers() { await AddTablesAsync(); DataStore.InsertAsync(Arg.Any <TestItem>()).Returns(true); await NubeClient.PullTableAsync <TestItem>(); var installationIdHeader = HttpClient.DefaultRequestHeaders.Where(h => h.Key == "NUBE-INSTALLATION-ID").First(); Assert.NotNull(installationIdHeader.Value.First()); await NubeClient.PushChangesAsync(); var installationIdHeader2 = HttpClient.DefaultRequestHeaders.Where(h => h.Key == "NUBE-INSTALLATION-ID").First(); Assert.Equal(installationIdHeader.Value.First(), installationIdHeader2.Value.First()); }
public async Task Checks_if_table_is_valid() { var ex = await Assert.ThrowsAsync <InvalidOperationException>(async() => await NubeClient.PullTableAsync <TestItem>()); Assert.Equal("Table TestItem is not registered in the nube client", ex.Message); }
public async Task Throws_when_the_http_request_fails() { await AddTablesAsync(); HttpMessageHandler.HttpRequestFails = true; var ex = await Assert.ThrowsAsync <PullOperationFailedException>(async() => await NubeClient.PullTableAsync <TestItem>()); Assert.Equal("BadRequest", ex.Message); }