diff --git a/app/services/bill_signature_service.rb b/app/services/bill_signature_service.rb new file mode 100644 index 000000000..f8640a4b1 --- /dev/null +++ b/app/services/bill_signature_service.rb @@ -0,0 +1,16 @@ +class BillSignatureService + def self.grouped_unsigned_operation_until(date) + unsigned_operations = DossierOperationLog + .where(bill_signature: nil) + .where('executed_at < ?', date) + + unsigned_operations.group_by { |e| e.executed_at.to_date } + end + + def self.sign_operations(operations, day) + bill = BillSignature.build_with_operations(operations, day) + signature = Universign::API.timestamp(bill.digest) + bill.set_signature(signature, day) + bill.save! + end +end diff --git a/spec/services/bill_signature_service_spec.rb b/spec/services/bill_signature_service_spec.rb new file mode 100644 index 000000000..2a88478df --- /dev/null +++ b/spec/services/bill_signature_service_spec.rb @@ -0,0 +1,37 @@ +require 'spec_helper' + +describe BillSignatureService do + describe ".grouped_unsigned_operation_until" do + subject { BillSignatureService.grouped_unsigned_operation_until(date).length } + + let(:date) { Date.today } + + context "when operations of several days need to be signed" do + before do + create :dossier_operation_log, executed_at: 3.days.ago + create :dossier_operation_log, executed_at: 2.days.ago + create :dossier_operation_log, executed_at: 1.day.ago + end + + it { is_expected.to eq 3 } + end + + context "when operations on a single day need to be signed" do + before do + create :dossier_operation_log, executed_at: 1.day.ago + create :dossier_operation_log, executed_at: 1.day.ago + end + + it { is_expected.to eq 1 } + end + + context "when there are no operations to be signed" do + before do + create :dossier_operation_log, created_at: 1.day.ago, bill_signature: build(:bill_signature) + create :dossier_operation_log, created_at: 1.day.from_now + end + + it { is_expected.to eq 0 } + end + end +end