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));
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#6
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);
                }
            }
        }