added user feedback functional test

This commit is contained in:
albert 2011-02-01 18:08:01 -05:00
parent df20d9233b
commit 8eb3451fb4
11 changed files with 103 additions and 9 deletions

1
.gitignore vendored
View File

@ -6,6 +6,7 @@ lib/danbooru_image_resizer/*.log
db/*.sqlite3 db/*.sqlite3
log/*.log log/*.log
tmp/**/* tmp/**/*
tmp/upload_*
public/data public/data
vendor/cache/*.gem vendor/cache/*.gem
.sass-cache .sass-cache

View File

@ -10,7 +10,7 @@ class ApplicationController < ActionController::Base
protected protected
def access_denied def access_denied
previous_url = params[:url] || request.request_uri previous_url = params[:url] || request.fullpath
respond_to do |fmt| respond_to do |fmt|
fmt.html do fmt.html do

View File

@ -1,19 +1,39 @@
class UserFeedbackController < ApplicationController 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 def new
@user_feedback = UserFeedback.new
respond_with(@user_feedback)
end end
def edit def edit
@user_feedback = UserFeedback.find(params[:id])
check_privilege(@user_feedback)
respond_with(@user_feedback)
end end
def index def index
@search = UserFeedback.search(params[:search])
@user_feedback = @search.paginate(:page => params[:page])
respond_with(@user_feedback)
end end
def create def create
end @user_feedback = UserFeedback.create(params[:user_feedback])
respond_with(@user_feedback)
def update
end end
def destroy 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
end end

View File

@ -232,7 +232,7 @@ class Upload < ActiveRecord::Base
end end
def temp_file_path 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
end end

View File

@ -3,7 +3,7 @@ class UserFeedback < ActiveRecord::Base
belongs_to :user belongs_to :user
belongs_to :creator, :class_name => "User" belongs_to :creator, :class_name => "User"
before_validation :initialize_creator, :on => :create 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 validates_presence_of :user, :creator, :body
validate :creator_is_privileged validate :creator_is_privileged
@ -11,6 +11,10 @@ class UserFeedback < ActiveRecord::Base
self.creator_id = CurrentUser.id self.creator_id = CurrentUser.id
end end
def user_name=(name)
self.user_id = User.name_to_id(name)
end
def creator_is_privileged def creator_is_privileged
if !creator.is_privileged? if !creator.is_privileged?
errors[:creator] << "must be privileged" errors[:creator] << "must be privileged"

View File

View File

View File

View File

@ -9,6 +9,7 @@ class CreateUserFeedback < ActiveRecord::Migration
end end
add_index :user_feedback, :user_id add_index :user_feedback, :user_id
add_index :user_feedback, :creator_id
end end
def self.down def self.down

View File

@ -1,4 +1,5 @@
Factory.define(:user_feedback) do |f| Factory.define(:user_feedback) do |f|
f.user {|x| x.association(:user)}
f.is_positive true f.is_positive true
f.body {Faker::Lorem.words} f.body {Faker::Lorem.words}
end end

View File

@ -1,8 +1,75 @@
require 'test_helper' require 'test_helper'
class UserFeedbackControllerTest < ActionController::TestCase class UserFeedbackControllerTest < ActionController::TestCase
# Replace this with your real tests. context "The user feedback controller" do
test "the truth" do setup do
assert true @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
end end