Skip to content

Commit

Permalink
Merge branch 'master' of github.com:concerto/concerto
Browse files Browse the repository at this point in the history
  • Loading branch information
bamnet committed May 3, 2012
2 parents 4590cc1 + f1b0032 commit f546fa6
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 45 deletions.
4 changes: 2 additions & 2 deletions app/controllers/submissions_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def show
def approve
submission = Submission.find(params[:id])
respond_to do |format|
if submission.approve(current_user, params[:submission][:duration])
if submission.approve(current_user, params[:moderation_reason], params[:submission][:duration])
format.html { redirect_to(feed_submissions_path, :notice => t(:content_approved)) }
else
format.html { redirect_to(feed_submission_path, :notice => t(:content_failed_approve)) }
Expand All @@ -38,7 +38,7 @@ def approve
def deny
submission = Submission.find(params[:id])
respond_to do |format|
if submission.deny(current_user)
if submission.deny(current_user, params[:moderation_reason])
format.html { redirect_to(feed_submissions_path, :notice => t(:content_denied)) }
else
logger.debug submission.errors
Expand Down
24 changes: 12 additions & 12 deletions app/models/submission.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ class Submission < ActiveRecord::Base
belongs_to :content
belongs_to :feed
belongs_to :moderator, :class_name => "User"

#Validations
validates :feed, :presence => true, :associated => true
validates :content, :presence => true, :associated => true
Expand All @@ -14,49 +14,49 @@ class Submission < ActiveRecord::Base
scope :approved, where(:moderation_flag => true)
scope :denied, where(:moderation_flag => false)
scope :pending, where("moderation_flag IS NULL")

# Test if the submission has been approved.
# (moderation flag is true)
def is_approved?
moderation_flag ? true : false
end

# Test if the submission has been denied.
# (moderation flag is false)
def is_denied?
(moderation_flag == false) ? true : false
end

# Test if the submission has not yet been moderated.
# (moderation flag is nil)
def is_pending?
moderation_flag.nil?
end
# Approve a piece of content on a feed. Must be

# Approve a piece of content on a feed. Must be
# affilailated with a moderator. Duration can be
# overridden as needed.
def approve(moderator, duration = self.duration)
if update_attributes({:moderation_flag => true, :duration => duration, :moderator => moderator})
def approve(moderator, reason, duration = self.duration)
if update_attributes({:moderation_flag => true, :duration => duration, :moderator => moderator, :moderation_reason => reason})
true
else
reload
false
end
end

# Deny a piece of content on a feed. Must be affiliated
# with a moderator. Duration is not changed, because the
# the content is being denied.
def deny(moderator)
if update_attributes({:moderation_flag => false, :moderator => moderator})
def deny(moderator, reason)
if update_attributes({:moderation_flag => false, :moderator => moderator, :moderation_reason => reason})
true
else
reload
false
end
end

# Resets the moderation state of a content submission to a feed.
# Must be affialiated with a moderator. Duration resets on default
# to the duration specified by the uploader.
Expand Down
6 changes: 6 additions & 0 deletions app/views/submissions/_approve_form.html.erb
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
<%= form_for([submission.feed, submission], :url => approve_feed_submission_path(submission.feed, submission)) do |f| %>
<div class="clearfix">
<%= f.label :moderation_reason, "Reason" %>
<div class="input">
<%= text_area_tag "moderation_reason", nil, :class => "span3" %>
</div>
</div>
<div class="clearfix">
<%= f.label :duration %>
<div class="input">
Expand Down
8 changes: 7 additions & 1 deletion app/views/submissions/_deny_form.html.erb
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
<%= form_for([submission.feed, submission], :url => deny_feed_submission_path(submission.feed, @submission)) do |f| %>
<%= form_for([submission.feed, submission], :url => deny_feed_submission_path(submission.feed, submission)) do |f| %>
<div class="clearfix">
<%= f.label :moderation_reason, "Reason" %>
<div class="input">
<%= text_area_tag "moderation_reason", nil, :class => "span3" %>
</div>
</div>
<%= f.submit "Moderate Content", :class => "btn primary" %>
<% end %>
60 changes: 30 additions & 30 deletions test/unit/submission_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,26 +14,26 @@ def setup
assert submission.errors[:feed].any?
assert submission.errors[:content].any?
end

# Every submission requires a feed
test "submission requires feed" do
blank = Submission.new()
assert !blank.valid?

s = Submission.new({:content => contents(:futuristic_ticker), :duration => 10})
assert !s.valid?, "Submission doesn't have feed"
s.feed = feeds(:service)
assert s.valid?, "Submission has feed"
end

# Content is critical to a submission
test "submission requires content" do
s = Submission.new({:feed => feeds(:service), :duration => 10})
assert !s.valid?, "Submission doesn't have content"
s.content_id = contents(:futuristic_ticker).id
assert s.valid?, "Submission has content"
end

# Test uniqueness of submissions, a piece of content
# cannot be submitted to the same feed more than once
test "submissions must be unique" do
Expand All @@ -42,94 +42,94 @@ def setup
s.content = contents(:futuristic_ticker)
assert s.valid?, "Submission doesn't exist"
end

# Verify is_approved? is only true for approved content
test "is_approved?" do
assert submissions(:approved_ticker).is_approved?
assert !submissions(:denied_ticker).is_approved?
assert !submissions(:pending_ticker).is_approved?
end

# Verify is_denied? is only true for denied content
test "is_denied?" do
assert !submissions(:approved_ticker).is_denied?
assert submissions(:denied_ticker).is_denied?
assert !submissions(:pending_ticker).is_denied?
end

# Verify is_pending? is only true for pending content
test "is_pending?" do
assert !submissions(:approved_ticker).is_pending?
assert !submissions(:denied_ticker).is_pending?
assert submissions(:pending_ticker).is_pending?
end

# Verify the approve behavior approves the content.
# If a duration is set, make sure that is used.
test "submission approval" do
s = submissions(:pending_ticker)
assert !s.is_approved?
assert s.approve(users(:katie)), "#{s.errors}"

assert s.approve(users(:katie), nil), "#{s.errors}"
assert s.is_approved?
assert_equal s.moderator, users(:katie)
assert s.approve(users(:kristen), 123)

assert s.approve(users(:kristen), nil, 123)
assert s.is_approved?
assert_equal s.moderator, users(:kristen)
assert_equal s.duration, 123
assert_equal 123, s.duration
end

# Make sure content can be denied.
test "submission denial" do
s = submissions(:approved_ticker)
assert !s.is_denied?
assert s.deny(users(:katie)), "#{s.errors}"

assert s.deny(users(:katie), nil), "#{s.errors}"
assert s.is_denied?
assert_equal s.moderator, users(:katie)
end

# Make sure content can be unmoderated. If
# a duration is used, that one should be used
# otherwise it should be reset to the
# content's duration.
test "submission un-moderation" do
s = submissions(:denied_ticker)
assert !s.is_pending?

assert s.unmoderate(users(:katie), 234), "#{s.errors}"
assert s.is_pending?
assert_equal s.moderator, users(:katie)
assert_equal s.duration, 234

assert s.unmoderate(users(:katie)), "#{s.errors}"
assert s.is_pending?
assert_equal s.moderator, users(:katie)
assert_equal s.duration, s.content.duration
end

# Approved or denied content requires
# a moderator to be present.
test "moderated submission needs moderator" do
s = submissions(:pending_ticker)
assert s.is_pending?
assert !s.approve(nil)

assert !s.approve(nil, nil)
assert !s.is_approved?
assert s.approve(users(:katie))

assert s.approve(users(:katie), nil)
assert s.is_approved?

s.moderator = nil
assert s.invalid?
assert !s.deny(nil)

assert !s.deny(nil, nil)
assert !s.is_denied?
assert s.deny(users(:katie))

assert s.deny(users(:katie), nil)
assert s.is_denied?

s.moderator = nil
assert s.invalid?
end
Expand Down

0 comments on commit f546fa6

Please sign in to comment.