From 8eb3451fb43e5107dce0bbacffdf9cc3f0457f1e Mon Sep 17 00:00:00 2001 From: albert Date: Tue, 1 Feb 2011 18:08:01 -0500 Subject: [PATCH] added user feedback functional test --- .gitignore | 1 + app/controllers/application_controller.rb | 2 +- app/controllers/user_feedback_controller.rb | 26 ++++++- app/models/upload.rb | 2 +- app/models/user_feedback.rb | 6 +- app/views/user_feedback/edit.html.erb | 0 app/views/user_feedback/index.html.erb | 0 app/views/user_feedback/new.html.erb | 0 .../20100215230642_create_user_feedback.rb | 1 + test/factories/user_feedback.rb | 1 + .../user_feedback_controller_test.rb | 73 ++++++++++++++++++- 11 files changed, 103 insertions(+), 9 deletions(-) create mode 100644 app/views/user_feedback/edit.html.erb create mode 100644 app/views/user_feedback/index.html.erb create mode 100644 app/views/user_feedback/new.html.erb diff --git a/.gitignore b/.gitignore index 67a758126..fa7cda926 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ lib/danbooru_image_resizer/*.log db/*.sqlite3 log/*.log tmp/**/* +tmp/upload_* public/data vendor/cache/*.gem .sass-cache diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 9d5ec2791..640c0a769 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -10,7 +10,7 @@ class ApplicationController < ActionController::Base protected def access_denied - previous_url = params[:url] || request.request_uri + previous_url = params[:url] || request.fullpath respond_to do |fmt| fmt.html do diff --git a/app/controllers/user_feedback_controller.rb b/app/controllers/user_feedback_controller.rb index 3e2232d24..8cbcd11f7 100644 --- a/app/controllers/user_feedback_controller.rb +++ b/app/controllers/user_feedback_controller.rb @@ -1,19 +1,39 @@ class UserFeedbackController < ApplicationController + before_filter :privileged_only, :only => [:new, :edit, :create, :update, :destroy] + respond_to :html, :xml, :json + rescue_from User::PrivilegeError, :with => "static/access_denied" + def new + @user_feedback = UserFeedback.new + respond_with(@user_feedback) end def edit + @user_feedback = UserFeedback.find(params[:id]) + check_privilege(@user_feedback) + respond_with(@user_feedback) end def index + @search = UserFeedback.search(params[:search]) + @user_feedback = @search.paginate(:page => params[:page]) + respond_with(@user_feedback) end def create - end - - def update + @user_feedback = UserFeedback.create(params[:user_feedback]) + respond_with(@user_feedback) end def destroy + @user_feedback = UserFeedback.find(params[:id]) + check_privilege(@user_feedback) + @user_feedback.destroy + respond_with(@user_feedback, :location => user_feedback_path) + end + +private + def check_privilege(user_feedback) + raise User::PrivilegeError unless (user_feedback.creator_id == CurrentUser.id || CurrentUser.is_moderator?) end end diff --git a/app/models/upload.rb b/app/models/upload.rb index a8540b632..4bf28a256 100644 --- a/app/models/upload.rb +++ b/app/models/upload.rb @@ -232,7 +232,7 @@ class Upload < ActiveRecord::Base end def temp_file_path - @temp_file_path ||= File.join(Rails.root, "tmp", "#{Time.now.to_f}.#{$PROCESS_ID}") + @temp_file_path ||= File.join(Rails.root, "tmp", "upload_#{Time.now.to_f}.#{$PROCESS_ID}") end end diff --git a/app/models/user_feedback.rb b/app/models/user_feedback.rb index c8504f419..e47c0508f 100644 --- a/app/models/user_feedback.rb +++ b/app/models/user_feedback.rb @@ -3,7 +3,7 @@ class UserFeedback < ActiveRecord::Base belongs_to :user belongs_to :creator, :class_name => "User" before_validation :initialize_creator, :on => :create - attr_accessible :body, :user_id, :is_positive + attr_accessible :body, :user_id, :is_positive, :user_name validates_presence_of :user, :creator, :body validate :creator_is_privileged @@ -11,6 +11,10 @@ class UserFeedback < ActiveRecord::Base self.creator_id = CurrentUser.id end + def user_name=(name) + self.user_id = User.name_to_id(name) + end + def creator_is_privileged if !creator.is_privileged? errors[:creator] << "must be privileged" diff --git a/app/views/user_feedback/edit.html.erb b/app/views/user_feedback/edit.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/app/views/user_feedback/index.html.erb b/app/views/user_feedback/index.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/app/views/user_feedback/new.html.erb b/app/views/user_feedback/new.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/db/migrate/20100215230642_create_user_feedback.rb b/db/migrate/20100215230642_create_user_feedback.rb index 27a7f8fbb..042691330 100644 --- a/db/migrate/20100215230642_create_user_feedback.rb +++ b/db/migrate/20100215230642_create_user_feedback.rb @@ -9,6 +9,7 @@ class CreateUserFeedback < ActiveRecord::Migration end add_index :user_feedback, :user_id + add_index :user_feedback, :creator_id end def self.down diff --git a/test/factories/user_feedback.rb b/test/factories/user_feedback.rb index 03c15fe77..b8636dd9c 100644 --- a/test/factories/user_feedback.rb +++ b/test/factories/user_feedback.rb @@ -1,4 +1,5 @@ Factory.define(:user_feedback) do |f| + f.user {|x| x.association(:user)} f.is_positive true f.body {Faker::Lorem.words} end diff --git a/test/functional/user_feedback_controller_test.rb b/test/functional/user_feedback_controller_test.rb index a1af27d5e..3b036a182 100644 --- a/test/functional/user_feedback_controller_test.rb +++ b/test/functional/user_feedback_controller_test.rb @@ -1,8 +1,75 @@ require 'test_helper' class UserFeedbackControllerTest < ActionController::TestCase - # Replace this with your real tests. - test "the truth" do - assert true + context "The user feedback controller" do + setup do + @user = Factory.create(:user) + @critic = Factory.create(:privileged_user) + CurrentUser.user = @critic + 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 => @critic.id} + assert_response :success + end + end + + context "edit action" do + setup do + @user_feedback = Factory.create(:user_feedback) + end + + should "render" do + get :edit, {:id => @user_feedback.id}, {:user_id => @critic.id} + assert_response :success + end + end + + context "index action" do + setup do + @user_feedback = Factory.create(:user_feedback) + 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 => {:user_id_equals => @user.id}}, {:user_id => @critic.id} + assert_response :success + end + end + end + + context "create action" do + should "create a new feedback" do + assert_difference("UserFeedback.count", 1) do + post :create, {:user_feedback => {:is_positive => false, :user_name => @user.name, :body => "xxx"}}, {:user_id => @critic.id} + assert_not_nil(assigns(:user_feedback)) + assert_equal([], assigns(:user_feedback).errors.full_messages) + end + end + end + + context "destroy action" do + setup do + @user_feedback = Factory.create(:user_feedback) + end + + should "delete a feedback" do + assert_difference "UserFeedback.count", -1 do + post :destroy, {:id => @user_feedback.id}, {:user_id => @critic.id} + end + end + end end end