Commit a9fe8e69 by Xavier Antoviaque

Merge pull request #381 from open-craft/eugeny/vote-count-and-search-messages-css-class

Discussion bug fixes and improvements
parents bce50e88 d7ba0fc2
......@@ -303,7 +303,7 @@ browser and pasting the output. When that file changes, this one should be rege
</script>
<script aria-hidden="true" type="text/template" id="search-alert-template">
<div class="search-alert" id="search-alert-<%- cid %>">
<div class="search-alert <%= css_class %>" id="search-alert-<%- cid %>">
<div class="search-alert-content">
<p class="message"><%= message %></p>
</div>
......
......@@ -274,6 +274,11 @@ describe "DiscussionThreadListView", ->
$(@).html()
).get()).toEqual(expectedMessages)
getAlertMessagesAndClasses = () ->
$(".search-alert").map( ->
{ text: $('.message', @).html(), 'css_class': $(@).attr('class') }
).get()
it "renders and removes search alerts", ->
testAlertMessages []
foo = @view.addSearchAlert("foo")
......@@ -285,6 +290,23 @@ describe "DiscussionThreadListView", ->
@view.removeSearchAlert(bar.cid)
testAlertMessages []
it "renders search alert with custom class", ->
testAlertMessages []
foo = @view.addSearchAlert("foo", "custom-class")
messages = getAlertMessagesAndClasses()
expect(messages.length).toEqual(1);
expect(messages[0].text).toEqual("foo")
expect(messages[0].css_class).toEqual("search-alert custom-class")
foo = @view.addSearchAlert("bar", "other-class")
messages = getAlertMessagesAndClasses()
expect(messages.length).toEqual(2);
expect(messages[0].text).toEqual("foo")
expect(messages[0].css_class).toEqual("search-alert custom-class")
expect(messages[1].text).toEqual("bar")
expect(messages[1].css_class).toEqual("search-alert other-class")
it "clears all search alerts", ->
@view.addSearchAlert("foo")
@view.addSearchAlert("bar")
......
......@@ -138,6 +138,8 @@ if Backbone?
closed: (closed) ->
@updateButtonState(".action-close", closed)
@$(".post-label-closed").toggleClass("is-hidden", not closed)
@$(".action-vote").toggle(not closed)
@$(".display-vote").toggle(closed)
})
toggleSecondaryActions: (event) =>
......
......@@ -42,8 +42,12 @@ if Backbone?
@searchAlertCollection.on "add", (searchAlert) =>
content = _.template(
$("#search-alert-template").html(),
{'message': searchAlert.attributes.message, 'cid': searchAlert.cid}
)
{
'message': searchAlert.attributes.message,
'cid': searchAlert.cid,
'css_class': searchAlert.attributes.css_class
}
)
@$(".search-alerts").append(content)
@$("#search-alert-" + searchAlert.cid + " a.dismiss").bind "click", searchAlert, (event) =>
@removeSearchAlert(event.data.cid)
......@@ -54,8 +58,8 @@ if Backbone?
@searchAlertCollection.on "reset", =>
@$(".search-alerts").empty()
addSearchAlert: (message) =>
m = new Backbone.Model({"message": message})
addSearchAlert: (message, css_class="") =>
m = new Backbone.Model({"message": message, "css_class": css_class})
@searchAlertCollection.add(m)
m
......@@ -496,7 +500,7 @@ if Backbone?
},
true
)
@addSearchAlert(message)
@addSearchAlert(message, 'search-by-user')
clearSearch: ->
@$(".forum-nav-search-input").val("")
......
......@@ -75,7 +75,6 @@ if Backbone?
@$('.comment-form').closest('li').toggle(not closed)
@$(".action-vote").toggle(not closed)
@$(".display-vote").toggle(closed)
# @$(".display-vote").toggle(closed)
@renderAddResponseButton()
})
......@@ -256,6 +255,7 @@ if Backbone?
comment = new Comment(body: body, created_at: (new Date()).toISOString(), username: window.user.get("username"), votes: { up_count: 0 }, abuse_flaggers:[], endorsed: false, user_id: window.user.get("id"))
comment.set('thread', @model.get('thread'))
@renderResponseToList(comment, ".js-response-list")
@renderAttrs()
@model.addComment()
@renderAddResponseButton()
......
......@@ -371,7 +371,7 @@
</script>
<script aria-hidden="true" type="text/template" id="search-alert-template">
<div class="search-alert" id="search-alert-${'<%- cid %>'}">
<div class="search-alert ${'<%= css_class %>'}" id="search-alert-${'<%- cid %>'}">
<div class="search-alert-content">
<p class="message">${'<%= message %>'}</p>
</div>
......
......@@ -258,6 +258,10 @@ class DiscussionTabSingleThreadPage(CoursePage):
def __getattr__(self, name):
return getattr(self.thread_page, name)
def close_open_thread(self):
with self.thread_page._secondary_action_menu_open(".forum-thread-main-wrapper"):
self._find_within(".forum-thread-main-wrapper .action-close").first.click()
class InlineDiscussionPage(PageObject):
url = None
......
......@@ -153,6 +153,56 @@ class DiscussionTabSingleThreadTest(UniqueCourseTest, DiscussionResponsePaginati
@attr('shard_1')
class DiscussionOpenClosedThreadTest(UniqueCourseTest):
"""
Tests for checking the display of attributes on open and closed threads
"""
def setUp(self):
super(DiscussionOpenClosedThreadTest, self).setUp()
# Create a course to register for
CourseFixture(**self.course_info).install()
self.thread_id = "test_thread_{}".format(uuid4().hex)
def setup_user(self, roles=[]):
roles_str = ','.join(roles)
self.user_id = AutoAuthPage(self.browser, course_id=self.course_id, roles=roles_str).visit().get_user_id()
def setup_view(self, **thread_kwargs):
view = SingleThreadViewFixture(
Thread(id=self.thread_id, **thread_kwargs)
)
view.addResponse(Response(id="response1"))
view.push()
def setup_openclosed_thread_page(self, closed=False):
self.setup_user(roles=['Moderator'])
if closed:
self.setup_view(closed=True)
else:
self.setup_view()
page = DiscussionTabSingleThreadPage(self.browser, self.course_id, self.thread_id)
page.visit()
page.close_open_thread()
return page
def test_originally_open_thread_vote_display(self):
page = self.setup_openclosed_thread_page()
self.assertFalse(page._is_element_visible('.forum-thread-main-wrapper .action-vote'))
self.assertTrue(page._is_element_visible('.forum-thread-main-wrapper .display-vote'))
self.assertFalse(page._is_element_visible('.response_response1 .action-vote'))
self.assertTrue(page._is_element_visible('.response_response1 .display-vote'))
def test_originally_closed_thread_vote_display(self):
page = self.setup_openclosed_thread_page(True)
self.assertTrue(page._is_element_visible('.forum-thread-main-wrapper .action-vote'))
self.assertFalse(page._is_element_visible('.forum-thread-main-wrapper .display-vote'))
self.assertTrue(page._is_element_visible('.response_response1 .action-vote'))
self.assertFalse(page._is_element_visible('.response_response1 .display-vote'))
@attr('shard_1')
class DiscussionCommentDeletionTest(UniqueCourseTest):
"""
Tests for deleting comments displayed beneath responses in the single thread view.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment