SitePoint Sponsor

User Tag List

Results 1 to 2 of 2
  1. #1
    SitePoint Zealot
    Join Date
    Jul 2004
    Location
    NC
    Posts
    194
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Problems testing a destroy failure

    Hello,
    I'm trying to test an active record object destroy failure but I'm having problems creating a failure situation. I have a before_filter method called 'require_user_payment_info' which validates the @payment_info object before the delete method is called so I can't create a 'bad' @payment_info object before the delete method is called.

    Here's the require_user_payment_info method:

    Code:
      def require_user_payment_info 
        @payment_info = credit_card_model.slave.find_by_user_guid(user_guid)
        if !@payment_info || @payment_info.user_guid != user_guid
          redirect_to(:controller => 'store', :action => 'index') and return false
        else
          if((@payment_info.card_expires_year.to_i < Date.today.year) || 
              ((@payment_info.card_expires_month.to_i < Date.today.month) && (@payment_info.card_expires_year.to_i == Date.today.year)))        
            @payment_info.card_account_public = "" #clear this out so the user is forced to re-enter the credit card number
            @payment_info.valid?        
            flash.now[:error] = t('ui_flash_errors.card_expired_error')
          end
        end
      end

    And the actual delete method:

    Code:
      def delete
        # required to be called via a delete request
        redirect_to :action => 'edit' and return if !request.delete?
        if @payment_info.destroy
          flash[:notice] = "Delete SUCCESSFUL"
          redirect_to :action => 'new'
        else
          flash[:error] = "Delete failed"
          redirect_to :action => 'edit'
        end
    Any ideas?

    Thanks!

  2. #2
    SitePoint Zealot
    Join Date
    Jul 2004
    Location
    NC
    Posts
    194
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Bingo - here's my solution:

    Code:
    def test_unsuccessful_delete
        payment_info = Factory.create(:payment_info, :user_guid=>@user.guid, :card_expires_month=>'04', 
                                        :card_expires_year=>(Date.today.year+2).to_s, :cardholder_city=>"test city",
                                          :cardholder_state=>'NC', :cardholder_country=>'US', :cardholder_zip=>'27612')
        PaymentInfo.any_instance.stubs(:destroy).returns(false)
        
        delete(:delete, {}, @session)
        assert_response(:redirect)
        assert_equal false, assigns(:payment_info).blank?
        assert_redirected_to({:controller=>'account', :action=>'edit'})
        assert_equal flash[:error], "There was an error deleting your credit card information. Please try again."
      end
    Thanks for your help!


Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •