feat: Implement promoter payout system for event revenue processing

- Add Payout model with associations to User and Event
- Create payout requests for completed events with proper earnings calculation
- Exclude refunded tickets from payout calculations
- Add promoter dashboard views for managing payouts
- Implement admin interface for processing payouts
- Integrate with Stripe for actual payment processing
- Add comprehensive tests for payout functionality

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
kbe
2025-09-17 00:29:20 +02:00
parent 58141dca94
commit 59e1854803
20 changed files with 587 additions and 254 deletions

View File

@@ -1,18 +1,54 @@
require "test_helper"
class Promoter::PayoutsControllerTest < ActionDispatch::IntegrationTest
setup do
@user = users(:one)
@event = events(:concert_event)
@payout = payouts(:one)
end
test "should get index" do
get promoter_payouts_index_url
sign_in @user
# Make the user a promoter
@user.update(is_professionnal: true)
get promoter_payouts_url
assert_response :success
end
test "should get show" do
get promoter_payouts_show_url
sign_in @user
# Make the user a promoter
@user.update(is_professionnal: true)
# Create a payout that belongs to the user
payout = Payout.create!(
user: @user,
event: @event,
amount_cents: 1000,
fee_cents: 100
)
get promoter_payout_url(payout)
assert_response :success
end
test "should get create" do
get promoter_payouts_create_url
assert_response :success
test "should create payout" do
sign_in @user
# Make the user a promoter
@user.update(is_professionnal: true)
# Make the user the owner of the event
@event.update(user: @user)
# Make the event end in the past
@event.update(end_time: 1.day.ago)
# Create some earnings for the event
@event.earnings.create!(
user: @user,
order: orders(:paid_order),
amount_cents: 1000,
fee_cents: 100,
status: :pending
)
assert_difference('Payout.count', 1) do
post promoter_payouts_url, params: { event_id: @event.id }
end
assert_redirected_to promoter_payout_path(Payout.last)
end
end