style: order module directives per StrictModuleLayout
This commit is contained in:
parent
6e50b91e51
commit
cbd37ecb2c
88 changed files with 225 additions and 155 deletions
|
|
@ -8,7 +8,6 @@ defmodule Mv.Accounts.User do
|
||||||
extensions: [AshAuthentication],
|
extensions: [AshAuthentication],
|
||||||
authorizers: [Ash.Policy.Authorizer]
|
authorizers: [Ash.Policy.Authorizer]
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
import Ash.Expr
|
import Ash.Expr
|
||||||
|
|
||||||
alias Ash.Resource.Preparation.Builtins
|
alias Ash.Resource.Preparation.Builtins
|
||||||
|
|
@ -16,6 +15,8 @@ defmodule Mv.Accounts.User do
|
||||||
alias Mv.Helpers.SystemActor
|
alias Mv.Helpers.SystemActor
|
||||||
alias Mv.OidcRoleSync
|
alias Mv.OidcRoleSync
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
postgres do
|
postgres do
|
||||||
table "users"
|
table "users"
|
||||||
repo Mv.Repo
|
repo Mv.Repo
|
||||||
|
|
|
||||||
|
|
@ -24,12 +24,13 @@ defmodule Mv.Accounts.User.Validations.OidcEmailCollision do
|
||||||
- Allow (new user will be created)
|
- Allow (new user will be created)
|
||||||
"""
|
"""
|
||||||
use Ash.Resource.Validation
|
use Ash.Resource.Validation
|
||||||
require Logger
|
|
||||||
|
|
||||||
alias Mv.Accounts.User
|
alias Mv.Accounts.User
|
||||||
alias Mv.Accounts.User.Errors.PasswordVerificationRequired
|
alias Mv.Accounts.User.Errors.PasswordVerificationRequired
|
||||||
alias Mv.Helpers.SystemActor
|
alias Mv.Helpers.SystemActor
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def init(opts), do: {:ok, opts}
|
def init(opts), do: {:ok, opts}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,10 @@ defmodule Mv.Membership.Email do
|
||||||
@min_length 5
|
@min_length 5
|
||||||
@max_length 254
|
@max_length 254
|
||||||
|
|
||||||
|
# These compile-time constants are referenced by the `use` options below, so
|
||||||
|
# they must be declared first; StrictModuleLayout cannot be satisfied by
|
||||||
|
# reordering here without breaking the macro expansion.
|
||||||
|
# credo:disable-for-next-line Credo.Check.Readability.StrictModuleLayout
|
||||||
use Ash.Type.NewType,
|
use Ash.Type.NewType,
|
||||||
subtype_of: :string,
|
subtype_of: :string,
|
||||||
constraints: [
|
constraints: [
|
||||||
|
|
|
||||||
|
|
@ -39,9 +39,10 @@ defmodule Mv.Membership.Group do
|
||||||
data_layer: AshPostgres.DataLayer,
|
data_layer: AshPostgres.DataLayer,
|
||||||
authorizers: [Ash.Policy.Authorizer]
|
authorizers: [Ash.Policy.Authorizer]
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
alias Mv.Helpers
|
alias Mv.Helpers
|
||||||
alias Mv.Helpers.SystemActor
|
alias Mv.Helpers.SystemActor
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
postgres do
|
postgres do
|
||||||
|
|
|
||||||
|
|
@ -37,9 +37,9 @@ defmodule Mv.Membership.Member do
|
||||||
data_layer: AshPostgres.DataLayer,
|
data_layer: AshPostgres.DataLayer,
|
||||||
authorizers: [Ash.Policy.Authorizer]
|
authorizers: [Ash.Policy.Authorizer]
|
||||||
|
|
||||||
import Bitwise
|
|
||||||
require Ash.Query
|
|
||||||
import Ash.Expr
|
import Ash.Expr
|
||||||
|
import Bitwise
|
||||||
|
|
||||||
alias Ecto.Adapters.SQL, as: EctoSQL
|
alias Ecto.Adapters.SQL, as: EctoSQL
|
||||||
alias Mv.Helpers
|
alias Mv.Helpers
|
||||||
alias Mv.Helpers.SystemActor
|
alias Mv.Helpers.SystemActor
|
||||||
|
|
@ -49,6 +49,7 @@ defmodule Mv.Membership.Member do
|
||||||
alias Mv.MembershipFees.MembershipFeeCycle
|
alias Mv.MembershipFees.MembershipFeeCycle
|
||||||
alias Mv.Repo
|
alias Mv.Repo
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
@typedoc "An `Mv.Membership.Member` resource record."
|
@typedoc "An `Mv.Membership.Member` resource record."
|
||||||
|
|
|
||||||
|
|
@ -26,13 +26,15 @@ defmodule Mv.Membership do
|
||||||
use Ash.Domain,
|
use Ash.Domain,
|
||||||
extensions: [AshAdmin.Domain, AshPhoenix]
|
extensions: [AshAdmin.Domain, AshPhoenix]
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
import Ash.Expr
|
import Ash.Expr
|
||||||
|
|
||||||
alias Ash.Error.Query.NotFound, as: NotFoundError
|
alias Ash.Error.Query.NotFound, as: NotFoundError
|
||||||
alias Mv.Helpers.SystemActor
|
alias Mv.Helpers.SystemActor
|
||||||
alias Mv.Membership.JoinRequest
|
alias Mv.Membership.JoinRequest
|
||||||
alias Mv.Membership.Member
|
alias Mv.Membership.Member
|
||||||
alias Mv.Membership.SettingsCache
|
alias Mv.Membership.SettingsCache
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
admin do
|
admin do
|
||||||
|
|
|
||||||
|
|
@ -65,12 +65,12 @@ defmodule Mv.Membership.Setting do
|
||||||
data_layer: AshPostgres.DataLayer,
|
data_layer: AshPostgres.DataLayer,
|
||||||
primary_read_warning?: false
|
primary_read_warning?: false
|
||||||
|
|
||||||
|
alias Ash.Resource.Info, as: ResourceInfo
|
||||||
|
|
||||||
# Used in join_form_field_ids validation (compile-time to avoid recompiling regex and list on every validation)
|
# Used in join_form_field_ids validation (compile-time to avoid recompiling regex and list on every validation)
|
||||||
@uuid_pattern ~r/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i
|
@uuid_pattern ~r/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i
|
||||||
@valid_join_form_member_fields Mv.Constants.member_fields() |> Enum.map(&Atom.to_string/1)
|
@valid_join_form_member_fields Mv.Constants.member_fields() |> Enum.map(&Atom.to_string/1)
|
||||||
|
|
||||||
alias Ash.Resource.Info, as: ResourceInfo
|
|
||||||
|
|
||||||
postgres do
|
postgres do
|
||||||
table "settings"
|
table "settings"
|
||||||
repo Mv.Repo
|
repo Mv.Repo
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
defmodule Mix.Tasks.JoinRequests.CleanupExpired do
|
defmodule Mix.Tasks.JoinRequests.CleanupExpired do
|
||||||
|
@shortdoc "Deletes join requests in pending_confirmation with expired confirmation token"
|
||||||
@moduledoc """
|
@moduledoc """
|
||||||
Hard-deletes JoinRequests in status `pending_confirmation` whose confirmation link has expired.
|
Hard-deletes JoinRequests in status `pending_confirmation` whose confirmation link has expired.
|
||||||
|
|
||||||
|
|
@ -16,12 +17,10 @@ defmodule Mix.Tasks.JoinRequests.CleanupExpired do
|
||||||
"""
|
"""
|
||||||
use Mix.Task
|
use Mix.Task
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
require Logger
|
|
||||||
|
|
||||||
alias Mv.Membership.JoinRequest
|
alias Mv.Membership.JoinRequest
|
||||||
|
|
||||||
@shortdoc "Deletes join requests in pending_confirmation with expired confirmation token"
|
require Ash.Query
|
||||||
|
require Logger
|
||||||
|
|
||||||
@impl Mix.Task
|
@impl Mix.Task
|
||||||
def run(_args) do
|
def run(_args) do
|
||||||
|
|
|
||||||
|
|
@ -13,13 +13,14 @@ defmodule Mv.Accounts.User.Senders.SendNewUserConfirmationEmail do
|
||||||
layout: {MvWeb.EmailLayoutView, "layout.html"}
|
layout: {MvWeb.EmailLayoutView, "layout.html"}
|
||||||
|
|
||||||
use MvWeb, :verified_routes
|
use MvWeb, :verified_routes
|
||||||
import Swoosh.Email
|
|
||||||
use Gettext, backend: MvWeb.Gettext, otp_app: :mv
|
use Gettext, backend: MvWeb.Gettext, otp_app: :mv
|
||||||
|
|
||||||
require Logger
|
import Swoosh.Email
|
||||||
|
|
||||||
alias Mv.Mailer
|
alias Mv.Mailer
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Sends a confirmation email to a new user.
|
Sends a confirmation email to a new user.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,13 +13,14 @@ defmodule Mv.Accounts.User.Senders.SendPasswordResetEmail do
|
||||||
layout: {MvWeb.EmailLayoutView, "layout.html"}
|
layout: {MvWeb.EmailLayoutView, "layout.html"}
|
||||||
|
|
||||||
use MvWeb, :verified_routes
|
use MvWeb, :verified_routes
|
||||||
import Swoosh.Email
|
|
||||||
use Gettext, backend: MvWeb.Gettext, otp_app: :mv
|
use Gettext, backend: MvWeb.Gettext, otp_app: :mv
|
||||||
|
|
||||||
require Logger
|
import Swoosh.Email
|
||||||
|
|
||||||
alias Mv.Mailer
|
alias Mv.Mailer
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Sends a password reset email to a user.
|
Sends a password reset email to a user.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,10 +49,10 @@ defmodule Mv.Authorization.Actor do
|
||||||
adds complexity and potential for inconsistency.
|
adds complexity and potential for inconsistency.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
require Logger
|
|
||||||
|
|
||||||
alias Mv.Helpers.SystemActor
|
alias Mv.Helpers.SystemActor
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Ensures the actor (User) has their `:role` relationship loaded.
|
Ensures the actor (User) has their `:role` relationship loaded.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -79,10 +79,13 @@ defmodule Mv.Authorization.Checks.HasPermission do
|
||||||
"""
|
"""
|
||||||
|
|
||||||
use Ash.Policy.Check
|
use Ash.Policy.Check
|
||||||
require Ash.Query
|
|
||||||
import Ash.Expr
|
import Ash.Expr
|
||||||
|
|
||||||
alias Mv.Authorization.Actor
|
alias Mv.Authorization.Actor
|
||||||
alias Mv.Authorization.PermissionSets
|
alias Mv.Authorization.PermissionSets
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,10 @@ defmodule Mv.EmailSync.Helpers do
|
||||||
provides clean abstractions for email updates within transactions.
|
provides clean abstractions for email updates within transactions.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
require Logger
|
|
||||||
import Ecto.Changeset
|
import Ecto.Changeset
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Extracts the record from an Ash action result.
|
Extracts the record from an Ash action result.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,10 +48,10 @@ defmodule Mv.Helpers.SystemActor do
|
||||||
|
|
||||||
use Agent
|
use Agent
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Config
|
alias Mv.Config
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Starts the SystemActor Agent.
|
Starts the SystemActor Agent.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,11 +27,12 @@ defmodule Mv.Mailer do
|
||||||
ENV takes priority over Settings (same pattern as OIDC and Vereinfacht).
|
ENV takes priority over Settings (same pattern as OIDC and Vereinfacht).
|
||||||
"""
|
"""
|
||||||
use Swoosh.Mailer, otp_app: :mv
|
use Swoosh.Mailer, otp_app: :mv
|
||||||
|
|
||||||
import Swoosh.Email
|
|
||||||
use Gettext, backend: MvWeb.Gettext, otp_app: :mv
|
use Gettext, backend: MvWeb.Gettext, otp_app: :mv
|
||||||
|
|
||||||
|
import Swoosh.Email
|
||||||
|
|
||||||
alias Mv.Smtp.ConfigBuilder
|
alias Mv.Smtp.ConfigBuilder
|
||||||
|
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
# Simple format check for test-email recipient only (e.g. allows a@b.c). Not for strict RFC validation.
|
# Simple format check for test-email recipient only (e.g. allows a@b.c). Not for strict RFC validation.
|
||||||
|
|
|
||||||
|
|
@ -15,10 +15,10 @@ defmodule Mv.Membership.Import.ColumnResolver do
|
||||||
This module has no Phoenix or web dependencies.
|
This module has no Phoenix or web dependencies.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
require Logger
|
|
||||||
|
|
||||||
alias Mv.Membership.Import.HeaderMapper
|
alias Mv.Membership.Import.HeaderMapper
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
@preview_row_limit 3
|
@preview_row_limit 3
|
||||||
|
|
||||||
@type numbered_row :: {pos_integer(), [String.t()]}
|
@type numbered_row :: {pos_integer(), [String.t()]}
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,14 @@ defmodule Mv.Membership.Import.MemberCSV do
|
||||||
MemberCSV.process_chunk(chunk, import_state.column_map, import_state.custom_field_map, [])
|
MemberCSV.process_chunk(chunk, import_state.column_map, import_state.custom_field_map, [])
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
alias Mv.Helpers.SystemActor
|
||||||
|
alias Mv.Membership.Import.ColumnResolver
|
||||||
|
alias Mv.Membership.Import.CsvParser
|
||||||
|
alias Mv.Membership.Import.HeaderMapper
|
||||||
|
alias MvWeb.Translations.FieldTypes
|
||||||
|
|
||||||
defmodule Error do
|
defmodule Error do
|
||||||
@moduledoc """
|
@moduledoc """
|
||||||
Error struct for CSV import errors.
|
Error struct for CSV import errors.
|
||||||
|
|
@ -101,17 +109,6 @@ defmodule Mv.Membership.Import.MemberCSV do
|
||||||
groups_found: list(Mv.Membership.Group.t() | %{id: String.t(), name: String.t()})
|
groups_found: list(Mv.Membership.Group.t() | %{id: String.t(), name: String.t()})
|
||||||
}
|
}
|
||||||
|
|
||||||
alias Mv.Membership.Import.ColumnResolver
|
|
||||||
alias Mv.Membership.Import.CsvParser
|
|
||||||
alias Mv.Membership.Import.HeaderMapper
|
|
||||||
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
|
||||||
|
|
||||||
alias Mv.Helpers.SystemActor
|
|
||||||
|
|
||||||
# Import FieldTypes for human-readable type labels
|
|
||||||
alias MvWeb.Translations.FieldTypes
|
|
||||||
|
|
||||||
# Configuration constants
|
# Configuration constants
|
||||||
@default_max_errors 50
|
@default_max_errors 50
|
||||||
@default_chunk_size 200
|
@default_chunk_size 200
|
||||||
|
|
|
||||||
|
|
@ -17,13 +17,14 @@ defmodule Mv.Membership.MemberExport.Build do
|
||||||
No translations/Gettext in this module - labels come from the web layer via a function.
|
No translations/Gettext in this module - labels come from the web layer via a function.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
import Ash.Expr
|
import Ash.Expr
|
||||||
|
|
||||||
alias Mv.Membership.{CustomField, CustomFieldValueFormatter, Member, MemberExportSort}
|
alias Mv.Membership.{CustomField, CustomFieldValueFormatter, Member, MemberExportSort}
|
||||||
alias MvWeb.MemberLive.Index
|
alias MvWeb.MemberLive.Index
|
||||||
alias MvWeb.MemberLive.Index.MembershipFeeStatus
|
alias MvWeb.MemberLive.Index.MembershipFeeStatus
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
@custom_field_prefix Mv.Constants.custom_field_prefix()
|
@custom_field_prefix Mv.Constants.custom_field_prefix()
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
|
|
|
||||||
|
|
@ -12,12 +12,12 @@ defmodule Mv.Membership.MembersPDF do
|
||||||
to avoid symlink issues and ensure isolation.
|
to avoid symlink issues and ensure isolation.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
require Logger
|
|
||||||
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
alias Mv.Config
|
alias Mv.Config
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
@template_filename "members_export.typ"
|
@template_filename "members_export.typ"
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,4 @@
|
||||||
defmodule Mv.MembershipFees.CycleGenerator do
|
defmodule Mv.MembershipFees.CycleGenerator do
|
||||||
@typedoc "Aggregate counts returned by a batch cycle-generation run."
|
|
||||||
@type results_summary :: %{
|
|
||||||
success: non_neg_integer(),
|
|
||||||
failed: non_neg_integer(),
|
|
||||||
total: non_neg_integer()
|
|
||||||
}
|
|
||||||
|
|
||||||
@moduledoc """
|
@moduledoc """
|
||||||
Module for generating membership fee cycles for members.
|
Module for generating membership fee cycles for members.
|
||||||
|
|
||||||
|
|
@ -66,6 +59,13 @@ defmodule Mv.MembershipFees.CycleGenerator do
|
||||||
require Ash.Query
|
require Ash.Query
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
|
@typedoc "Aggregate counts returned by a batch cycle-generation run."
|
||||||
|
@type results_summary :: %{
|
||||||
|
success: non_neg_integer(),
|
||||||
|
failed: non_neg_integer(),
|
||||||
|
total: non_neg_integer()
|
||||||
|
}
|
||||||
|
|
||||||
@type generate_result ::
|
@type generate_result ::
|
||||||
{:ok, [MembershipFeeCycle.t()], [Ash.Notifier.Notification.t()]} | {:error, term()}
|
{:ok, [MembershipFeeCycle.t()], [Ash.Notifier.Notification.t()]} | {:error, term()}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,6 @@ defmodule Mv.Release do
|
||||||
or ADMIN_PASSWORD_FILE). Idempotent; can be run on every deployment or via shell
|
or ADMIN_PASSWORD_FILE). Idempotent; can be run on every deployment or via shell
|
||||||
to update the admin password without redeploying.
|
to update the admin password without redeploying.
|
||||||
"""
|
"""
|
||||||
@app :mv
|
|
||||||
|
|
||||||
alias Mv.Accounts
|
alias Mv.Accounts
|
||||||
alias Mv.Accounts.User
|
alias Mv.Accounts.User
|
||||||
alias Mv.Authorization.Role
|
alias Mv.Authorization.Role
|
||||||
|
|
@ -21,6 +19,8 @@ defmodule Mv.Release do
|
||||||
require Ash.Query
|
require Ash.Query
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
|
@app :mv
|
||||||
|
|
||||||
def migrate do
|
def migrate do
|
||||||
_ = load_app()
|
_ = load_app()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,15 +7,15 @@ defmodule Mv.Statistics do
|
||||||
to Ash reads so that policies are enforced.
|
to Ash reads so that policies are enforced.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
import Ash.Expr
|
import Ash.Expr
|
||||||
|
|
||||||
require Logger
|
|
||||||
|
|
||||||
alias Mv.Membership.Member
|
alias Mv.Membership.Member
|
||||||
alias Mv.MembershipFees
|
alias Mv.MembershipFees
|
||||||
alias Mv.MembershipFees.MembershipFeeCycle
|
alias Mv.MembershipFees.MembershipFeeCycle
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
require Logger
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Returns the earliest year in which any member has a join_date.
|
Returns the earliest year in which any member has a join_date.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,10 @@ defmodule Mv.Vereinfacht.Changes.SyncLinkedMemberAfterUserChange do
|
||||||
"""
|
"""
|
||||||
use Ash.Resource.Change
|
use Ash.Resource.Change
|
||||||
|
|
||||||
require Logger
|
|
||||||
alias Mv.EmailSync.Loader
|
alias Mv.EmailSync.Loader
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def change(changeset, _opts, _context) do
|
def change(changeset, _opts, _context) do
|
||||||
if Mv.Config.vereinfacht_configured?() and relevant_change?(changeset) do
|
if Mv.Config.vereinfacht_configured?() and relevant_change?(changeset) do
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,15 @@ defmodule Mv.Vereinfacht do
|
||||||
the linked member's email via Ecto (e.g. user email change).
|
the linked member's email via Ecto (e.g. user email change).
|
||||||
- `sync_members_without_contact/0` – Bulk sync of members without a contact ID.
|
- `sync_members_without_contact/0` – Bulk sync of members without a contact ID.
|
||||||
"""
|
"""
|
||||||
require Ash.Query
|
|
||||||
import Ash.Expr
|
import Ash.Expr
|
||||||
|
|
||||||
alias Mv.Helpers
|
alias Mv.Helpers
|
||||||
alias Mv.Helpers.SystemActor
|
alias Mv.Helpers.SystemActor
|
||||||
alias Mv.Membership.Member
|
alias Mv.Membership.Member
|
||||||
alias Mv.Vereinfacht.Client
|
alias Mv.Vereinfacht.Client
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Tests the connection to the Vereinfacht API using the current configuration.
|
Tests the connection to the Vereinfacht API using the current configuration.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,10 @@ defmodule MvWeb.TableComponents do
|
||||||
TableComponents that can be used in tables as components (like a button for sorting, a filter...)
|
TableComponents that can be used in tables as components (like a button for sorting, a filter...)
|
||||||
"""
|
"""
|
||||||
use Phoenix.Component
|
use Phoenix.Component
|
||||||
import MvWeb.CoreComponents
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import MvWeb.CoreComponents
|
||||||
|
|
||||||
attr :field, :atom, required: true
|
attr :field, :atom, required: true
|
||||||
attr :label, :string, required: true
|
attr :label, :string, required: true
|
||||||
attr :sort_field, :atom, default: nil
|
attr :sort_field, :atom, default: nil
|
||||||
|
|
|
||||||
|
|
@ -13,12 +13,12 @@ defmodule MvWeb.ImportTemplateController do
|
||||||
"""
|
"""
|
||||||
use MvWeb, :controller
|
use MvWeb, :controller
|
||||||
|
|
||||||
|
import MvWeb.ControllerHelpers, only: [current_actor: 1]
|
||||||
|
|
||||||
alias Mv.Membership.Member
|
alias Mv.Membership.Member
|
||||||
alias Mv.Membership.MembersCSV
|
alias Mv.Membership.MembersCSV
|
||||||
alias MvWeb.Authorization
|
alias MvWeb.Authorization
|
||||||
|
|
||||||
import MvWeb.ControllerHelpers, only: [current_actor: 1]
|
|
||||||
|
|
||||||
# Standard member columns in template order, with their English and German headers
|
# Standard member columns in template order, with their English and German headers
|
||||||
# and a placeholder example value. Groups and fee type are importable extras.
|
# and a placeholder example value. Groups and fee type are importable extras.
|
||||||
@columns [
|
@columns [
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,10 @@ defmodule MvWeb.MemberExportController do
|
||||||
Same permission and actor context as the member overview; 403 if unauthorized.
|
Same permission and actor context as the member overview; 403 if unauthorized.
|
||||||
"""
|
"""
|
||||||
use MvWeb, :controller
|
use MvWeb, :controller
|
||||||
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
import Ash.Expr
|
import Ash.Expr
|
||||||
|
import MvWeb.ControllerHelpers, only: [current_actor: 1]
|
||||||
|
|
||||||
alias Mv.Membership.CustomField
|
alias Mv.Membership.CustomField
|
||||||
alias Mv.Membership.CustomFieldSort
|
alias Mv.Membership.CustomFieldSort
|
||||||
|
|
@ -18,8 +19,7 @@ defmodule MvWeb.MemberExportController do
|
||||||
alias MvWeb.MemberLive.Index.MembershipFeeStatus
|
alias MvWeb.MemberLive.Index.MembershipFeeStatus
|
||||||
alias MvWeb.Translations.MemberFields
|
alias MvWeb.Translations.MemberFields
|
||||||
|
|
||||||
import MvWeb.ControllerHelpers, only: [current_actor: 1]
|
require Ash.Query
|
||||||
use Gettext, backend: MvWeb.Gettext
|
|
||||||
|
|
||||||
@member_fields_allowlist (Mv.Constants.member_fields() |> Enum.map(&Atom.to_string/1)) ++
|
@member_fields_allowlist (Mv.Constants.member_fields() |> Enum.map(&Atom.to_string/1)) ++
|
||||||
["membership_fee_type", "groups"]
|
["membership_fee_type", "groups"]
|
||||||
|
|
|
||||||
|
|
@ -7,15 +7,14 @@ defmodule MvWeb.MemberPdfExportController do
|
||||||
"""
|
"""
|
||||||
|
|
||||||
use MvWeb, :controller
|
use MvWeb, :controller
|
||||||
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
require Logger
|
import MvWeb.ControllerHelpers, only: [current_actor: 1]
|
||||||
|
|
||||||
alias Mv.Membership.{MemberExport, MemberExport.Build, MembersPDF}
|
alias Mv.Membership.{MemberExport, MemberExport.Build, MembersPDF}
|
||||||
alias MvWeb.Translations.MemberFields
|
alias MvWeb.Translations.MemberFields
|
||||||
|
|
||||||
import MvWeb.ControllerHelpers, only: [current_actor: 1]
|
require Logger
|
||||||
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
|
||||||
|
|
||||||
@payload_required_message "payload required"
|
@payload_required_message "payload required"
|
||||||
@invalid_json_message "invalid JSON"
|
@invalid_json_message "invalid JSON"
|
||||||
|
|
|
||||||
|
|
@ -15,13 +15,14 @@ defmodule MvWeb.LinkOidcAccountLive do
|
||||||
6. User is redirected to complete OIDC login
|
6. User is redirected to complete OIDC login
|
||||||
"""
|
"""
|
||||||
use MvWeb, :live_view
|
use MvWeb, :live_view
|
||||||
require Ash.Query
|
|
||||||
require Logger
|
|
||||||
|
|
||||||
alias AshAuthentication.Strategy.Password.Actions, as: PasswordActions
|
alias AshAuthentication.Strategy.Password.Actions, as: PasswordActions
|
||||||
alias Mv.Accounts.User, as: UserResource
|
alias Mv.Accounts.User, as: UserResource
|
||||||
alias Mv.Helpers.SystemActor
|
alias Mv.Helpers.SystemActor
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
require Logger
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(_params, session, socket) do
|
def mount(_params, session, socket) do
|
||||||
# Use SystemActor for authorization during OIDC linking (user is not yet logged in)
|
# Use SystemActor for authorization during OIDC linking (user is not yet logged in)
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,6 @@ defmodule MvWeb.GlobalSettingsLive do
|
||||||
"""
|
"""
|
||||||
use MvWeb, :live_view
|
use MvWeb, :live_view
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
import Ash.Expr
|
import Ash.Expr
|
||||||
|
|
||||||
alias Mv.Helpers
|
alias Mv.Helpers
|
||||||
|
|
@ -44,6 +43,8 @@ defmodule MvWeb.GlobalSettingsLive do
|
||||||
alias MvWeb.Helpers.MemberHelpers
|
alias MvWeb.Helpers.MemberHelpers
|
||||||
alias MvWeb.Translations.MemberFields
|
alias MvWeb.Translations.MemberFields
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
on_mount {MvWeb.LiveHelpers, :ensure_user_role_loaded}
|
on_mount {MvWeb.LiveHelpers, :ensure_user_role_loaded}
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
|
|
|
||||||
|
|
@ -15,16 +15,16 @@ defmodule MvWeb.GroupLive.Show do
|
||||||
"""
|
"""
|
||||||
use MvWeb, :live_view
|
use MvWeb, :live_view
|
||||||
|
|
||||||
require Logger
|
|
||||||
|
|
||||||
import Ash.Expr
|
import Ash.Expr
|
||||||
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
|
||||||
import MvWeb.Authorization
|
import MvWeb.Authorization
|
||||||
|
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
||||||
|
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
alias MvWeb.Helpers.MemberHelpers, as: MemberHelpers
|
alias MvWeb.Helpers.MemberHelpers, as: MemberHelpers
|
||||||
alias MvWeb.Live.MemberDropdownNav
|
alias MvWeb.Live.MemberDropdownNav
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(_params, _session, socket) do
|
def mount(_params, _session, socket) do
|
||||||
{:ok,
|
{:ok,
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,13 @@ defmodule MvWeb.ImportLive.Components do
|
||||||
use Phoenix.Component
|
use Phoenix.Component
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
import MvWeb.CoreComponents
|
|
||||||
|
|
||||||
use Phoenix.VerifiedRoutes,
|
use Phoenix.VerifiedRoutes,
|
||||||
endpoint: MvWeb.Endpoint,
|
endpoint: MvWeb.Endpoint,
|
||||||
router: MvWeb.Router,
|
router: MvWeb.Router,
|
||||||
statics: MvWeb.static_paths()
|
statics: MvWeb.static_paths()
|
||||||
|
|
||||||
|
import MvWeb.CoreComponents
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Renders the info box explaining that data fields must exist before import
|
Renders the info box explaining that data fields must exist before import
|
||||||
and linking to Manage Member Data (custom fields).
|
and linking to Manage Member Data (custom fields).
|
||||||
|
|
|
||||||
|
|
@ -13,15 +13,15 @@ defmodule MvWeb.JoinRequestLive.Index do
|
||||||
"""
|
"""
|
||||||
use MvWeb, :live_view
|
use MvWeb, :live_view
|
||||||
|
|
||||||
require Logger
|
|
||||||
|
|
||||||
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
|
||||||
import MvWeb.Authorization
|
import MvWeb.Authorization
|
||||||
|
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
||||||
|
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
alias MvWeb.Helpers.DateFormatter
|
alias MvWeb.Helpers.DateFormatter
|
||||||
alias MvWeb.JoinRequestLive.Helpers, as: JoinRequestHelpers
|
alias MvWeb.JoinRequestLive.Helpers, as: JoinRequestHelpers
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(_params, _session, socket) do
|
def mount(_params, _session, socket) do
|
||||||
actor = current_actor(socket)
|
actor = current_actor(socket)
|
||||||
|
|
|
||||||
|
|
@ -14,10 +14,8 @@ defmodule MvWeb.JoinRequestLive.Show do
|
||||||
"""
|
"""
|
||||||
use MvWeb, :live_view
|
use MvWeb, :live_view
|
||||||
|
|
||||||
require Logger
|
|
||||||
|
|
||||||
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
|
||||||
import MvWeb.Authorization
|
import MvWeb.Authorization
|
||||||
|
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
||||||
|
|
||||||
alias Mv.Constants
|
alias Mv.Constants
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
@ -26,6 +24,8 @@ defmodule MvWeb.JoinRequestLive.Show do
|
||||||
alias MvWeb.JoinRequestLive.Helpers, as: JoinRequestHelpers
|
alias MvWeb.JoinRequestLive.Helpers, as: JoinRequestHelpers
|
||||||
alias MvWeb.Translations.MemberFields, as: MemberFieldsTranslations
|
alias MvWeb.Translations.MemberFields, as: MemberFieldsTranslations
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(_params, _session, socket) do
|
def mount(_params, _session, socket) do
|
||||||
if Membership.join_form_enabled?() do
|
if Membership.join_form_enabled?() do
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@ defmodule MvWeb.MemberLive.Form do
|
||||||
"""
|
"""
|
||||||
use MvWeb, :live_view
|
use MvWeb, :live_view
|
||||||
|
|
||||||
require Logger
|
|
||||||
import MvWeb.LiveHelpers, only: [current_actor: 1, submit_form: 3]
|
import MvWeb.LiveHelpers, only: [current_actor: 1, submit_form: 3]
|
||||||
|
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
@ -32,6 +31,8 @@ defmodule MvWeb.MemberLive.Form do
|
||||||
alias MvWeb.Helpers.MemberHelpers
|
alias MvWeb.Helpers.MemberHelpers
|
||||||
alias MvWeb.Helpers.MembershipFeeHelpers
|
alias MvWeb.Helpers.MembershipFeeHelpers
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def render(assigns) do
|
def render(assigns) do
|
||||||
# Sort custom fields by name for display only
|
# Sort custom fields by name for display only
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,6 @@ defmodule MvWeb.MemberLive.Index do
|
||||||
"""
|
"""
|
||||||
use MvWeb, :live_view
|
use MvWeb, :live_view
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
require Logger
|
|
||||||
import Ash.Expr
|
import Ash.Expr
|
||||||
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
||||||
|
|
||||||
|
|
@ -45,6 +43,9 @@ defmodule MvWeb.MemberLive.Index do
|
||||||
alias MvWeb.MemberLive.Index.Formatter
|
alias MvWeb.MemberLive.Index.Formatter
|
||||||
alias MvWeb.MemberLive.Index.MembershipFeeStatus
|
alias MvWeb.MemberLive.Index.MembershipFeeStatus
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
require Logger
|
||||||
|
|
||||||
@custom_field_prefix Mv.Constants.custom_field_prefix()
|
@custom_field_prefix Mv.Constants.custom_field_prefix()
|
||||||
@boolean_filter_prefix Mv.Constants.boolean_filter_prefix()
|
@boolean_filter_prefix Mv.Constants.boolean_filter_prefix()
|
||||||
@group_filter_prefix Mv.Constants.group_filter_prefix()
|
@group_filter_prefix Mv.Constants.group_filter_prefix()
|
||||||
|
|
|
||||||
|
|
@ -28,12 +28,13 @@ defmodule MvWeb.MemberLive.Index.DateFilter do
|
||||||
`exit_date IS NULL OR exit_date > today` — a member who left today is hidden.
|
`exit_date IS NULL OR exit_date > today` — a member who left today is hidden.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
import Ash.Expr
|
import Ash.Expr
|
||||||
|
|
||||||
alias MvWeb.MemberLive.Index.CustomFieldValueLookup
|
alias MvWeb.MemberLive.Index.CustomFieldValueLookup
|
||||||
alias MvWeb.MemberLive.Index.FilterParams
|
alias MvWeb.MemberLive.Index.FilterParams
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
@join_date_from_param Mv.Constants.join_date_from_param()
|
@join_date_from_param Mv.Constants.join_date_from_param()
|
||||||
@join_date_to_param Mv.Constants.join_date_to_param()
|
@join_date_to_param Mv.Constants.join_date_to_param()
|
||||||
@exit_date_mode_param Mv.Constants.exit_date_mode_param()
|
@exit_date_mode_param Mv.Constants.exit_date_mode_param()
|
||||||
|
|
|
||||||
|
|
@ -12,10 +12,9 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
|
||||||
"""
|
"""
|
||||||
use MvWeb, :live_component
|
use MvWeb, :live_component
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
|
||||||
import MvWeb.Authorization, only: [can?: 3]
|
import MvWeb.Authorization, only: [can?: 3]
|
||||||
import MvWeb.Helpers.AshErrorHelpers, only: [format_error: 1]
|
import MvWeb.Helpers.AshErrorHelpers, only: [format_error: 1]
|
||||||
|
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
||||||
|
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
alias Mv.MembershipFees
|
alias Mv.MembershipFees
|
||||||
|
|
@ -25,6 +24,8 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
|
||||||
alias Mv.MembershipFees.MembershipFeeType
|
alias Mv.MembershipFees.MembershipFeeType
|
||||||
alias MvWeb.Helpers.MembershipFeeHelpers
|
alias MvWeb.Helpers.MembershipFeeHelpers
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def render(assigns) do
|
def render(assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,6 @@ defmodule MvWeb.MembershipFeeSettingsLive do
|
||||||
"""
|
"""
|
||||||
use MvWeb, :live_view
|
use MvWeb, :live_view
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
||||||
|
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
@ -18,6 +16,8 @@ defmodule MvWeb.MembershipFeeSettingsLive do
|
||||||
alias Mv.MembershipFees.MembershipFeeType
|
alias Mv.MembershipFees.MembershipFeeType
|
||||||
alias MvWeb.Helpers.MembershipFeeHelpers
|
alias MvWeb.Helpers.MembershipFeeHelpers
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(_params, _session, socket) do
|
def mount(_params, _session, socket) do
|
||||||
actor = current_actor(socket)
|
actor = current_actor(socket)
|
||||||
|
|
|
||||||
|
|
@ -15,13 +15,13 @@ defmodule MvWeb.MembershipFeeTypeLive.Form do
|
||||||
|
|
||||||
import MvWeb.LiveHelpers, only: [current_actor: 1, submit_form: 3]
|
import MvWeb.LiveHelpers, only: [current_actor: 1, submit_form: 3]
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Membership.Member
|
alias Mv.Membership.Member
|
||||||
alias Mv.MembershipFees
|
alias Mv.MembershipFees
|
||||||
alias Mv.MembershipFees.MembershipFeeType
|
alias Mv.MembershipFees.MembershipFeeType
|
||||||
alias MvWeb.Helpers.MembershipFeeHelpers
|
alias MvWeb.Helpers.MembershipFeeHelpers
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def render(assigns) do
|
def render(assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
|
|
|
||||||
|
|
@ -16,14 +16,14 @@ defmodule MvWeb.MembershipFeeTypeLive.Index do
|
||||||
|
|
||||||
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
alias Mv.Membership.Member
|
alias Mv.Membership.Member
|
||||||
alias Mv.MembershipFees
|
alias Mv.MembershipFees
|
||||||
alias Mv.MembershipFees.MembershipFeeType
|
alias Mv.MembershipFees.MembershipFeeType
|
||||||
alias MvWeb.Helpers.MembershipFeeHelpers
|
alias MvWeb.Helpers.MembershipFeeHelpers
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(_params, _session, socket) do
|
def mount(_params, _session, socket) do
|
||||||
actor = current_actor(socket)
|
actor = current_actor(socket)
|
||||||
|
|
|
||||||
|
|
@ -13,10 +13,10 @@ defmodule MvWeb.RoleLive.Form do
|
||||||
"""
|
"""
|
||||||
use MvWeb, :live_view
|
use MvWeb, :live_view
|
||||||
|
|
||||||
alias Mv.Authorization.PermissionSets
|
|
||||||
|
|
||||||
import MvWeb.RoleLive.Helpers, only: [format_error: 1]
|
import MvWeb.RoleLive.Helpers, only: [format_error: 1]
|
||||||
|
|
||||||
|
alias Mv.Authorization.PermissionSets
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def render(assigns) do
|
def render(assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
|
|
|
||||||
|
|
@ -13,13 +13,13 @@ defmodule MvWeb.RoleLive.Index do
|
||||||
"""
|
"""
|
||||||
use MvWeb, :live_view
|
use MvWeb, :live_view
|
||||||
|
|
||||||
|
import MvWeb.RoleLive.Helpers, only: [permission_set_badge_variant: 1]
|
||||||
|
|
||||||
alias Mv.Accounts
|
alias Mv.Accounts
|
||||||
alias Mv.Authorization
|
alias Mv.Authorization
|
||||||
|
|
||||||
require Ash.Query
|
require Ash.Query
|
||||||
|
|
||||||
import MvWeb.RoleLive.Helpers, only: [permission_set_badge_variant: 1]
|
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(_params, _session, socket) do
|
def mount(_params, _session, socket) do
|
||||||
actor = socket.assigns[:current_user]
|
actor = socket.assigns[:current_user]
|
||||||
|
|
|
||||||
|
|
@ -12,13 +12,13 @@ defmodule MvWeb.RoleLive.Show do
|
||||||
"""
|
"""
|
||||||
use MvWeb, :live_view
|
use MvWeb, :live_view
|
||||||
|
|
||||||
|
import MvWeb.RoleLive.Helpers,
|
||||||
|
only: [format_error: 1, permission_set_badge_variant: 1, opts_with_actor: 3]
|
||||||
|
|
||||||
alias Mv.Accounts
|
alias Mv.Accounts
|
||||||
|
|
||||||
require Ash.Query
|
require Ash.Query
|
||||||
|
|
||||||
import MvWeb.RoleLive.Helpers,
|
|
||||||
only: [format_error: 1, permission_set_badge_variant: 1, opts_with_actor: 3]
|
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(%{"id" => id}, _session, socket) do
|
def mount(%{"id" => id}, _session, socket) do
|
||||||
case Ash.get(
|
case Ash.get(
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,14 @@ defmodule MvWeb.StatisticsLive do
|
||||||
"""
|
"""
|
||||||
use MvWeb, :live_view
|
use MvWeb, :live_view
|
||||||
|
|
||||||
require Logger
|
|
||||||
|
|
||||||
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
import MvWeb.LiveHelpers, only: [current_actor: 1]
|
||||||
|
|
||||||
alias Mv.MembershipFees.MembershipFeeType
|
alias Mv.MembershipFees.MembershipFeeType
|
||||||
alias Mv.Statistics
|
alias Mv.Statistics
|
||||||
alias MvWeb.Helpers.MembershipFeeHelpers
|
alias MvWeb.Helpers.MembershipFeeHelpers
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(_params, _session, socket) do
|
def mount(_params, _session, socket) do
|
||||||
# Only static assigns and fee types here; load_statistics runs once in handle_params
|
# Only static assigns and fee types here; load_statistics runs once in handle_params
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,9 @@ defmodule MvWeb.UserLive.Form do
|
||||||
"""
|
"""
|
||||||
use MvWeb, :live_view
|
use MvWeb, :live_view
|
||||||
|
|
||||||
require Jason
|
import MvWeb.Authorization, only: [can?: 3]
|
||||||
|
import MvWeb.ErrorHelpers, only: [format_ash_error: 1]
|
||||||
|
import MvWeb.LiveHelpers, only: [current_actor: 1, submit_form: 3]
|
||||||
|
|
||||||
alias Mv.Accounts
|
alias Mv.Accounts
|
||||||
alias Mv.Accounts.User, as: UserResource
|
alias Mv.Accounts.User, as: UserResource
|
||||||
|
|
@ -45,9 +47,7 @@ defmodule MvWeb.UserLive.Form do
|
||||||
alias MvWeb.Helpers.MemberHelpers
|
alias MvWeb.Helpers.MemberHelpers
|
||||||
alias MvWeb.Live.MemberDropdownNav
|
alias MvWeb.Live.MemberDropdownNav
|
||||||
|
|
||||||
import MvWeb.LiveHelpers, only: [current_actor: 1, submit_form: 3]
|
require Jason
|
||||||
import MvWeb.Authorization, only: [can?: 3]
|
|
||||||
import MvWeb.ErrorHelpers, only: [format_ash_error: 1]
|
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def render(assigns) do
|
def render(assigns) do
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,10 @@ defmodule MvWeb.LiveUserAuth do
|
||||||
Helpers for authenticating users in LiveViews.
|
Helpers for authenticating users in LiveViews.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import Phoenix.Component
|
|
||||||
use MvWeb, :verified_routes
|
use MvWeb, :verified_routes
|
||||||
|
|
||||||
|
import Phoenix.Component
|
||||||
|
|
||||||
alias AshAuthentication.Phoenix.LiveSession
|
alias AshAuthentication.Phoenix.LiveSession
|
||||||
alias Phoenix.LiveView
|
alias Phoenix.LiveView
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,11 @@ defmodule Mv.Membership.GroupDatabaseConstraintsTest do
|
||||||
"""
|
"""
|
||||||
use Mv.DataCase, async: false
|
use Mv.DataCase, async: false
|
||||||
|
|
||||||
|
import Ash.Expr
|
||||||
|
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
||||||
require Ash.Query
|
require Ash.Query
|
||||||
import Ash.Expr
|
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,11 @@ defmodule Mv.Membership.GroupTest do
|
||||||
"""
|
"""
|
||||||
use Mv.DataCase, async: true
|
use Mv.DataCase, async: true
|
||||||
|
|
||||||
|
import Ash.Expr
|
||||||
|
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
||||||
require Ash.Query
|
require Ash.Query
|
||||||
import Ash.Expr
|
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
|
||||||
|
|
@ -8,13 +8,14 @@ defmodule Mv.Membership.JoinRequestApprovalDomainTest do
|
||||||
use Mv.DataCase, async: true
|
use Mv.DataCase, async: true
|
||||||
|
|
||||||
import Ash.Expr
|
import Ash.Expr
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Fixtures
|
alias Mv.Fixtures
|
||||||
alias Mv.Helpers.SystemActor
|
alias Mv.Helpers.SystemActor
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
alias Mv.Membership.Member
|
alias Mv.Membership.Member
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
defp member_count do
|
defp member_count do
|
||||||
actor = SystemActor.get_system_actor()
|
actor = SystemActor.get_system_actor()
|
||||||
{:ok, members} = Membership.list_members(actor: actor)
|
{:ok, members} = Membership.list_members(actor: actor)
|
||||||
|
|
|
||||||
|
|
@ -12,13 +12,14 @@ defmodule Mv.Membership.JoinRequestTest do
|
||||||
"""
|
"""
|
||||||
use Mv.DataCase, async: true
|
use Mv.DataCase, async: true
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
import Ash.Expr
|
import Ash.Expr
|
||||||
|
|
||||||
alias Mv.Fixtures
|
alias Mv.Fixtures
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
alias Mv.Membership.JoinRequest
|
alias Mv.Membership.JoinRequest
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
# Valid minimal attributes for submit (email required; confirmation_token optional for tests)
|
# Valid minimal attributes for submit (email required; confirmation_token optional for tests)
|
||||||
@valid_submit_attrs %{
|
@valid_submit_attrs %{
|
||||||
email: "join#{System.unique_integer([:positive])}@example.com"
|
email: "join#{System.unique_integer([:positive])}@example.com"
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,11 @@ defmodule Mv.Membership.MemberGroupTest do
|
||||||
"""
|
"""
|
||||||
use Mv.DataCase, async: true
|
use Mv.DataCase, async: true
|
||||||
|
|
||||||
|
import Ash.Expr
|
||||||
|
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
||||||
require Ash.Query
|
require Ash.Query
|
||||||
import Ash.Expr
|
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,11 @@ defmodule Mv.Membership.MemberGroupsRelationshipTest do
|
||||||
"""
|
"""
|
||||||
use Mv.DataCase, async: true
|
use Mv.DataCase, async: true
|
||||||
|
|
||||||
|
import Ash.Expr
|
||||||
|
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
||||||
require Ash.Query
|
require Ash.Query
|
||||||
import Ash.Expr
|
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
|
||||||
|
|
@ -12,10 +12,10 @@ defmodule Mv.Authorization.Checks.HasPermissionFailClosedTest do
|
||||||
"""
|
"""
|
||||||
use Mv.DataCase, async: true
|
use Mv.DataCase, async: true
|
||||||
|
|
||||||
alias Mv.Authorization.Checks.HasPermission
|
|
||||||
|
|
||||||
import Mv.Fixtures
|
import Mv.Fixtures
|
||||||
|
|
||||||
|
alias Mv.Authorization.Checks.HasPermission
|
||||||
|
|
||||||
test "auto_filter deny-filter matches no records (regression for NOT IN [] allow-all bug)" do
|
test "auto_filter deny-filter matches no records (regression for NOT IN [] allow-all bug)" do
|
||||||
# Arrange: create some members in DB
|
# Arrange: create some members in DB
|
||||||
_m1 = member_fixture()
|
_m1 = member_fixture()
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ defmodule Mv.StatisticsTest do
|
||||||
"""
|
"""
|
||||||
use Mv.DataCase, async: true
|
use Mv.DataCase, async: true
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
import Ash.Expr
|
import Ash.Expr
|
||||||
|
|
||||||
alias Mv.Membership.Member
|
alias Mv.Membership.Member
|
||||||
|
|
@ -13,6 +12,8 @@ defmodule Mv.StatisticsTest do
|
||||||
alias Mv.MembershipFees.MembershipFeeType
|
alias Mv.MembershipFees.MembershipFeeType
|
||||||
alias Mv.Statistics
|
alias Mv.Statistics
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
actor = Mv.Helpers.SystemActor.get_system_actor()
|
actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
%{actor: actor}
|
%{actor: actor}
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,10 @@ defmodule MvWeb.Components.MemberFilterComponentTest do
|
||||||
# async: false to prevent PostgreSQL deadlocks when running LiveView tests against DB
|
# async: false to prevent PostgreSQL deadlocks when running LiveView tests against DB
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
|
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Mv.Membership.CustomField
|
alias Mv.Membership.CustomField
|
||||||
|
|
||||||
# Helper to create a boolean custom field (uses system_actor - only admin can create)
|
# Helper to create a boolean custom field (uses system_actor - only admin can create)
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,11 @@ defmodule MvWeb.Helpers.MembershipFeeHelpersTest do
|
||||||
"""
|
"""
|
||||||
use Mv.DataCase, async: true
|
use Mv.DataCase, async: true
|
||||||
|
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.MembershipFees.CalendarCycles
|
alias Mv.MembershipFees.CalendarCycles
|
||||||
alias MvWeb.Helpers.MembershipFeeHelpers
|
alias MvWeb.Helpers.MembershipFeeHelpers
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
%{actor: system_actor}
|
%{actor: system_actor}
|
||||||
|
|
|
||||||
|
|
@ -15,10 +15,11 @@ defmodule MvWeb.CustomFieldLive.DeletionTest do
|
||||||
use MvWeb.ConnCase, async: true
|
use MvWeb.ConnCase, async: true
|
||||||
|
|
||||||
import Phoenix.LiveViewTest
|
import Phoenix.LiveViewTest
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Membership.{CustomField, CustomFieldValue, Member}
|
alias Mv.Membership.{CustomField, CustomFieldValue, Member}
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
admin_role = Mv.Fixtures.role_fixture("admin")
|
admin_role = Mv.Fixtures.role_fixture("admin")
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,11 @@ defmodule MvWeb.CustomFieldLive.FormTest do
|
||||||
use MvWeb.ConnCase, async: true
|
use MvWeb.ConnCase, async: true
|
||||||
|
|
||||||
import Phoenix.LiveViewTest
|
import Phoenix.LiveViewTest
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Membership.CustomField
|
alias Mv.Membership.CustomField
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
admin_role = Mv.Fixtures.role_fixture("admin")
|
admin_role = Mv.Fixtures.role_fixture("admin")
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,10 @@ defmodule MvWeb.GroupLive.FormTest do
|
||||||
- Security
|
- Security
|
||||||
"""
|
"""
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Mv.Fixtures
|
alias Mv.Fixtures
|
||||||
|
|
||||||
describe "create form" do
|
describe "create form" do
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,10 @@ defmodule MvWeb.GroupLive.IndexTest do
|
||||||
- Edge cases
|
- Edge cases
|
||||||
"""
|
"""
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Mv.Fixtures
|
alias Mv.Fixtures
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,14 +9,16 @@ defmodule MvWeb.GroupLive.IntegrationTest do
|
||||||
- URL persistence
|
- URL persistence
|
||||||
"""
|
"""
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
require Ash.Query
|
|
||||||
import Ash.Expr
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import Ash.Expr
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Mv.Fixtures
|
alias Mv.Fixtures
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
describe "complete workflow" do
|
describe "complete workflow" do
|
||||||
test "create → view via slug → edit → view via slug (slug unchanged)", %{
|
test "create → view via slug → edit → view via slug (slug unchanged)", %{
|
||||||
conn: conn,
|
conn: conn,
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,10 @@ defmodule MvWeb.GroupLive.ShowAccessibilityTest do
|
||||||
"""
|
"""
|
||||||
|
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Mv.Fixtures
|
alias Mv.Fixtures
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,11 @@ defmodule MvWeb.GroupLive.ShowAddMemberTest do
|
||||||
"""
|
"""
|
||||||
|
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
import MvWeb.GroupLiveHelpers
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import MvWeb.GroupLiveHelpers
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Mv.Fixtures
|
alias Mv.Fixtures
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,10 @@ defmodule MvWeb.GroupLive.ShowAddRemoveMembersTest do
|
||||||
"""
|
"""
|
||||||
|
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Mv.Fixtures
|
alias Mv.Fixtures
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,10 @@ defmodule MvWeb.GroupLive.ShowAuthorizationTest do
|
||||||
"""
|
"""
|
||||||
|
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Mv.Fixtures
|
alias Mv.Fixtures
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,10 @@ defmodule MvWeb.GroupLive.ShowIntegrationTest do
|
||||||
"""
|
"""
|
||||||
|
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Mv.Fixtures
|
alias Mv.Fixtures
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,10 @@ defmodule MvWeb.GroupLive.ShowMemberSearchTest do
|
||||||
"""
|
"""
|
||||||
|
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Mv.Fixtures
|
alias Mv.Fixtures
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,10 @@ defmodule MvWeb.GroupLive.ShowRemoveMemberTest do
|
||||||
"""
|
"""
|
||||||
|
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Mv.Fixtures
|
alias Mv.Fixtures
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,13 +11,15 @@ defmodule MvWeb.GroupLive.ShowTest do
|
||||||
- Delete functionality
|
- Delete functionality
|
||||||
"""
|
"""
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
require Ash.Query
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Mv.Fixtures
|
alias Mv.Fixtures
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
describe "mount and display" do
|
describe "mount and display" do
|
||||||
test "page renders successfully", %{conn: conn} do
|
test "page renders successfully", %{conn: conn} do
|
||||||
group = Fixtures.group_fixture()
|
group = Fixtures.group_fixture()
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,10 @@ defmodule MvWeb.MemberLive.DeactivateTest do
|
||||||
driven through the parent LiveView (the DeactivateComponent is stateful).
|
driven through the parent LiveView (the DeactivateComponent is stateful).
|
||||||
"""
|
"""
|
||||||
use MvWeb.ConnCase, async: true
|
use MvWeb.ConnCase, async: true
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Mv.Fixtures
|
alias Mv.Fixtures
|
||||||
|
|
||||||
defp reload_member(member) do
|
defp reload_member(member) do
|
||||||
|
|
|
||||||
|
|
@ -11,13 +11,15 @@ defmodule MvWeb.RoleLive.ShowTest do
|
||||||
- Delete functionality
|
- Delete functionality
|
||||||
"""
|
"""
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
require Ash.Query
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Mv.Authorization
|
alias Mv.Authorization
|
||||||
alias Mv.Authorization.Role
|
alias Mv.Authorization.Role
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
# Helper to create a role (authorize?: false for test data setup)
|
# Helper to create a role (authorize?: false for test data setup)
|
||||||
defp create_role(attrs \\ %{}) do
|
defp create_role(attrs \\ %{}) do
|
||||||
default_attrs = %{
|
default_attrs = %{
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,12 @@ defmodule MvWeb.UserLive.ShowTest do
|
||||||
- Error handling
|
- Error handling
|
||||||
"""
|
"""
|
||||||
use MvWeb.ConnCase, async: true
|
use MvWeb.ConnCase, async: true
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
require Ash.Query
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
# Create test user
|
# Create test user
|
||||||
user = create_test_user(%{email: "test@example.com", oidc_id: "test123"})
|
user = create_test_user(%{email: "test@example.com", oidc_id: "test123"})
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,11 @@ defmodule MvWeb.MemberLive.IndexCustomFieldsAccessibilityTest do
|
||||||
"""
|
"""
|
||||||
use MvWeb.ConnCase, async: true
|
use MvWeb.ConnCase, async: true
|
||||||
import Phoenix.LiveViewTest
|
import Phoenix.LiveViewTest
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Membership.{CustomField, CustomFieldValue}
|
alias Mv.Membership.{CustomField, CustomFieldValue}
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,10 +12,11 @@ defmodule MvWeb.MemberLive.IndexCustomFieldsDisplayTest do
|
||||||
# async: false to prevent PostgreSQL deadlocks when creating members and custom fields
|
# async: false to prevent PostgreSQL deadlocks when creating members and custom fields
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
import Phoenix.LiveViewTest
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Membership.{CustomField, CustomFieldValue}
|
alias Mv.Membership.{CustomField, CustomFieldValue}
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,11 @@ defmodule MvWeb.MemberLive.IndexCustomFieldsEdgeCasesTest do
|
||||||
"""
|
"""
|
||||||
use MvWeb.ConnCase, async: true
|
use MvWeb.ConnCase, async: true
|
||||||
import Phoenix.LiveViewTest
|
import Phoenix.LiveViewTest
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Membership.CustomField
|
alias Mv.Membership.CustomField
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
@tag :slow
|
@tag :slow
|
||||||
test "displays custom field column even when no members have values", %{conn: conn} do
|
test "displays custom field column even when no members have values", %{conn: conn} do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,11 @@ defmodule MvWeb.MemberLive.IndexCustomFieldsSortingTest do
|
||||||
"""
|
"""
|
||||||
use MvWeb.ConnCase, async: true
|
use MvWeb.ConnCase, async: true
|
||||||
import Phoenix.LiveViewTest
|
import Phoenix.LiveViewTest
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Membership.{CustomField, CustomFieldValue}
|
alias Mv.Membership.{CustomField, CustomFieldValue}
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,10 +14,11 @@ defmodule MvWeb.MemberLive.IndexFieldVisibilityTest do
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
|
|
||||||
import Phoenix.LiveViewTest
|
import Phoenix.LiveViewTest
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Membership.{CustomField, CustomFieldValue}
|
alias Mv.Membership.{CustomField, CustomFieldValue}
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,11 @@ defmodule MvWeb.MemberLive.IndexGroupsAccessibilityTest do
|
||||||
# async: false to prevent PostgreSQL deadlocks when creating members and groups
|
# async: false to prevent PostgreSQL deadlocks when creating members and groups
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
import Phoenix.LiveViewTest
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Membership.{Group, MemberGroup}
|
alias Mv.Membership.{Group, MemberGroup}
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,11 @@ defmodule MvWeb.MemberLive.IndexGroupsDisplayTest do
|
||||||
# async: false to prevent PostgreSQL deadlocks when creating members and groups
|
# async: false to prevent PostgreSQL deadlocks when creating members and groups
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
import Phoenix.LiveViewTest
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Membership.{Group, MemberGroup}
|
alias Mv.Membership.{Group, MemberGroup}
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,11 @@ defmodule MvWeb.MemberLive.IndexGroupsFilterTest do
|
||||||
# async: false to prevent PostgreSQL deadlocks when creating members and groups
|
# async: false to prevent PostgreSQL deadlocks when creating members and groups
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
import Phoenix.LiveViewTest
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Membership.{Group, MemberGroup}
|
alias Mv.Membership.{Group, MemberGroup}
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,12 +13,13 @@ defmodule MvWeb.MemberLive.IndexGroupsIntegrationTest do
|
||||||
# async: false to prevent PostgreSQL deadlocks when creating members and groups
|
# async: false to prevent PostgreSQL deadlocks when creating members and groups
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
import Phoenix.LiveViewTest
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Helpers.SystemActor
|
alias Mv.Helpers.SystemActor
|
||||||
alias Mv.Membership.{CustomField, CustomFieldValue, Group, MemberGroup}
|
alias Mv.Membership.{CustomField, CustomFieldValue, Group, MemberGroup}
|
||||||
alias Mv.MembershipFees.{MembershipFeeCycle, MembershipFeeType}
|
alias Mv.MembershipFees.{MembershipFeeCycle, MembershipFeeType}
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = SystemActor.get_system_actor()
|
system_actor = SystemActor.get_system_actor()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,11 @@ defmodule MvWeb.MemberLive.IndexGroupsPerformanceTest do
|
||||||
# async: false to prevent PostgreSQL deadlocks when creating members and groups
|
# async: false to prevent PostgreSQL deadlocks when creating members and groups
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
import Phoenix.LiveViewTest
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Membership.{Group, MemberGroup}
|
alias Mv.Membership.{Group, MemberGroup}
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,11 @@ defmodule MvWeb.MemberLive.IndexGroupsSortingTest do
|
||||||
# async: false to prevent PostgreSQL deadlocks when creating members and groups
|
# async: false to prevent PostgreSQL deadlocks when creating members and groups
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
import Phoenix.LiveViewTest
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Membership.{Group, MemberGroup}
|
alias Mv.Membership.{Group, MemberGroup}
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,10 +12,11 @@ defmodule MvWeb.MemberLive.IndexGroupsUrlParamsTest do
|
||||||
# async: false to prevent PostgreSQL deadlocks when creating members and groups
|
# async: false to prevent PostgreSQL deadlocks when creating members and groups
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
import Phoenix.LiveViewTest
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Membership.{Group, MemberGroup}
|
alias Mv.Membership.{Group, MemberGroup}
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
defmodule MvWeb.MemberLive.IndexTest do
|
defmodule MvWeb.MemberLive.IndexTest do
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
import Phoenix.LiveViewTest
|
||||||
require Ash.Query
|
|
||||||
|
|
||||||
alias Mv.Helpers.SystemActor
|
alias Mv.Helpers.SystemActor
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
|
@ -11,6 +10,8 @@ defmodule MvWeb.MemberLive.IndexTest do
|
||||||
alias Mv.MembershipFees.MembershipFeeType
|
alias Mv.MembershipFees.MembershipFeeType
|
||||||
alias MvWeb.MemberLive.Index, as: MemberIndex
|
alias MvWeb.MemberLive.Index, as: MemberIndex
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
# Helper to create a membership fee type (shared across all tests)
|
# Helper to create a membership fee type (shared across all tests)
|
||||||
defp create_fee_type(attrs, actor) do
|
defp create_fee_type(attrs, actor) do
|
||||||
default_attrs = %{
|
default_attrs = %{
|
||||||
|
|
|
||||||
|
|
@ -14,12 +14,14 @@ defmodule MvWeb.MemberLive.ShowGroupsDisplayTest do
|
||||||
in the same test run (same as IndexGroupsDisplayTest).
|
in the same test run (same as IndexGroupsDisplayTest).
|
||||||
"""
|
"""
|
||||||
use MvWeb.ConnCase, async: false
|
use MvWeb.ConnCase, async: false
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
require Ash.Query
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Mv.Membership.{Group, MemberGroup}
|
alias Mv.Membership.{Group, MemberGroup}
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
describe "groups section" do
|
describe "groups section" do
|
||||||
setup do
|
setup do
|
||||||
actor = Mv.Helpers.SystemActor.get_system_actor()
|
actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
|
||||||
|
|
@ -14,12 +14,14 @@ defmodule MvWeb.MemberLive.ShowTest do
|
||||||
- Custom field cleanup in tests ensures no interference between tests
|
- Custom field cleanup in tests ensures no interference between tests
|
||||||
"""
|
"""
|
||||||
use MvWeb.ConnCase, async: true
|
use MvWeb.ConnCase, async: true
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
require Ash.Query
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
|
import Phoenix.LiveViewTest
|
||||||
|
|
||||||
alias Mv.Membership.{CustomField, CustomFieldValue}
|
alias Mv.Membership.{CustomField, CustomFieldValue}
|
||||||
|
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue