|
192 | 192 | end |
193 | 193 | end |
194 | 194 | 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