Skip to content

Commit d3a1f68

Browse files
authored
Add fields to API responses of active and expired pushes (#3512)
* Add tests for old API expired and active push responses * Update fields in API responses for expired and active pushes * Update indentations of some tests * Update tests of file pushes * Update a test of file pushes for API requests * Remove unnecessary parts of tests of API responses * Remove `files` from API responses of `active` and `expired` pushes
1 parent c2cc187 commit d3a1f68

5 files changed

Lines changed: 248 additions & 1 deletion

File tree

app/views/pushes/_push.json.jbuilder

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ json.extract! push, :expire_after_views,
1515
json.json_url secret_url(push) + ".json"
1616
json.html_url secret_url(push)
1717

18-
if controller.action_name == "create"
18+
if %w[create active expired].include?(controller.action_name)
1919
json.note push.note
2020
json.name push.name
2121
end
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# frozen_string_literal: true
2+
3+
require "test_helper"
4+
5+
class FilePushJsonActiveTest < ActionDispatch::IntegrationTest
6+
include Devise::Test::IntegrationHelpers
7+
8+
setup do
9+
Settings.enable_logins = true
10+
Settings.enable_file_pushes = true
11+
Rails.application.reload_routes!
12+
13+
@luca = users(:luca)
14+
@luca.confirm
15+
end
16+
17+
def test_basic_json_expired
18+
post file_pushes_path(format: :json),
19+
params: {
20+
file_push: {
21+
payload: "Message",
22+
name: "Test File Push",
23+
note: "This is a test file push",
24+
files: [
25+
fixture_file_upload("monkey.png", "image/jpeg")
26+
]
27+
}
28+
},
29+
headers: {"X-User-Email": @luca.email, "X-User-Token": @luca.authentication_token}
30+
assert_response :success
31+
32+
get active_file_pushes_path(format: :json), headers: {"X-User-Email": @luca.email, "X-User-Token": @luca.authentication_token}
33+
assert_response :success
34+
35+
res = JSON.parse(@response.body)
36+
push = res.first
37+
assert_not push.key?("payload")
38+
assert push.key?("url_token")
39+
assert push.key?("name")
40+
assert_equal "Test File Push", push["name"]
41+
assert push.key?("note")
42+
assert_equal "This is a test file push", push["note"]
43+
assert push.key?("expired")
44+
assert_equal false, push["expired"]
45+
assert push.key?("expired_on")
46+
assert push.key?("deleted")
47+
assert_equal false, push["deleted"]
48+
assert push.key?("deletable_by_viewer")
49+
assert_equal true, push["deletable_by_viewer"]
50+
assert_equal push.keys.sort, ["created_at", "days_remaining", "deletable_by_viewer", "deleted", "expire_after_days", "expire_after_views", "expired", "expired_on", "html_url", "json_url", "name", "note", "passphrase", "retrieval_step", "updated_at", "url_token", "views_remaining"].sort
51+
assert_equal push.except("url_token", "created_at", "updated_at", "html_url", "json_url", "expired_on"), {
52+
"expire_after_views" => 5,
53+
"expired" => false,
54+
"deletable_by_viewer" => true,
55+
"retrieval_step" => false,
56+
"passphrase" => "",
57+
"expire_after_days" => 7,
58+
"days_remaining" => 7,
59+
"views_remaining" => 5,
60+
"deleted" => false,
61+
"note" => "This is a test file push",
62+
"name" => "Test File Push"
63+
}
64+
end
65+
end
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# frozen_string_literal: true
2+
3+
require "test_helper"
4+
5+
class FilePushJsonExpiredTest < ActionDispatch::IntegrationTest
6+
include Devise::Test::IntegrationHelpers
7+
8+
setup do
9+
Settings.enable_logins = true
10+
Settings.enable_file_pushes = true
11+
Rails.application.reload_routes!
12+
13+
@luca = users(:luca)
14+
@luca.confirm
15+
end
16+
17+
def test_basic_json_expired
18+
post file_pushes_path(format: :json),
19+
params: {
20+
file_push: {
21+
payload: "Message",
22+
name: "Test File Push",
23+
note: "This is a test file push",
24+
files: [
25+
fixture_file_upload("monkey.png", "image/jpeg")
26+
]
27+
}
28+
},
29+
headers: {"X-User-Email": @luca.email, "X-User-Token": @luca.authentication_token}
30+
assert_response :success
31+
32+
res = JSON.parse(@response.body)
33+
delete "/f/#{res["url_token"]}.json"
34+
assert_response :success
35+
36+
get expired_file_pushes_path(format: :json), headers: {"X-User-Email": @luca.email, "X-User-Token": @luca.authentication_token}
37+
assert_response :success
38+
39+
res = JSON.parse(@response.body)
40+
push = res.first
41+
assert_not push.key?("payload")
42+
assert push.key?("url_token")
43+
assert push.key?("name")
44+
assert_equal "Test File Push", push["name"]
45+
assert push.key?("note")
46+
assert_equal "This is a test file push", push["note"]
47+
assert push.key?("expired")
48+
assert_equal true, push["expired"]
49+
assert push.key?("expired_on")
50+
assert push.key?("deleted")
51+
assert_equal true, push["deleted"]
52+
assert push.key?("deletable_by_viewer")
53+
assert_equal true, push["deletable_by_viewer"]
54+
assert_equal push.keys.sort, ["created_at", "days_remaining", "deletable_by_viewer", "deleted", "expire_after_days", "expire_after_views", "expired", "expired_on", "html_url", "json_url", "name", "note", "passphrase", "retrieval_step", "updated_at", "url_token", "views_remaining"].sort
55+
assert_equal push.except("url_token", "created_at", "updated_at", "html_url", "json_url", "expired_on"), {
56+
"expire_after_views" => 5,
57+
"expired" => true,
58+
"deletable_by_viewer" => true,
59+
"retrieval_step" => false,
60+
"passphrase" => nil,
61+
"expire_after_days" => 7,
62+
"days_remaining" => 7,
63+
"views_remaining" => 5,
64+
"deleted" => true,
65+
"note" => "This is a test file push",
66+
"name" => "Test File Push"
67+
}
68+
end
69+
end
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# frozen_string_literal: true
2+
3+
require "test_helper"
4+
5+
class PasswordJsonExpiredTest < ActionDispatch::IntegrationTest
6+
include Devise::Test::IntegrationHelpers
7+
8+
setup do
9+
Settings.enable_logins = true
10+
Rails.application.reload_routes!
11+
12+
@luca = users(:luca)
13+
@luca.confirm
14+
end
15+
16+
def test_basic_json_expired
17+
post passwords_path(format: :json),
18+
params: {password: {payload: "testpw", name: "Test Password", note: "This is a test password"}},
19+
headers: {"X-User-Email": @luca.email, "X-User-Token": @luca.authentication_token}
20+
assert_response :success
21+
22+
get active_passwords_path(format: :json), headers: {"X-User-Email": @luca.email, "X-User-Token": @luca.authentication_token}
23+
assert_response :success
24+
25+
res = JSON.parse(@response.body)
26+
first_res = res.first
27+
assert_not first_res.key?("payload")
28+
assert first_res.key?("url_token")
29+
assert first_res.key?("name")
30+
assert_equal "Test Password", first_res["name"]
31+
assert first_res.key?("note")
32+
assert_equal "This is a test password", first_res["note"]
33+
assert first_res.key?("expired")
34+
assert_equal false, first_res["expired"]
35+
assert first_res.key?("expired_on")
36+
assert first_res.key?("deleted")
37+
assert_equal false, first_res["deleted"]
38+
assert first_res.key?("deletable_by_viewer")
39+
assert_equal first_res.keys.sort, ["created_at", "days_remaining", "deletable_by_viewer", "deleted", "expire_after_days", "expire_after_views", "expired", "expired_on", "html_url", "json_url", "name", "note", "passphrase", "retrieval_step", "updated_at", "url_token", "views_remaining"].sort
40+
assert_equal first_res.except("url_token", "created_at", "updated_at", "html_url", "json_url", "expired_on"), {
41+
"expire_after_views" => 5,
42+
"expired" => false,
43+
"deletable_by_viewer" => true,
44+
"retrieval_step" => false,
45+
"passphrase" => "",
46+
"expire_after_days" => 7,
47+
"days_remaining" => 7,
48+
"views_remaining" => 5,
49+
"deleted" => false,
50+
"note" => "This is a test password",
51+
"name" => "Test Password"
52+
}
53+
end
54+
end
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# frozen_string_literal: true
2+
3+
require "test_helper"
4+
5+
class PasswordJsonExpiredTest < ActionDispatch::IntegrationTest
6+
include Devise::Test::IntegrationHelpers
7+
8+
setup do
9+
Settings.enable_logins = true
10+
Rails.application.reload_routes!
11+
12+
@luca = users(:luca)
13+
@luca.confirm
14+
end
15+
16+
def test_basic_json_expired
17+
post passwords_path(format: :json),
18+
params: {password: {payload: "testpw", name: "Test Password", note: "This is a test password"}},
19+
headers: {"X-User-Email": @luca.email, "X-User-Token": @luca.authentication_token}
20+
assert_response :success
21+
22+
res = JSON.parse(@response.body)
23+
# Delete the new password via json e.g. /p/<url_token>.json
24+
delete "/p/#{res["url_token"]}.json"
25+
assert_response :success
26+
27+
get expired_passwords_path(format: :json), headers: {"X-User-Email": @luca.email, "X-User-Token": @luca.authentication_token}
28+
assert_response :success
29+
30+
res = JSON.parse(@response.body)
31+
first_res = res.first
32+
assert_not first_res.key?("payload")
33+
assert first_res.key?("url_token")
34+
assert first_res.key?("name")
35+
assert_equal "Test Password", first_res["name"]
36+
assert first_res.key?("note")
37+
assert_equal "This is a test password", first_res["note"]
38+
assert first_res.key?("expired")
39+
assert_equal true, first_res["expired"]
40+
assert first_res.key?("expired_on")
41+
assert first_res.key?("deleted")
42+
assert_equal true, first_res["deleted"]
43+
assert first_res.key?("deletable_by_viewer")
44+
assert_equal first_res.keys.sort, ["created_at", "days_remaining", "deletable_by_viewer", "deleted", "expire_after_days", "expire_after_views", "expired", "expired_on", "html_url", "json_url", "name", "note", "passphrase", "retrieval_step", "updated_at", "url_token", "views_remaining"].sort
45+
assert_equal first_res.except("url_token", "created_at", "updated_at", "html_url", "json_url", "expired_on"), {
46+
"expire_after_views" => 5,
47+
"expired" => true,
48+
"deletable_by_viewer" => true,
49+
"retrieval_step" => false,
50+
"passphrase" => nil,
51+
"expire_after_days" => 7,
52+
"days_remaining" => 7,
53+
"views_remaining" => 5,
54+
"deleted" => true,
55+
"note" => "This is a test password",
56+
"name" => "Test Password"
57+
}
58+
end
59+
end

0 commit comments

Comments
 (0)