Implement search engine & service in backend
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -7,6 +7,7 @@ defmodule Mobilizon.EventsTest do
|
||||
alias Mobilizon.Events
|
||||
alias Mobilizon.Events.{Comment, Event, Participant, Session, Tag, TagRelation, Track}
|
||||
alias Mobilizon.Storage.Page
|
||||
alias Mobilizon.Service.Search
|
||||
|
||||
@event_valid_attrs %{
|
||||
begins_on: "2010-04-17 14:00:00Z",
|
||||
@@ -22,6 +23,7 @@ defmodule Mobilizon.EventsTest do
|
||||
setup do
|
||||
actor = insert(:actor)
|
||||
event = insert(:event, organizer_actor: actor, visibility: :public)
|
||||
Search.insert_search_event(event)
|
||||
{:ok, actor: actor, event: event}
|
||||
end
|
||||
|
||||
@@ -55,22 +57,31 @@ defmodule Mobilizon.EventsTest do
|
||||
assert Events.get_event_with_preload!(event.id).participants == []
|
||||
end
|
||||
|
||||
test "build_events_by_name/1 returns events for a given name", %{
|
||||
test "build_events_for_search/1 returns events for a given name", %{
|
||||
event: %Event{title: title} = event
|
||||
} do
|
||||
assert title == hd(Events.build_events_by_name(event.title).elements).title
|
||||
assert title == hd(Events.build_events_for_search(event.title).elements).title
|
||||
|
||||
%Event{} = event2 = insert(:event, title: "Special event")
|
||||
Search.insert_search_event(event2)
|
||||
|
||||
assert event2.title ==
|
||||
Events.build_events_by_name("Special").elements |> hd() |> Map.get(:title)
|
||||
Events.build_events_for_search("Special").elements |> hd() |> Map.get(:title)
|
||||
|
||||
assert event2.title ==
|
||||
Events.build_events_by_name(" Special ").elements
|
||||
Events.build_events_for_search(" Spécïal ").elements
|
||||
|> hd()
|
||||
|> Map.get(:title)
|
||||
|
||||
assert %Page{elements: [], total: 0} == Events.build_events_by_name("")
|
||||
tag1 = insert(:tag, title: "coucou")
|
||||
tag2 = insert(:tag, title: "hola")
|
||||
%Event{} = event3 = insert(:event, title: "Nothing like it", tags: [tag1, tag2])
|
||||
Search.insert_search_event(event3)
|
||||
|
||||
assert event3.title ==
|
||||
Events.build_events_for_search("hola").elements |> hd() |> Map.get(:title)
|
||||
|
||||
assert %Page{elements: [], total: 0} == Events.build_events_for_search("")
|
||||
end
|
||||
|
||||
test "find_close_events/3 returns events in the area" do
|
||||
|
||||
@@ -46,13 +46,13 @@ defmodule MobilizonWeb.API.SearchTest do
|
||||
|
||||
test "search events" do
|
||||
with_mock Events,
|
||||
build_events_by_name: fn "toto", 1, 10 ->
|
||||
build_events_for_search: fn "toto", 1, 10 ->
|
||||
%Page{total: 1, elements: [%Event{title: "super toto event"}]}
|
||||
end do
|
||||
assert {:ok, %{total: 1, elements: [%Event{title: "super toto event"}]}} =
|
||||
Search.search_events("toto", 1, 10)
|
||||
|
||||
assert_called(Events.build_events_by_name("toto", 1, 10))
|
||||
assert_called(Events.build_events_for_search("toto", 1, 10))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2,6 +2,7 @@ defmodule MobilizonWeb.Resolvers.SearchResolverTest do
|
||||
use MobilizonWeb.ConnCase
|
||||
alias MobilizonWeb.AbsintheHelpers
|
||||
import Mobilizon.Factory
|
||||
alias Mobilizon.Service.Search
|
||||
|
||||
setup %{conn: conn} do
|
||||
user = insert(:user)
|
||||
@@ -16,6 +17,7 @@ defmodule MobilizonWeb.Resolvers.SearchResolverTest do
|
||||
insert(:actor, user: user, preferred_username: "test_person")
|
||||
insert(:actor, type: :Group, preferred_username: "test_group")
|
||||
event = insert(:event, title: "test_event")
|
||||
Search.insert_search_event(event)
|
||||
|
||||
query = """
|
||||
{
|
||||
@@ -48,7 +50,8 @@ defmodule MobilizonWeb.Resolvers.SearchResolverTest do
|
||||
} do
|
||||
actor = insert(:actor, user: user, preferred_username: "test_person")
|
||||
insert(:actor, type: :Group, preferred_username: "test_group")
|
||||
insert(:event, title: "test_event")
|
||||
event = insert(:event, title: "test_event")
|
||||
Search.insert_search_event(event)
|
||||
|
||||
query = """
|
||||
{
|
||||
@@ -80,7 +83,8 @@ defmodule MobilizonWeb.Resolvers.SearchResolverTest do
|
||||
} do
|
||||
insert(:actor, user: user, preferred_username: "test_person")
|
||||
group = insert(:actor, type: :Group, preferred_username: "test_group")
|
||||
insert(:event, title: "test_event")
|
||||
event = insert(:event, title: "test_event")
|
||||
Search.insert_search_event(event)
|
||||
|
||||
query = """
|
||||
{
|
||||
@@ -111,9 +115,12 @@ defmodule MobilizonWeb.Resolvers.SearchResolverTest do
|
||||
user: user
|
||||
} do
|
||||
insert(:actor, user: user, preferred_username: "person", name: "I like pineapples")
|
||||
insert(:event, title: "Pineapple fashion week")
|
||||
insert(:event, title: "I love pineAPPLE")
|
||||
insert(:event, title: "Hello")
|
||||
event1 = insert(:event, title: "Pineapple fashion week")
|
||||
event2 = insert(:event, title: "I love pineAPPLE")
|
||||
event3 = insert(:event, title: "Hello")
|
||||
Search.insert_search_event(event1)
|
||||
Search.insert_search_event(event2)
|
||||
Search.insert_search_event(event3)
|
||||
|
||||
query = """
|
||||
{
|
||||
@@ -140,8 +147,8 @@ defmodule MobilizonWeb.Resolvers.SearchResolverTest do
|
||||
|
||||
assert json_response(res, 200)["data"]["search_events"]["elements"]
|
||||
|> Enum.map(& &1["title"]) == [
|
||||
"I love pineAPPLE",
|
||||
"Pineapple fashion week"
|
||||
"Pineapple fashion week",
|
||||
"I love pineAPPLE"
|
||||
]
|
||||
end
|
||||
|
||||
@@ -151,9 +158,12 @@ defmodule MobilizonWeb.Resolvers.SearchResolverTest do
|
||||
} do
|
||||
actor = insert(:actor, user: user, preferred_username: "person", name: "I like pineapples")
|
||||
insert(:actor, preferred_username: "group", type: :Group, name: "pineapple group")
|
||||
insert(:event, title: "Pineapple fashion week")
|
||||
insert(:event, title: "I love pineAPPLE")
|
||||
insert(:event, title: "Hello")
|
||||
event1 = insert(:event, title: "Pineapple fashion week")
|
||||
event2 = insert(:event, title: "I love pineAPPLE")
|
||||
event3 = insert(:event, title: "Hello")
|
||||
Search.insert_search_event(event1)
|
||||
Search.insert_search_event(event2)
|
||||
Search.insert_search_event(event3)
|
||||
|
||||
query = """
|
||||
{
|
||||
@@ -188,6 +198,7 @@ defmodule MobilizonWeb.Resolvers.SearchResolverTest do
|
||||
insert(:actor, user: user, preferred_username: "person", name: "Torréfaction du Kafé")
|
||||
insert(:actor, type: :Group, preferred_username: "group", name: "Kafé group")
|
||||
event = insert(:event, title: "Tour du monde des Kafés")
|
||||
Search.insert_search_event(event)
|
||||
|
||||
# Elaborate query
|
||||
query = """
|
||||
@@ -218,7 +229,8 @@ defmodule MobilizonWeb.Resolvers.SearchResolverTest do
|
||||
} do
|
||||
insert(:actor, user: user, preferred_username: "person", name: "Torréfaction du Kafé")
|
||||
group = insert(:actor, type: :Group, preferred_username: "group", name: "Kafé group")
|
||||
insert(:event, title: "Tour du monde des Kafés")
|
||||
event = insert(:event, title: "Tour du monde des Kafés")
|
||||
Search.insert_search_event(event)
|
||||
|
||||
# Elaborate query
|
||||
query = """
|
||||
|
||||
Reference in New Issue
Block a user