69 lines
2.2 KiB
Ruby
69 lines
2.2 KiB
Ruby
require "test_helper"
|
|
|
|
class Admin::PayoutsControllerTest < ActionDispatch::IntegrationTest
|
|
setup do
|
|
@admin_user = User.create!(email: "admin@example.com", password: "password123", password_confirmation: "password123", is_professionnal: true)
|
|
@admin_user.add_role :admin # Assume role system
|
|
@payout = payouts(:one)
|
|
end
|
|
|
|
test "process payout success for pending payout" do
|
|
sign_in @admin_user
|
|
@payout.update(status: :pending)
|
|
|
|
# Mock service
|
|
PayoutService.any_instance.expects(:process!).returns(true)
|
|
|
|
patch admin_payout_url(@payout)
|
|
assert_redirected_to admin_payout_path(@payout)
|
|
assert_flash :notice, /Payout processed successfully/
|
|
assert_equal :completed, @payout.reload.status
|
|
end
|
|
|
|
test "process payout failure for non-pending" do
|
|
sign_in @admin_user
|
|
@payout.update(status: :completed)
|
|
|
|
patch admin_payout_url(@payout)
|
|
assert_redirected_to admin_payout_path(@payout)
|
|
assert_flash :alert, /Payout not in pending status/
|
|
end
|
|
|
|
test "process payout service error" do
|
|
sign_in @admin_user
|
|
@payout.update(status: :pending)
|
|
|
|
PayoutService.any_instance.expects(:process!).raises(StandardError.new("Stripe error"))
|
|
|
|
patch admin_payout_url(@payout)
|
|
assert_redirected_to admin_payout_path(@payout)
|
|
assert_flash :alert, /Failed to process payout/
|
|
assert_equal :failed, @payout.reload.status
|
|
end
|
|
|
|
test "mark_as_manually_processed updates payout status" do
|
|
sign_in @admin_user
|
|
@payout.update(status: :pending)
|
|
|
|
post mark_as_manually_processed_admin_payout_url(@payout)
|
|
assert_redirected_to admin_payouts_path
|
|
assert_flash :notice, /marked as manually processed/
|
|
assert @payout.reload.completed?
|
|
assert @payout.manual_payout?
|
|
end
|
|
|
|
test "mark_as_manually_processed fails for completed payout" do
|
|
sign_in @admin_user
|
|
@payout.update(status: :completed)
|
|
|
|
post mark_as_manually_processed_admin_payout_url(@payout)
|
|
assert_redirected_to admin_payouts_path
|
|
assert_flash :alert, /Cannot mark this payout as manually processed/
|
|
end
|
|
|
|
test "requires admin authentication" do
|
|
patch admin_payout_url(@payout)
|
|
assert_redirected_to new_user_session_path
|
|
end
|
|
end
|