-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
GL-364: Add model for exemption overrides, possibly should 'relate' t…
…o certificates model (#1844) * GL-364: Add model for exemption overrides, possibly should 'relate' to certificates model * GL-366: Add admin APIs to list out a page of overrides * GL-365: Use exempting_certificate_override table to control whether a certificate is treated as an exemption (#1864)
- Loading branch information
Showing
21 changed files
with
405 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
66 changes: 66 additions & 0 deletions
66
app/controllers/api/admin/green_lanes/exempting_certificate_overrides_controller.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
module Api | ||
module Admin | ||
module GreenLanes | ||
class ExemptingCertificateOverridesController < AdminController | ||
include Pageable | ||
include XiOnly | ||
|
||
before_action :check_service, :authenticate_user! | ||
|
||
def index | ||
render json: serialize(exempting_certificate_override.to_a, pagination_meta) | ||
end | ||
|
||
def show | ||
eco = ::GreenLanes::ExemptingCertificateOverride.with_pk!(params[:id]) | ||
render json: serialize(eco) | ||
end | ||
|
||
def create | ||
eco = ::GreenLanes::ExemptingCertificateOverride.new(eco_params) | ||
|
||
if eco.valid? && eco.save | ||
render json: serialize(eco), | ||
location: api_admin_green_lanes_exempting_certificate_override_url(eco.id), | ||
status: :created | ||
else | ||
render json: serialize_errors(eco), | ||
status: :unprocessable_entity | ||
end | ||
end | ||
|
||
def destroy | ||
eco = ::GreenLanes::ExemptingCertificateOverride.with_pk!(params[:id]) | ||
eco.destroy | ||
|
||
head :no_content | ||
end | ||
|
||
private | ||
|
||
def eco_params | ||
params.require(:data).require(:attributes).permit( | ||
:certificate_type_code, | ||
:certificate_code, | ||
) | ||
end | ||
|
||
def record_count | ||
@exempting_certificate_override.pagination_record_count | ||
end | ||
|
||
def exempting_certificate_override | ||
@exempting_certificate_override ||= ::GreenLanes::ExemptingCertificateOverride.order(Sequel.asc(:certificate_type_code), Sequel.asc(:certificate_code)).paginate(current_page, per_page) | ||
end | ||
|
||
def serialize(*args) | ||
Api::Admin::GreenLanes::ExemptingCertificateOverrideSerializer.new(*args).serializable_hash | ||
end | ||
|
||
def serialize_errors(exempting_certificate_override) | ||
Api::Admin::ErrorSerializationService.new(exempting_certificate_override).call | ||
end | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
module XiOnly | ||
extend ActiveSupport::Concern | ||
|
||
included do | ||
def check_service | ||
if TradeTariffBackend.uk? | ||
raise ActionController::RoutingError, 'Invalid service' | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
module GreenLanes | ||
class ExemptingCertificateOverride < Sequel::Model(:green_lanes_exempting_certificate_overrides) | ||
plugin :timestamps, update_on_create: true | ||
plugin :auto_validations, not_null: :presence | ||
|
||
one_to_one :certificate, class: :Certificate, | ||
key: %i[certificate_type_code certificate_code], | ||
primary_key: %i[certificate_type_code certificate_code] do |ds| | ||
ds.with_actual(Certificate) | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
18 changes: 18 additions & 0 deletions
18
app/serializers/api/admin/green_lanes/exempting_certificate_override_serializer.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
module Api | ||
module Admin | ||
module GreenLanes | ||
class ExemptingCertificateOverrideSerializer | ||
include JSONAPI::Serializer | ||
|
||
set_type :exempting_certificate_override | ||
|
||
set_id :id | ||
|
||
attributes :certificate_type_code, | ||
:certificate_code, | ||
:created_at, | ||
:updated_at | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 changes: 10 additions & 0 deletions
10
spec/factories/green_lanes/exempting_certificate_override_factory.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
FactoryBot.define do | ||
factory :exempting_certificate_override, class: 'GreenLanes::ExemptingCertificateOverride' do | ||
transient do | ||
certificate {} | ||
end | ||
|
||
certificate_code { certificate.try(:certificate_code) || Forgery(:basic).text(exactly: 3) } | ||
certificate_type_code { certificate.try(:certificate_type_code) || Forgery(:basic).text(exactly: 1) } | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
47 changes: 47 additions & 0 deletions
47
spec/models/green_lanes/exempting_certificate_override_spec.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
RSpec.describe GreenLanes::ExemptingCertificateOverride do | ||
describe 'attributes' do | ||
it { is_expected.to respond_to :id } | ||
it { is_expected.to respond_to :certificate_type_code } | ||
it { is_expected.to respond_to :certificate_code } | ||
it { is_expected.to respond_to :created_at } | ||
it { is_expected.to respond_to :updated_at } | ||
end | ||
|
||
describe 'validations' do | ||
subject(:errors) { instance.tap(&:valid?).errors } | ||
|
||
let(:instance) { described_class.new } | ||
|
||
it { is_expected.to include certificate_type_code: ['is not present'] } | ||
it { is_expected.to include certificate_code: ['is not present'] } | ||
|
||
context 'with duplicate certificate_type_code and certificate_code' do | ||
let(:existing) { create :exempting_certificate_override } | ||
|
||
let :instance do | ||
described_class.new certificate_type_code: existing.certificate_type_code, | ||
certificate_code: existing.certificate_code | ||
end | ||
|
||
it { is_expected.to include %i[certificate_code certificate_type_code] => ['is already taken'] } | ||
end | ||
end | ||
|
||
describe 'date fields' do | ||
subject { create(:exempting_certificate_override).reload } | ||
|
||
it { is_expected.to have_attributes created_at: be_within(1.minute).of(Time.zone.now) } | ||
it { is_expected.to have_attributes updated_at: be_within(1.minute).of(Time.zone.now) } | ||
end | ||
|
||
describe 'associations' do | ||
describe '#certificate' do | ||
subject { exempting_certificate_override.reload.certificate } | ||
|
||
let(:exempting_certificate_override) { create :exempting_certificate_override, certificate: } | ||
let(:certificate) { create :certificate } | ||
|
||
it { is_expected.to eq certificate } | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.