Example #1
0
 public void PostFile_ShouldReturnArgumentNullException_WhenFileIsNull()
 {
     using (ShimsContext.Create())
     {
         ShimDiagnosticsProvider.ConstructorType = (dp, type) => { };
         SkyDriveAdapter skyDriveAdapter = new SkyDriveAdapter();
         PublishSkyDriveFileModel publishFileModel = new PublishSkyDriveFileModel();
         skyDriveAdapter.PostFile(publishFileModel);
     }
 }
Example #2
0
        public void PostFile_ShouldReturnArgumentException_WhenFileNameHasWhitespaces()
        {
            using (ShimsContext.Create())
            {
                ShimDiagnosticsProvider.ConstructorType = (dp, type) => { };
                SkyDriveAdapter skyDriveAdapter = new SkyDriveAdapter();
                PublishSkyDriveFileModel publishFileModel = new PublishSkyDriveFileModel()
                {
                    File = new DataFile() { FileName = " " }
                };

                skyDriveAdapter.PostFile(publishFileModel);
            }
        }
        /// <summary>
        /// uploads the file to skydrive
        /// </summary>
        /// <param name="publishSkyDriveFileModel">PublishSkyDriveFileModel </param>
        /// <returns>File Id</returns>
        private string UploadFile(PublishSkyDriveFileModel publishSkyDriveFileModel)
        {
            Repository repository = publishSkyDriveFileModel.Repository;
            DataFile dataFile = publishSkyDriveFileModel.File;
            int fileId = publishSkyDriveFileModel.File.FileInfo.FileId;
            string fileName = Path.GetFileNameWithoutExtension(dataFile.FileName);

            string folderId = CreateFolderForFile(repository.Name, fileId.ToString(), fileName, publishSkyDriveFileModel.AuthToken);
            string url = string.Format(skydriveUserFileUploadUrlTemplate, folderId, publishSkyDriveFileModel.AuthToken.AccessToken);

            //Build Request Body
            Encoding encoding = Encoding.UTF8;
            string boundary = "--" + skyDriveMultiPartRequestBoundary;
            Stream formData = new MemoryStream();
            StringBuilder sbRequest = new StringBuilder();
            sbRequest.AppendLine(boundary);
            sbRequest.AppendLine(String.Format("Content-Disposition: form-data; name=\"file\"; filename=\"{0}\"", dataFile.FileName));
            sbRequest.AppendLine("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            sbRequest.AppendLine();

            byte[] bodyStart = encoding.GetBytes(sbRequest.ToString());
            formData.Write(bodyStart, 0, bodyStart.Length);

            byte[] fileContents = dataFile.FileContent;
            formData.Write(fileContents, 0, fileContents.Length);

            sbRequest.Clear();
            sbRequest.AppendLine();
            sbRequest.AppendLine(boundary + "--");
            byte[] bodyEnd = encoding.GetBytes(sbRequest.ToString());
            formData.Write(bodyEnd, 0, bodyEnd.Length);

            formData.Position = 0;

            byte[] outboundBytes = new byte[formData.Length];
            formData.Read(outboundBytes, 0, outboundBytes.Length);

            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            request.Method = "POST";
            request.ContentType = String.Format("multipart/form-data; boundary={0}", skyDriveMultiPartRequestBoundary);
            request.ContentLength = outboundBytes.Length;

            using (Stream requestStream = request.GetRequestStream())
            {
                requestStream.Write(outboundBytes, 0, outboundBytes.Length);
            }

            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Content));
                Content content = serializer.ReadObject(response.GetResponseStream()) as Content;
                return content.Id;
            }
        }
Example #4
0
        public void PostFile_ShouldReturnExceptionMessage_WhenFileUploadThrowsError()
        {
            SkyDriveAdapter skyDriveAdapter = new SkyDriveAdapter();
            PublishSkyDriveFileModel publishFileModel = new PublishSkyDriveFileModel()
            {
                File = new DataFile() { FileName = "SomeFileName", FileContent = new byte[1] },
                AuthToken = new AuthToken()
            };

            OperationStatus operationStatus;
            string errorMessage = "Some error message";
            using (ShimsContext.Create())
            {
                ShimSkyDriveAdapter.AllInstances.UploadFilePublishSkyDriveFileModel = (sda, psdfm) => { throw new Exception(errorMessage); return string.Empty; };
                operationStatus = skyDriveAdapter.PostFile(publishFileModel);
            }
        }
Example #5
0
        public void PostFile_ShouldReturnSucceededStatus_WhenFileUploadIsSuccessful()
        {
            OperationStatus operationStatus;
            string fileId = "1234";
            using (ShimsContext.Create())
            {
                ShimDiagnosticsProvider.ConstructorType = (dp, type) => { };
                SkyDriveAdapter skyDriveAdapter = new SkyDriveAdapter();
                PublishSkyDriveFileModel publishFileModel = new PublishSkyDriveFileModel()
                {
                    File = new DataFile() { FileName = "SomeFileName", FileContent = new byte[1] },
                    AuthToken = new AuthToken()
                };

                ShimSkyDriveAdapter.AllInstances.UploadFilePublishSkyDriveFileModel = (sda, psdfm) => fileId;
                ShimDiagnosticsProvider.AllInstances.WriteInformationTraceTraceEventIdString = (diagnosticsProvider, traceEventId, message) => { };
                operationStatus = skyDriveAdapter.PostFile(publishFileModel);
            }

            Assert.IsTrue(operationStatus.Succeeded);
            Assert.AreEqual(fileId, operationStatus.CustomReturnValues);
        }
Example #6
0
        public void PostFile_ShouldReturnInvalidAccessTokenErrorMessage_WhenAccessTokenIsNull()
        {
            using (ShimsContext.Create())
            {
                ShimDiagnosticsProvider.ConstructorType = (dp, type) => { };
                SkyDriveAdapter skyDriveAdapter = new SkyDriveAdapter();
                PublishSkyDriveFileModel publishFileModel = new PublishSkyDriveFileModel()
                {
                    File = new DataFile() { FileName = "SomeFileName", FileContent = new byte[1] }
                };

                skyDriveAdapter.PostFile(publishFileModel);
            }
        }
Example #7
0
        public void PostFile_ShouldReturnArgumentException_WhenFileContentLengthIsZero()
        {
            using (ShimsContext.Create())
            {
                ShimDiagnosticsProvider.ConstructorType = (dp, type) => { };
                SkyDriveAdapter skyDriveAdapter = new SkyDriveAdapter();
                PublishSkyDriveFileModel publishFileModel = new PublishSkyDriveFileModel()
                {
                    File = new DataFile() { FileName = "SomeFileName", FileContent = new byte[0] }
                };

                var operationStatus = skyDriveAdapter.PostFile(publishFileModel);
            }
        }
Example #8
0
        /// <summary>
        /// Method to publish file
        /// </summary>
        /// <param name="postFileData">PostFileModel object</param>
        /// <returns>returns File Identifier</returns>
        public override string PublishFile(PublishMessage publishModel)
        {
            string fileIndentifier = null;

            var file = this.GetFileByFileId(publishModel.FileId);
            Check.IsNotNull<DM.File>(file, "fileToPublish");
            
            IEnumerable<DM.FileColumnType> fileColumnTypes = null;
            IEnumerable<DM.FileColumnUnit> fileColumnUnits = null;
            OperationStatus status = null;
            Encoding encoding = Encoding.UTF8;
            string identifier = string.Empty;
           
            Repository repository = this.RepositoryService.GetRepositoryById(publishModel.RepositoryId);
            string baseRepoName = repository.BaseRepository.Name;

            this.RepositoryAdapter = this.RepositoryAdapterFactory.GetRepositoryAdapter(baseRepoName);
                
            DataFile dataFile = this.GetDataFile(file);
               
            if (file.FileColumns != null && file.FileColumns.Count > 0)
            {
                // before posting the file set file column units and types
                fileColumnTypes = this.RetrieveFileColumnTypes();
                fileColumnUnits = this.RetrieveFileColumnUnits();
            }

            // Set the user Id on AuthToken
            publishModel.AuthToken.UserId = publishModel.UserId;
            publishModel.AuthToken.RespositoryId = repository.RepositoryId;
            AuthToken authToken = this.GetOrUpdateAuthTokens(repository, publishModel.AuthToken);

            PublishSkyDriveFileModel publishSkyDriveFileModel = new PublishSkyDriveFileModel()
            {
                File = dataFile,
                Repository = repository,
                FileColumnTypes = fileColumnTypes,
                FileColumnUnits = fileColumnUnits,
                AuthToken = authToken
            };

            //post the file
            status = this.RepositoryAdapter.PostFile(publishSkyDriveFileModel);

            if (status.Succeeded)
            {
                fileIndentifier = (string)status.CustomReturnValues;
            }

            return fileIndentifier;
        }