22
33module Reported
44 class CspReportsControllerTest < ActionDispatch ::IntegrationTest
5- include Engine . routes . url_helpers
6-
75 setup do
8- @valid_csp_report = {
6+ @valid_csp_report_old_format = {
97 "csp-report" => {
108 "document-uri" => "https://example.com/page" ,
119 "violated-directive" => "script-src 'self'" ,
1210 "blocked-uri" => "https://evil.com/script.js" ,
1311 "original-policy" => "default-src 'self'; script-src 'self'"
1412 }
1513 }
14+
15+ @valid_csp_report_new_format = {
16+ "documentURI" => "https://example.com/page" ,
17+ "violatedDirective" => "script-src 'self'" ,
18+ "blockedURI" => "https://evil.com/script.js" ,
19+ "originalPolicy" => "default-src 'self'; script-src 'self'"
20+ }
21+ end
22+
23+ test "creates report with valid CSP data (old format)" do
24+ assert_difference 'Report.count' , 1 do
25+ post '/csp-reports' ,
26+ params : @valid_csp_report_old_format . to_json ,
27+ headers : { 'CONTENT_TYPE' => 'application/json' }
28+ end
29+
30+ assert_response :no_content
31+
32+ report = Report . last
33+ assert_equal "https://example.com/page" , report . document_uri
34+ assert_equal "script-src 'self'" , report . violated_directive
35+ assert_equal "https://evil.com/script.js" , report . blocked_uri
1636 end
1737
18- test "creates report with valid CSP data" do
38+ test "creates report with valid CSP data (new format) " do
1939 assert_difference 'Report.count' , 1 do
20- post csp_reports_url ,
21- params : @valid_csp_report . to_json ,
40+ post '/csp-reports' ,
41+ params : @valid_csp_report_new_format . to_json ,
2242 headers : { 'CONTENT_TYPE' => 'application/json' }
2343 end
2444
@@ -32,7 +52,7 @@ class CspReportsControllerTest < ActionDispatch::IntegrationTest
3252
3353 test "returns bad_request with invalid JSON" do
3454 assert_no_difference 'Report.count' do
35- post csp_reports_url ,
55+ post '/csp-reports' ,
3656 params : "invalid json{" ,
3757 headers : { 'CONTENT_TYPE' => 'application/json' }
3858 end
@@ -42,7 +62,7 @@ class CspReportsControllerTest < ActionDispatch::IntegrationTest
4262
4363 test "returns bad_request with empty body" do
4464 assert_no_difference 'Report.count' do
45- post csp_reports_url ,
65+ post '/csp-reports' ,
4666 params : "" ,
4767 headers : { 'CONTENT_TYPE' => 'application/json' }
4868 end
@@ -51,19 +71,19 @@ class CspReportsControllerTest < ActionDispatch::IntegrationTest
5171 end
5272
5373 test "stores raw_report as JSON" do
54- post csp_reports_url ,
55- params : @valid_csp_report . to_json ,
74+ post '/csp-reports' ,
75+ params : @valid_csp_report_old_format . to_json ,
5676 headers : { 'CONTENT_TYPE' => 'application/json' }
5777
5878 report = Report . last
5979 parsed = JSON . parse ( report . raw_report )
60- assert_equal @valid_csp_report , parsed
80+ assert_equal @valid_csp_report_old_format , parsed
6181 end
6282
6383 test "does not require CSRF token" do
6484 # This test verifies that external browsers can POST without CSRF token
65- post csp_reports_url ,
66- params : @valid_csp_report . to_json ,
85+ post '/csp-reports' ,
86+ params : @valid_csp_report_old_format . to_json ,
6787 headers : { 'CONTENT_TYPE' => 'application/json' }
6888
6989 assert_response :no_content
0 commit comments