Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Pleroma
pleroma
Commits
bdc9a722
Commit
bdc9a722
authored
Aug 05, 2019
by
Maksim
Committed by
kaniini
Aug 05, 2019
Browse files
tests for CommonApi/Utils
parent
fd60fd47
Changes
2
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/web/common_api/utils.ex
View file @
bdc9a722
...
...
@@ -47,26 +47,43 @@ def get_replied_to_activity(id) when not is_nil(id) do
def
get_replied_to_activity
(
_
),
do
:
nil
def
attachments_from_ids
(
data
)
do
if
Map
.
has_key?
(
data
,
"
desc
riptions"
)
do
attachments_from_ids_descs
(
data
[
"media_ids"
],
data
[
"descriptions"
])
else
attachments_from_ids
_no_descs
(
data
[
"media_ids"
])
end
def
attachments_from_ids
(
%{
"media_ids"
=>
ids
,
"descriptions"
=>
desc
}
=
_
)
do
attachments_from_ids_descs
(
ids
,
desc
)
end
def
attachments_from_ids
(%{
"media_ids"
=>
ids
}
=
_
)
do
attachments_from_ids_no_descs
(
ids
)
end
def
attachments_from_ids
(
_
),
do
:
[]
def
attachments_from_ids_no_descs
([]),
do
:
[]
def
attachments_from_ids_no_descs
(
ids
)
do
Enum
.
map
(
ids
||
[],
fn
media_id
->
Repo
.
get
(
Object
,
media_id
)
.
data
Enum
.
map
(
ids
,
fn
media_id
->
case
Repo
.
get
(
Object
,
media_id
)
do
%
Object
{
data:
data
}
=
_
->
data
_
->
nil
end
end
)
|>
Enum
.
filter
(
&
&1
)
end
def
attachments_from_ids_descs
([],
_
),
do
:
[]
def
attachments_from_ids_descs
(
ids
,
descs_str
)
do
{
_
,
descs
}
=
Jason
.
decode
(
descs_str
)
Enum
.
map
(
ids
||
[],
fn
media_id
->
Map
.
put
(
Repo
.
get
(
Object
,
media_id
)
.
data
,
"name"
,
descs
[
media_id
])
Enum
.
map
(
ids
,
fn
media_id
->
case
Repo
.
get
(
Object
,
media_id
)
do
%
Object
{
data:
data
}
=
_
->
Map
.
put
(
data
,
"name"
,
descs
[
media_id
])
_
->
nil
end
end
)
|>
Enum
.
filter
(
&
&1
)
end
@spec
get_to_and_cc
(
User
.
t
(),
list
(
String
.
t
()),
Activity
.
t
()
|
nil
,
String
.
t
())
::
...
...
@@ -247,20 +264,18 @@ def maybe_add_attachments({text, mentions, tags}, attachments, _no_links) do
end
def
add_attachments
(
text
,
attachments
)
do
attachment_text
=
Enum
.
map
(
attachments
,
fn
%{
"url"
=>
[%{
"href"
=>
href
}
|
_
]}
=
attachment
->
name
=
attachment
[
"name"
]
||
URI
.
decode
(
Path
.
basename
(
href
))
href
=
MediaProxy
.
url
(
href
)
"<a href=
\"
#{
href
}
\"
class='attachment'>
#{
shortname
(
name
)
}
</a>"
_
->
""
end
)
attachment_text
=
Enum
.
map
(
attachments
,
&
build_attachment_link
/
1
)
Enum
.
join
([
text
|
attachment_text
],
"<br>"
)
end
defp
build_attachment_link
(%{
"url"
=>
[%{
"href"
=>
href
}
|
_
]}
=
attachment
)
do
name
=
attachment
[
"name"
]
||
URI
.
decode
(
Path
.
basename
(
href
))
href
=
MediaProxy
.
url
(
href
)
"<a href=
\"
#{
href
}
\"
class='attachment'>
#{
shortname
(
name
)
}
</a>"
end
defp
build_attachment_link
(
_
),
do
:
""
def
format_input
(
text
,
format
,
options
\\
[])
@doc
"""
...
...
@@ -320,7 +335,7 @@ def make_note_data(
sensitive
\\
false
,
merge
\\
%{}
)
do
object
=
%{
%{
"type"
=>
"Note"
,
"to"
=>
to
,
"cc"
=>
cc
,
...
...
@@ -330,18 +345,20 @@ def make_note_data(
"context"
=>
context
,
"attachment"
=>
attachments
,
"actor"
=>
actor
,
"tag"
=>
tags
|>
Enum
.
map
(
fn
{
_
,
tag
}
->
tag
end
)
|>
Enum
.
uniq
()
"tag"
=>
Keyword
.
values
(
tags
)
|>
Enum
.
uniq
()
}
|>
add_in_reply_to
(
in_reply_to
)
|>
Map
.
merge
(
merge
)
end
object
=
with
false
<-
is_nil
(
in_reply_to
),
%
Object
{}
=
in_reply_to_object
<-
Object
.
normalize
(
in_reply_to
)
do
Map
.
put
(
object
,
"inReplyTo"
,
in_reply_to_object
.
data
[
"id"
])
else
_
->
object
end
defp
add_in_reply_to
(
object
,
nil
),
do
:
object
Map
.
merge
(
object
,
merge
)
defp
add_in_reply_to
(
object
,
in_reply_to
)
do
with
%
Object
{}
=
in_reply_to_object
<-
Object
.
normalize
(
in_reply_to
)
do
Map
.
put
(
object
,
"inReplyTo"
,
in_reply_to_object
.
data
[
"id"
])
else
_
->
object
end
end
def
format_naive_asctime
(
date
)
do
...
...
@@ -373,17 +390,16 @@ def to_masto_date(%NaiveDateTime{} = date) do
|>
String
.
replace
(
~r/(\.\d+)?$/
,
".000Z"
,
global:
false
)
end
def
to_masto_date
(
date
)
do
try
do
date
|>
NaiveDateTime
.
from_iso8601!
()
|>
NaiveDateTime
.
to_iso8601
()
|>
String
.
replace
(
~r/(\.\d+)?$/
,
".000Z"
,
global:
false
)
rescue
_e
->
""
def
to_masto_date
(
date
)
when
is_binary
(
date
)
do
with
{
:ok
,
date
}
<-
NaiveDateTime
.
from_iso8601
(
date
)
do
to_masto_date
(
date
)
else
_
->
""
end
end
def
to_masto_date
(
_
),
do
:
""
defp
shortname
(
name
)
do
if
String
.
length
(
name
)
<
30
do
name
...
...
@@ -428,7 +444,7 @@ def maybe_notify_mentioned_recipients(
object_data
=
cond
do
!
is_nil
(
object
)
->
not
is_nil
(
object
)
->
object
.
data
is_map
(
data
[
"object"
])
->
...
...
@@ -472,9 +488,9 @@ def maybe_notify_subscribers(recipients, _), do: recipients
def
maybe_extract_mentions
(%{
"tag"
=>
tag
})
do
tag
|>
Enum
.
filter
(
fn
x
->
is_map
(
x
)
end
)
|>
Enum
.
filter
(
fn
x
->
x
[
"type"
]
==
"Mention"
end
)
|>
Enum
.
filter
(
fn
x
->
is_map
(
x
)
&&
x
[
"type"
]
==
"Mention"
end
)
|>
Enum
.
map
(
fn
x
->
x
[
"href"
]
end
)
|>
Enum
.
uniq
()
end
def
maybe_extract_mentions
(
_
),
do
:
[]
...
...
test/web/common_api/common_api_utils_test.exs
View file @
bdc9a722
...
...
@@ -306,7 +306,6 @@ test "for private posts, not a reply" do
mentions
=
[
mentioned_user
.
ap_id
]
{
to
,
cc
}
=
Utils
.
get_to_and_cc
(
user
,
mentions
,
nil
,
"private"
)
assert
length
(
to
)
==
2
assert
length
(
cc
)
==
0
...
...
@@ -380,4 +379,222 @@ test "get activity by object when type isn't `Create` " do
assert
like
.
data
[
"object"
]
==
activity
.
data
[
"object"
]
end
end
describe
"to_master_date/1"
do
test
"removes microseconds from date (NaiveDateTime)"
do
assert
Utils
.
to_masto_date
(
~N[2015-01-23 23:50:07.123]
)
==
"2015-01-23T23:50:07.000Z"
end
test
"removes microseconds from date (String)"
do
assert
Utils
.
to_masto_date
(
"2015-01-23T23:50:07.123Z"
)
==
"2015-01-23T23:50:07.000Z"
end
test
"returns empty string when date invalid"
do
assert
Utils
.
to_masto_date
(
"2015-01?23T23:50:07.123Z"
)
==
""
end
end
describe
"conversation_id_to_context/1"
do
test
"returns id"
do
object
=
insert
(
:note
)
assert
Utils
.
conversation_id_to_context
(
object
.
id
)
==
object
.
data
[
"id"
]
end
test
"returns error if object not found"
do
assert
Utils
.
conversation_id_to_context
(
"123"
)
==
{
:error
,
"No such conversation"
}
end
end
describe
"maybe_notify_mentioned_recipients/2"
do
test
"returns recipients when activity is not `Create`"
do
activity
=
insert
(
:like_activity
)
assert
Utils
.
maybe_notify_mentioned_recipients
([
"test"
],
activity
)
==
[
"test"
]
end
test
"returns recipients from tag"
do
user
=
insert
(
:user
)
object
=
insert
(
:note
,
user:
user
,
data:
%{
"tag"
=>
[
%{
"type"
=>
"Hashtag"
},
""
,
%{
"type"
=>
"Mention"
,
"href"
=>
"https://testing.pleroma.lol/users/lain"
},
%{
"type"
=>
"Mention"
,
"href"
=>
"https://shitposter.club/user/5381"
},
%{
"type"
=>
"Mention"
,
"href"
=>
"https://shitposter.club/user/5381"
}
]
}
)
activity
=
insert
(
:note_activity
,
user:
user
,
note:
object
)
assert
Utils
.
maybe_notify_mentioned_recipients
([
"test"
],
activity
)
==
[
"test"
,
"https://testing.pleroma.lol/users/lain"
,
"https://shitposter.club/user/5381"
]
end
test
"returns recipients when object is map"
do
user
=
insert
(
:user
)
object
=
insert
(
:note
,
user:
user
)
activity
=
insert
(
:note_activity
,
user:
user
,
note:
object
,
data_attrs:
%{
"object"
=>
%{
"tag"
=>
[
%{
"type"
=>
"Hashtag"
},
""
,
%{
"type"
=>
"Mention"
,
"href"
=>
"https://testing.pleroma.lol/users/lain"
},
%{
"type"
=>
"Mention"
,
"href"
=>
"https://shitposter.club/user/5381"
},
%{
"type"
=>
"Mention"
,
"href"
=>
"https://shitposter.club/user/5381"
}
]
}
}
)
Pleroma
.
Repo
.
delete
(
object
)
assert
Utils
.
maybe_notify_mentioned_recipients
([
"test"
],
activity
)
==
[
"test"
,
"https://testing.pleroma.lol/users/lain"
,
"https://shitposter.club/user/5381"
]
end
test
"returns recipients when object not found"
do
user
=
insert
(
:user
)
object
=
insert
(
:note
,
user:
user
)
activity
=
insert
(
:note_activity
,
user:
user
,
note:
object
)
Pleroma
.
Repo
.
delete
(
object
)
assert
Utils
.
maybe_notify_mentioned_recipients
([
"test-test"
],
activity
)
==
[
"test-test"
]
end
end
describe
"attachments_from_ids_descs/2"
do
test
"returns [] when attachment ids is empty"
do
assert
Utils
.
attachments_from_ids_descs
([],
"{}"
)
==
[]
end
test
"returns list attachments with desc"
do
object
=
insert
(
:note
)
desc
=
Jason
.
encode!
(%{
object
.
id
=>
"test-desc"
})
assert
Utils
.
attachments_from_ids_descs
([
"
#{
object
.
id
}
"
,
"34"
],
desc
)
==
[
Map
.
merge
(
object
.
data
,
%{
"name"
=>
"test-desc"
})
]
end
end
describe
"attachments_from_ids/1"
do
test
"returns attachments with descs"
do
object
=
insert
(
:note
)
desc
=
Jason
.
encode!
(%{
object
.
id
=>
"test-desc"
})
assert
Utils
.
attachments_from_ids
(%{
"media_ids"
=>
[
"
#{
object
.
id
}
"
],
"descriptions"
=>
desc
})
==
[
Map
.
merge
(
object
.
data
,
%{
"name"
=>
"test-desc"
})
]
end
test
"returns attachments without descs"
do
object
=
insert
(
:note
)
assert
Utils
.
attachments_from_ids
(%{
"media_ids"
=>
[
"
#{
object
.
id
}
"
]})
==
[
object
.
data
]
end
test
"returns [] when not pass media_ids"
do
assert
Utils
.
attachments_from_ids
(%{})
==
[]
end
end
describe
"maybe_add_list_data/3"
do
test
"adds list params when found user list"
do
user
=
insert
(
:user
)
{
:ok
,
%
Pleroma
.
List
{}
=
list
}
=
Pleroma
.
List
.
create
(
"title"
,
user
)
assert
Utils
.
maybe_add_list_data
(%{
additional:
%{},
object:
%{}},
user
,
{
:list
,
list
.
id
})
==
%{
additional:
%{
"bcc"
=>
[
list
.
ap_id
],
"listMessage"
=>
list
.
ap_id
},
object:
%{
"listMessage"
=>
list
.
ap_id
}
}
end
test
"returns original params when list not found"
do
user
=
insert
(
:user
)
{
:ok
,
%
Pleroma
.
List
{}
=
list
}
=
Pleroma
.
List
.
create
(
"title"
,
insert
(
:user
))
assert
Utils
.
maybe_add_list_data
(%{
additional:
%{},
object:
%{}},
user
,
{
:list
,
list
.
id
})
==
%{
additional:
%{},
object:
%{}}
end
end
describe
"make_note_data/11"
do
test
"returns note data"
do
user
=
insert
(
:user
)
note
=
insert
(
:note
)
user2
=
insert
(
:user
)
user3
=
insert
(
:user
)
assert
Utils
.
make_note_data
(
user
.
ap_id
,
[
user2
.
ap_id
],
"2hu"
,
"<h1>This is :moominmamma: note</h1>"
,
[],
note
.
id
,
[
name:
"jimm"
],
"test summary"
,
[
user3
.
ap_id
],
false
,
%{
"custom_tag"
=>
"test"
}
)
==
%{
"actor"
=>
user
.
ap_id
,
"attachment"
=>
[],
"cc"
=>
[
user3
.
ap_id
],
"content"
=>
"<h1>This is :moominmamma: note</h1>"
,
"context"
=>
"2hu"
,
"sensitive"
=>
false
,
"summary"
=>
"test summary"
,
"tag"
=>
[
"jimm"
],
"to"
=>
[
user2
.
ap_id
],
"type"
=>
"Note"
,
"custom_tag"
=>
"test"
}
end
end
describe
"maybe_add_attachments/3"
do
test
"returns parsed results when no_links is true"
do
assert
Utils
.
maybe_add_attachments
(
{
"test"
,
[],
[
"tags"
]},
[],
true
)
==
{
"test"
,
[],
[
"tags"
]}
end
test
"adds attachments to parsed results"
do
attachment
=
%{
"url"
=>
[%{
"href"
=>
"SakuraPM.png"
}]}
assert
Utils
.
maybe_add_attachments
(
{
"test"
,
[],
[
"tags"
]},
[
attachment
],
false
)
==
{
"test<br><a href=
\"
SakuraPM.png
\"
class='attachment'>SakuraPM.png</a>"
,
[],
[
"tags"
]
}
end
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment