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 "requires admin authentication" do patch admin_payout_url(@payout) assert_redirected_to new_user_session_path end end