Commit e17ea8256c7f1c049535a81f2b774fec5e1ce954
1 parent
bf8726a2
Exists in
master
and in
1 other branch
Fix the watcher destroy controller because not work before
Showing
2 changed files
with
36 additions
and
30 deletions
Show diff stats
app/controllers/watchers_controller.rb
| 1 | class WatchersController < ApplicationController | 1 | class WatchersController < ApplicationController |
| 2 | respond_to :html | 2 | respond_to :html |
| 3 | 3 | ||
| 4 | - before_filter :find_watcher, :only => [:destroy] | 4 | + expose(:app) do |
| 5 | + App.find(params[:app_id]) | ||
| 6 | + end | ||
| 7 | + | ||
| 8 | + expose(:watcher) do | ||
| 9 | + app.watchers.where(:user_id => params[:id]).first | ||
| 10 | + end | ||
| 11 | + | ||
| 5 | before_filter :require_watcher_edit_priviledges, :only => [:destroy] | 12 | before_filter :require_watcher_edit_priviledges, :only => [:destroy] |
| 6 | 13 | ||
| 7 | def destroy | 14 | def destroy |
| 8 | - @app.watchers.delete(@watcher) | ||
| 9 | - flash[:success] = "That's sad. #{@watcher.label} is no longer watcher." | 15 | + app.watchers.delete(watcher) |
| 16 | + flash[:success] = "That's sad. #{watcher.label} is no longer watcher." | ||
| 10 | redirect_to root_path | 17 | redirect_to root_path |
| 11 | end | 18 | end |
| 12 | 19 | ||
| 13 | - protected | ||
| 14 | - | ||
| 15 | - def find_watcher | ||
| 16 | - @app = App.find(params[:app_id]) | ||
| 17 | - @watcher = @app.watchers.find(params[:id]) | ||
| 18 | - end | 20 | + private |
| 19 | 21 | ||
| 20 | - def require_watcher_edit_priviledges | ||
| 21 | - can_edit = current_user == @watcher.user || current_user.admin? | ||
| 22 | - redirect_to(root_path) unless can_edit | ||
| 23 | - end | 22 | + def require_watcher_edit_priviledges |
| 23 | + redirect_to(root_path) unless current_user == watcher.user || current_user.admin? | ||
| 24 | + end | ||
| 24 | 25 | ||
| 25 | end | 26 | end |
| 26 | 27 |
spec/controllers/watchers_controller_spec.rb
| 1 | require 'spec_helper' | 1 | require 'spec_helper' |
| 2 | 2 | ||
| 3 | describe WatchersController do | 3 | describe WatchersController do |
| 4 | - let(:app) { Fabricate(:app_with_watcher) } | 4 | + let(:app) do |
| 5 | + a = Fabricate(:app) | ||
| 6 | + Fabricate(:user_watcher, :app => a) | ||
| 7 | + a | ||
| 8 | + end | ||
| 5 | 9 | ||
| 6 | describe "DELETE /apps/:app_id/watchers/:id/destroy" do | 10 | describe "DELETE /apps/:app_id/watchers/:id/destroy" do |
| 7 | - render_views | ||
| 8 | - | ||
| 9 | - before(:each) do | ||
| 10 | - sign_in Fabricate(:admin) | ||
| 11 | - end | ||
| 12 | - | ||
| 13 | - context "successful watcher deletion" do | ||
| 14 | - let(:problem) { Fabricate(:problem_with_comments) } | ||
| 15 | - let(:watcher) { app.watchers.first } | ||
| 16 | 11 | ||
| 12 | + context "with admin user" do | ||
| 17 | before(:each) do | 13 | before(:each) do |
| 18 | - delete :destroy, :app_id => app.id, :id => watcher.id.to_s | ||
| 19 | - problem.reload | 14 | + sign_in Fabricate(:admin) |
| 20 | end | 15 | end |
| 21 | 16 | ||
| 22 | - it "should delete the watcher" do | ||
| 23 | - app.watchers.detect{|w| w.id.to_s == watcher.id }.should == nil | ||
| 24 | - end | 17 | + context "successful watcher deletion" do |
| 18 | + let(:problem) { Fabricate(:problem_with_comments) } | ||
| 19 | + let(:watcher) { app.watchers.first } | ||
| 20 | + | ||
| 21 | + before(:each) do | ||
| 22 | + delete :destroy, :app_id => app.id, :id => watcher.user.id.to_s | ||
| 23 | + problem.reload | ||
| 24 | + end | ||
| 25 | + | ||
| 26 | + it "should delete the watcher" do | ||
| 27 | + app.watchers.detect{|w| w.id.to_s == watcher.id }.should == nil | ||
| 28 | + end | ||
| 25 | 29 | ||
| 26 | - it "should redirect to index page" do | ||
| 27 | - response.should redirect_to(root_path) | 30 | + it "should redirect to index page" do |
| 31 | + response.should redirect_to(root_path) | ||
| 32 | + end | ||
| 28 | end | 33 | end |
| 29 | end | 34 | end |
| 30 | end | 35 | end |