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