Skip to content

Commit 1f12198

Browse files
committed
support user_id for token creation as admin #5
1 parent 5456c06 commit 1f12198

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

app/controllers/expo_push_tokens_controller.rb

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ class ExpoPushTokensController < ApplicationController
33
accept_api_auth :create, :destroy_all
44

55
def create
6-
@token = ExpoPushToken.new user: User.current, token: params[:token]
6+
user_id = user_id_from_params_or_current
7+
@token = ExpoPushToken.new user_id: user_id, token: params[:token]
78
if @token.save
89
respond_to do |format|
910
format.api { head :created }
@@ -16,8 +17,7 @@ def create
1617
end
1718

1819
def destroy_all
19-
user_id = params[:user_id].to_i if User.current.admin? and params[:user_id].present?
20-
user_id ||= User.current.id
20+
user_id = user_id_from_params_or_current
2121
ExpoPushToken.where(user_id: user_id).delete_all
2222
respond_to do |format|
2323
format.api { head :ok }
@@ -29,4 +29,11 @@ def destroy_all
2929
}
3030
end
3131
end
32+
33+
private
34+
35+
def user_id_from_params_or_current
36+
user_id = params[:user_id].to_i if User.current.admin? and params[:user_id].present?
37+
return user_id || User.current.id
38+
end
3239
end

test/integration/expo_push_tokens_test.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,16 @@ class ExpoPushTokensTest < Redmine::ApiTest::Base
88
@jsmith = User.find_by_login 'jsmith'
99

1010
@creds = { 'X-Redmine-API-Key' => @user.api_key }
11+
@jsmith_creds = { 'X-Redmine-API-Key' => @jsmith.api_key }
12+
@admin_creds = { 'X-Redmine-API-Key' => User.find_by_login('admin').api_key }
1113
@payload = <<-JSON
1214
{ "token": "asdf1234" }
1315
JSON
1416

17+
@user_id_payload = <<-JSON
18+
{ "token": "asdf1234", "user_id": "#{@user.id}" }
19+
JSON
20+
1521
@t1 = ExpoPushToken.create! user: @user, token: "asdf.1234"
1622
@t2 = ExpoPushToken.create! user: User.find_by_login('jsmith'), token: "asdf.1234"
1723
end
@@ -99,4 +105,26 @@ class ExpoPushTokensTest < Redmine::ApiTest::Base
99105
end
100106
@t1.reload
101107
end
108+
109+
110+
test 'admin should be able to create token with optional user id' do
111+
assert_difference "ExpoPushToken.count" do
112+
post "/expo_push_tokens.json",
113+
params: @user_id_payload,
114+
headers: {"CONTENT_TYPE" => 'application/json'}.merge(@admin_creds)
115+
assert_response 201
116+
end
117+
assert_equal @user.id, ExpoPushToken.last.user_id
118+
end
119+
120+
test 'non-admin should not able to create token with optional user id' do
121+
assert_difference "ExpoPushToken.count" do
122+
post "/expo_push_tokens.json",
123+
params: @user_id_payload,
124+
headers: {"CONTENT_TYPE" => 'application/json'}.merge(@jsmith_creds)
125+
assert_response 201
126+
end
127+
assert_equal @jsmith.id, ExpoPushToken.last.user_id
128+
end
129+
102130
end

0 commit comments

Comments
 (0)