Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F33095861
chat_controller_test.exs
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
7 KB
Referenced Files
None
Subscribers
None
chat_controller_test.exs
View Options
# Pleroma: A lightweight social networking server
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule
Pleroma.Web.AdminAPI.ChatControllerTest
do
use
Pleroma.Web.ConnCase
,
async
:
false
import
Pleroma.Factory
alias
Pleroma.Chat
alias
Pleroma.Chat.MessageReference
alias
Pleroma.ModerationLog
alias
Pleroma.Object
alias
Pleroma.Repo
alias
Pleroma.Web.CommonAPI
defp
admin_setup
do
admin
=
insert
(
:user
,
is_admin
:
true
)
token
=
insert
(
:oauth_admin_token
,
user
:
admin
)
conn
=
build_conn
()
|>
assign
(
:user
,
admin
)
|>
assign
(
:token
,
token
)
{
:ok
,
%{
admin
:
admin
,
token
:
token
,
conn
:
conn
}}
end
describe
"DELETE /api/pleroma/admin/chats/:id/messages/:message_id"
do
setup
do
clear_config
([
:instance
,
:admin_privileges
],
[
:messages_delete
])
admin_setup
()
end
test
"it deletes a message from the chat"
,
%{
conn
:
conn
,
admin
:
admin
}
do
user
=
insert
(
:user
)
recipient
=
insert
(
:user
)
{
:ok
,
message
}
=
CommonAPI
.
post_chat_message
(
user
,
recipient
,
"Hello darkness my old friend"
)
object
=
Object
.
normalize
(
message
,
fetch
:
false
)
chat
=
Chat
.
get
(
user
.
id
,
recipient
.
ap_id
)
recipient_chat
=
Chat
.
get
(
recipient
.
id
,
user
.
ap_id
)
cm_ref
=
MessageReference
.
for_chat_and_object
(
chat
,
object
)
recipient_cm_ref
=
MessageReference
.
for_chat_and_object
(
recipient_chat
,
object
)
result
=
conn
|>
put_req_header
(
"content-type"
,
"application/json"
)
|>
delete
(
"/api/pleroma/admin/chats/
#{
chat
.
id
}
/messages/
#{
cm_ref
.
id
}
"
)
|>
json_response_and_validate_schema
(
200
)
log_entry
=
Repo
.
one
(
ModerationLog
)
assert
ModerationLog
.
get_log_entry_message
(
log_entry
)
==
"@
#{
admin
.
nickname
}
deleted chat message
#
#{
message
.
id
}
"
assert
result
[
"id"
]
==
cm_ref
.
id
refute
MessageReference
.
get_by_id
(
cm_ref
.
id
)
refute
MessageReference
.
get_by_id
(
recipient_cm_ref
.
id
)
assert
%{
data
:
%{
"type"
=>
"Tombstone"
}}
=
Object
.
get_by_id
(
object
.
id
)
end
test
"it requires privileged role :messages_delete"
,
%{
conn
:
conn
}
do
clear_config
([
:instance
,
:admin_privileges
],
[])
assert
conn
|>
put_req_header
(
"content-type"
,
"application/json"
)
|>
delete
(
"/api/pleroma/admin/chats/some_id/messages/some_ref_id"
)
|>
json_response
(
:forbidden
)
end
end
describe
"GET /api/pleroma/admin/chats/:id/messages"
do
setup
do
clear_config
([
:instance
,
:admin_privileges
],
[
:messages_read
])
admin_setup
()
end
test
"it paginates"
,
%{
conn
:
conn
}
do
user
=
insert
(
:user
)
recipient
=
insert
(
:user
)
Enum
.
each
(
1
..
30
,
fn
_
->
{
:ok
,
_
}
=
CommonAPI
.
post_chat_message
(
user
,
recipient
,
"hey"
)
end
)
chat
=
Chat
.
get
(
user
.
id
,
recipient
.
ap_id
)
result
=
conn
|>
get
(
"/api/pleroma/admin/chats/
#{
chat
.
id
}
/messages"
)
|>
json_response_and_validate_schema
(
200
)
assert
length
(
result
)
==
20
result
=
conn
|>
get
(
"/api/pleroma/admin/chats/
#{
chat
.
id
}
/messages?max_id=
#{
List
.
last
(
result
)[
"id"
]
}
"
)
|>
json_response_and_validate_schema
(
200
)
assert
length
(
result
)
==
10
end
test
"it returns the messages for a given chat"
,
%{
conn
:
conn
}
do
user
=
insert
(
:user
)
other_user
=
insert
(
:user
)
third_user
=
insert
(
:user
)
{
:ok
,
_
}
=
CommonAPI
.
post_chat_message
(
user
,
other_user
,
"hey"
)
{
:ok
,
_
}
=
CommonAPI
.
post_chat_message
(
user
,
third_user
,
"hey"
)
{
:ok
,
_
}
=
CommonAPI
.
post_chat_message
(
user
,
other_user
,
"how are you?"
)
{
:ok
,
_
}
=
CommonAPI
.
post_chat_message
(
other_user
,
user
,
"fine, how about you?"
)
chat
=
Chat
.
get
(
user
.
id
,
other_user
.
ap_id
)
result
=
conn
|>
get
(
"/api/pleroma/admin/chats/
#{
chat
.
id
}
/messages"
)
|>
json_response_and_validate_schema
(
200
)
result
|>
Enum
.
each
(
fn
message
->
assert
message
[
"chat_id"
]
==
chat
.
id
|>
to_string
()
end
)
assert
length
(
result
)
==
3
end
test
"it requires privileged role :messages_read"
,
%{
conn
:
conn
}
do
clear_config
([
:instance
,
:admin_privileges
],
[])
conn
=
get
(
conn
,
"/api/pleroma/admin/chats/some_id/messages"
)
assert
json_response
(
conn
,
:forbidden
)
end
end
describe
"GET /api/pleroma/admin/chats/:id"
do
setup
do
clear_config
([
:instance
,
:admin_privileges
],
[
:messages_read
])
admin_setup
()
end
test
"it returns a chat"
,
%{
conn
:
conn
}
do
user
=
insert
(
:user
)
other_user
=
insert
(
:user
)
{
:ok
,
chat
}
=
Chat
.
get_or_create
(
user
.
id
,
other_user
.
ap_id
)
result
=
conn
|>
get
(
"/api/pleroma/admin/chats/
#{
chat
.
id
}
"
)
|>
json_response_and_validate_schema
(
200
)
assert
result
[
"id"
]
==
to_string
(
chat
.
id
)
assert
%{}
=
result
[
"sender"
]
assert
%{}
=
result
[
"receiver"
]
refute
result
[
"account"
]
end
test
"it requires privileged role :messages_read"
,
%{
conn
:
conn
}
do
clear_config
([
:instance
,
:admin_privileges
],
[])
conn
=
get
(
conn
,
"/api/pleroma/admin/chats/some_id"
)
assert
json_response
(
conn
,
:forbidden
)
end
end
describe
"unauthorized chat moderation"
do
setup
do
user
=
insert
(
:user
)
recipient
=
insert
(
:user
)
{
:ok
,
message
}
=
CommonAPI
.
post_chat_message
(
user
,
recipient
,
"Yo"
)
object
=
Object
.
normalize
(
message
,
fetch
:
false
)
chat
=
Chat
.
get
(
user
.
id
,
recipient
.
ap_id
)
cm_ref
=
MessageReference
.
for_chat_and_object
(
chat
,
object
)
%{
conn
:
conn
}
=
oauth_access
([
"read:chats"
,
"write:chats"
])
%{
conn
:
conn
,
chat
:
chat
,
cm_ref
:
cm_ref
}
end
test
"DELETE /api/pleroma/admin/chats/:id/messages/:message_id"
,
%{
conn
:
conn
,
chat
:
chat
,
cm_ref
:
cm_ref
}
do
conn
|>
put_req_header
(
"content-type"
,
"application/json"
)
|>
delete
(
"/api/pleroma/admin/chats/
#{
chat
.
id
}
/messages/
#{
cm_ref
.
id
}
"
)
|>
json_response
(
403
)
assert
MessageReference
.
get_by_id
(
cm_ref
.
id
)
==
cm_ref
end
test
"GET /api/pleroma/admin/chats/:id/messages"
,
%{
conn
:
conn
,
chat
:
chat
}
do
conn
|>
get
(
"/api/pleroma/admin/chats/
#{
chat
.
id
}
/messages"
)
|>
json_response
(
403
)
end
test
"GET /api/pleroma/admin/chats/:id"
,
%{
conn
:
conn
,
chat
:
chat
}
do
conn
|>
get
(
"/api/pleroma/admin/chats/
#{
chat
.
id
}
"
)
|>
json_response
(
403
)
end
end
describe
"unauthenticated chat moderation"
do
setup
do
user
=
insert
(
:user
)
recipient
=
insert
(
:user
)
{
:ok
,
message
}
=
CommonAPI
.
post_chat_message
(
user
,
recipient
,
"Yo"
)
object
=
Object
.
normalize
(
message
,
fetch
:
false
)
chat
=
Chat
.
get
(
user
.
id
,
recipient
.
ap_id
)
cm_ref
=
MessageReference
.
for_chat_and_object
(
chat
,
object
)
%{
conn
:
build_conn
(),
chat
:
chat
,
cm_ref
:
cm_ref
}
end
test
"DELETE /api/pleroma/admin/chats/:id/messages/:message_id"
,
%{
conn
:
conn
,
chat
:
chat
,
cm_ref
:
cm_ref
}
do
conn
|>
put_req_header
(
"content-type"
,
"application/json"
)
|>
delete
(
"/api/pleroma/admin/chats/
#{
chat
.
id
}
/messages/
#{
cm_ref
.
id
}
"
)
|>
json_response
(
403
)
assert
MessageReference
.
get_by_id
(
cm_ref
.
id
)
==
cm_ref
end
test
"GET /api/pleroma/admin/chats/:id/messages"
,
%{
conn
:
conn
,
chat
:
chat
}
do
conn
|>
get
(
"/api/pleroma/admin/chats/
#{
chat
.
id
}
/messages"
)
|>
json_response
(
403
)
end
test
"GET /api/pleroma/admin/chats/:id"
,
%{
conn
:
conn
,
chat
:
chat
}
do
conn
|>
get
(
"/api/pleroma/admin/chats/
#{
chat
.
id
}
"
)
|>
json_response
(
403
)
end
end
end
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Jan 20, 9:55 AM (1 d, 13 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
835296
Default Alt Text
chat_controller_test.exs (7 KB)
Attached To
Mode
rPUBE pleroma-upstream
Attached
Detach File
Event Timeline
Log In to Comment