tarakan/test/support/market_fixtures.ex
Maxfield Luke af6077b9c3
All checks were successful
CI and deploy / Test (push) Successful in 4m52s
CI and deploy / Deploy production (push) Successful in 23s
Initial commit on Forgejo
Fresh repository history for elektrine/tarakan hosted at
https://git.elektrine.com/elektrine/tarakan.
2026-07-29 04:43:40 -04:00

71 lines
2.3 KiB
Elixir

defmodule Tarakan.MarketFixtures do
@moduledoc """
Test helpers for the bounty marketplace.
"""
alias Tarakan.Accounts.Account
alias Tarakan.Accounts.Scope
alias Tarakan.Credits
alias Tarakan.Market
alias Tarakan.Repo
@doc "An account fixture promoted to active standing (bounties require it)."
def active_account_fixture(attrs \\ %{}) do
account = Tarakan.AccountsFixtures.account_fixture(attrs)
account
|> Account.authorization_changeset(%{
state: "active",
platform_role: account.platform_role,
trust_tier: account.trust_tier
})
|> Repo.update!()
end
@doc "Tops up an account's credit balance and returns the fresh account row."
def fund_credits(%Account{} = account, amount) do
{:ok, _entry} = Credits.credit(account, :receive_bounty, nil, amount)
Repo.get!(Account, account.id)
end
def valid_bounty_attributes(repository, overrides \\ %{}) do
Enum.into(overrides, %{
"target_type" => "repository",
"target_ref" => "#{repository.owner}/#{repository.name}",
"title" => "Fix the session auth bypass",
"description" =>
"Reproduce the authorization bypass in the session handler and ship a reviewed fix.",
"funding" => "credits",
"credit_amount" => 500
})
end
@doc "Creates a credits-funded bounty on the given listed repository."
def credits_bounty_fixture(%Scope{} = scope, repository, overrides \\ %{}) do
{:ok, bounty} =
Market.create_bounty(scope, valid_bounty_attributes(repository, overrides))
bounty
end
@doc "Creates a fiat bounty on the given listed repository (Stripe stubbed)."
def fiat_bounty_fixture(%Scope{} = scope, repository, overrides \\ %{}) do
attrs =
repository
|> valid_bounty_attributes(overrides)
|> Map.merge(%{"funding" => "fiat", "amount_cents" => 25_000})
|> Map.delete("credit_amount")
{:ok, bounty, checkout_url} = Market.create_bounty(scope, attrs)
{bounty, checkout_url}
end
@doc "Legacy-prose submission attrs accepted by Work.submit_task/3 in tests."
def submission_attributes do
%{
"provenance" => "human",
"summary" => "Traced the bypass and patched the guard clause.",
"evidence" => "Reproduced locally against the pinned commit; patch and test attached."
}
end
end