public void Import_ValidRedirects_ShouldSucceedWithAllValid() { var importer = new RedirectsImporterService(); var redirectsFile = new ExcelRedirectsFile(CreateMockContentFinder()); redirectsFile.FileName = string.Concat(Directory.GetCurrentDirectory(), "\\Files\\Csv\\redirects.xlsx"); var response = importer.Import(redirectsFile); Assert.True(response.ImportedItems.All(item => item.IsValid)); }
public void Import_RedirectLoop_ShouldReturnValidationErrors() { var importer = new RedirectsImporterService(); var redirectsFile = new CsvRedirectsFile(CreateMockContentFinder()); redirectsFile.FileName = string.Concat(Directory.GetCurrentDirectory(), "\\Files\\Csv\\redirects-redirectloop.csv"); redirectsFile.Seperator = CsvSeparator.Comma; var response = importer.Import(redirectsFile); Assert.Equal("Error", ((CsvRedirectsFile)response.File).File.Rows[0].Cells[3].Value); Assert.Equal("This redirect would create a redirect loop as another redirect exists with the URL (/destination1) in the file. It has not been imported.", ((CsvRedirectsFile)response.File).File.Rows[0].Cells[4].Value); }
public void Import_RedirectChain_ShouldReturnValidationErrors() { var importer = new RedirectsImporterService(); var redirectsFile = new CsvRedirectsFile(CreateMockContentFinder()); redirectsFile.FileName = string.Concat(Directory.GetCurrentDirectory(), "\\Files\\Csv\\redirects-redirectchain.csv"); redirectsFile.Seperator = CsvSeparator.Comma; var response = importer.Import(redirectsFile); Assert.Equal("Warning", ((CsvRedirectsFile)response.File).File.Rows[0].Cells[3].Value); Assert.Equal("This redirect links to the URL (/destination1) in the file. This will result in a redirect chain", ((CsvRedirectsFile)response.File).File.Rows[0].Cells[4].Value); }
public void Import_BlankLines_ShouldReturnValidationErrors() { var importer = new RedirectsImporterService(); var redirectsFile = new CsvRedirectsFile(CreateMockContentFinder()); redirectsFile.FileName = string.Concat(Directory.GetCurrentDirectory(), "\\Files\\Csv\\redirects-blanklines.csv"); redirectsFile.Seperator = CsvSeparator.Comma; var response = importer.Import(redirectsFile); Assert.Equal("Error", ((CsvRedirectsFile)response.File).File.Rows[4].Cells[3].Value); Assert.Equal("No source URL was provided or is in the wrong format", ((CsvRedirectsFile)response.File).File.Rows[4].Cells[4].Value); }
public void Import_TestImportedEvent_ShouldRaiseEvent() { var importer = new RedirectsImporterService(); var totalRedirects = 0; //Handy event for future integrations importer.Imported += (e, r) => { totalRedirects = r.Response.ImportedItems.Count(a => a.IsValid); }; var redirectsFile = new ExcelRedirectsFile(CreateMockContentFinder()); redirectsFile.FileName = string.Concat(Directory.GetCurrentDirectory(), "\\Files\\Excel\\redirects.xlsx"); importer.Import(redirectsFile); Assert.True(totalRedirects > 0); }
public async Task <HttpResponseMessage> Import() { if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(new HttpResponseMessage { StatusCode = HttpStatusCode.UnsupportedMediaType, Content = new StringContent("File must be a valid CSV or Excel file") }); } var uploadFolder = HttpContext.Current.Server.MapPath(FileUploadPath); Directory.CreateDirectory(uploadFolder); var provider = new CustomMultipartFormDataStreamProvider(uploadFolder); var result = await Request.Content.ReadAsMultipartAsync(provider); var file = result.FileData[0]; var path = file.LocalFileName; var ext = path.Substring(path.LastIndexOf('.')).ToLower(); if (ext != ".csv" && ext != ".xlsx") { throw new HttpResponseException(new HttpResponseMessage { StatusCode = HttpStatusCode.UnsupportedMediaType, Content = new StringContent("File must be a valid CSV or Excel file") }); } var fileNameAndPath = HttpContext.Current.Server.MapPath(FileUploadPath + string.Format(FileName, DateTime.Now.Ticks)); File.Copy(file.LocalFileName, fileNameAndPath, true); var importer = new RedirectsImporterService(); IRedirectsFile redirectsFile; switch (ext) { default: var csvFile = new CsvRedirectsFile(new RedirectPublishedContentFinder(UmbracoContext.ContentCache)) { FileName = fileNameAndPath, Seperator = CsvSeparator.Comma }; redirectsFile = csvFile; break; } var response = importer.Import(redirectsFile); using (var ms = new MemoryStream()) { using (var outputFile = new FileStream(response.File.FileName, FileMode.Open, FileAccess.Read)) { byte[] bytes = new byte[outputFile.Length]; outputFile.Read(bytes, 0, (int)outputFile.Length); ms.Write(bytes, 0, (int)outputFile.Length); HttpResponseMessage httpResponseMessage = new HttpResponseMessage(); httpResponseMessage.Content = new ByteArrayContent(bytes.ToArray()); httpResponseMessage.Content.Headers.Add("x-filename", "redirects.csv"); httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); httpResponseMessage.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); httpResponseMessage.Content.Headers.ContentDisposition.FileName = "redirects.csv"; httpResponseMessage.StatusCode = HttpStatusCode.OK; return(httpResponseMessage); } } }