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:
@@ -367,4 +367,21 @@ class TicketTest < ActiveSupport::TestCase
|
||||
)
|
||||
assert ticket.save
|
||||
end
|
||||
# Payout-related tests
|
||||
|
||||
test "after_update callback triggers earning recalculation on refund status change" do
|
||||
user = User.create!(email: "refund@example.com", password: "password123", password_confirmation: "password123")
|
||||
event = Event.create!(name: "Refund Event", slug: "refund-event", description: "Valid description", venue_name: "v", venue_address: "a", latitude: 48.0, longitude: 2.0, start_time: 1.day.from_now, user: user, state: :published)
|
||||
ticket_type = TicketType.create!(name: "Standard", price_cents: 1000, quantity: 1, sale_start_at: Time.current, sale_end_at: Time.current + 1.day, event: event)
|
||||
order = Order.create!(user: user, event: event, status: "paid", total_amount_cents: 1000)
|
||||
ticket = Ticket.create!(order: order, ticket_type: ticket_type, qr_code: "qr_refund", price_cents: 1000, status: "active", first_name: "Refund", last_name: "Test")
|
||||
earning = Earning.create!(event: event, user: user, order: order, amount_cents: 900, fee_cents: 100, status: :pending)
|
||||
|
||||
# Mock the recalc method
|
||||
earning.expects(:recalculate_on_refund).once
|
||||
|
||||
# Change status to refunded
|
||||
ticket.status = "refunded"
|
||||
ticket.save!
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user