fix user feedback controller test

This commit is contained in:
albert
2011-07-17 18:40:24 -04:00
parent 72e9da01b5
commit 98403d0cb7
17 changed files with 100 additions and 154 deletions

View File

@@ -1,10 +1,10 @@
class UserFeedbackController < ApplicationController
class UserFeedbacksController < 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
@user_feedback = UserFeedback.new(params[:user_feedback])
respond_with(@user_feedback)
end
@@ -14,10 +14,15 @@ class UserFeedbackController < ApplicationController
respond_with(@user_feedback)
end
def show
@user_feedback = UserFeedback.find(params[:id])
respond_with(@user_feedback)
end
def index
@search = UserFeedback.search(params[:search])
@user_feedback = @search.paginate(:page => params[:page])
respond_with(@user_feedback)
@user_feedbacks = @search.paginate(params[:page])
respond_with(@user_feedbacks)
end
def create
@@ -29,7 +34,7 @@ class UserFeedbackController < ApplicationController
@user_feedback = UserFeedback.find(params[:id])
check_privilege(@user_feedback)
@user_feedback.destroy
respond_with(@user_feedback, :location => user_feedback_path)
respond_with(@user_feedback)
end
private

View File

@@ -3,14 +3,25 @@ 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, :user_name
validates_presence_of :user, :creator, :body
attr_accessible :body, :user_id, :category, :user_name
validates_presence_of :user, :creator, :body, :category
validate :creator_is_privileged
scope :positive, where("category = ?", "positive")
scope :neutral, where("category = ?", "neutral")
scope :negative, where("category = ?", "negative")
def initialize_creator
self.creator_id = CurrentUser.id
end
def user_name
if user
user.name
else
nil
end
end
def user_name=(name)
self.user_id = User.name_to_id(name)
end

View File

@@ -1,7 +0,0 @@
<% if @user %>
<% content_for("subnavbar") do %>
<li><%= link_to "Add", :action => "create", :user_id => @user.id %></li>
<li><%= link_to "List for user", :action => "index", :user_id => @user.id %></li>
<li><%= link_to "List for all", :action => "index", :user_id => nil %></li>
<% end %>
<% end %>

View File

@@ -1,42 +0,0 @@
<div id="user-record">
<h4>Record</h4>
<table width="100%">
<thead>
<tr>
<th width="15%">User</th>
<th width="15%">Reporter</th>
<th width="15%">When</th>
<th width="50%">Body</th>
<th width="5%"></th>
</tr>
</thead>
<tbody>
<% @user_records.each do |rec| %>
<tr class="<%= rec.is_positive? ? 'positive-record' : 'negative-record' %>" id="record-<%= rec.id %>">
<td>
<% if @user %>
<%= link_to h(rec.user.pretty_name), :controller => "user", :action => "show", :id => rec.user_id %>
<% else %>
<%= link_to h(rec.user.pretty_name), :action => "index", :user_id => rec.user_id %>
<% end %>
</td>
<td><%= h(rec.reporter.pretty_name) %></td>
<td><%= time_ago_in_words(rec.created_at) %> ago</td>
<td><%= format_text(rec.body) %></td>
<td>
<% if @current_user.is_mod_or_higher? || @current_user.id == rec.reported_by %>
<%= link_to_function "Delete", "UserRecord.destroy(#{rec.id})" %>
<% end %>
</td>
</tr>
<% end %>
</tbody>
</table>
<div id="paginator">
<%= will_paginate(@user_records) %>
</div>
<%= render :partial => "footer" %>
</div>

View File

@@ -1,29 +0,0 @@
<h4>Add Record for <%= h(@user.pretty_name) %></h4>
<div id="preview" style="margin-bottom: 1em;">
</div>
<% form_tag(:action => "create") do %>
<%= hidden_field_tag "user_id", @user.id %>
<table width="100%">
<tbody>
<tr>
<th width="10%"><label>Positive</label></th>
<td width="90%"><%= check_box "user_record", "is_positive" %></td>
</tr>
<tr>
<th><label>Reason</label></th>
<td><%= text_area "user_record", "body", :size => "20x8" %></td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="2">
<%= submit_tag "Submit" %>
<%= submit_to_remote "preview", "Preview", :url => {:action => "preview"}, :update => "preview", :method => :get %>
<%= button_to_function "Cancel", "location.back()" %>
</td>
</tr>
</tfoot>
</table>
<% end %>

View File

@@ -0,0 +1,6 @@
<% content_for(:secondary_links) do %>
<menu>
<li><%= link_to "New", new_user_feedback_path %></li>
<li><%= link_to "Listing", user_feedbacks_path %></li>
</menu>
<% end %>

View File

@@ -0,0 +1,32 @@
<div id="c-user-feedbacks">
<div id="a-index">
<h1>User Feedback</h1>
<table width="100%">
<thead>
<tr>
<th width="15%">User</th>
<th width="15%">Creator</th>
<th width="15%">When</th>
<th width="55%">Message</th>
</tr>
</thead>
<tbody>
<% @user_feedbacks.each do |feedback| %>
<tr>
<td><%= link_to feedback.user_name, user_feedback_path(feedback.user_id) %></td>
<td><%= feedback.creator.name %></td>
<td><%= time_ago_in_words(feedback.created_at) %> ago</td>
<td><%= format_text(feedback.body) %></td>
</tr>
<% end %>
</tbody>
</table>
<div class="paginator">
<%= numbered_paginator(@user_feedbacks) %>
</div>
<%= render "secondary_links" %>
</div>
</div>

View File

@@ -0,0 +1,17 @@
<div id="c-user-feedbacks">
<div id="a-new">
<h1>New User Feedback</h1>
<div id="preview">
</div>
<%= simple_form_for(@user_feedback) do |f| %>
<%= f.input :user_name %>
<%= f.input :category, :collection => ["positive", "neutral", "negative"] %>
<%= f.input :body %>
<%= f.button :submit %>
<%= f.button :submit, :value => "Preview" %>
<% end %>
</div>
</div>

View File

@@ -0,0 +1,14 @@
<div id="c-user-feedbacks">
<div id="a-show">
<h1>User Feedback For <%= @user_feedback.user_name %></h1>
<ul>
<li><strong>Creator</strong> <%= @user_feedback.creator.name %></li>
<li><strong>Date</strong> <%= @user_feedback.created_at %></li>
<li><strong>Category</strong> <%= @user_feedback.category %></li>
<li><strong>Message</strong> <%= format_text @user_feedback.body %></li>
</ul>
</div>
</div>
<%= render "secondary_links" %>

View File

@@ -2,5 +2,4 @@ ActiveSupport::Inflector.inflections do |inflect|
# inflect.plural /^(ox)$/i, '\1en'
# inflect.singular /^(ox)en/i, '\1'
# inflect.irregular 'person', 'people'
inflect.uncountable %w( user_feedback )
end

View File

@@ -90,7 +90,7 @@ Danbooru::Application.routes.draw do
resources :tag_subscriptions
resources :uploads
resources :users
resources :user_feedback
resources :user_feedbacks
resources :wiki_pages do
member do
put :revert

View File

@@ -2396,7 +2396,7 @@ CREATE TABLE user_feedback (
id integer NOT NULL,
user_id integer NOT NULL,
creator_id integer NOT NULL,
is_positive boolean NOT NULL,
category character varying(255) NOT NULL,
body text NOT NULL,
created_at timestamp without time zone,
updated_at timestamp without time zone

View File

@@ -3,7 +3,7 @@ class CreateUserFeedback < ActiveRecord::Migration
create_table :user_feedback do |t|
t.column :user_id, :integer, :null => false
t.column :creator_id, :integer, :null => false
t.column :is_positive, :boolean, :null => false
t.column :category, :string, :null => false
t.column :body, :text, :null => false
t.timestamps
end

View File

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

View File

@@ -1,7 +1,7 @@
require 'test_helper'
class UserFeedbackControllerTest < ActionController::TestCase
context "The user feedback controller" do
class UserFeedbacksControllerTest < ActionController::TestCase
context "The user feedbacks controller" do
setup do
@user = Factory.create(:user)
@critic = Factory.create(:privileged_user)
@@ -53,7 +53,7 @@ class UserFeedbackControllerTest < ActionController::TestCase
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}
post :create, {:user_feedback => {:category => "positive", :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

View File

@@ -1,60 +0,0 @@
require 'test_helper'
class UserMaintenanceControllerTest < ActionController::TestCase
context "The user maintenance controller" do
setup do
@user = Factory.create(:user)
@blank_email_user = Factory.create(:user, :email => "")
CurrentUser.user = nil
CurrentUser.ip_addr = "127.0.0.1"
ActionMailer::Base.deliveries.clear
end
teardown do
CurrentUser.user = nil
CurrentUser.ip_addr = nil
end
context "login_reminder action" do
should "deliver an email with the login to the user" do
post :login_reminder, {:user => {:email => @user.email}}
assert_equal(flash[:notice], "Email sent")
assert_equal(1, ActionMailer::Base.deliveries.size)
end
context "for a user with a blank email" do
should "fail" do
post :login_reminder, {:user => {:email => ""}}
assert_equal("No matching user record found", flash[:notice])
@blank_email_user.reload
assert_equal(@blank_email_user.created_at, @blank_email_user.updated_at)
assert_equal(0, ActionMailer::Base.deliveries.size)
end
end
end
context "reset_password action" do
setup do
@old_password = @user.password_hash
end
should "reset the user's password and deliver an email to the user" do
post :reset_password, {:user => {:email => @user.email, :name => @user.name}}
assert_equal("Email sent", flash[:notice])
@user.reload
assert_not_equal(@old_password, @user.password)
assert_equal(1, ActionMailer::Base.deliveries.size)
end
context "for a user with a blank email" do
should "fail" do
post :reset_password, {:user => {:email => "", :name => @blank_email_user.name}}
assert_equal("No matching user record found", flash[:notice])
@blank_email_user.reload
assert_equal(@blank_email_user.created_at, @blank_email_user.updated_at)
assert_equal(0, ActionMailer::Base.deliveries.size)
end
end
end
end
end