diff --git a/app/controllers/errs_controller.rb b/app/controllers/errs_controller.rb index 2df2944..8322e2e 100644 --- a/app/controllers/errs_controller.rb +++ b/app/controllers/errs_controller.rb @@ -11,4 +11,17 @@ class ErrsController < ApplicationController @notice = @notices.first end + def resolve + @project = Project.find(params[:project_id]) + @err = @project.errs.unresolved.find(params[:id]) + + # Deal with bug in mogoid where find is returning an Enumberable obj + @err = @err.first if @err.respond_to?(:first) + + @err.resolve! + + flash[:success] = 'Great news everyone! The error has been resolved.' + redirect_to errs_path + end + end diff --git a/app/models/err.rb b/app/models/err.rb index fc99064..bc177c3 100644 --- a/app/models/err.rb +++ b/app/models/err.rb @@ -25,7 +25,7 @@ class Err end def resolve! - self.update_attributes(:resolved => true) + self.update_attributes!(:resolved => true) end def unresolved? diff --git a/app/views/errs/show.html.haml b/app/views/errs/show.html.haml index d8de650..239c900 100644 --- a/app/views/errs/show.html.haml +++ b/app/views/errs/show.html.haml @@ -13,7 +13,7 @@ .float-left viewing occurrence #{@notices.current_page} of #{@notices.total_pages} = link_to "back to '#{@project.name}'", project_path(@project) | - = link_to 'resolve', '#' if @err.unresolved? + = link_to 'resolve', resolve_project_err_path(@project, @err), :method => :put, :confirm => 'Seriously?' if @err.unresolved? %h3#summary Summary = render 'notices/summary', :notice => @notice diff --git a/config/routes.rb b/config/routes.rb index 6f0d7bd..33815a2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -11,6 +11,9 @@ Hypnotoad::Application.routes.draw do resources :projects do resources :errs do resources :notices + member do + put :resolve + end end end diff --git a/spec/controllers/errs_controller_spec.rb b/spec/controllers/errs_controller_spec.rb index 6becf8f..1107f38 100644 --- a/spec/controllers/errs_controller_spec.rb +++ b/spec/controllers/errs_controller_spec.rb @@ -17,7 +17,7 @@ describe ErrsController do end end - describe "GET /errs/:id" do + describe "GET /projects/:project_id/errs/:id" do before do 3.times { Factory(:notice, :err => err)} end @@ -42,4 +42,38 @@ describe ErrsController do end end + describe "PUT /projects/:project_id/errs/:id/resolve" do + before do + @err = Factory(:err) + Project.stub(:find).with(@err.project.id).and_return(@err.project) + @err.project.errs.stub(:unresolved). + and_return(stub('proxy', :find => @err)) + @err.stub(:resolve!) + end + + it 'finds the project and the err' do + Project.should_receive(:find).with(@err.project.id).and_return(@err.project) + @err.project.errs.should_receive(:unresolved). + and_return(mock('proxy', :find => @err)) + put :resolve, :project_id => @err.project.id, :id => @err.id + assigns(:project).should == @err.project + assigns(:err).should == @err + end + + it "should resolve the issue" do + @err.should_receive(:resolve!).and_return(true) + put :resolve, :project_id => @err.project.id, :id => @err.id + end + + it "should display a message" do + put :resolve, :project_id => @err.project.id, :id => @err.id + request.flash[:success].should match(/Great news/) + end + + it "should redirect do the errs page" do + put :resolve, :project_id => @err.project.id, :id => @err.id + response.should redirect_to(errs_path) + end + end + end diff --git a/spec/models/err_spec.rb b/spec/models/err_spec.rb index a82c2a9..3a8b34a 100644 --- a/spec/models/err_spec.rb +++ b/spec/models/err_spec.rb @@ -82,6 +82,25 @@ describe Err do end end + context "resolve!" do + it "marks the error as resolved" do + err = Factory(:err) + err.should_not be_resolved + err.resolve! + err.should be_resolved + end + + it "should throw an error if it's not successful" do + err = Factory(:err) + err.should_not be_resolved + err.klass = nil + err.should_not be_valid + lambda { + err.resolve! + }.should raise_error(Mongoid::Errors::Validations) + end + end + context "Scopes" do context "resolved" do it 'only finds resolved Errors' do -- libgit2 0.21.2