Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Jérome Perrin
gitlab-ce
Commits
6a58af3a
Commit
6a58af3a
authored
Aug 25, 2016
by
Robert Speicher
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add BroadcastMessage API implementation
parent
46b5fc2c
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
286 additions
and
0 deletions
+286
-0
CHANGELOG
CHANGELOG
+1
-0
lib/api/api.rb
lib/api/api.rb
+1
-0
lib/api/broadcast_messages.rb
lib/api/broadcast_messages.rb
+99
-0
lib/api/entities.rb
lib/api/entities.rb
+5
-0
spec/requests/api/broadcast_messages_spec.rb
spec/requests/api/broadcast_messages_spec.rb
+180
-0
No files found.
CHANGELOG
View file @
6a58af3a
...
@@ -22,6 +22,7 @@ v 8.12.0 (unreleased)
...
@@ -22,6 +22,7 @@ v 8.12.0 (unreleased)
- Remove Gitorious import
- Remove Gitorious import
- Fix inconsistent background color for filter input field (ClemMakesApps)
- Fix inconsistent background color for filter input field (ClemMakesApps)
- Add Sentry logging to API calls
- Add Sentry logging to API calls
- Add BroadcastMessage API
- Automatically expand hidden discussions when accessed by a permalink !5585 (Mike Greiling)
- Automatically expand hidden discussions when accessed by a permalink !5585 (Mike Greiling)
- Remove unused mixins (ClemMakesApps)
- Remove unused mixins (ClemMakesApps)
- Add search to all issue board lists
- Add search to all issue board lists
...
...
lib/api/api.rb
View file @
6a58af3a
...
@@ -31,6 +31,7 @@ module API
...
@@ -31,6 +31,7 @@ module API
mount
::
API
::
AccessRequests
mount
::
API
::
AccessRequests
mount
::
API
::
AwardEmoji
mount
::
API
::
AwardEmoji
mount
::
API
::
Branches
mount
::
API
::
Branches
mount
::
API
::
BroadcastMessages
mount
::
API
::
Builds
mount
::
API
::
Builds
mount
::
API
::
CommitStatuses
mount
::
API
::
CommitStatuses
mount
::
API
::
Commits
mount
::
API
::
Commits
...
...
lib/api/broadcast_messages.rb
0 → 100644
View file @
6a58af3a
module
API
class
BroadcastMessages
<
Grape
::
API
before
{
authenticate!
}
before
{
authenticated_as_admin!
}
resource
:broadcast_messages
do
helpers
do
def
find_message
BroadcastMessage
.
find
(
params
[
:id
])
end
end
desc
'Get all broadcast messages'
do
detail
'This feature was introduced in GitLab 8.12.'
success
Entities
::
BroadcastMessage
end
params
do
optional
:page
,
type:
Integer
,
desc:
'Current page number'
optional
:per_page
,
type:
Integer
,
desc:
'Number of messages per page'
end
get
do
messages
=
BroadcastMessage
.
all
present
paginate
(
messages
),
with:
Entities
::
BroadcastMessage
end
desc
'Create a broadcast message'
do
detail
'This feature was introduced in GitLab 8.12.'
success
Entities
::
BroadcastMessage
end
params
do
requires
:message
,
type:
String
,
desc:
'Message to display'
optional
:starts_at
,
type:
DateTime
,
desc:
'Starting time'
,
default:
->
{
Time
.
zone
.
now
}
optional
:ends_at
,
type:
DateTime
,
desc:
'Ending time'
,
default:
->
{
1
.
hour
.
from_now
}
optional
:color
,
type:
String
,
desc:
'Background color'
optional
:font
,
type:
String
,
desc:
'Foreground color'
end
post
do
create_params
=
declared
(
params
,
include_missing:
false
).
to_h
message
=
BroadcastMessage
.
create
(
create_params
)
if
message
.
persisted?
present
message
,
with:
Entities
::
BroadcastMessage
else
render_validation_error!
(
message
)
end
end
desc
'Get a specific broadcast message'
do
detail
'This feature was introduced in GitLab 8.12.'
success
Entities
::
BroadcastMessage
end
params
do
requires
:id
,
type:
Integer
,
desc:
'Broadcast message ID'
end
get
':id'
do
message
=
find_message
present
message
,
with:
Entities
::
BroadcastMessage
end
desc
'Update a broadcast message'
do
detail
'This feature was introduced in GitLab 8.12.'
success
Entities
::
BroadcastMessage
end
params
do
requires
:id
,
type:
Integer
,
desc:
'Broadcast message ID'
optional
:message
,
type:
String
,
desc:
'Message to display'
optional
:starts_at
,
type:
DateTime
,
desc:
'Starting time'
optional
:ends_at
,
type:
DateTime
,
desc:
'Ending time'
optional
:color
,
type:
String
,
desc:
'Background color'
optional
:font
,
type:
String
,
desc:
'Foreground color'
end
put
':id'
do
message
=
find_message
update_params
=
declared
(
params
,
include_missing:
false
).
to_h
if
message
.
update
(
update_params
)
present
message
,
with:
Entities
::
BroadcastMessage
else
render_validation_error!
(
message
)
end
end
desc
'Delete a broadcast message'
do
detail
'This feature was introduced in GitLab 8.12.'
success
Entities
::
BroadcastMessage
end
params
do
requires
:id
,
type:
Integer
,
desc:
'Broadcast message ID'
end
delete
':id'
do
message
=
find_message
present
message
.
destroy
,
with:
Entities
::
BroadcastMessage
end
end
end
end
lib/api/entities.rb
View file @
6a58af3a
...
@@ -575,5 +575,10 @@ module API
...
@@ -575,5 +575,10 @@ module API
class
Template
<
Grape
::
Entity
class
Template
<
Grape
::
Entity
expose
:name
,
:content
expose
:name
,
:content
end
end
class
BroadcastMessage
<
Grape
::
Entity
expose
:id
,
:message
,
:starts_at
,
:ends_at
,
:color
,
:font
expose
:active?
,
as: :active
end
end
end
end
end
spec/requests/api/broadcast_messages_spec.rb
0 → 100644
View file @
6a58af3a
require
'spec_helper'
describe
API
::
BroadcastMessages
,
api:
true
do
include
ApiHelpers
let
(
:user
)
{
create
(
:user
)
}
let
(
:admin
)
{
create
(
:admin
)
}
describe
'GET /broadcast_messages'
do
it
'returns a 401 for anonymous users'
do
get
api
(
'/broadcast_messages'
)
expect
(
response
).
to
have_http_status
(
401
)
end
it
'returns a 403 for users'
do
get
api
(
'/broadcast_messages'
,
user
)
expect
(
response
).
to
have_http_status
(
403
)
end
it
'returns an Array of BroadcastMessages for admins'
do
create
(
:broadcast_message
)
get
api
(
'/broadcast_messages'
,
admin
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
).
to
be_kind_of
(
Array
)
expect
(
json_response
.
first
.
keys
)
.
to
match_array
(
%w(id message starts_at ends_at color font active)
)
end
end
describe
'GET /broadcast_messages/:id'
do
let!
(
:message
)
{
create
(
:broadcast_message
)
}
it
'returns a 401 for anonymous users'
do
get
api
(
"/broadcast_messages/
#{
message
.
id
}
"
)
expect
(
response
).
to
have_http_status
(
401
)
end
it
'returns a 403 for users'
do
get
api
(
"/broadcast_messages/
#{
message
.
id
}
"
,
user
)
expect
(
response
).
to
have_http_status
(
403
)
end
it
'returns the specified message for admins'
do
get
api
(
"/broadcast_messages/
#{
message
.
id
}
"
,
admin
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
[
'id'
]).
to
eq
message
.
id
expect
(
json_response
.
keys
)
.
to
match_array
(
%w(id message starts_at ends_at color font active)
)
end
end
describe
'POST /broadcast_messages'
do
it
'returns a 401 for anonymous users'
do
post
api
(
'/broadcast_messages'
),
attributes_for
(
:broadcast_message
)
expect
(
response
).
to
have_http_status
(
401
)
end
it
'returns a 403 for users'
do
post
api
(
'/broadcast_messages'
,
user
),
attributes_for
(
:broadcast_message
)
expect
(
response
).
to
have_http_status
(
403
)
end
context
'as an admin'
do
it
'requires the `message` parameter'
do
attrs
=
attributes_for
(
:broadcast_message
)
attrs
.
delete
(
:message
)
post
api
(
'/broadcast_messages'
,
admin
),
attrs
expect
(
response
).
to
have_http_status
(
400
)
expect
(
json_response
[
'error'
]).
to
eq
'message is missing'
end
it
'defines sane default start and end times'
do
time
=
Time
.
zone
.
parse
(
'2016-07-02 10:11:12'
)
travel_to
(
time
)
do
post
api
(
'/broadcast_messages'
,
admin
),
message:
'Test message'
expect
(
response
).
to
have_http_status
(
201
)
expect
(
json_response
[
'starts_at'
]).
to
eq
'2016-07-02T10:11:12.000Z'
expect
(
json_response
[
'ends_at'
]).
to
eq
'2016-07-02T11:11:12.000Z'
end
end
it
'accepts a custom background and foreground color'
do
attrs
=
attributes_for
(
:broadcast_message
,
color:
'#000000'
,
font:
'#cecece'
)
post
api
(
'/broadcast_messages'
,
admin
),
attrs
expect
(
response
).
to
have_http_status
(
201
)
expect
(
json_response
[
'color'
]).
to
eq
attrs
[
:color
]
expect
(
json_response
[
'font'
]).
to
eq
attrs
[
:font
]
end
end
end
describe
'PUT /broadcast_messages/:id'
do
let!
(
:message
)
{
create
(
:broadcast_message
)
}
it
'returns a 401 for anonymous users'
do
put
api
(
"/broadcast_messages/
#{
message
.
id
}
"
),
attributes_for
(
:broadcast_message
)
expect
(
response
).
to
have_http_status
(
401
)
end
it
'returns a 403 for users'
do
put
api
(
"/broadcast_messages/
#{
message
.
id
}
"
,
user
),
attributes_for
(
:broadcast_message
)
expect
(
response
).
to
have_http_status
(
403
)
end
context
'as an admin'
do
it
'accepts new background and foreground colors'
do
attrs
=
{
color:
'#000000'
,
font:
'#cecece'
}
put
api
(
"/broadcast_messages/
#{
message
.
id
}
"
,
admin
),
attrs
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
[
'color'
]).
to
eq
attrs
[
:color
]
expect
(
json_response
[
'font'
]).
to
eq
attrs
[
:font
]
end
it
'accepts new start and end times'
do
time
=
Time
.
zone
.
parse
(
'2016-07-02 10:11:12'
)
travel_to
(
time
)
do
attrs
=
{
starts_at:
Time
.
zone
.
now
,
ends_at:
3
.
hours
.
from_now
}
put
api
(
"/broadcast_messages/
#{
message
.
id
}
"
,
admin
),
attrs
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
[
'starts_at'
]).
to
eq
'2016-07-02T10:11:12.000Z'
expect
(
json_response
[
'ends_at'
]).
to
eq
'2016-07-02T13:11:12.000Z'
end
end
it
'accepts a new message'
do
attrs
=
{
message:
'new message'
}
put
api
(
"/broadcast_messages/
#{
message
.
id
}
"
,
admin
),
attrs
expect
(
response
).
to
have_http_status
(
200
)
expect
{
message
.
reload
}.
to
change
{
message
.
message
}.
to
(
'new message'
)
end
end
end
describe
'DELETE /broadcast_messages/:id'
do
let!
(
:message
)
{
create
(
:broadcast_message
)
}
it
'returns a 401 for anonymous users'
do
delete
api
(
"/broadcast_messages/
#{
message
.
id
}
"
),
attributes_for
(
:broadcast_message
)
expect
(
response
).
to
have_http_status
(
401
)
end
it
'returns a 403 for users'
do
delete
api
(
"/broadcast_messages/
#{
message
.
id
}
"
,
user
),
attributes_for
(
:broadcast_message
)
expect
(
response
).
to
have_http_status
(
403
)
end
it
'deletes the broadcast message for admins'
do
expect
{
delete
api
(
"/broadcast_messages/
#{
message
.
id
}
"
,
admin
)
}
.
to
change
{
BroadcastMessage
.
count
}.
by
(
-
1
)
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