@@ -47,6 +47,92 @@ def test_parse_blank_includes
4747 assert_empty include_directives . model_includes
4848 end
4949
50+ def test_check_include_allowed
51+ reset_includes
52+ assert JSONAPI ::RequestParser . new . check_include ( ExpenseEntryResource , "isoCurrency" . partition ( '.' ) )
53+ ensure
54+ reset_includes
55+ end
56+
57+ def test_check_nested_include_allowed
58+ reset_includes
59+ assert JSONAPI ::RequestParser . new . check_include ( ExpenseEntryResource , "employee.expenseEntries" . partition ( '.' ) )
60+ ensure
61+ reset_includes
62+ end
63+
64+ def test_check_include_relationship_does_not_exist
65+ reset_includes
66+
67+ assert_raises JSONAPI ::Exceptions ::InvalidInclude do
68+ assert JSONAPI ::RequestParser . new . check_include ( ExpenseEntryResource , "foo" . partition ( '.' ) )
69+ end
70+ ensure
71+ reset_includes
72+ end
73+
74+ def test_check_nested_include_relationship_does_not_exist_wrong_format
75+ reset_includes
76+
77+ assert_raises JSONAPI ::Exceptions ::InvalidInclude do
78+ assert JSONAPI ::RequestParser . new . check_include ( ExpenseEntryResource , "employee.expense-entries" . partition ( '.' ) )
79+ end
80+ ensure
81+ reset_includes
82+ end
83+
84+ def test_check_include_has_one_not_allowed_default
85+ reset_includes
86+
87+ assert JSONAPI ::RequestParser . new . check_include ( ExpenseEntryResource , "isoCurrency" . partition ( '.' ) )
88+ JSONAPI . configuration . default_allow_include_to_one = false
89+
90+ assert_raises JSONAPI ::Exceptions ::InvalidInclude do
91+ JSONAPI ::RequestParser . new . check_include ( ExpenseEntryResource , "isoCurrency" . partition ( '.' ) )
92+ end
93+ ensure
94+ reset_includes
95+ end
96+
97+ def test_check_include_has_one_not_allowed_resource
98+ reset_includes
99+
100+ assert JSONAPI ::RequestParser . new . check_include ( ExpenseEntryResource , "isoCurrency" . partition ( '.' ) )
101+ ExpenseEntryResource . _relationship ( :iso_currency ) . allow_include = false
102+
103+ assert_raises JSONAPI ::Exceptions ::InvalidInclude do
104+ JSONAPI ::RequestParser . new . check_include ( ExpenseEntryResource , "isoCurrency" . partition ( '.' ) )
105+ end
106+ ensure
107+ reset_includes
108+ end
109+
110+ def test_check_include_has_many_not_allowed_default
111+ reset_includes
112+
113+ assert JSONAPI ::RequestParser . new . check_include ( EmployeeResource , "expenseEntries" . partition ( '.' ) )
114+ JSONAPI . configuration . default_allow_include_to_many = false
115+
116+ assert_raises JSONAPI ::Exceptions ::InvalidInclude do
117+ JSONAPI ::RequestParser . new . check_include ( EmployeeResource , "expenseEntries" . partition ( '.' ) )
118+ end
119+ ensure
120+ reset_includes
121+ end
122+
123+ def test_check_include_has_many_not_allowed_resource
124+ reset_includes
125+
126+ assert JSONAPI ::RequestParser . new . check_include ( EmployeeResource , "expenseEntries" . partition ( '.' ) )
127+ EmployeeResource . _relationship ( :expense_entries ) . allow_include = false
128+
129+ assert_raises JSONAPI ::Exceptions ::InvalidInclude do
130+ JSONAPI ::RequestParser . new . check_include ( EmployeeResource , "expenseEntries" . partition ( '.' ) )
131+ end
132+ ensure
133+ reset_includes
134+ end
135+
50136 def test_parse_dasherized_with_dasherized_include
51137 params = ActionController ::Parameters . new (
52138 {
@@ -87,7 +173,7 @@ def test_parse_dasherized_with_underscored_include
87173
88174 request . parse_include_directives ( ExpenseEntryResource , params [ :include ] )
89175 refute request . errors . empty?
90- assert_equal 'iso_currency is not a valid relationship of expense-entries' , request . errors [ 0 ] . detail
176+ assert_equal 'iso_currency is not a valid includable relationship of expense-entries' , request . errors [ 0 ] . detail
91177 end
92178
93179 def test_parse_fields_underscored
@@ -242,4 +328,12 @@ def test_parse_sort_with_relationships
242328 def setup_request
243329 @request = JSONAPI ::RequestParser . new
244330 end
331+
332+ def reset_includes
333+ JSONAPI . configuration . json_key_format = :camelized_key
334+ JSONAPI . configuration . default_allow_include_to_one = true
335+ JSONAPI . configuration . default_allow_include_to_many = true
336+ ExpenseEntryResource . _relationship ( :iso_currency ) . allow_include = nil
337+ EmployeeResource . _relationship ( :expense_entries ) . allow_include = nil
338+ end
245339end
0 commit comments