Merge branch 'elixir-1.18' into 'develop'
Elixir 1.18 warnings See merge request pleroma/pleroma!4358
This commit is contained in:
commit
8484e09424
27 changed files with 83 additions and 156 deletions
|
|
@ -79,12 +79,12 @@ build-1.14.5-otp-25:
|
||||||
script:
|
script:
|
||||||
- mix compile --force
|
- mix compile --force
|
||||||
|
|
||||||
build-1.17.1-otp-26:
|
build-1.18.3-otp-27:
|
||||||
extends:
|
extends:
|
||||||
- .build_changes_policy
|
- .build_changes_policy
|
||||||
- .using-ci-base
|
- .using-ci-base
|
||||||
stage: build
|
stage: build
|
||||||
image: git.pleroma.social:5050/pleroma/pleroma/ci-base:elixir-1.17.1-otp-26
|
image: git.pleroma.social:5050/pleroma/pleroma/ci-base:elixir-1.18.3-otp-27
|
||||||
script:
|
script:
|
||||||
- mix compile --force
|
- mix compile --force
|
||||||
|
|
||||||
|
|
@ -142,12 +142,12 @@ unit-testing-1.14.5-otp-25:
|
||||||
coverage_format: cobertura
|
coverage_format: cobertura
|
||||||
path: coverage.xml
|
path: coverage.xml
|
||||||
|
|
||||||
unit-testing-1.17.1-otp-26:
|
unit-testing-1.18.3-otp-27:
|
||||||
extends:
|
extends:
|
||||||
- .build_changes_policy
|
- .build_changes_policy
|
||||||
- .using-ci-base
|
- .using-ci-base
|
||||||
stage: test
|
stage: test
|
||||||
image: git.pleroma.social:5050/pleroma/pleroma/ci-base:elixir-1.17.1-otp-26
|
image: git.pleroma.social:5050/pleroma/pleroma/ci-base:elixir-1.18.3-otp-27
|
||||||
cache: *testing_cache_policy
|
cache: *testing_cache_policy
|
||||||
services: *testing_services
|
services: *testing_services
|
||||||
script: *testing_script
|
script: *testing_script
|
||||||
|
|
|
||||||
1
changelog.d/elixir-1-18.fix
Normal file
1
changelog.d/elixir-1-18.fix
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Elixir 1.18: Fixed warnings and new deprecations
|
||||||
8
ci/elixir-1.18.3-otp-27/Dockerfile
Normal file
8
ci/elixir-1.18.3-otp-27/Dockerfile
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
FROM elixir:1.18.3-otp-27
|
||||||
|
|
||||||
|
# Single RUN statement, otherwise intermediate images are created
|
||||||
|
# https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#run
|
||||||
|
RUN apt-get update &&\
|
||||||
|
apt-get install -y libmagic-dev cmake libimage-exiftool-perl ffmpeg &&\
|
||||||
|
mix local.hex --force &&\
|
||||||
|
mix local.rebar --force
|
||||||
1
ci/elixir-1.18.3-otp-27/build_and_push.sh
Executable file
1
ci/elixir-1.18.3-otp-27/build_and_push.sh
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
docker buildx build --platform linux/amd64,linux/arm64 -t git.pleroma.social:5050/pleroma/pleroma/ci-base:elixir-1.18.3-otp-27 --push .
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
## Required dependencies
|
## Required dependencies
|
||||||
|
|
||||||
* PostgreSQL >=11.0
|
* PostgreSQL >=11.0
|
||||||
* Elixir >=1.14.0 <1.17
|
* Elixir >=1.14.0 <1.19
|
||||||
* Erlang OTP >=23.0.0 (supported: <27)
|
* Erlang OTP >=23.0.0 (supported: <28)
|
||||||
* git
|
* git
|
||||||
* file / libmagic
|
* file / libmagic
|
||||||
* gcc or clang
|
* gcc or clang
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,9 @@ defmodule Mix.Tasks.Pleroma.TestRunner do
|
||||||
use Mix.Task
|
use Mix.Task
|
||||||
|
|
||||||
def run(args \\ []) do
|
def run(args \\ []) do
|
||||||
case System.cmd("mix", ["test"] ++ args, into: IO.stream(:stdio, :line)) do
|
case System.cmd("mix", ["test", "--warnings-as-errors"] ++ args,
|
||||||
|
into: IO.stream(:stdio, :line)
|
||||||
|
) do
|
||||||
{_, 0} ->
|
{_, 0} ->
|
||||||
:ok
|
:ok
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,9 +43,6 @@ defmodule Pleroma.Application do
|
||||||
# every time the application is restarted, so we disable module
|
# every time the application is restarted, so we disable module
|
||||||
# conflicts at runtime
|
# conflicts at runtime
|
||||||
Code.compiler_options(ignore_module_conflict: true)
|
Code.compiler_options(ignore_module_conflict: true)
|
||||||
# Disable warnings_as_errors at runtime, it breaks Phoenix live reload
|
|
||||||
# due to protocol consolidation warnings
|
|
||||||
Code.compiler_options(warnings_as_errors: false)
|
|
||||||
Pleroma.Telemetry.Logger.attach()
|
Pleroma.Telemetry.Logger.attach()
|
||||||
Config.Holder.save_default()
|
Config.Holder.save_default()
|
||||||
Pleroma.HTML.compile_scrubbers()
|
Pleroma.HTML.compile_scrubbers()
|
||||||
|
|
@ -71,26 +68,11 @@ defmodule Pleroma.Application do
|
||||||
Finch.start_link(name: MyFinch)
|
Finch.start_link(name: MyFinch)
|
||||||
end
|
end
|
||||||
|
|
||||||
if adapter == Tesla.Adapter.Gun do
|
# Disable warnings_as_errors at runtime, it breaks Phoenix live reload
|
||||||
if version = Pleroma.OTPVersion.version() do
|
# due to protocol consolidation warnings
|
||||||
[major, minor] =
|
# :warnings_as_errors is deprecated via Code.compiler_options/2 since 1.18
|
||||||
version
|
if Version.compare(System.version(), "1.18.0") == :lt do
|
||||||
|> String.split(".")
|
Code.compiler_options(warnings_as_errors: false)
|
||||||
|> Enum.map(&String.to_integer/1)
|
|
||||||
|> Enum.take(2)
|
|
||||||
|
|
||||||
if (major == 22 and minor < 2) or major < 22 do
|
|
||||||
raise "
|
|
||||||
!!!OTP VERSION WARNING!!!
|
|
||||||
You are using gun adapter with OTP version #{version}, which doesn't support correct handling of unordered certificates chains. Please update your Erlang/OTP to at least 22.2.
|
|
||||||
"
|
|
||||||
end
|
|
||||||
else
|
|
||||||
raise "
|
|
||||||
!!!OTP VERSION WARNING!!!
|
|
||||||
To support correct handling of unordered certificates chains - OTP version must be > 22.2.
|
|
||||||
"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Define workers and child supervisors to be supervised
|
# Define workers and child supervisors to be supervised
|
||||||
|
|
|
||||||
|
|
@ -302,7 +302,7 @@ defmodule Pleroma.ConfigDB do
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_elixir_types(%{"tuple" => entity}) do
|
def to_elixir_types(%{"tuple" => entity}) do
|
||||||
Enum.reduce(entity, {}, &Tuple.append(&2, to_elixir_types(&1)))
|
Enum.reduce(entity, {}, &Tuple.insert_at(&2, tuple_size(&2), to_elixir_types(&1)))
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_elixir_types(entity) when is_map(entity) do
|
def to_elixir_types(entity) when is_map(entity) do
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ defmodule Pleroma.Language.LanguageDetector do
|
||||||
def configured? do
|
def configured? do
|
||||||
provider = get_provider()
|
provider = get_provider()
|
||||||
|
|
||||||
!!provider and provider.configured?
|
!!provider and provider.configured?()
|
||||||
end
|
end
|
||||||
|
|
||||||
def missing_dependencies do
|
def missing_dependencies do
|
||||||
|
|
@ -41,7 +41,7 @@ defmodule Pleroma.Language.LanguageDetector do
|
||||||
text = prepare_text(text)
|
text = prepare_text(text)
|
||||||
word_count = text |> String.split(~r/\s+/) |> Enum.count()
|
word_count = text |> String.split(~r/\s+/) |> Enum.count()
|
||||||
|
|
||||||
if word_count < @words_threshold or !provider or !provider.configured? do
|
if word_count < @words_threshold or !provider or !provider.configured?() do
|
||||||
nil
|
nil
|
||||||
else
|
else
|
||||||
with language <- provider.detect(text),
|
with language <- provider.detect(text),
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ defmodule Pleroma.Language.Translation do
|
||||||
def configured? do
|
def configured? do
|
||||||
provider = get_provider()
|
provider = get_provider()
|
||||||
|
|
||||||
!!provider and provider.configured?
|
!!provider and provider.configured?()
|
||||||
end
|
end
|
||||||
|
|
||||||
def missing_dependencies do
|
def missing_dependencies do
|
||||||
|
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
# Pleroma: A lightweight social networking server
|
|
||||||
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
|
|
||||||
defmodule Pleroma.OTPVersion do
|
|
||||||
@spec version() :: String.t() | nil
|
|
||||||
def version do
|
|
||||||
# OTP Version https://erlang.org/doc/system_principles/versions.html#otp-version
|
|
||||||
[
|
|
||||||
Path.join(:code.root_dir(), "OTP_VERSION"),
|
|
||||||
Path.join([:code.root_dir(), "releases", :erlang.system_info(:otp_release), "OTP_VERSION"])
|
|
||||||
]
|
|
||||||
|> get_version_from_files()
|
|
||||||
end
|
|
||||||
|
|
||||||
@spec get_version_from_files([Path.t()]) :: String.t() | nil
|
|
||||||
def get_version_from_files([]), do: nil
|
|
||||||
|
|
||||||
def get_version_from_files([path | paths]) do
|
|
||||||
if File.exists?(path) do
|
|
||||||
path
|
|
||||||
|> File.read!()
|
|
||||||
|> String.replace(~r/\r|\n|\s/, "")
|
|
||||||
else
|
|
||||||
get_version_from_files(paths)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -200,14 +200,13 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate(%{"type" => type} = object, meta)
|
def validate(%{"type" => type} = object, meta)
|
||||||
when type in ~w[Accept Reject Follow Update Like EmojiReact Announce
|
when type in ~w[Accept Reject Follow Like EmojiReact Announce
|
||||||
ChatMessage Answer] do
|
ChatMessage Answer] do
|
||||||
validator =
|
validator =
|
||||||
case type do
|
case type do
|
||||||
"Accept" -> AcceptRejectValidator
|
"Accept" -> AcceptRejectValidator
|
||||||
"Reject" -> AcceptRejectValidator
|
"Reject" -> AcceptRejectValidator
|
||||||
"Follow" -> FollowValidator
|
"Follow" -> FollowValidator
|
||||||
"Update" -> UpdateValidator
|
|
||||||
"Like" -> LikeValidator
|
"Like" -> LikeValidator
|
||||||
"EmojiReact" -> EmojiReactValidator
|
"EmojiReact" -> EmojiReactValidator
|
||||||
"Announce" -> AnnounceValidator
|
"Announce" -> AnnounceValidator
|
||||||
|
|
@ -215,16 +214,19 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do
|
||||||
"Answer" -> AnswerValidator
|
"Answer" -> AnswerValidator
|
||||||
end
|
end
|
||||||
|
|
||||||
cast_func =
|
|
||||||
if type == "Update" do
|
|
||||||
fn o -> validator.cast_and_validate(o, meta) end
|
|
||||||
else
|
|
||||||
fn o -> validator.cast_and_validate(o) end
|
|
||||||
end
|
|
||||||
|
|
||||||
with {:ok, object} <-
|
with {:ok, object} <-
|
||||||
object
|
object
|
||||||
|> cast_func.()
|
|> validator.cast_and_validate()
|
||||||
|
|> Ecto.Changeset.apply_action(:insert) do
|
||||||
|
object = stringify_keys(object)
|
||||||
|
{:ok, object, meta}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate(%{"type" => type} = object, meta) when type == "Update" do
|
||||||
|
with {:ok, object} <-
|
||||||
|
object
|
||||||
|
|> UpdateValidator.cast_and_validate(meta)
|
||||||
|> Ecto.Changeset.apply_action(:insert) do
|
|> Ecto.Changeset.apply_action(:insert) do
|
||||||
object = stringify_keys(object)
|
object = stringify_keys(object)
|
||||||
{:ok, object, meta}
|
{:ok, object, meta}
|
||||||
|
|
|
||||||
|
|
@ -50,13 +50,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.TagValidator do
|
||||||
end
|
end
|
||||||
|
|
||||||
def changeset(struct, %{"type" => "Hashtag", "name" => name} = data) do
|
def changeset(struct, %{"type" => "Hashtag", "name" => name} = data) do
|
||||||
name =
|
name = String.downcase(name)
|
||||||
cond do
|
|
||||||
"#" <> name -> name
|
|
||||||
name -> name
|
|
||||||
end
|
|
||||||
|> String.downcase()
|
|
||||||
|
|
||||||
data = Map.put(data, "name", name)
|
data = Map.put(data, "name", name)
|
||||||
|
|
||||||
struct
|
struct
|
||||||
|
|
|
||||||
|
|
@ -231,8 +231,8 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= for %{data: mention, object: object, from: from} <- @mentions do %>
|
<%= for %{data: mention, object: object, from: from} <- @mentions do %>
|
||||||
<%# mention START %>
|
<% # mention START %>
|
||||||
<%# user card START %>
|
<% # user card START %>
|
||||||
<div style="background-color:transparent;">
|
<div style="background-color:transparent;">
|
||||||
<div class="block-grid mixed-two-up no-stack"
|
<div class="block-grid mixed-two-up no-stack"
|
||||||
style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: <%= @styling.content_background_color%>;">
|
style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: <%= @styling.content_background_color%>;">
|
||||||
|
|
@ -291,7 +291,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<%# user card END %>
|
<% # user card END %>
|
||||||
|
|
||||||
<div style="background-color:transparent;">
|
<div style="background-color:transparent;">
|
||||||
<div class="block-grid"
|
<div class="block-grid"
|
||||||
|
|
@ -333,12 +333,12 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<%# mention END %>
|
<% # mention END %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= if @followers != [] do %>
|
<%= if @followers != [] do %>
|
||||||
|
|
||||||
<%# new followers header START %>
|
<% # new followers header START %>
|
||||||
<div style="background-color:transparent;">
|
<div style="background-color:transparent;">
|
||||||
<div class="block-grid"
|
<div class="block-grid"
|
||||||
style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: <%= @styling.content_background_color%>;">
|
style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: <%= @styling.content_background_color%>;">
|
||||||
|
|
@ -397,10 +397,10 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<%# new followers header END %>
|
<% # new followers header END %>
|
||||||
|
|
||||||
<%= for %{data: follow, from: from} <- @followers do %>
|
<%= for %{data: follow, from: from} <- @followers do %>
|
||||||
<%# user card START %>
|
<% # user card START %>
|
||||||
<div style="background-color:transparent;">
|
<div style="background-color:transparent;">
|
||||||
<div class="block-grid mixed-two-up no-stack"
|
<div class="block-grid mixed-two-up no-stack"
|
||||||
style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: <%= @styling.content_background_color%>;">
|
style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: <%= @styling.content_background_color%>;">
|
||||||
|
|
@ -459,13 +459,13 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<%# user card END %>
|
<% # user card END %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%# divider start %>
|
<% # divider start %>
|
||||||
<div style="background-color:transparent;">
|
<div style="background-color:transparent;">
|
||||||
<div class="block-grid"
|
<div class="block-grid"
|
||||||
style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: <%= @styling.content_background_color%>;">
|
style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: <%= @styling.content_background_color%>;">
|
||||||
|
|
@ -514,7 +514,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%# divider end %>
|
<% # divider end %>
|
||||||
|
|
||||||
|
|
||||||
<div style="background-color:transparent;">
|
<div style="background-color:transparent;">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<%= for {user, total_statuses, latest_status} <- @users_and_statuses do %>
|
<%= for {user, total_statuses, latest_status} <- @users_and_statuses do %>
|
||||||
<%# user card START %>
|
<% # user card START %>
|
||||||
<div style="background-color:transparent;">
|
<div style="background-color:transparent;">
|
||||||
<div class="block-grid mixed-two-up no-stack"
|
<div class="block-grid mixed-two-up no-stack"
|
||||||
style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: <%= @styling.content_background_color%>;">
|
style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: <%= @styling.content_background_color%>;">
|
||||||
|
|
@ -60,7 +60,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<%# user card END %>
|
<% # user card END %>
|
||||||
|
|
||||||
<%= if latest_status do %>
|
<%= if latest_status do %>
|
||||||
<div style="background-color:transparent;">
|
<div style="background-color:transparent;">
|
||||||
|
|
@ -104,7 +104,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
<%# divider start %>
|
<% # divider start %>
|
||||||
<div style="background-color:transparent;">
|
<div style="background-color:transparent;">
|
||||||
<div class="block-grid"
|
<div class="block-grid"
|
||||||
style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: <%= @styling.content_background_color%>;">
|
style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: <%= @styling.content_background_color%>;">
|
||||||
|
|
@ -153,6 +153,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%# divider end %>
|
<% # divider end %>
|
||||||
<%# user card END %>
|
<% # user card END %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@
|
||||||
<td style="word-break: break-word; vertical-align: top;" valign="top">
|
<td style="word-break: break-word; vertical-align: top;" valign="top">
|
||||||
<!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td align="center" style="background-color:<%= @styling.background_color %>"><![endif]-->
|
<!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td align="center" style="background-color:<%= @styling.background_color %>"><![endif]-->
|
||||||
|
|
||||||
<%# header %>
|
<% # header %>
|
||||||
<div style="background-color:transparent;">
|
<div style="background-color:transparent;">
|
||||||
<div class="block-grid"
|
<div class="block-grid"
|
||||||
style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: <%= @styling.content_background_color%>;">
|
style="Margin: 0 auto; min-width: 320px; max-width: 590px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: <%= @styling.content_background_color%>;">
|
||||||
|
|
@ -145,7 +145,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<%# title %>
|
<% # title %>
|
||||||
<%= if @title do %>
|
<%= if @title do %>
|
||||||
<div style="background-color:transparent;">
|
<div style="background-color:transparent;">
|
||||||
<div class="block-grid"
|
<div class="block-grid"
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<%= label @form, :scope, Gettext.dpgettext("static_pages", "oauth scopes message", "The following permissions will be granted") %>
|
<%= label @form, :scope, Gettext.dpgettext("static_pages", "oauth scopes message", "The following permissions will be granted") %>
|
||||||
<div class="scopes">
|
<div class="scopes">
|
||||||
<%= for scope <- @available_scopes do %>
|
<%= for scope <- @available_scopes do %>
|
||||||
<%# Note: using hidden input with `unchecked_value` in order to distinguish user's empty selection from `scope` param being omitted %>
|
<% # Note: using hidden input with `unchecked_value` in order to distinguish user's empty selection from `scope` param being omitted %>
|
||||||
<%= if scope in @scopes do %>
|
<%= if scope in @scopes do %>
|
||||||
<div class="scope">
|
<div class="scope">
|
||||||
<%= checkbox @form, :"scope_#{scope}", value: scope in @scopes && scope, checked_value: scope, unchecked_value: "", name: "authorization[scope][]" %>
|
<%= checkbox @form, :"scope_#{scope}", value: scope in @scopes && scope, checked_value: scope, unchecked_value: "", name: "authorization[scope][]" %>
|
||||||
|
|
|
||||||
4
mix.exs
4
mix.exs
|
|
@ -213,7 +213,7 @@ defmodule Pleroma.Mixfile do
|
||||||
{:poison, "~> 3.0", only: :test},
|
{:poison, "~> 3.0", only: :test},
|
||||||
{:ex_doc, "~> 0.22", only: :dev, runtime: false},
|
{:ex_doc, "~> 0.22", only: :dev, runtime: false},
|
||||||
{:ex_machina, "~> 2.4", only: :test},
|
{:ex_machina, "~> 2.4", only: :test},
|
||||||
{:credo, "~> 1.6", only: [:dev, :test], runtime: false},
|
{:credo, "~> 1.7", only: [:dev, :test], runtime: false},
|
||||||
{:mock, "~> 0.3.5", only: :test},
|
{:mock, "~> 0.3.5", only: :test},
|
||||||
{:covertool, "~> 2.0", only: :test},
|
{:covertool, "~> 2.0", only: :test},
|
||||||
{:hackney, "~> 1.18.0", override: true},
|
{:hackney, "~> 1.18.0", override: true},
|
||||||
|
|
@ -236,7 +236,7 @@ defmodule Pleroma.Mixfile do
|
||||||
"ecto.rollback": ["pleroma.ecto.rollback"],
|
"ecto.rollback": ["pleroma.ecto.rollback"],
|
||||||
"ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
|
"ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
|
||||||
"ecto.reset": ["ecto.drop", "ecto.setup"],
|
"ecto.reset": ["ecto.drop", "ecto.setup"],
|
||||||
test: ["ecto.create --quiet", "ecto.migrate", "test"],
|
test: ["ecto.create --quiet", "ecto.migrate", "test --warnings-as-errors"],
|
||||||
docs: ["pleroma.docs", "docs"],
|
docs: ["pleroma.docs", "docs"],
|
||||||
analyze: ["credo --strict --only=warnings,todo,fixme,consistency,readability"],
|
analyze: ["credo --strict --only=warnings,todo,fixme,consistency,readability"],
|
||||||
copyright: &add_copyright/1,
|
copyright: &add_copyright/1,
|
||||||
|
|
|
||||||
2
mix.lock
2
mix.lock
|
|
@ -23,7 +23,7 @@
|
||||||
"cowboy": {:hex, :cowboy, "2.12.0", "f276d521a1ff88b2b9b4c54d0e753da6c66dd7be6c9fca3d9418b561828a3731", [:make, :rebar3], [{:cowlib, "2.13.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "8a7abe6d183372ceb21caa2709bec928ab2b72e18a3911aa1771639bef82651e"},
|
"cowboy": {:hex, :cowboy, "2.12.0", "f276d521a1ff88b2b9b4c54d0e753da6c66dd7be6c9fca3d9418b561828a3731", [:make, :rebar3], [{:cowlib, "2.13.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "8a7abe6d183372ceb21caa2709bec928ab2b72e18a3911aa1771639bef82651e"},
|
||||||
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
|
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
|
||||||
"cowlib": {:hex, :cowlib, "2.13.0", "db8f7505d8332d98ef50a3ef34b34c1afddec7506e4ee4dd4a3a266285d282ca", [:make, :rebar3], [], "hexpm", "e1e1284dc3fc030a64b1ad0d8382ae7e99da46c3246b815318a4b848873800a4"},
|
"cowlib": {:hex, :cowlib, "2.13.0", "db8f7505d8332d98ef50a3ef34b34c1afddec7506e4ee4dd4a3a266285d282ca", [:make, :rebar3], [], "hexpm", "e1e1284dc3fc030a64b1ad0d8382ae7e99da46c3246b815318a4b848873800a4"},
|
||||||
"credo": {:hex, :credo, "1.7.7", "771445037228f763f9b2afd612b6aa2fd8e28432a95dbbc60d8e03ce71ba4446", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "8bc87496c9aaacdc3f90f01b7b0582467b69b4bd2441fe8aae3109d843cc2f2e"},
|
"credo": {:hex, :credo, "1.7.12", "9e3c20463de4b5f3f23721527fcaf16722ec815e70ff6c60b86412c695d426c1", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "8493d45c656c5427d9c729235b99d498bd133421f3e0a683e5c1b561471291e5"},
|
||||||
"crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"},
|
"crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"},
|
||||||
"custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"},
|
"custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"},
|
||||||
"db_connection": {:hex, :db_connection, "2.7.0", "b99faa9291bb09892c7da373bb82cba59aefa9b36300f6145c5f201c7adf48ec", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dcf08f31b2701f857dfc787fbad78223d61a32204f217f15e881dd93e4bdd3ff"},
|
"db_connection": {:hex, :db_connection, "2.7.0", "b99faa9291bb09892c7da373bb82cba59aefa9b36300f6145c5f201c7adf48ec", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dcf08f31b2701f857dfc787fbad78223d61a32204f217f15e881dd93e4bdd3ff"},
|
||||||
|
|
|
||||||
1
test/fixtures/warnings/otp_version/21.1
vendored
1
test/fixtures/warnings/otp_version/21.1
vendored
|
|
@ -1 +0,0 @@
|
||||||
21.1
|
|
||||||
1
test/fixtures/warnings/otp_version/22.1
vendored
1
test/fixtures/warnings/otp_version/22.1
vendored
|
|
@ -1 +0,0 @@
|
||||||
22.1
|
|
||||||
1
test/fixtures/warnings/otp_version/22.4
vendored
1
test/fixtures/warnings/otp_version/22.4
vendored
|
|
@ -1 +0,0 @@
|
||||||
22.4
|
|
||||||
1
test/fixtures/warnings/otp_version/23.0
vendored
1
test/fixtures/warnings/otp_version/23.0
vendored
|
|
@ -1 +0,0 @@
|
||||||
23.0
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
||||||
# Pleroma: A lightweight social networking server
|
|
||||||
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
|
|
||||||
defmodule Pleroma.OTPVersionTest do
|
|
||||||
use ExUnit.Case, async: true
|
|
||||||
|
|
||||||
alias Pleroma.OTPVersion
|
|
||||||
|
|
||||||
describe "check/1" do
|
|
||||||
test "22.4" do
|
|
||||||
assert OTPVersion.get_version_from_files(["test/fixtures/warnings/otp_version/22.4"]) ==
|
|
||||||
"22.4"
|
|
||||||
end
|
|
||||||
|
|
||||||
test "22.1" do
|
|
||||||
assert OTPVersion.get_version_from_files(["test/fixtures/warnings/otp_version/22.1"]) ==
|
|
||||||
"22.1"
|
|
||||||
end
|
|
||||||
|
|
||||||
test "21.1" do
|
|
||||||
assert OTPVersion.get_version_from_files(["test/fixtures/warnings/otp_version/21.1"]) ==
|
|
||||||
"21.1"
|
|
||||||
end
|
|
||||||
|
|
||||||
test "23.0" do
|
|
||||||
assert OTPVersion.get_version_from_files(["test/fixtures/warnings/otp_version/23.0"]) ==
|
|
||||||
"23.0"
|
|
||||||
end
|
|
||||||
|
|
||||||
test "with nonexistent file" do
|
|
||||||
assert OTPVersion.get_version_from_files([
|
|
||||||
"test/fixtures/warnings/otp_version/non-exising",
|
|
||||||
"test/fixtures/warnings/otp_version/22.4"
|
|
||||||
]) == "22.4"
|
|
||||||
end
|
|
||||||
|
|
||||||
test "empty paths" do
|
|
||||||
assert OTPVersion.get_version_from_files([]) == nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -2669,8 +2669,12 @@ defmodule Pleroma.UserTest do
|
||||||
|
|
||||||
assert {:ok, user} = User.update_last_active_at(user)
|
assert {:ok, user} = User.update_last_active_at(user)
|
||||||
|
|
||||||
assert user.last_active_at >= test_started_at
|
assert NaiveDateTime.compare(user.last_active_at, test_started_at) in [:gt, :eq]
|
||||||
assert user.last_active_at <= NaiveDateTime.truncate(NaiveDateTime.utc_now(), :second)
|
|
||||||
|
assert NaiveDateTime.compare(
|
||||||
|
user.last_active_at,
|
||||||
|
NaiveDateTime.truncate(NaiveDateTime.utc_now(), :second)
|
||||||
|
) in [:lt, :eq]
|
||||||
|
|
||||||
last_active_at =
|
last_active_at =
|
||||||
NaiveDateTime.utc_now()
|
NaiveDateTime.utc_now()
|
||||||
|
|
@ -2682,10 +2686,15 @@ defmodule Pleroma.UserTest do
|
||||||
|> cast(%{last_active_at: last_active_at}, [:last_active_at])
|
|> cast(%{last_active_at: last_active_at}, [:last_active_at])
|
||||||
|> User.update_and_set_cache()
|
|> User.update_and_set_cache()
|
||||||
|
|
||||||
assert user.last_active_at == last_active_at
|
assert NaiveDateTime.compare(user.last_active_at, last_active_at) == :eq
|
||||||
|
|
||||||
assert {:ok, user} = User.update_last_active_at(user)
|
assert {:ok, user} = User.update_last_active_at(user)
|
||||||
assert user.last_active_at >= test_started_at
|
assert NaiveDateTime.compare(user.last_active_at, test_started_at) in [:gt, :eq]
|
||||||
assert user.last_active_at <= NaiveDateTime.truncate(NaiveDateTime.utc_now(), :second)
|
|
||||||
|
assert NaiveDateTime.compare(
|
||||||
|
user.last_active_at,
|
||||||
|
NaiveDateTime.truncate(NaiveDateTime.utc_now(), :second)
|
||||||
|
) in [:lt, :eq]
|
||||||
end
|
end
|
||||||
|
|
||||||
test "active_user_count/1" do
|
test "active_user_count/1" do
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,12 @@ defmodule Pleroma.Web.Plugs.UserTrackingPlugTest do
|
||||||
|> assign(:user, user)
|
|> assign(:user, user)
|
||||||
|> UserTrackingPlug.call(%{})
|
|> UserTrackingPlug.call(%{})
|
||||||
|
|
||||||
assert user.last_active_at >= test_started_at
|
assert NaiveDateTime.compare(user.last_active_at, test_started_at) in [:gt, :eq]
|
||||||
assert user.last_active_at <= NaiveDateTime.truncate(NaiveDateTime.utc_now(), :second)
|
|
||||||
|
assert NaiveDateTime.compare(
|
||||||
|
user.last_active_at,
|
||||||
|
NaiveDateTime.truncate(NaiveDateTime.utc_now(), :second)
|
||||||
|
) in [:lt, :eq]
|
||||||
end
|
end
|
||||||
|
|
||||||
test "doesn't update last_active_at if it was updated recently", %{conn: conn} do
|
test "doesn't update last_active_at if it was updated recently", %{conn: conn} do
|
||||||
|
|
@ -38,7 +42,7 @@ defmodule Pleroma.Web.Plugs.UserTrackingPlugTest do
|
||||||
|> assign(:user, user)
|
|> assign(:user, user)
|
||||||
|> UserTrackingPlug.call(%{})
|
|> UserTrackingPlug.call(%{})
|
||||||
|
|
||||||
assert user.last_active_at == last_active_at
|
assert NaiveDateTime.compare(user.last_active_at, last_active_at) == :eq
|
||||||
end
|
end
|
||||||
|
|
||||||
test "skips updating last_active_at if user ID is nil", %{conn: conn} do
|
test "skips updating last_active_at if user ID is nil", %{conn: conn} do
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,6 @@
|
||||||
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
Code.put_compiler_option(:warnings_as_errors, true)
|
|
||||||
|
|
||||||
ExUnit.configure(capture_log: true, max_cases: System.schedulers_online())
|
ExUnit.configure(capture_log: true, max_cases: System.schedulers_online())
|
||||||
|
|
||||||
ExUnit.start(exclude: [:federated])
|
ExUnit.start(exclude: [:federated])
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue