|
331 | 331 | end |
332 | 332 |
|
333 | 333 | expect_any_instance_of(BillingMailer).to receive(:inform_admin).with( |
334 | | - reference_number: nil, |
| 334 | + reference_number: nil, |
335 | 335 | body: an_instance_of(OpenStruct) |
336 | 336 | ).and_return(double("mailer", deliver_now: true)) |
337 | | - |
| 337 | + |
338 | 338 | expect_any_instance_of(PaymentLhvConnectJob).not_to receive(:send_transactions) |
339 | 339 | PaymentLhvConnectJob.perform_now |
340 | 340 | end |
| 341 | + |
| 342 | + it 'should parse reference number from end_to_end_id with text prefix like "Ref 1234567"' do |
| 343 | + ref = Billing::ReferenceNo.generate |
| 344 | + Reference.create(reference_number: ref, initiator: 'registry') |
| 345 | + |
| 346 | + date = Time.zone.now - 4.hours |
| 347 | + end_to_end_with_text = "Ref #{ref}" |
| 348 | + |
| 349 | + params_for_sending = OpenStruct.new( |
| 350 | + amount: '10.0', |
| 351 | + currency: 'EUR', |
| 352 | + date: date, |
| 353 | + payment_reference_number: ref, |
| 354 | + payment_description: 'Money transfer', |
| 355 | + end_to_end_id: end_to_end_with_text |
| 356 | + ) |
| 357 | + |
| 358 | + Lhv::ConnectApi.class_eval do |
| 359 | + define_method :credit_debit_notification_messages do |
| 360 | + transaction = OpenStruct.new( |
| 361 | + amount: '10.0', |
| 362 | + currency: 'EUR', |
| 363 | + date: date, |
| 364 | + payment_reference_number: nil, |
| 365 | + payment_description: 'Money transfer', |
| 366 | + end_to_end_id: end_to_end_with_text |
| 367 | + ) |
| 368 | + message = OpenStruct.new( |
| 369 | + bank_account_iban: Setting.registry_bank_account_iban_lhv || 'EE177700771001155322', |
| 370 | + credit_transactions: [transaction] |
| 371 | + ) |
| 372 | + [message] |
| 373 | + end |
| 374 | + end |
| 375 | + |
| 376 | + expect_any_instance_of(PaymentLhvConnectJob).to receive(:send_transactions).with( |
| 377 | + params: [params_for_sending], |
| 378 | + payment_reference_number: ref |
| 379 | + ) |
| 380 | + PaymentLhvConnectJob.perform_now |
| 381 | + end |
| 382 | + |
| 383 | + it 'should parse reference number from end_to_end_id with various text formats' do |
| 384 | + ref = Billing::ReferenceNo.generate |
| 385 | + Reference.create(reference_number: ref, initiator: 'registry') |
| 386 | + |
| 387 | + date = Time.zone.now - 4.hours |
| 388 | + end_to_end_with_text = "Reference: #{ref} payment" |
| 389 | + |
| 390 | + params_for_sending = OpenStruct.new( |
| 391 | + amount: '10.0', |
| 392 | + currency: 'EUR', |
| 393 | + date: date, |
| 394 | + payment_reference_number: ref, |
| 395 | + payment_description: 'Money transfer', |
| 396 | + end_to_end_id: end_to_end_with_text |
| 397 | + ) |
| 398 | + |
| 399 | + Lhv::ConnectApi.class_eval do |
| 400 | + define_method :credit_debit_notification_messages do |
| 401 | + transaction = OpenStruct.new( |
| 402 | + amount: '10.0', |
| 403 | + currency: 'EUR', |
| 404 | + date: date, |
| 405 | + payment_reference_number: nil, |
| 406 | + payment_description: 'Money transfer', |
| 407 | + end_to_end_id: end_to_end_with_text |
| 408 | + ) |
| 409 | + message = OpenStruct.new( |
| 410 | + bank_account_iban: Setting.registry_bank_account_iban_lhv || 'EE177700771001155322', |
| 411 | + credit_transactions: [transaction] |
| 412 | + ) |
| 413 | + [message] |
| 414 | + end |
| 415 | + end |
| 416 | + |
| 417 | + expect_any_instance_of(PaymentLhvConnectJob).to receive(:send_transactions).with( |
| 418 | + params: [params_for_sending], |
| 419 | + payment_reference_number: ref |
| 420 | + ) |
| 421 | + PaymentLhvConnectJob.perform_now |
| 422 | + end |
| 423 | + end |
| 424 | + |
| 425 | + describe '#extract_reference_from_text' do |
| 426 | + let(:job) { PaymentLhvConnectJob.new } |
| 427 | + |
| 428 | + before do |
| 429 | + allow(Billing::ReferenceNo).to receive(:valid?).and_call_original |
| 430 | + end |
| 431 | + |
| 432 | + it 'returns text as-is when it is already a pure reference number' do |
| 433 | + ref = Billing::ReferenceNo.generate |
| 434 | + result = job.send(:extract_reference_from_text, ref) |
| 435 | + expect(result).to eq(ref) |
| 436 | + end |
| 437 | + |
| 438 | + it 'extracts reference number from "Ref 1234567" format' do |
| 439 | + ref = Billing::ReferenceNo.generate |
| 440 | + result = job.send(:extract_reference_from_text, "Ref #{ref}") |
| 441 | + expect(result).to eq(ref) |
| 442 | + end |
| 443 | + |
| 444 | + it 'extracts reference number from text with prefix and suffix' do |
| 445 | + ref = Billing::ReferenceNo.generate |
| 446 | + result = job.send(:extract_reference_from_text, "Reference: #{ref} payment") |
| 447 | + expect(result).to eq(ref) |
| 448 | + end |
| 449 | + |
| 450 | + it 'returns nil for text without any numbers' do |
| 451 | + result = job.send(:extract_reference_from_text, 'No numbers here') |
| 452 | + expect(result).to be_nil |
| 453 | + end |
| 454 | + |
| 455 | + it 'returns nil for empty string' do |
| 456 | + result = job.send(:extract_reference_from_text, '') |
| 457 | + expect(result).to be_nil |
| 458 | + end |
| 459 | + |
| 460 | + it 'returns nil for nil input' do |
| 461 | + result = job.send(:extract_reference_from_text, nil) |
| 462 | + expect(result).to be_nil |
| 463 | + end |
| 464 | + |
| 465 | + it 'extracts 7-digit reference number from text' do |
| 466 | + result = job.send(:extract_reference_from_text, 'Ref 1234567') |
| 467 | + expect(result).to eq('1234567') |
| 468 | + end |
| 469 | + |
| 470 | + it 'finds valid reference number among multiple numbers in text' do |
| 471 | + ref = Billing::ReferenceNo.generate |
| 472 | + result = job.send(:extract_reference_from_text, "Invoice 99 ref #{ref} amount 100") |
| 473 | + expect(result).to eq(ref) |
| 474 | + end |
341 | 475 | end |
342 | 476 | end |
0 commit comments