Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F33095847
announcement_controller_test.exs
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
11 KB
Referenced Files
None
Subscribers
None
announcement_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.AnnouncementControllerTest
do
use
Pleroma.Web.ConnCase
,
async
:
false
import
Pleroma.Factory
setup
do
clear_config
([
:instance
,
:admin_privileges
],
[
:announcements_manage_announcements
])
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
"GET /api/v1/pleroma/admin/announcements"
do
test
"it lists all announcements"
,
%{
conn
:
conn
}
do
%{
id
:
id
}
=
insert
(
:announcement
)
response
=
conn
|>
get
(
"/api/v1/pleroma/admin/announcements"
)
|>
json_response_and_validate_schema
(
:ok
)
assert
[%{
"id"
=>
^
id
}]
=
response
end
test
"it requires privileged role :announcements_manage_announcements"
,
%{
conn
:
conn
}
do
conn
|>
get
(
"/api/v1/pleroma/admin/announcements"
)
|>
json_response_and_validate_schema
(
:ok
)
clear_config
([
:instance
,
:admin_privileges
],
[])
conn
|>
get
(
"/api/v1/pleroma/admin/announcements"
)
|>
json_response
(
:forbidden
)
end
test
"it paginates announcements"
,
%{
conn
:
conn
}
do
_announcements
=
Enum
.
map
(
0
..
20
,
fn
_
->
insert
(
:announcement
)
end
)
response
=
conn
|>
get
(
"/api/v1/pleroma/admin/announcements"
)
|>
json_response_and_validate_schema
(
:ok
)
assert
length
(
response
)
==
20
end
test
"it paginates announcements with custom params"
,
%{
conn
:
conn
}
do
announcements
=
Enum
.
map
(
0
..
20
,
fn
_
->
insert
(
:announcement
)
end
)
response
=
conn
|>
get
(
"/api/v1/pleroma/admin/announcements"
,
limit
:
5
,
offset
:
7
)
|>
json_response_and_validate_schema
(
:ok
)
assert
length
(
response
)
==
5
assert
Enum
.
at
(
response
,
0
)[
"id"
]
==
Enum
.
at
(
announcements
,
7
)
.
id
end
test
"it returns empty list with out-of-bounds offset"
,
%{
conn
:
conn
}
do
_announcements
=
Enum
.
map
(
0
..
20
,
fn
_
->
insert
(
:announcement
)
end
)
response
=
conn
|>
get
(
"/api/v1/pleroma/admin/announcements"
,
offset
:
21
)
|>
json_response_and_validate_schema
(
:ok
)
assert
[]
=
response
end
test
"it rejects invalid pagination params"
,
%{
conn
:
conn
}
do
conn
|>
get
(
"/api/v1/pleroma/admin/announcements"
,
limit
:
0
)
|>
json_response_and_validate_schema
(
400
)
conn
|>
get
(
"/api/v1/pleroma/admin/announcements"
,
limit
:
-
1
)
|>
json_response_and_validate_schema
(
400
)
conn
|>
get
(
"/api/v1/pleroma/admin/announcements"
,
offset
:
-
1
)
|>
json_response_and_validate_schema
(
400
)
end
end
describe
"GET /api/v1/pleroma/admin/announcements/:id"
do
test
"it displays one announcement"
,
%{
conn
:
conn
}
do
%{
id
:
id
}
=
insert
(
:announcement
)
response
=
conn
|>
get
(
"/api/v1/pleroma/admin/announcements/
#{
id
}
"
)
|>
json_response_and_validate_schema
(
:ok
)
assert
%{
"id"
=>
^
id
}
=
response
end
test
"it requires privileged role :announcements_manage_announcements"
,
%{
conn
:
conn
}
do
%{
id
:
id
}
=
insert
(
:announcement
)
conn
|>
get
(
"/api/v1/pleroma/admin/announcements/
#{
id
}
"
)
|>
json_response_and_validate_schema
(
:ok
)
clear_config
([
:instance
,
:admin_privileges
],
[])
conn
|>
get
(
"/api/v1/pleroma/admin/announcements/
#{
id
}
"
)
|>
json_response
(
:forbidden
)
end
test
"it returns not found for non-existent id"
,
%{
conn
:
conn
}
do
%{
id
:
id
}
=
insert
(
:announcement
)
_response
=
conn
|>
get
(
"/api/v1/pleroma/admin/announcements/
#{
id
}
xxx"
)
|>
json_response_and_validate_schema
(
:not_found
)
end
end
describe
"DELETE /api/v1/pleroma/admin/announcements/:id"
do
test
"it deletes specified announcement"
,
%{
conn
:
conn
}
do
%{
id
:
id
}
=
insert
(
:announcement
)
_response
=
conn
|>
delete
(
"/api/v1/pleroma/admin/announcements/
#{
id
}
"
)
|>
json_response_and_validate_schema
(
:ok
)
end
test
"it requires privileged role :announcements_manage_announcements"
,
%{
conn
:
conn
}
do
%{
id
:
id
}
=
insert
(
:announcement
)
conn
|>
delete
(
"/api/v1/pleroma/admin/announcements/
#{
id
}
"
)
|>
json_response_and_validate_schema
(
:ok
)
clear_config
([
:instance
,
:admin_privileges
],
[])
conn
|>
delete
(
"/api/v1/pleroma/admin/announcements/
#{
id
}
"
)
|>
json_response
(
:forbidden
)
end
test
"it returns not found for non-existent id"
,
%{
conn
:
conn
}
do
%{
id
:
id
}
=
insert
(
:announcement
)
_response
=
conn
|>
delete
(
"/api/v1/pleroma/admin/announcements/
#{
id
}
xxx"
)
|>
json_response_and_validate_schema
(
:not_found
)
assert
%{
id
:
^
id
}
=
Pleroma.Announcement
.
get_by_id
(
id
)
end
end
describe
"PATCH /api/v1/pleroma/admin/announcements/:id"
do
test
"it returns not found for non-existent id"
,
%{
conn
:
conn
}
do
%{
id
:
id
}
=
insert
(
:announcement
)
_response
=
conn
|>
put_req_header
(
"content-type"
,
"application/json"
)
|>
patch
(
"/api/v1/pleroma/admin/announcements/
#{
id
}
xxx"
,
%{})
|>
json_response_and_validate_schema
(
:not_found
)
assert
%{
id
:
^
id
}
=
Pleroma.Announcement
.
get_by_id
(
id
)
end
test
"it updates a field"
,
%{
conn
:
conn
}
do
%{
id
:
id
}
=
insert
(
:announcement
)
now
=
NaiveDateTime
.
utc_now
()
|>
NaiveDateTime
.
truncate
(
:second
)
starts_at
=
NaiveDateTime
.
add
(
now
,
-
10
,
:second
)
_response
=
conn
|>
put_req_header
(
"content-type"
,
"application/json"
)
|>
patch
(
"/api/v1/pleroma/admin/announcements/
#{
id
}
"
,
%{
starts_at
:
NaiveDateTime
.
to_iso8601
(
starts_at
)
})
|>
json_response_and_validate_schema
(
:ok
)
new
=
Pleroma.Announcement
.
get_by_id
(
id
)
assert
NaiveDateTime
.
compare
(
new
.
starts_at
,
starts_at
)
==
:eq
end
test
"it requires privileged role :announcements_manage_announcements"
,
%{
conn
:
conn
}
do
%{
id
:
id
}
=
insert
(
:announcement
)
now
=
NaiveDateTime
.
utc_now
()
|>
NaiveDateTime
.
truncate
(
:second
)
starts_at
=
NaiveDateTime
.
add
(
now
,
-
10
,
:second
)
conn
|>
put_req_header
(
"content-type"
,
"application/json"
)
|>
patch
(
"/api/v1/pleroma/admin/announcements/
#{
id
}
"
,
%{
starts_at
:
NaiveDateTime
.
to_iso8601
(
starts_at
)
})
|>
json_response_and_validate_schema
(
:ok
)
clear_config
([
:instance
,
:admin_privileges
],
[])
conn
|>
put_req_header
(
"content-type"
,
"application/json"
)
|>
patch
(
"/api/v1/pleroma/admin/announcements/
#{
id
}
"
,
%{
starts_at
:
NaiveDateTime
.
to_iso8601
(
starts_at
)
})
|>
json_response
(
:forbidden
)
end
test
"it updates with time with utc timezone"
,
%{
conn
:
conn
}
do
%{
id
:
id
}
=
insert
(
:announcement
)
now
=
DateTime
.
now
(
"Etc/UTC"
)
|>
elem
(
1
)
|>
DateTime
.
truncate
(
:second
)
starts_at
=
DateTime
.
add
(
now
,
-
10
,
:second
)
_response
=
conn
|>
put_req_header
(
"content-type"
,
"application/json"
)
|>
patch
(
"/api/v1/pleroma/admin/announcements/
#{
id
}
"
,
%{
starts_at
:
DateTime
.
to_iso8601
(
starts_at
)
})
|>
json_response_and_validate_schema
(
:ok
)
new
=
Pleroma.Announcement
.
get_by_id
(
id
)
assert
DateTime
.
compare
(
new
.
starts_at
,
starts_at
)
==
:eq
end
test
"it updates a data field"
,
%{
conn
:
conn
}
do
%{
id
:
id
}
=
announcement
=
insert
(
:announcement
,
data
:
%{
"all_day"
=>
true
})
assert
announcement
.
data
[
"all_day"
]
==
true
new_content
=
"new content"
response
=
conn
|>
put_req_header
(
"content-type"
,
"application/json"
)
|>
patch
(
"/api/v1/pleroma/admin/announcements/
#{
id
}
"
,
%{
content
:
new_content
})
|>
json_response_and_validate_schema
(
:ok
)
assert
response
[
"content"
]
==
new_content
assert
response
[
"all_day"
]
==
true
new
=
Pleroma.Announcement
.
get_by_id
(
id
)
assert
new
.
data
[
"content"
]
==
new_content
assert
new
.
data
[
"all_day"
]
==
true
end
test
"it nullifies a nullable field"
,
%{
conn
:
conn
}
do
now
=
NaiveDateTime
.
utc_now
()
|>
NaiveDateTime
.
truncate
(
:second
)
starts_at
=
NaiveDateTime
.
add
(
now
,
-
10
,
:second
)
%{
id
:
id
}
=
insert
(
:announcement
,
starts_at
:
starts_at
)
response
=
conn
|>
put_req_header
(
"content-type"
,
"application/json"
)
|>
patch
(
"/api/v1/pleroma/admin/announcements/
#{
id
}
"
,
%{
starts_at
:
nil
})
|>
json_response_and_validate_schema
(
:ok
)
assert
response
[
"starts_at"
]
==
nil
new
=
Pleroma.Announcement
.
get_by_id
(
id
)
assert
new
.
starts_at
==
nil
end
end
describe
"POST /api/v1/pleroma/admin/announcements"
do
test
"it creates an announcement"
,
%{
conn
:
conn
}
do
content
=
"test post announcement api"
now
=
NaiveDateTime
.
utc_now
()
|>
NaiveDateTime
.
truncate
(
:second
)
starts_at
=
NaiveDateTime
.
add
(
now
,
-
10
,
:second
)
ends_at
=
NaiveDateTime
.
add
(
now
,
10
,
:second
)
response
=
conn
|>
put_req_header
(
"content-type"
,
"application/json"
)
|>
post
(
"/api/v1/pleroma/admin/announcements"
,
%{
"content"
=>
content
,
"starts_at"
=>
NaiveDateTime
.
to_iso8601
(
starts_at
),
"ends_at"
=>
NaiveDateTime
.
to_iso8601
(
ends_at
),
"all_day"
=>
true
})
|>
json_response_and_validate_schema
(
:ok
)
assert
%{
"content"
=>
^
content
,
"all_day"
=>
true
}
=
response
announcement
=
Pleroma.Announcement
.
get_by_id
(
response
[
"id"
])
assert
not
is_nil
(
announcement
)
assert
NaiveDateTime
.
compare
(
announcement
.
starts_at
,
starts_at
)
==
:eq
assert
NaiveDateTime
.
compare
(
announcement
.
ends_at
,
ends_at
)
==
:eq
end
test
"it requires privileged role :announcements_manage_announcements"
,
%{
conn
:
conn
}
do
content
=
"test post announcement api"
now
=
NaiveDateTime
.
utc_now
()
|>
NaiveDateTime
.
truncate
(
:second
)
starts_at
=
NaiveDateTime
.
add
(
now
,
-
10
,
:second
)
ends_at
=
NaiveDateTime
.
add
(
now
,
10
,
:second
)
conn
|>
put_req_header
(
"content-type"
,
"application/json"
)
|>
post
(
"/api/v1/pleroma/admin/announcements"
,
%{
"content"
=>
content
,
"starts_at"
=>
NaiveDateTime
.
to_iso8601
(
starts_at
),
"ends_at"
=>
NaiveDateTime
.
to_iso8601
(
ends_at
),
"all_day"
=>
true
})
|>
json_response_and_validate_schema
(
:ok
)
clear_config
([
:instance
,
:admin_privileges
],
[])
conn
|>
put_req_header
(
"content-type"
,
"application/json"
)
|>
post
(
"/api/v1/pleroma/admin/announcements"
,
%{
"content"
=>
content
,
"starts_at"
=>
NaiveDateTime
.
to_iso8601
(
starts_at
),
"ends_at"
=>
NaiveDateTime
.
to_iso8601
(
ends_at
),
"all_day"
=>
true
})
|>
json_response
(
:forbidden
)
end
test
"creating with time with utc timezones"
,
%{
conn
:
conn
}
do
content
=
"test post announcement api"
now
=
DateTime
.
now
(
"Etc/UTC"
)
|>
elem
(
1
)
|>
DateTime
.
truncate
(
:second
)
starts_at
=
DateTime
.
add
(
now
,
-
10
,
:second
)
ends_at
=
DateTime
.
add
(
now
,
10
,
:second
)
response
=
conn
|>
put_req_header
(
"content-type"
,
"application/json"
)
|>
post
(
"/api/v1/pleroma/admin/announcements"
,
%{
"content"
=>
content
,
"starts_at"
=>
DateTime
.
to_iso8601
(
starts_at
),
"ends_at"
=>
DateTime
.
to_iso8601
(
ends_at
),
"all_day"
=>
true
})
|>
json_response_and_validate_schema
(
:ok
)
assert
%{
"content"
=>
^
content
,
"all_day"
=>
true
}
=
response
announcement
=
Pleroma.Announcement
.
get_by_id
(
response
[
"id"
])
assert
not
is_nil
(
announcement
)
assert
DateTime
.
compare
(
announcement
.
starts_at
,
starts_at
)
==
:eq
assert
DateTime
.
compare
(
announcement
.
ends_at
,
ends_at
)
==
:eq
end
end
end
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Jan 20, 9:54 AM (1 d, 14 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
686835
Default Alt Text
announcement_controller_test.exs (11 KB)
Attached To
Mode
rPUBE pleroma-upstream
Attached
Detach File
Event Timeline
Log In to Comment