public void IncrementsPostCount()
 {
     var author = new UserAccount { Username = "******", EmailHash = "testhash" };
     var thread = new DiscussionThread("title", "body", "test,tags".Split(','), author);
     thread.PostCount.ShouldEqual(0);
     thread.AddPost("anotherUser");
     thread.PostCount.ShouldEqual(1);
     thread.LastActivity.ShouldBeWithinOneSecondFromNow();
     thread.LastActivityUsername.ShouldEqual("anotherUser");
 }
 public FubuContinuation NewThread(NewThreadCommand command)
 {
     var thread = new DiscussionThread(command.Title, command.Body, command.AllTagsEntered, command.Author);
     _session.Store(thread);
     _session.SaveChanges();
     return FubuContinuation.RedirectTo(new ViewThreadRequest
                                            {
                                                UriId = thread.UriId,
                                                Title = thread.Title
                                            });
 }
        public void ReturnsTop20ThreadSummaries()
        {
            var configStore = AutoMapperRegistry.BuildConfigStore();
            AutoMapperRegistry.ConfigureMaps(configStore);

            var endpoint = new HomeEndpoint(Session, new MappingEngine(configStore));
            var thread = new DiscussionThread("title", "body", new[] {"tag"}, new UserAccount());
            Session.Store(thread);
            Session.SaveChanges();

            var viewModel = endpoint.Home(new HomeRequest());
            viewModel.Threads.ShouldContain(x => x.Title == thread.Title);
        }
            public void IncrementsVoteCountAndRecalculatesTheScore()
            {
                var author = new UserAccount { Username = "******", EmailHash = "testhash" };
                var thread = new DiscussionThread("title", "body", "test,tags".Split(','), author);
                var originalScore = thread.Score;
                thread.UpVotes.ShouldEqual(1);
                thread.DownVotes.ShouldEqual(0);

                thread.VoteUp();
                thread.UpVotes.ShouldEqual(2);
                thread.DownVotes.ShouldEqual(0);
                thread.Score.ShouldBeGreaterThan(originalScore);

                thread.VoteDown();
                thread.UpVotes.ShouldEqual(2);
                thread.DownVotes.ShouldEqual(1);
                thread.Score.ShouldEqual(originalScore);

                thread.NetVotes.ShouldEqual(1);
            }
            public void InitializesPropertiesCorrectly()
            {
                var title = "New Thread";
                var body = "This is a body. And this is **really important**.";
                var author = new UserAccount { Username = "******", EmailHash = "testhash" };
                var thread = new DiscussionThread(title, body, "test,tags".Split(','), author);

                thread.Id.ShouldEqual("threads/");
                thread.Title.ShouldEqual(title);
                thread.MarkdownBody.ShouldEqual(body);
                thread.DisplayBody.ShouldEqual("<p>This is a body. And this is <strong>really important</strong>.</p>\n");
                thread.CreatedOn.ShouldBeWithinOneSecondFromNow();
                thread.LastActivity.ShouldBeWithinOneSecondFromNow();
                thread.UpVotes.ShouldEqual(1);
                thread.Score.ShouldBeGreaterThan(0);
                thread.Tags[0].ShouldEqual("test");
                thread.Tags[1].ShouldEqual("tags");
                thread.AuthorProfilePictureUrl.ShouldEqual(author.ProfilePictureUrl);
                thread.AuthorUsername.ShouldEqual(author.Username);
            }
        public void RecordsThreadViewIfNotViewedFromUserAndIPBefore()
        {
            var thread = new DiscussionThread("title", "body", new[] {"tags"}, DefaultUser);
            thread.ViewCount.ShouldEqual(0);
            Session.Store(thread);
            Session.SaveChanges();

            var request = new ViewThreadRequest
                              {
                                  IPAddress = "myIP",
                                  UriId = thread.UriId,
                                  UserAccount = DefaultUser
                              };
            var task = new RecordThreadViewTask(request);
            task.Initialize(Session, DocumentStore);
            task.Execute();
            Session.SaveChanges();

            var views = Session.Query<ThreadView>().Where(x => x.IPAddress == request.IPAddress && x.Username == DefaultUser.Username && x.DiscussionThreadId == thread.Id).ToList();
            views.Count().ShouldEqual(1);
            Session.Load<DiscussionThread>(thread.Id).ViewCount.ShouldEqual(1);
        }