Exemplo n.º 1
0
        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>());
        }
Exemplo n.º 2
0
        public async Task Saves_the_last_sync_timestamp()
        {
            await AddTablesAsync();

            await NubeClient.PullTableAsync <TestItem>();

            await DataStore.Received().SetSettingAsync("lastSync-TestItem", Arg.Any <string>());
        }
Exemplo n.º 3
0
        public async Task Queries_the_last_sync_timestamp()
        {
            await AddTablesAsync();

            await NubeClient.PullTableAsync <TestItem>();

            await DataStore.Received().GetSettingAsync("lastSync-TestItem");
        }
Exemplo n.º 4
0
        public async Task Uses_default_path_for_table()
        {
            await AddTablesAsync();

            await NubeClient.PullTableAsync <TestItem>();

            Assert.StartsWith("https://myserver/TestItem", HttpMessageHandler.LastRequest.RequestUri.AbsoluteUri);
        }
Exemplo n.º 5
0
        public async Task Uses_special_table_path_when_set()
        {
            await AddTablesAsync();

            await NubeClient.PullTableAsync <TestItem2>();

            Assert.StartsWith("https://myserver/differentPath", HttpMessageHandler.LastRequest.RequestUri.AbsoluteUri);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        public async Task Returns_the_number_of_pulled_records()
        {
            await AddTablesAsync();

            var result = await NubeClient.PullTableAsync <TestItem>();

            Assert.Equal(HttpMessageHandler.Results.Count, result);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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));
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
        private async Task SyncAsync()
        {
            if (Connectivity.NetworkAccess != NetworkAccess.Internet)
            {
                return;
            }

            await _nubeClient.PushChangesAsync();

            await _nubeClient.PullTableAsync <TodoItem>();

            await RefreshItemsAsync();
        }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 15
0
        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);
        }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
        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());
        }
Exemplo n.º 18
0
        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);
        }
Exemplo n.º 19
0
        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);
        }