Skip to content

Commit

Permalink
Merge branch 'trunk' into pivotal_188310207
Browse files Browse the repository at this point in the history
  • Loading branch information
saikumar9 authored Sep 24, 2024
2 parents 587e75e + b423749 commit ed36691
Show file tree
Hide file tree
Showing 4 changed files with 187 additions and 0 deletions.
22 changes: 22 additions & 0 deletions app/event_source/subscribers/system_date/changed_subscriber.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@ class ChangedSubscriber
private

def process_date_change_event(subscriber_logger, system_date)
process_h36_transactions(subscriber_logger, system_date)
create_h41_renewal_transmissions(subscriber_logger, system_date)
end

def process_h36_transactions(subscriber_logger, system_date)
subscriber_logger.info "system_date: #{system_date}"

return if system_date != Date.today.beginning_of_month
Expand All @@ -38,6 +43,23 @@ def process_date_change_event(subscriber_logger, system_date)
subscriber_logger.error "on_system_date_changed H36 Transmission create: ------- end"
end

def create_h41_renewal_transmissions(subscriber_logger, system_date)
result = ::Fdsh::H41::Transmissions::CreateRenewals.new.call({ system_date: system_date })

if result.success?
success_message, transmissions = result.success
msg = "on_system_date_changed H41 Transmission create: acked message: #{success_message}"
else
failure_message, transmissions = result.failure
msg = "on_system_date_changed H41 Transmission create: failure error_messages: #{failure_message}"
end
subscriber_logger.info "#{msg} | transmissions: #{transmissions}"
subscriber_logger.info "on_system_date_changed H41 Transmission create: ------- end"
rescue StandardError => e
subscriber_logger.error "on_system_date_changed H41 Transmission create: error: #{e} backtrace: #{e.backtrace}"
subscriber_logger.info "on_system_date_changed H41 Transmission create: ------- end"
end

def subscriber_logger_for(event)
Logger.new("#{Rails.root}/log/#{event}_#{Date.today.in_time_zone('Eastern Time (US & Canada)').strftime('%Y_%m_%d')}.log")
end
Expand Down
55 changes: 55 additions & 0 deletions app/operations/fdsh/h41/transmissions/create_renewals.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# frozen_string_literal: true

module Fdsh
module H41
module Transmissions
# Operation's job is to find or create an 'open' H41 Transmission of given type and reporting_year.
class CreateRenewals
include Dry::Monads[:result, :do]

def call(params)
renewal_year = yield validate(params)
result = yield create(renewal_year)

Success(result)
end

private

def validate(params)
errors = []
system_date = params[:system_date]
system_month = system_date.month
system_day = system_date.day

feature = FdshGatewayRegistry[:h41_renewal_transmissions]
feature_day = feature.settings(:day).item
feature_month = feature.settings(:month).item

errors << 'system_date missing' unless system_date
errors << 'Feature is disabled' if feature.disabled?
errors << 'system date does not match feature date' if system_day != feature_day || system_month != feature_month

errors.empty? ? Success(system_date.year.next) : Failure([errors, {}])
end

def create(reporting_year)
hash = { reporting_year => [] }

[:original, :corrected, :void].each do |transmission_type|
result = ::Fdsh::H41::Transmissions::FindOrCreate.new.call(reporting_year: reporting_year, status: :open,
transmission_type: transmission_type)

hash[reporting_year] << { transmission: transmission_type, status: result.success? ? :success : :failed }
end

if hash[reporting_year].all? { |h| h[:status] == :success }
Success(["Successfully created renewal transmissions for #{reporting_year}", hash])
else
Failure(["Some or all renewal transmissions failed to create for #{reporting_year}", hash])
end
end
end
end
end
end
97 changes: 97 additions & 0 deletions spec/operations/fdsh/h41/transmissions/create_renewals_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Fdsh::H41::Transmissions::CreateRenewals do
subject { described_class.new }

before :all do
DatabaseCleaner.clean
end

after :each do
DatabaseCleaner.clean
end

describe '#call' do
before do
allow(FdshGatewayRegistry[:h41_renewal_transmissions].feature).to receive(:is_enabled).and_return(true)
end

context 'with valid input params' do
let(:system_date) { Date.new(Date.today.year, 8, 10) }
let(:input_params) do
{
system_date: system_date
}
end

context 'without an open H41 renewal transmissions' do
it 'creates an open H41 renewal transmissions' do
expect(H41::Transmissions::Outbound::OriginalTransmission.open.count).to be_zero
expect(H41::Transmissions::Outbound::VoidTransmission.open.count).to be_zero
expect(H41::Transmissions::Outbound::CorrectedTransmission.open.count).to be_zero
subject.call(input_params)
expect(H41::Transmissions::Outbound::OriginalTransmission.open.count).to eq(1)
expect(H41::Transmissions::Outbound::VoidTransmission.open.count).to eq(1)
expect(H41::Transmissions::Outbound::CorrectedTransmission.open.count).to eq(1)
end
end

context 'with open H41 renewal transmissions' do
before do
[:original, :corrected, :void].each do |transmission_type|
Fdsh::H41::Transmissions::FindOrCreate.new.call(reporting_year: system_date.year.next, status: :open,
transmission_type: transmission_type)
end
end

it 'does not create H41 transmissions' do
expect(H41::Transmissions::Outbound::OriginalTransmission.open.count).to eq(1)
expect(H41::Transmissions::Outbound::VoidTransmission.open.count).to eq(1)
expect(H41::Transmissions::Outbound::CorrectedTransmission.open.count).to eq(1)
subject.call(input_params)
expect(H41::Transmissions::Outbound::OriginalTransmission.open.count).to eq(1)
expect(H41::Transmissions::Outbound::VoidTransmission.open.count).to eq(1)
expect(H41::Transmissions::Outbound::CorrectedTransmission.open.count).to eq(1)
end
end
end

context 'for failure scenarios' do
context 'system_date is outside the feature date' do
let(:input_params) do
{
system_date: Date.new(Date.today.year, 9, 10)
}
end

it 'returns failure with errors' do
result = subject.call(input_params)
expect(result.failure).to eq(
[["system date does not match feature date"], {}]
)
end
end

context 'feature is disabled' do
before do
allow(FdshGatewayRegistry[:h41_renewal_transmissions].feature).to receive(:is_enabled).and_return(false)
end

let(:input_params) do
{
system_date: Date.new(Date.today.year, 8, 10)
}
end

it 'returns failure with errors' do
result = subject.call(input_params)
expect(result.failure).to eq(
[["Feature is disabled"], {}]
)
end
end
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
registry:
- namespace:
- :fdsh_gateway
- :aca_individual_market
features:
- key: :h41_renewal_transmissions
is_enabled: <%= ENV['H41_RENEWAL_TRANSMISSIONS_IS_ENABLED'] || false %>
settings:
- key: :month
item: 8
- key: :day
item: 10

0 comments on commit ed36691

Please sign in to comment.