Ejemplo n.º 1
0
        public async Task ListFilesInSingleRequest()
        {
            var httpClient = Substitute.For <IHttpClientHelper>();

            var container = TestBootstrapper.Init(httpClient);

            var dropboxResponse = new DropboxApiResponseListFiles
            {
                entries = new[]
                {
                    new Entry {
                        name = "Item 1"
                    }
                }
            };

            httpClient.PostAsync(new Uri("https://api.dropboxapi.com/2/files/list_folder"), @"{""path"":"""", ""recursive"": true}", Arg.Any <string>(), Arg.Any <CancellationToken>())
            .Returns(Task.FromResult(JsonConvert.SerializeObject(dropboxResponse)));

            var sut = container.Resolve <IDropboxHelper>();

            var files = await sut.GetFilesAsync("", CancellationToken.None);

            Assert.NotEmpty(files);
            Assert.Equal(1, files.Count);
            Assert.Equal("Item 1", files[0].Name);
        }
Ejemplo n.º 2
0
        public async Task ListFilesOverMultipleRequests()
        {
            var httpClient = Substitute.For <IHttpClientHelper>();

            var container = TestBootstrapper.Init(httpClient);

            var dropboxResponse = new DropboxApiResponseListFiles
            {
                has_more = true,
                cursor   = "mycursor",
                entries  = new[]
                {
                    new Entry {
                        name = "Item 1"
                    },
                    new Entry {
                        name = "Item 2"
                    },
                    new Entry {
                        name = "Item 3"
                    },
                }
            };

            var dropboxResponse2 = new DropboxApiResponseListFiles
            {
                has_more = false,
                cursor   = "",
                entries  = new[]
                {
                    new Entry {
                        name = "Item 4"
                    },
                    new Entry {
                        name = "Item 5"
                    },
                }
            };

            httpClient.PostAsync(new Uri("https://api.dropboxapi.com/2/files/list_folder"), @"{""path"":"""", ""recursive"": true}", Arg.Any <string>(), Arg.Any <CancellationToken>())
            .Returns(Task.FromResult(JsonConvert.SerializeObject(dropboxResponse)));

            httpClient.PostAsync(new Uri("https://api.dropboxapi.com/2/files/list_folder/continue"), @"{""cursor"": ""mycursor""}", Arg.Any <string>(), Arg.Any <CancellationToken>())
            .Returns(Task.FromResult(JsonConvert.SerializeObject(dropboxResponse2)));

            var sut = container.Resolve <IDropboxHelper>();

            var files = await sut.GetFilesAsync("", CancellationToken.None);

            Assert.NotEmpty(files);
            Assert.Equal(5, files.Count);
            Assert.Equal("Item 1", files[0].Name);
            Assert.Equal("Item 2", files[1].Name);
            Assert.Equal("Item 3", files[2].Name);
            Assert.Equal("Item 4", files[3].Name);
            Assert.Equal("Item 5", files[4].Name);
        }
Ejemplo n.º 3
0
        public async Task <List <DropboxFileModel> > GetFilesAsync(string path, CursorContainer cursor, CancellationToken cancellationToken)
        {
            var uri         = new Uri(DropboxApiUri + "/2/files/list_folder");
            var continueUri = new Uri(DropboxApiUri + "/2/files/list_folder/continue");

            List <DropboxFileModel>     results;
            DropboxApiResponseListFiles response;

            if (string.IsNullOrWhiteSpace(cursor?.Cursor))
            {
                var jsonResponse = await _httpClientHelper.PostAsync(uri, $@"{{""path"":""/Blog{path}"", ""recursive"": true}}", _settings.DropboxAccessToken, cancellationToken);

                response = JsonConvert.DeserializeObject <DropboxApiResponseListFiles>(jsonResponse);

                results = response.entries.Select(x => new DropboxFileModel(x.name, x.path_lower)).ToList();
            }
            else
            {
                results  = new List <DropboxFileModel>();
                response = new DropboxApiResponseListFiles {
                    cursor = cursor.Cursor, has_more = true
                };
            }

            while (response.has_more)
            {
                var json         = $@"{{""cursor"": ""{response.cursor}""}}";
                var jsonResponse = await _httpClientHelper.PostAsync(continueUri, json, _settings.DropboxAccessToken, cancellationToken);

                response = JsonConvert.DeserializeObject <DropboxApiResponseListFiles>(jsonResponse);

                if (response.entries != null)
                {
                    results.AddRange(response.entries.Select(x => new DropboxFileModel(x.name, x.path_lower)).ToList());
                }

                if (cursor != null)
                {
                    cursor.Cursor = response.cursor;
                }
            }

            return(results);
        }