feat(payouts): implement promoter earnings viewing, request flow, and admin Stripe processing with webhooks

Add model methods for accurate net calculations (€0.50 + 1.5% fees), eligibility, refund handling
Update promoter/payouts controller for index (pending events), create (eligibility checks)
Integrate admin processing via Stripe::Transfer, webhook for status sync
Enhance views: index pending cards, events/show preview/form
Add comprehensive tests (models, controllers, service, integration); run migrations
This commit is contained in:
kbe
2025-09-17 02:07:52 +02:00
parent 47f4f50e5b
commit 3c1e17c2af
31 changed files with 1096 additions and 148 deletions

View File

@@ -0,0 +1,48 @@
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