-
Notifications
You must be signed in to change notification settings - Fork 66
Commit
* submit order spec * increase mdot timeouts * fix mdot url and specs * add mdot supplies controller * fix mdot client spec * add mdot supply swagger spec stub * add auth to swagger * add order input body swagger * lint * add type to product_id * test unauthenticated route mdot * remove unused vcr cassette * Update lib/mdot/configuration.rb Co-Authored-By: Johnny Holton <johnny@oddball.io> Co-authored-by: Johnny Holton <johnny@oddball.io>
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
# frozen_string_literal: true | ||
|
||
module V0 | ||
module MDOT | ||
class SuppliesController < ApplicationController | ||
def create | ||
render(json: client.submit_order(supply_params)) | ||
end | ||
|
||
private | ||
|
||
def supply_params | ||
params.permit( | ||
:use_permanent_address, | ||
:use_temporary_address, | ||
:additional_requests, | ||
order: [:product_id], | ||
permanent_address: %i[ | ||
street | ||
street2 | ||
city | ||
state | ||
country | ||
postal_code | ||
] | ||
).to_hash | ||
end | ||
|
||
def client | ||
@client ||= ::MDOT::Client.new(current_user) | ||
end | ||
end | ||
end | ||
end |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
# frozen_string_literal: true | ||
|
||
module Swagger | ||
module Requests | ||
module MDOT | ||
class Supplies | ||
include Swagger::Blocks | ||
|
||
swagger_path '/v0/mdot/supplies' do | ||
operation :post do | ||
key :description, 'Create a MDOT supply order' | ||
key :operationId, 'addMdotOrder' | ||
key :tags, %w[mdot] | ||
|
||
extend Swagger::Responses::AuthenticationError | ||
parameter :authorization | ||
|
||
key :produces, ['application/json'] | ||
key :consumes, ['application/json'] | ||
|
||
parameter do | ||
key :name, :order_input | ||
key :in, :body | ||
key :description, 'Order input' | ||
key :required, true | ||
|
||
schema do | ||
key :type, :object | ||
key :required, [:order] | ||
|
||
property :use_permanent_address, type: :boolean | ||
property :use_temporary_address, type: :boolean | ||
property :additional_requests, type: :string | ||
|
||
property :permanent_address do | ||
key :type, :object | ||
|
||
property :street, type: :string | ||
property :street2, type: :string | ||
property :city, type: :string | ||
property :state, type: :string | ||
property :country, type: :string | ||
property :postal_code, type: :string | ||
end | ||
|
||
property :order do | ||
key :type, :array | ||
|
||
items do | ||
key :type, :object | ||
|
||
property :product_id, type: :string | ||
end | ||
end | ||
end | ||
end | ||
|
||
response 200 do | ||
key :description, 'mdot order response' | ||
|
||
schema do | ||
key :required, %i[status order_id] | ||
|
||
property :status, type: :string | ||
property :order_id, type: :string | ||
end | ||
end | ||
end | ||
end | ||
end | ||
end | ||
end | ||
end |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
# frozen_string_literal: true | ||
|
||
require 'rails_helper' | ||
|
||
RSpec.describe V0::MDOT::SuppliesController, type: :controller do | ||
let(:user_details) do | ||
{ | ||
first_name: 'Greg', | ||
last_name: 'Anderson', | ||
middle_name: 'A', | ||
birth_date: '1991-04-05', | ||
ssn: '000550237' | ||
} | ||
end | ||
|
||
let(:user) { build(:user, :loa3, user_details) } | ||
|
||
before do | ||
sign_in_as(user) | ||
end | ||
|
||
describe '#create' do | ||
let(:body) do | ||
{ | ||
'permanent_address' => { | ||
'street' => '101 Example Street', | ||
'street2' => 'Apt 2', | ||
'city' => 'Kansas City', | ||
'state' => 'MO', | ||
'country' => 'USA', | ||
'postal_code' => '64117' | ||
}, | ||
'use_permanent_address' => true, | ||
'use_temporary_address' => false, | ||
'order' => [{ 'product_id' => '1' }, { 'product_id' => '4' }], | ||
'additional_requests' => '' | ||
} | ||
end | ||
|
||
it 'submits the req to the mdot client' do | ||
VCR.use_cassette('mdot/submit_order', VCR::MATCH_EVERYTHING) do | ||
post(:create, body: body.to_json, as: :json) | ||
|
||
res = JSON.parse(response.body) | ||
expect(res['status']).to eq('success') | ||
expect(res['order_id']).to match(/[a-z0-9-]+/) | ||
end | ||
end | ||
end | ||
end |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.