1 # frozen_string_literal: true
6 class AuthDeletionsControllerTest < ActionDispatch::IntegrationTest
8 # test all routes which lead to this controller
11 { :path => "/auth/provider/deletions/confirmation_code", :method => :get },
12 { :controller => "accounts/auth_deletions", :action => "show", :provider => "provider", :confirmation_code => "confirmation_code" }
15 { :path => "/auth/provider/deletions", :method => :post },
16 { :controller => "accounts/auth_deletions", :action => "create", :provider => "provider" }
21 # test showing status of a facebook deletion request
22 def test_show_facebook
23 user = create(:user, :auth_provider => "facebook", :auth_uid => "12345")
24 confirmation_code = Rails.application.message_verifier(:social_login_deletion).generate([user.auth_uid, Time.now.to_i])
26 get auth_deletion_path(:provider => "facebook", :confirmation_code => confirmation_code)
27 assert_response :success
28 assert_select "p", /^Data for Facebook ID 12345 was removed at .* and it was disconnected from the associated OpenStreetMap account\.$/
32 # test showing status of a facebook deletion request with an invalid code
33 def test_show_facebook_invalid_code
34 get auth_deletion_path(:provider => "facebook", :confirmation_code => "invalid")
35 assert_response :bad_request
39 # test creation of a facebook deletion request
40 def test_create_facebook
41 user = create(:user, :auth_provider => "facebook", :auth_uid => "12345")
43 payload = Base64.urlsafe_encode64(
45 :algorithm => "HMAC-SHA256",
46 :expires => Time.now.to_i + 3600,
47 :issued_at => Time.now.to_i,
51 signature = OpenSSL::HMAC.digest("SHA256", Settings.facebook_auth_secret, payload)
52 encoded_signature = Base64.urlsafe_encode64(signature)
53 signed_request = [encoded_signature, payload].join(".")
55 post auth_deletions_path(:provider => "facebook"), :params => { :signed_request => signed_request }
56 assert_response :success
58 js = ActiveSupport::JSON.decode(@response.body)
60 assert_not_nil js["confirmation_code"]
61 assert_equal auth_deletion_url(:provider => "facebook", :confirmation_code => js["confirmation_code"]), js["url"]
63 assert_nil user.reload.auth_provider
64 assert_nil user.reload.auth_uid
68 # test creation of a facebook deletion request with an invalid signature
69 def test_create_facebook_bad_signature
70 user = create(:user, :auth_provider => "facebook", :auth_uid => "12345")
72 payload = Base64.urlsafe_encode64(
74 :algorithm => "HMAC-SHA256",
75 :expires => Time.now.to_i + 3600,
76 :issued_at => Time.now.to_i,
80 signature = OpenSSL::HMAC.digest("SHA256", "invalid secret", payload)
81 encoded_signature = Base64.urlsafe_encode64(signature)
82 signed_request = [encoded_signature, payload].join(".")
84 post auth_deletions_path(:provider => "facebook"), :params => { :signed_request => signed_request }
85 assert_response :bad_request
88 assert_equal "facebook", user.auth_provider
89 assert_equal "12345", user.auth_uid
93 # test creation of a facebook deletion request for an unassociated ID
94 def test_create_facebook_not_associated
95 payload = Base64.urlsafe_encode64(
97 :algorithm => "HMAC-SHA256",
98 :expires => Time.now.to_i + 3600,
99 :issued_at => Time.now.to_i,
103 signature = OpenSSL::HMAC.digest("SHA256", Settings.facebook_auth_secret, payload)
104 encoded_signature = Base64.urlsafe_encode64(signature)
105 signed_request = [encoded_signature, payload].join(".")
107 post auth_deletions_path(:provider => "facebook"), :params => { :signed_request => signed_request }
108 assert_response :not_found
112 # test creation of a deletion request for an unsupported provider
113 def test_create_unsupported
114 post auth_deletions_path(:provider => "unsupported")
115 assert_response :not_found