Skip to content

Commit f106bcb

Browse files
committed
refactor: Add comprehensive RSpec tests for ReimbursementDatatable
1 parent 4356348 commit f106bcb

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

spec/datatables/reimbursement_datatable_spec.rb

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,3 +192,84 @@
192192
end
193193
end
194194
end
195+
require "rails_helper"
196+
197+
RSpec.describe ReimbursementDatatable do
198+
let(:casa_org) { create(:casa_org) }
199+
let(:volunteer) { create(:volunteer, casa_org: casa_org) }
200+
let(:casa_case) { create(:casa_case, casa_org: casa_org) }
201+
let(:case_contact) { create(:case_contact, creator: volunteer, casa_case: casa_case) }
202+
203+
subject { described_class.new(params: params, view_context: view_context) }
204+
205+
let(:params) { ActionController::Parameters.new }
206+
let(:view_context) { double("view_context") }
207+
208+
describe "#data" do
209+
before do
210+
allow(subject).to receive(:records).and_return([case_contact])
211+
end
212+
213+
it "formats case contact data correctly" do
214+
result = subject.send(:data).first
215+
216+
expect(result).to include(
217+
casa_case: {
218+
id: casa_case.id,
219+
case_number: casa_case.case_number
220+
},
221+
complete: case_contact.reimbursement_complete,
222+
contact_types: kind_of(Array),
223+
id: case_contact.id,
224+
mark_as_complete_path: "/reimbursements/#{case_contact.id}/mark_as_complete",
225+
miles_driven: case_contact.miles_driven,
226+
occurred_at: case_contact.occurred_at,
227+
volunteer: {
228+
address: case_contact.creator.address&.content,
229+
display_name: case_contact.creator.display_name,
230+
email: case_contact.creator.email,
231+
id: case_contact.creator.id
232+
}
233+
)
234+
end
235+
236+
it "formats contact types correctly" do
237+
contact_type = create(:contact_type)
238+
contact_type_group = contact_type.contact_type_group
239+
case_contact.contact_types << contact_type
240+
241+
result = subject.send(:data).first
242+
expect(result[:contact_types]).to contain_exactly(
243+
{
244+
name: contact_type.name,
245+
group_name: contact_type_group.name
246+
}
247+
)
248+
end
249+
end
250+
251+
describe "#raw_records" do
252+
it "includes necessary associations" do
253+
expect(subject.send(:raw_records).to_sql).to include("JOIN users")
254+
end
255+
256+
it "orders records" do
257+
expect(subject.send(:raw_records).to_sql).to include("ORDER BY")
258+
end
259+
end
260+
261+
describe "filtering" do
262+
let(:params) do
263+
ActionController::Parameters.new(
264+
order: { "0" => { column: "0", dir: "asc" } },
265+
columns: {
266+
"0" => { orderable: "true", search: { value: "" } }
267+
}
268+
)
269+
end
270+
271+
it "applies order clause" do
272+
expect(subject.send(:order_clause)).to be_present
273+
end
274+
end
275+
end

0 commit comments

Comments
 (0)