Пример #1
0
        public async Task ApplyChangesCoreDeletesFilesForDeltasThatHaveBeenDeleted()
        {
            // Arrange
            var helper        = CreateDropboxHelper();
            var fileDeltaInfo = new DropboxEntryInfo {
                Path = "foo/bar.txt", IsDeleted = true
            };
            var dirDeltaInfo = new DropboxEntryInfo {
                Path = "foo/baz/", IsDeleted = true, IsDirectory = true
            };
            var deployInfo = new DropboxDeployInfo {
                Path = "foo"
            };

            deployInfo.Deltas.AddRange(new [] { fileDeltaInfo, dirDeltaInfo });
            string filePath = Path.Combine(helper.Environment.RepositoryPath, "bar.txt"),
                   dirPath  = Path.Combine(helper.Environment.RepositoryPath, "baz");

            File.WriteAllBytes(filePath, new byte[0]);
            Directory.CreateDirectory(dirPath);

            // Act
            await helper.ApplyChangesCore(deployInfo, useOAuth20 : false);

            // Assert
            Assert.False(File.Exists(filePath));
            Assert.False(Directory.Exists(dirPath));
        }
Пример #2
0
        public async Task ApplyChangesCoreCreatesDirectoriesForDirectoryDeltas()
        {
            // Arrange
            var helper       = CreateDropboxHelper();
            var dirDeltaInfo = new DropboxEntryInfo {
                Path = "foo/qux/", IsDirectory = true
            };
            var deployInfo = new DropboxDeployInfo {
                Path = "foo"
            };

            deployInfo.Deltas.Add(dirDeltaInfo);
            string dirPath = Path.Combine(helper.Environment.RepositoryPath, "qux");

            // Act
            await helper.ApplyChangesCore(deployInfo, useOAuth20 : false);

            // Assert
            Assert.True(Directory.Exists(dirPath));
        }
Пример #3
0
        internal DropboxDeployInfo GetDeployInfo(string path, OAuthInfo oauth, AccountInfo account, string cursor = null)
        {
            List <DropboxEntryInfo> deltas = new List <DropboxEntryInfo>();
            string timeStamp = GetUtcTimeStamp();
            string oldCursor = cursor;
            string newCursor = "";

            while (true)
            {
                DeltaInfo delta = GetDeltaInfo(oauth, cursor);
                newCursor = delta.cursor;
                if (newCursor == oldCursor)
                {
                    break;
                }

                foreach (EntryInfo info in delta.entries)
                {
                    DropboxEntryInfo item = new DropboxEntryInfo();

                    if (info.metadata != null && !info.metadata.path.StartsWith(path))
                    {
                        continue;
                    }

                    if (info.metadata == null || info.metadata.is_deleted || string.IsNullOrEmpty(info.metadata.path))
                    {
                        item.Path      = info.path;
                        item.IsDeleted = true;
                    }
                    else
                    {
                        item.Path        = info.metadata.path;
                        item.IsDirectory = info.metadata.is_dir;
                        if (!item.IsDirectory)
                        {
                            item.Modified  = info.metadata.modified;
                            item.Nonce     = GetNonce();
                            item.Signature = GetSignature(oauth, info.path, timeStamp, item.Nonce);
                        }
                    }

                    deltas.Add(item);
                }

                if (!delta.has_more)
                {
                    break;
                }

                cursor = newCursor;
            }

            if (deltas.Count == 0)
            {
                throw new InvalidOperationException("the repo is up-to-date.");
            }

            var deployInfo = new DropboxDeployInfo
            {
                TimeStamp       = timeStamp,
                Token           = oauth.Token,
                ConsumerKey     = oauth.ConsumerKey,
                OAuthVersion    = "1.0",
                SignatureMethod = "HMAC-SHA1",
                OldCursor       = oldCursor,
                NewCursor       = newCursor,
                Path            = path,
                UserName        = account.display_name,
                Email           = account.email,
            };

            deployInfo.Deltas.AddRange(deltas);

            return(deployInfo);
        }
Пример #4
0
        public async Task ApplyChangesCoreDeletesFilesForDeltasThatHaveBeenDeleted()
        {
            // Arrange
            var helper = CreateDropboxHelper();
            var fileDeltaInfo = new DropboxEntryInfo { Path = "foo/bar.txt", IsDeleted = true };
            var dirDeltaInfo = new DropboxEntryInfo { Path = "foo/baz/", IsDeleted = true, IsDirectory = true };
            var deployInfo = new DropboxDeployInfo { Path = "foo" };
            deployInfo.Deltas.AddRange(new [] { fileDeltaInfo, dirDeltaInfo });
            string filePath = Path.Combine(helper.Environment.RepositoryPath, "bar.txt"),
                   dirPath = Path.Combine(helper.Environment.RepositoryPath, "baz");

            File.WriteAllBytes(filePath, new byte[0]);
            Directory.CreateDirectory(dirPath);

            // Act
            await helper.ApplyChangesCore(deployInfo, useOAuth20: false);

            // Assert
            Assert.False(File.Exists(filePath));
            Assert.False(Directory.Exists(dirPath));
        }
Пример #5
0
        public async Task ApplyChangesCoreCreatesDirectoriesForDirectoryDeltas()
        {
            // Arrange
            var helper = CreateDropboxHelper();
            var dirDeltaInfo = new DropboxEntryInfo { Path = "foo/qux/", IsDirectory = true };
            var deployInfo = new DropboxDeployInfo { Path = "foo" };
            deployInfo.Deltas.Add(dirDeltaInfo);
            string dirPath = Path.Combine(helper.Environment.RepositoryPath, "qux");

            // Act
            await helper.ApplyChangesCore(deployInfo, useOAuth20: false);

            // Assert
            Assert.True(Directory.Exists(dirPath));
        }