diff --git a/app/controllers/post_versions_controller.rb b/app/controllers/post_versions_controller.rb index 21e63bd4b..01bbba81f 100644 --- a/app/controllers/post_versions_controller.rb +++ b/app/controllers/post_versions_controller.rb @@ -1,6 +1,6 @@ class PostVersionsController < ApplicationController def index @search = PostVersion.search(params[:search]) - @post_versions = @search.paginate(:page => params[:page], :per_page => 20, :order => "updated_at DESC") + @post_versions = @search.paginate(:page => params[:page], :order => "updated_at DESC") end end diff --git a/app/controllers/unapprovals_controller.rb b/app/controllers/unapprovals_controller.rb index d03ad15ea..bfc430f50 100644 --- a/app/controllers/unapprovals_controller.rb +++ b/app/controllers/unapprovals_controller.rb @@ -1,13 +1,32 @@ class UnapprovalsController < ApplicationController + before_filter :member_only + respond_to :html, :xml, :json + rescue_from User::PrivilegeError, :with => "static/access_denied" + def new + @unapproval = Unapproval.new + respond_with(@unapproval) end def index + @search = Unapproval.search(params[:search]) + @unapprovals = @search.paginate(:page => params[:page]) end def create + @unapproval = Unapproval.create(params[:unapproval]) + respond_with(@unapproval) end def destroy + @unapproval = Unapproval.find(params[:id]) + check_privilege(@unapproval) + @unapproval.destroy + respond_with(@unapproval) + end + +private + def check_privilege(unapproval) + raise User::PrivilegeError unless (unapproval.unapprover_id == CurrentUser.id || CurrentUser.is_moderator?) end end diff --git a/app/controllers/uploads_controller.rb b/app/controllers/uploads_controller.rb index 549a31413..45fe8edad 100644 --- a/app/controllers/uploads_controller.rb +++ b/app/controllers/uploads_controller.rb @@ -11,7 +11,8 @@ class UploadsController < ApplicationController end def index - @uploads = Upload.where("uploader_id = ?", CurrentUser.user.id).includes(:uploader).order("uploads.id desc").limit(10) + @search = Upload.search(params[:search]) + @uploads = @search.paginate(:page => params[:page]) respond_with(@uploads) end diff --git a/app/models/unapproval.rb b/app/models/unapproval.rb index 0341e6289..0153cafcb 100644 --- a/app/models/unapproval.rb +++ b/app/models/unapproval.rb @@ -3,4 +3,10 @@ class Unapproval < ActiveRecord::Base belongs_to :unapprover, :class_name => "User" validates_presence_of :reason, :unapprover_id, :unapprover_ip_addr + before_validation :initialize_unapprover, :on => :create + + def initialize_unapprover + self.unapprover_id = CurrentUser.id + self.unapprover_ip_addr = CurrentUser.ip_addr + end end diff --git a/app/models/upload.rb b/app/models/upload.rb index 03aba6a5b..a8540b632 100644 --- a/app/models/upload.rb +++ b/app/models/upload.rb @@ -12,6 +12,7 @@ class Upload < ActiveRecord::Base before_create :convert_cgi_file after_destroy :delete_temp_file validate :uploader_is_not_limited + scope :uploaded_by, lambda {|user_id| where(["uploader_id = ?", user_id])} module ValidationMethods def uploader_is_not_limited @@ -70,6 +71,7 @@ class Upload < ActiveRecord::Base end end rescue Exception => x + raise update_attribute(:status, "error: #{x} - #{x.message}") ensure delete_temp_file diff --git a/app/views/unapprovals/index.html.erb b/app/views/unapprovals/index.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/app/views/unapprovals/new.html.erb b/app/views/unapprovals/new.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/app/views/uploads/new.html.erb b/app/views/uploads/new.html.erb index 04ee98bbf..8884bf792 100644 --- a/app/views/uploads/new.html.erb +++ b/app/views/uploads/new.html.erb @@ -4,7 +4,7 @@

Before uploading, please read the <%= link_to "how to upload guide", wiki_pages_path(:title => "howto:upload") %>.

- <% form_for(@upload, :html => {:multipart => true, :class => "simple_form"}) do |f| %> + <%= form_for(@upload, :html => {:multipart => true, :class => "simple_form"}) do |f| %> <% if params[:url] %>
<%= image_tag(params[:url], :title => "Preview") %> diff --git a/test/factories/unapproval.rb b/test/factories/unapproval.rb new file mode 100644 index 000000000..17483a0c0 --- /dev/null +++ b/test/factories/unapproval.rb @@ -0,0 +1,3 @@ +Factory.define(:unapproval) do |f| + f.post {|x| x.association(:post)} +end diff --git a/test/factories/upload.rb b/test/factories/upload.rb index 09ae486c7..591f2b251 100644 --- a/test/factories/upload.rb +++ b/test/factories/upload.rb @@ -13,6 +13,7 @@ Factory.define(:source_upload, :parent => :upload) do |f| end Factory.define(:jpg_upload, :parent => :upload) do |f| + f.content_type "image/jpeg" f.file_path do FileUtils.cp("#{Rails.root}/test/files/test.jpg", "#{Rails.root}/tmp") "#{Rails.root}/tmp/test.jpg" diff --git a/test/functional/unapprovals_controller_test.rb b/test/functional/unapprovals_controller_test.rb index 5dd2f8b42..f0a4c6a7a 100644 --- a/test/functional/unapprovals_controller_test.rb +++ b/test/functional/unapprovals_controller_test.rb @@ -1,8 +1,65 @@ require 'test_helper' class UnapprovalsControllerTest < ActionController::TestCase - # Replace this with your real tests. - test "the truth" do - assert true + context "The unapprovals controller" do + setup do + @user = Factory.create(:user) + CurrentUser.user = @user + CurrentUser.ip_addr = "127.0.0.1" + end + + teardown do + CurrentUser.user = nil + CurrentUser.ip_addr = nil + end + + context "new action" do + should "render" do + get :new, {}, {:user_id => @user.id} + assert_response :success + end + end + + context "index action" do + setup do + @unapproval = Factory.create(:unapproval) + end + + should "render" do + get :index, {}, {:user_id => @user.id} + assert_response :success + end + + context "with search parameters" do + should "render" do + get :index, {:search => {:post_id_equals => @unapproval.post_id}}, {:user_id => @user.id} + assert_response :success + end + end + end + + context "create action" do + setup do + @post = Factory.create(:post) + end + + should "create a new unapproval" do + assert_difference("Unapproval.count", 1) do + post :create, {:post_id => @post.id, :reason => "xxx"}, {:user_id => @user.id} + end + end + end + + context "destroy action" do + setup do + @unapproval = Factory.create(:unapproval) + end + + should "delete an unapproval" do + assert_difference "Unapproval.count", -1 do + post :destroy, {:id => @unapproval.id}, {:user_id => @user.id} + end + end + end end end diff --git a/test/functional/uploads_controller_test.rb b/test/functional/uploads_controller_test.rb index 0e11761e1..b763c8a2f 100644 --- a/test/functional/uploads_controller_test.rb +++ b/test/functional/uploads_controller_test.rb @@ -1,8 +1,84 @@ require 'test_helper' class UploadsControllerTest < ActionController::TestCase - # Replace this with your real tests. - test "the truth" do - assert true + context "The uploads controller" do + setup do + @user = Factory.create(:user) + CurrentUser.user = @user + CurrentUser.ip_addr = "127.0.0.1" + end + + teardown do + CurrentUser.user = nil + CurrentUser.ip_addr = nil + end + + context "new action" do + should "render" do + get :new, {}, {:user_id => @user.id} + assert_response :success + end + + context "for a post that has already been uploaded" do + setup do + @post = Factory.create(:post, :source => "aaa") + end + + should "initialize the post" do + get :new, {:url => "aaa"}, {:user_id => @user.id} + assert_response :success + assert_not_nil(assigns(:post)) + end + end + end + + context "index action" do + setup do + @upload = Factory.create(:source_upload) + end + + should "render" do + get :index, {}, {:user_id => @user.id} + assert_response :success + end + + context "with search parameters" do + should "render" do + get :index, {:search => {:source_equals => @upload.source}}, {:user_id => @user.id} + assert_response :success + end + end + end + + context "show action" do + setup do + @upload = Factory.create(:jpg_upload) + end + + should "render" do + get :show, {:id => @upload.id}, {:user_id => @user.id} + assert_response :success + end + end + + context "create action" do + should "create a new upload" do + assert_difference("Upload.count", 1) do + post :create, {:upload => {:file => upload_jpeg("#{Rails.root}/test/files/test.jpg"), :tag_string => "aaa", :rating => "q", :source => "aaa"}}, {:user_id => @user.id} + end + end + end + + context "update action" do + setup do + @upload = Factory.create(:jpg_upload) + end + + should "process an unapproval" do + post :update, {:id => @upload.id}, {:user_id => @user.id} + @upload.reload + assert_equal("completed", @upload.status) + end + end end end diff --git a/tmp/test.jpg b/tmp/test.jpg deleted file mode 100644 index 253c508d9..000000000 Binary files a/tmp/test.jpg and /dev/null differ