LanguageDetectorTests: Switch to mox
This commit is contained in:
parent
edfb1deb1c
commit
35814de0df
6 changed files with 70 additions and 28 deletions
|
|
@ -152,6 +152,7 @@ config :pleroma, Pleroma.User.Backup, config_impl: Pleroma.UnstubbedConfigMock
|
||||||
config :pleroma, Pleroma.Uploaders.S3, ex_aws_impl: Pleroma.Uploaders.S3.ExAwsMock
|
config :pleroma, Pleroma.Uploaders.S3, ex_aws_impl: Pleroma.Uploaders.S3.ExAwsMock
|
||||||
config :pleroma, Pleroma.Uploaders.S3, config_impl: Pleroma.UnstubbedConfigMock
|
config :pleroma, Pleroma.Uploaders.S3, config_impl: Pleroma.UnstubbedConfigMock
|
||||||
config :pleroma, Pleroma.Upload, config_impl: Pleroma.UnstubbedConfigMock
|
config :pleroma, Pleroma.Upload, config_impl: Pleroma.UnstubbedConfigMock
|
||||||
|
config :pleroma, Pleroma.Language.LanguageDetector, config_impl: Pleroma.UnstubbedConfigMock
|
||||||
config :pleroma, Pleroma.ScheduledActivity, config_impl: Pleroma.UnstubbedConfigMock
|
config :pleroma, Pleroma.ScheduledActivity, config_impl: Pleroma.UnstubbedConfigMock
|
||||||
config :pleroma, Pleroma.Web.RichMedia.Helpers, config_impl: Pleroma.StaticStubbedConfigMock
|
config :pleroma, Pleroma.Web.RichMedia.Helpers, config_impl: Pleroma.StaticStubbedConfigMock
|
||||||
config :pleroma, Pleroma.Uploaders.IPFS, config_impl: Pleroma.UnstubbedConfigMock
|
config :pleroma, Pleroma.Uploaders.IPFS, config_impl: Pleroma.UnstubbedConfigMock
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ defmodule Pleroma.Language.LanguageDetector do
|
||||||
only: [good_locale_code?: 1]
|
only: [good_locale_code?: 1]
|
||||||
|
|
||||||
@words_threshold 4
|
@words_threshold 4
|
||||||
|
@config_impl Application.compile_env(:pleroma, [__MODULE__, :config_impl], Pleroma.Config)
|
||||||
|
|
||||||
def configured? do
|
def configured? do
|
||||||
provider = get_provider()
|
provider = get_provider()
|
||||||
|
|
@ -53,6 +54,6 @@ defmodule Pleroma.Language.LanguageDetector do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp get_provider do
|
defp get_provider do
|
||||||
Pleroma.Config.get([__MODULE__, :provider])
|
@config_impl.get([__MODULE__, :provider])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -3,26 +3,51 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
defmodule Pleroma.Language.LanguageDetectorTest do
|
defmodule Pleroma.Language.LanguageDetectorTest do
|
||||||
use Pleroma.Web.ConnCase
|
use Pleroma.DataCase, async: true
|
||||||
|
|
||||||
alias Pleroma.Language.LanguageDetector
|
alias Pleroma.Language.LanguageDetector
|
||||||
|
alias Pleroma.Language.LanguageDetectorMock
|
||||||
|
alias Pleroma.UnstubbedConfigMock
|
||||||
|
|
||||||
setup do: clear_config([Pleroma.Language.LanguageDetector, :provider], LanguageDetectorMock)
|
import Mox
|
||||||
|
|
||||||
|
setup do
|
||||||
|
# Stub the UnstubbedConfigMock to return our mock for the provider
|
||||||
|
UnstubbedConfigMock
|
||||||
|
|> stub(:get, fn
|
||||||
|
[Pleroma.Language.LanguageDetector, :provider] -> LanguageDetectorMock
|
||||||
|
_other -> nil
|
||||||
|
end)
|
||||||
|
|
||||||
|
# Stub the LanguageDetectorMock with default implementations
|
||||||
|
LanguageDetectorMock
|
||||||
|
|> stub(:missing_dependencies, fn -> [] end)
|
||||||
|
|> stub(:configured?, fn -> true end)
|
||||||
|
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
test "it detects text language" do
|
test "it detects text language" do
|
||||||
|
LanguageDetectorMock
|
||||||
|
|> expect(:detect, fn _text -> "fr" end)
|
||||||
|
|
||||||
detected_language = LanguageDetector.detect("Je viens d'atterrir en Tchéquie.")
|
detected_language = LanguageDetector.detect("Je viens d'atterrir en Tchéquie.")
|
||||||
|
|
||||||
assert detected_language == "fr"
|
assert detected_language == "fr"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it returns nil if text is not long enough" do
|
test "it returns nil if text is not long enough" do
|
||||||
|
# No need to set expectations as the word count check happens before the provider is called
|
||||||
|
|
||||||
detected_language = LanguageDetector.detect("it returns nil")
|
detected_language = LanguageDetector.detect("it returns nil")
|
||||||
|
|
||||||
assert detected_language == nil
|
assert detected_language == nil
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it returns nil if no provider specified" do
|
test "it returns nil if no provider specified" do
|
||||||
clear_config([Pleroma.Language.LanguageDetector, :provider], nil)
|
# Override the stub to return nil for the provider
|
||||||
|
UnstubbedConfigMock
|
||||||
|
|> expect(:get, fn [Pleroma.Language.LanguageDetector, :provider] -> nil end)
|
||||||
|
|
||||||
detected_language = LanguageDetector.detect("this should also return nil")
|
detected_language = LanguageDetector.detect("this should also return nil")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,30 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidatorTest
|
||||||
alias Pleroma.Web.ActivityPub.ObjectValidator
|
alias Pleroma.Web.ActivityPub.ObjectValidator
|
||||||
alias Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator
|
alias Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator
|
||||||
alias Pleroma.Web.ActivityPub.Utils
|
alias Pleroma.Web.ActivityPub.Utils
|
||||||
|
alias Pleroma.Language.LanguageDetectorMock
|
||||||
|
alias Pleroma.UnstubbedConfigMock
|
||||||
|
|
||||||
import Mock
|
import Mox
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
|
||||||
|
# Setup for all tests
|
||||||
|
setup do
|
||||||
|
# Stub the UnstubbedConfigMock to return our mock for the provider
|
||||||
|
UnstubbedConfigMock
|
||||||
|
|> stub(:get, fn
|
||||||
|
[Pleroma.Language.LanguageDetector, :provider] -> LanguageDetectorMock
|
||||||
|
_other -> nil
|
||||||
|
end)
|
||||||
|
|
||||||
|
# Stub the LanguageDetectorMock with default implementations
|
||||||
|
LanguageDetectorMock
|
||||||
|
|> stub(:missing_dependencies, fn -> [] end)
|
||||||
|
|> stub(:configured?, fn -> true end)
|
||||||
|
|> stub(:detect, fn _text -> nil end)
|
||||||
|
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
describe "Notes" do
|
describe "Notes" do
|
||||||
setup do
|
setup do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
@ -235,9 +255,20 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidatorTest
|
||||||
assert object.language == "pl"
|
assert object.language == "pl"
|
||||||
end
|
end
|
||||||
|
|
||||||
test_with_mock "it doesn't call LanguageDetector when language is specified",
|
test "it doesn't call LanguageDetector when language is specified" do
|
||||||
Pleroma.Language.LanguageDetector,
|
# Set up expectation that detect should not be called
|
||||||
detect: fn _ -> nil end do
|
LanguageDetectorMock
|
||||||
|
|> expect(:detect, 0, fn _ -> flunk("LanguageDetector.detect should not be called") end)
|
||||||
|
|> stub(:missing_dependencies, fn -> [] end)
|
||||||
|
|> stub(:configured?, fn -> true end)
|
||||||
|
|
||||||
|
# Stub the UnstubbedConfigMock to return our mock for the provider
|
||||||
|
UnstubbedConfigMock
|
||||||
|
|> stub(:get, fn
|
||||||
|
[Pleroma.Language.LanguageDetector, :provider] -> LanguageDetectorMock
|
||||||
|
_other -> nil
|
||||||
|
end)
|
||||||
|
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
||||||
note = %{
|
note = %{
|
||||||
|
|
@ -253,8 +284,6 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidatorTest
|
||||||
}
|
}
|
||||||
|
|
||||||
ArticleNotePageValidator.cast_and_apply(note)
|
ArticleNotePageValidator.cast_and_apply(note)
|
||||||
|
|
||||||
refute called(Pleroma.Language.LanguageDetector.detect(:_))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it adds contentMap if language is specified" do
|
test "it adds contentMap if language is specified" do
|
||||||
|
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
# Pleroma: A lightweight social networking server
|
|
||||||
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
|
|
||||||
defmodule LanguageDetectorMock do
|
|
||||||
alias Pleroma.Language.LanguageDetector.Provider
|
|
||||||
|
|
||||||
@behaviour Provider
|
|
||||||
|
|
||||||
@impl Provider
|
|
||||||
def missing_dependencies, do: []
|
|
||||||
|
|
||||||
@impl Provider
|
|
||||||
def configured?, do: true
|
|
||||||
|
|
||||||
@impl Provider
|
|
||||||
def detect(_text), do: "fr"
|
|
||||||
end
|
|
||||||
|
|
@ -33,3 +33,7 @@ Mox.defmock(Pleroma.StubbedHTTPSignaturesMock, for: Pleroma.HTTPSignaturesAPI)
|
||||||
Mox.defmock(Pleroma.LoggerMock, for: Pleroma.Logging)
|
Mox.defmock(Pleroma.LoggerMock, for: Pleroma.Logging)
|
||||||
|
|
||||||
Mox.defmock(Pleroma.Uploaders.S3.ExAwsMock, for: Pleroma.Uploaders.S3.ExAwsAPI)
|
Mox.defmock(Pleroma.Uploaders.S3.ExAwsMock, for: Pleroma.Uploaders.S3.ExAwsAPI)
|
||||||
|
|
||||||
|
Mox.defmock(Pleroma.Language.LanguageDetectorMock,
|
||||||
|
for: Pleroma.Language.LanguageDetector.Provider
|
||||||
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue