Ejemplo n.º 1
0
        private async Task <Models.User> RetrieveAuthor(Models.Post post)
        {
            var userCollection = MongoWrapper.Database.GetCollection <Models.User>(nameof(User));

            var userFilterBuilder = new FilterDefinitionBuilder <Models.User>();
            var userFilter        = userFilterBuilder.And
                                    (
                userFilterBuilder.Eq(u => u._id, post.Poster._id),
                GeneralUtils.NotDeactivated(userFilterBuilder)
                                    );

            var userProjectionBuilder = new ProjectionDefinitionBuilder <Models.User>();
            var userProjection        = userProjectionBuilder
                                        .Include(m => m._id)
                                        .Include(m => m.FullName)
                                        .Include(m => m.Avatar)
                                        .Include(m => m.Phone)
                                        .Include(m => m.StartDate)
                                        .Include(m => m.Email)
                                        .Include(m => m.Address)
                                        .Include("_t");

            return((await userCollection.FindAsync(userFilter, new FindOptions <Models.User>
            {
                Limit = 1,
                AllowPartialResults = true,
                Projection = userProjection
            })).SingleOrDefault());
        }
        public void PerformPostNewMessageOnNewUserTest()
        {
            // act
            string input = "Alice -> I love the weather today";

            var user = new User
            {
                UserId = Guid.NewGuid(),
                Username = "******"
            };

            _userManagerMock.Setup(x => x.GetUserByUsername(user.Username, false)).Returns((User) null);
            _userManagerMock.Setup(x => x.AddUser(user.Username)).Returns(user);

            _messageManagerMock.Setup(x => x.AddMessage(user.UserId, input));

            var perform = new Post(_userManagerMock.Object, _messageManagerMock.Object);

            // actual
            var actual = perform.Perform(input);

            // assert
            Assert.AreEqual(actual, string.Empty);
            _userManagerMock.Verify(x=>x.AddUser(It.IsAny<string>()), Times.Once);
            _messageManagerMock.Verify(x=>x.AddMessage(It.IsAny<Guid>(),It.IsAny<string>()), Times.AtLeastOnce);
        }
        public void PerformPostMessageOnExistingUserTest()
        {
            // act
            string input = "Bob	-> Good game though.";
            User user = new User
            {
                UserId = Guid.NewGuid(),
                Username = "******"
            };

            Message userMessage = new Message
            {
                UserId = user.UserId
            };

            _userManagerMock.Setup(x => x.GetUserByUsername(user.Username, false)).Returns(user);
            _messageManagerMock.Setup(x => x.AddMessage(user.UserId, input));

            var perform = new Post(_userManagerMock.Object, _messageManagerMock.Object);

            // actual
            var actual = perform.Perform(input);

            // assert
            Assert.AreEqual(actual, string.Empty);
            _userManagerMock.Verify(x => x.AddUser(It.IsAny<string>()), Times.Never);
            _messageManagerMock.Verify(x => x.AddMessage(It.IsAny<Guid>(), It.IsAny<string>()), Times.AtLeastOnce);
        }
Ejemplo n.º 4
0
        public static string ViewPost(Post post)
        {
            if ((post.Title == null) || (post.Content == null))
                return String.Empty;

            return String.Format("<h2>{0}</h2><div>{1}</div>",
                post.Title, post.Content);
        }
Ejemplo n.º 5
0
        public static Post GetFileData(FileInfo file, SnowSettings snowSettings)
        {
            var rawPost = File.ReadAllText(file.FullName);
            var fileNameMatches = FileNameRegex.Match(file.Name);
            var rawSettings = string.Empty;

            if (!fileNameMatches.Success)
            {
                file.Name.OutputIfDebug(" - Skipping file: ");
                " - File does not match the format {year}-{month}-{day}-{slug}.(md|markdown)".OutputIfDebug();
                return new Post.MissingPost();
            }

            var result = MarkdownFileParser.ParseDataFromFile(rawPost);
            var settings = ParseSettings(result.Header);

            var year = fileNameMatches.Groups["year"].Value;
            var month = fileNameMatches.Groups["month"].Value;
            var day = fileNameMatches.Groups["day"].Value;
            var slug = fileNameMatches.Groups["slug"].Value.ToUrlSlug();
            var date = DateTime.ParseExact(year + month + day, "yyyyMMdd", CultureInfo.InvariantCulture);

            /// if a 'date' property is found in markdown file header, that date will be used instead of the date in the file name
            if (settings.ContainsKey("date"))
            {
                try
                {
                    date = DateTime.Parse((string)settings["date"]);
                }
                finally
                {
                    /// do nothing, let the current 'date' be as is
                }
            }

            var bodySerialized = Markdown.Transform(result.Body);
            var excerptSerialized = Markdown.Transform(result.Excerpt ?? string.Empty);

            var postHeader = new Post
            {
                FileName = file.Name,
                MarkdownHeader = rawSettings,
                Content = bodySerialized,
                ContentExcerpt = excerptSerialized,
                Settings = settings,
                Year = date.Year,
                Month = date.Month,
                Day = date.Day,
                Date = date,
                Url = slug
            };

            postHeader.SetSnowSettings(snowSettings);
            postHeader.SetHeaderSettings(settings);

            return postHeader;
        }
Ejemplo n.º 6
0
        public static Post GetFileData(FileInfo file, Browser browser, SnowSettings snowSettings)
        {
            var response = browser.Get("/post/" + HttpUtility.UrlEncodeUnicode(file.Name));
            var rawPost = File.ReadAllText(file.FullName);
            var fileNameMatches = FileNameRegex.Match(file.Name);
            var settings = new Dictionary<string, dynamic>();
            var rawSettings = string.Empty;

            if (!fileNameMatches.Success)
            {
                throw new ApplicationException("File " + file.Name +
                                               " does not match the format {year}-{month}-{day}-{slug}.(md|markdown)");
            }

            //Get the Header info from a Post Markdown File
            //Find the first index of ---
            var startOfSettingsIndex = rawPost.IndexOf("---", StringComparison.InvariantCultureIgnoreCase);
            if (startOfSettingsIndex >= 0)
            {
                //Find the second index of --- after the first
                var endOfSettingsIndex = rawPost.IndexOf("---", startOfSettingsIndex + 3,
                                                         StringComparison.InvariantCultureIgnoreCase);

                //If we find the 2nd index, parse the settings
                //Otherwise we assume there's no header or settings...
                if (endOfSettingsIndex >= 0)
                {
                    rawSettings = rawPost.Substring(startOfSettingsIndex + 3, endOfSettingsIndex - 3);
                    settings = ParseSettings(rawSettings);
                }
            }

            var year = fileNameMatches.Groups["year"].Value;
            var month = fileNameMatches.Groups["month"].Value;
            var day = fileNameMatches.Groups["day"].Value;
            var slug = fileNameMatches.Groups["slug"].Value.ToUrlSlug();
            var date = DateTime.ParseExact(year + month + day, "yyyyMMdd", CultureInfo.InvariantCulture);

            var result = new Post
            {
                FileName = file.Name,
                MarkdownHeader = rawSettings,
                Content = response.Body.AsString(),
                Settings = settings,
                Year = date.Year,
                Month = date.Month,
                Day = date.Day,
                Date = date,
                Url = slug
            };

            result.SetSnowSettings(snowSettings);
            result.SetHeaderSettings(settings);

            return result;
        }
Ejemplo n.º 7
0
 private void EnrichPostWithAuthor(Models.Post post, Models.User user)
 {
     if (user == null)
     {
         Logger.LogWarning("Post Author was not found! post id: {}, poster id: {}", post._id, post.Poster._id);
     }
     else
     {
         post.Poster = user;
     }
 }
Ejemplo n.º 8
0
 public ActionResult AddPost(Post post)
 {
     if (ModelState.IsValid)
     {
         post.CreationDate = DateTime.Now;
         post.UserId = userRepository.GetUserInfo(User.Identity.Name).Id;
         repository.InsertPost(post);
         return RedirectToAction("Index", "Blog");
     }
     return View();
 }
Ejemplo n.º 9
0
        public void Check_AddPost()
        {
            var newPost = new Post {Id = 10};
            var postStore = new PostStore(_databaseContextMock.Object);
            postStore.AddPost(newPost);

            var result = postStore.GetById(1);

            Assert.IsNotNull(result);
            Assert.AreEqual(1, result.Id);
        }
Ejemplo n.º 10
0
        public void Should_parse_parse_author()
        {
            var settings = new Dictionary<string, object>()
            {
                {"author", "author name"}
            };

            var post = new Post();

            post.SetHeaderSettings(settings);
            Assert.Equal("author name", post.Author);
        }
Ejemplo n.º 11
0
        public void Should_parse_layout()
        {
            var settings = new Dictionary<string, object>()
            {
                {"layout", "layout"}
            };

            var post = new Post();

            post.SetHeaderSettings(settings);
            Assert.Equal("layout", post.Layout);
        }
Ejemplo n.º 12
0
        public void Should_parse_email()
        {
            var settings = new Dictionary<string, object>()
            {
                {"email", "*****@*****.**"}
            };

            var post = new Post();

            post.SetHeaderSettings(settings);
            Assert.Equal("*****@*****.**", post.Email);
        }
Ejemplo n.º 13
0
        public void Should_parse_category()
        {
            var settings = new Dictionary<string, object>()
            {
                {"category", "1, 2"}
            };

            var post = new Post();

            post.SetHeaderSettings(settings);
            Assert.Equal("1", post.Categories.First());
            Assert.Equal("2", post.Categories.Last());
        }
Ejemplo n.º 14
0
        public static Post GetFileData(FileInfo file, SnowSettings snowSettings)
        {
            var rawPost = File.ReadAllText(file.FullName);
            var fileNameMatches = FileNameRegex.Match(file.Name);
            var rawSettings = string.Empty;

            if (!fileNameMatches.Success)
            {
                file.Name.OutputIfDebug(" - Skipping file: ");
                " - File does not match the format {year}-{month}-{day}-{slug}.(md|markdown)".OutputIfDebug();
                return new Post.MissingPost();
            }

            var result = MarkdownFileParser.ParseDataFromFile(rawPost);
            var settings = ParseSettings(result.Header);

            var year = fileNameMatches.Groups["year"].Value;
            var month = fileNameMatches.Groups["month"].Value;
            var day = fileNameMatches.Groups["day"].Value;
            var slug = fileNameMatches.Groups["slug"].Value.ToUrlSlug();
            var date = DateTime.ParseExact(year + month + day, "yyyyMMdd", CultureInfo.InvariantCulture);

            var bodySerialized = Markdown.Transform(result.Body);
            var excerptSerialized = Markdown.Transform(result.Excerpt ?? string.Empty);

            var postHeader = new Post
            {
                FileName = file.Name,
                MarkdownHeader = rawSettings,
                Content = bodySerialized,
                ContentExcerpt = excerptSerialized,
                Settings = settings,
                Year = date.Year,
                Month = date.Month,
                Day = date.Day,
                Date = date,
                Url = slug
            };

            postHeader.SetSnowSettings(snowSettings);
            postHeader.SetHeaderSettings(settings);

            return postHeader;
        }
Ejemplo n.º 15
0
        public void Should_sort_categories_ascending()
        {
            // Arrange
            var post = new Post();
            var settings = new Dictionary<string, object>
            {
                {"categories", "b, A, C, .Net"}
            };

            // Act
            post.SetHeaderSettings(settings);

            // Assert
            var categories = post.Categories.ToArray();
            Assert.Equal(".Net", categories[0]);
            Assert.Equal("A", categories[1]);
            Assert.Equal("b", categories[2]);
            Assert.Equal("C", categories[3]);
        }
Ejemplo n.º 16
0
        public static Post GetFileData(FileInfo file, Browser browser, SnowSettings snowSettings)
        {
            var response = browser.Get("/post/" + HttpUtility.UrlEncodeUnicode(file.Name));
            var rawPost = File.ReadAllText(file.FullName);
            var fileNameMatches = FileNameRegex.Match(file.Name);
            var rawSettings = string.Empty;

            if (!fileNameMatches.Success)
            {
                file.Name.OutputIfDebug(" - Skipping file: ");
                " - File does not match the format {year}-{month}-{day}-{slug}.(md|markdown)".OutputIfDebug();
                return new Post.MissingPost();
            }

            var result = ParseDataFromFile(rawPost);
            var settings = ParseSettings(result.Item1);

            var year = fileNameMatches.Groups["year"].Value;
            var month = fileNameMatches.Groups["month"].Value;
            var day = fileNameMatches.Groups["day"].Value;
            var slug = fileNameMatches.Groups["slug"].Value.ToUrlSlug();
            var date = DateTime.ParseExact(year + month + day, "yyyyMMdd", CultureInfo.InvariantCulture);

            var postHeader = new Post
            {
                FileName = file.Name,
                MarkdownHeader = rawSettings,
                Content = response.Body.AsString(),
                Settings = settings,
                Year = date.Year,
                Month = date.Month,
                Day = date.Day,
                Date = date,
                Url = slug
            };

            postHeader.SetSnowSettings(snowSettings);
            postHeader.SetHeaderSettings(settings);

            return postHeader;
        }
Ejemplo n.º 17
0
        public PostModule(IDocumentSession documentSession)
            : base("/posts")
        {
            DocumentSession = documentSession;

            Get["/"] = parameters =>
                           {
                               var data = DocumentSession.Query<Post>();
                               return View["Index", data];
                           };

            Get[Route.Root().AnyIntAtLeastOnce("id")] = parameters =>
                                                            {
                                                                var model = DocumentSession.Load<Post>((int)parameters.id);
                                                                return View["Edit", model];
                                                            };

            Post[Route.Root().AnyIntAtLeastOnce("id")] = parameters =>
                         {
                             var model = DocumentSession.Load<Post>((int)parameters.id);
                             this.BindTo(model);
                             DocumentSession.SaveChanges();
                             return Response.AsRedirect("/posts");
                         };

            Get["/create"] = parameters =>
                                 {
                                     var model = new Post();
                                     return View["Create", model];
                                 };

            Post["/create"] = parameters =>
            {
                var model = this.Bind<Post>();
                DocumentSession.Store(model);
                DocumentSession.SaveChanges();
                return Response.AsRedirect("/posts");
            };
        }
Ejemplo n.º 18
0
        private static void ComposeDrafts(Post post, string output, Browser browserComposer)
        {
            try
            {
                var siteUrl = TestModule.Settings.SiteUrl;

                TestModule.Data = post;
                TestModule.GeneratedUrl = siteUrl + post.Url;

                var result = browserComposer.Post("/compose");

                result.ThrowIfNotSuccessful(post.FileName);

                var body = result.Body.AsString();

                var outputFolder = Path.Combine(output, post.Url.Trim('/')); //Outputfolder is incorrect with leading slash on urlFormat
                var outputFile = Path.Combine(outputFolder, "index.html");

                if (outputFolder.IsFileUrl())
                {
                    outputFile = outputFolder;
                    outputFolder = Path.GetDirectoryName(outputFolder);
                }

                if (!Directory.Exists(outputFolder))
                {
                    Directory.CreateDirectory(outputFolder);
                }

                File.WriteAllText(outputFile, body);
            }
            catch (Exception)
            {
            }
        }
Ejemplo n.º 19
0
        private static void ComposeParsedFiles(Post post, string output, Browser browserComposer)
        {
            try
            {
                TestModule.Data = post;

                var result = browserComposer.Post("/compose");

                result.ThrowIfNotSuccessful(post.FileName);

                var body = result.Body.AsString();

                var outputFolder = Path.Combine(output, post.Url.Trim('/')); //Outputfolder is incorrect with leading slash on urlFormat

                if (!Directory.Exists(outputFolder))
                {
                    Directory.CreateDirectory(outputFolder);
                }

                File.WriteAllText(Path.Combine(outputFolder, "index.html"), body);
            }
            catch (Exception ex)
            {
                Console.Write(ex);
            }
        }
Ejemplo n.º 20
0
 private static string MonthAbbreviated(string url, Post post)
 {
     return url.Replace("MMM", post.Date.ToString("MMM"));
 }
Ejemplo n.º 21
0
 private static string Day(string url, Post post)
 {
     return url.Replace("dd", post.Date.ToString("dd"));
 }
Ejemplo n.º 22
0
 public ActionResult AddPost()
 {
     Post newPost = new Post();
     return View(newPost);
 }
        public async Task <dynamic> Post([FromBody] CreatePostRequest requestBody)
        {
            var userId = new ObjectId(this.GetCurrentUserId());

            var userCollection = MongoWrapper.Database.GetCollection <Models.User>(nameof(Models.User));

            var userFilterBuilder = new FilterDefinitionBuilder <Models.User>();
            var userFilter        = userFilterBuilder.And(
                GeneralUtils.NotDeactivated(userFilterBuilder),
                userFilterBuilder.Eq(u => u._id, userId)
                );

            var userProjectionBuilder = new ProjectionDefinitionBuilder <Models.User>();
            var userProjection        = userProjectionBuilder
                                        .Include(m => m._id)
                                        .Include(m => m.FullName)
                                        .Include(m => m.Avatar)
                                        .Include(m => m.FileBytesLimit)
                                        .Include(m => m.FileBytesOccupied)
                                        .Include("_t");

            var userTask = userCollection.FindAsync(userFilter, new FindOptions <Models.User>
            {
                Limit = 1,
                AllowPartialResults = false,
                Projection          = userProjection
            });

            Models.User user = null;

            List <(FileReference, Func <Task>)> files             = new List <(FileReference, Func <Task>)>();
            Task <(FileReference, Func <Task>)> fileReferenceTask = Task.FromResult <(FileReference, Func <Task>)>((null, () => Task.CompletedTask));

            if (requestBody.Midias != null)
            {
                long totalSize = 0;
                foreach (MidiaRequest midiaRequest in requestBody.Midias)
                {
                    if (midiaRequest.Id != null)
                    {
                        fileReferenceTask = GeneralUtils.GetFileForReferenceToken
                                            (
                            MongoWrapper,
                            midiaRequest.Id,
                            userId
                                            );
                        var(fileReference, expirer) = await fileReferenceTask;
                        totalSize += fileReference.FileInfo.Size;
                        files.Add((fileReference, expirer));
                    }
                }
                user = (await userTask).Single();
                GeneralUtils.CheckSizeForUser(totalSize, user.FileBytesOccupied, user.FileBytesLimit);
            }

            var postCollection = MongoWrapper.Database.GetCollection <Models.Post>(nameof(Models.Post));

            var creationDate = DateTime.UtcNow;

            var post = new Models.Post
            {
                _id            = ObjectId.GenerateNewId(creationDate),
                Title          = requestBody.Titulo,
                Text           = requestBody.Descricao,
                Comments       = new List <Models.Comment>(),
                Likes          = new HashSet <ObjectId>(),
                FileReferences = files.Select(f => f.Item1).ToList(),
                Ip             = HttpContext.Connection.RemoteIpAddress,
                Poster         = user ?? (await userTask).Single(),
                Position       = requestBody.Coordenada == null ? null : new GeoJsonPoint <GeoJson3DGeographicCoordinates>(requestBody.Coordenada.ToGeoJsonCoordinate())
            };

            await postCollection.InsertOneAsync(post);

            // Consume the file tokens
            files.AsParallel().ForAll(async f => await f.Item2());

            return(new ResponseBody
            {
                Code = ResponseCode.GenericSuccess,
                Data = post._id,
                Message = "Postagem criada com sucesso!",
                Success = true
            });
        }
Ejemplo n.º 24
0
        public void SeedPostsWithComments(List<User> users, List<PostCategory> categories, List<Pet> pets, List<Region> regions)
        {
            for (int i = 0; i < 20; i++)
            {
                var post = new Post
                {
                    Title = $"Post title {i}",
                    Content = $"Some Post content... {i}",
                    User = users[rand.Next(0, users.Count)],
                    PostCategory = categories[rand.Next(0, categories.Count)],
                    Pet = pets[rand.Next(0, pets.Count)],
                    EventTime = DateTime.Now.AddDays(-(rand.Next(0, 15))),
                    Region = regions[rand.Next(0, regions.Count)]
                };

                var commentsCount = rand.Next(0, 10);
                for (int j = 0; j < commentsCount; j++)
                {
                    var comment = new Comment
                    {
                        Content = $"Comment content {j}",
                        User = users[rand.Next(0, users.Count)],
                        Post = post
                    };

                    post.Comments.Add(comment);
                }

                this.context.Posts.Add(post);
            }

            this.context.SaveChanges();
        }
Ejemplo n.º 25
0
        public void Should_parse_series()
        {
            var settings = new Dictionary<string, object>()
            {
                {
                    "series", new Series
                    {
                        Current = 2,
                        Name = "Series name",
                        Parts = new SortedList<int, Series.Part>
                        {
                            {
                                1, new Series.Part
                                {
                                    Name = "Part1",
                                    Url = "/url/to/part1"
                                }
                            },
                            {
                                2, new Series.Part
                                {
                                    Name = "Part2",
                                    Url = "/url/to/part2"
                                }
                            },
                        }
                    }
                }
            };

            var post = new Post();


            post.SetHeaderSettings(settings);

            var series = post.Series;

            Assert.Equal(2, series.Parts.Count);
        }
Ejemplo n.º 26
0
        public void Should_parse_meta_description()
        {
            var settings = new Dictionary<string, object>()
            {
                {"metadescription", "meta description"}
            };

            var post = new Post();

            post.SetHeaderSettings(settings);
            Assert.Equal("meta description", post.MetaDescription);
        }
Ejemplo n.º 27
0
 private static string Author(string url, Post post)
 {
     return url.Replace("{author}", post.Author);
 }
Ejemplo n.º 28
0
 private bool ShouldProcess(Post post)
 {
     return post.Published == Published.True;
 }
Ejemplo n.º 29
0
            public void Published_should_support_private()
            {
                var settings = new Dictionary<string, object>()
                {
                    {"published", "private"}
                };

                var post = new Post();

                post.SetHeaderSettings(settings);
                Assert.Equal(Published.Private, post.Published);
            }
Ejemplo n.º 30
0
            public void Published_should_default_to_true_when_unknown_value()
            {
                var settings = new Dictionary<string, object>()
                {
                    {"published", ""}
                };

                var post = new Post();

                post.SetHeaderSettings(settings);
                Assert.Equal(Published.True, post.Published);
            }
Ejemplo n.º 31
0
 private static string Category(string url, Post post)
 {
     return url.Replace("{category}", post.Categories.FirstOrDefault());
 }
Ejemplo n.º 32
0
 internal static bool ShouldProcess(Post post)
 {
     return post.Published == Published.True;
 }
Ejemplo n.º 33
0
        public void Should_parse_title()
        {
            var settings = new Dictionary<string, object>()
            {
                {"title", "Post title"}
            };

            var post = new Post();

            post.SetHeaderSettings(settings);
            Assert.Equal("Post title", post.Title);
        }