samwise 0.2.6 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8cedf0ddf4f864708ca96abba38a421d72d3b977
4
- data.tar.gz: 4344f18276fb3ffad195a0ec646a81a4bb380ceb
3
+ metadata.gz: a2ca088ec51febc2528f8c85bd8def3f12916bcf
4
+ data.tar.gz: 30d7eefed09aa261d36f52fd9c1c78ac41cf050b
5
5
  SHA512:
6
- metadata.gz: ac6ef030f7aa3cdc9923893a0ebc2f030c0558d889771b0d91a27353f47a382b1db0b61b16f9696bab82292a72cede315503ca8f13e085ca87d74982bfb1d6a6
7
- data.tar.gz: 1318c3ffc619e53dd9f4f7181c2324ce9d233f05dce845bfcf325780b1018a7860425c998a0b3e4811c9881bc4aafbc7c1b6ed5ca8f7c81543214fea7ed36103
6
+ metadata.gz: 97eecd5982d49f78a088753e3ca05f8f043f96b45d3789e635c9b40d2260265fb27c140b36daf97efed3294f4841339a9035405889648fe99b96ff7465e75311
7
+ data.tar.gz: 17e4d853e602d24e94eea6176072a3c15b603a42290d7cc8897fa66c2da0717783c75208f0ec1cd66718aa792ef8f87a385cc213e9f0acb6cb52055d7739874d
data/README.md CHANGED
@@ -36,36 +36,122 @@ client.duns_is_in_sam?(duns: '080037478')
36
36
  #=> true
37
37
  ```
38
38
 
39
+ ### Verify Vendor is not on the excluded parties list
40
+
41
+ ```ruby
42
+ client.excluded?(duns: '080037478')
43
+ #=> false
44
+ ```
45
+
46
+ ### Verify Vendor is a small business
47
+
48
+ ```ruby
49
+ client.small_business?(duns: '080037478', naicsCode: 541511)
50
+ #=> false
51
+ ```
52
+
39
53
  ### Get DUNS info
40
54
 
41
55
  ```ruby
42
- client.get_duns_info(duns: '080037478')
43
- #=>
56
+ duns_info = client.get_duns_info(duns: '080037478')
57
+
44
58
  {
45
- "sam_data" => {
46
- "registration" => {
47
- "govtBusinessPoc" => {
48
- "lastName" => "SUDOL", "address" => {
49
- "Line1" => "4301 N HENDERSON RD APT 408", "Zip" => "22203", "Country" => "USA", "City" => "Arlington", "stateorProvince" => "VA"
50
- }, "email" => "BRENDANSUDOL@GMAIL.COM", "usPhone" => "5404218332", "firstName" => "BRENDAN"
51
- }, "dunsPlus4" => "0000", "activationDate" => "2015-10-30 11:42:30.0", "fiscalYearEndCloseDate" => "12/31", "businessTypes" => ["VW", "2X", "27"], "registrationDate" => "2015-10-28 00:00:00.0", "certificationsURL" => {
52
- "pdfUrl" => "https://www.sam.gov/SAMPortal/filedownload?reportType=1&orgId=%2BFCe4Gq91w3LPzmIapO9KekwldCbu7D2ee%2FlxnUkqFvrQwe3OD%2FJSpI%2FuXW0rrpz&pitId=clfEJcL40D6baXhmKE8hVFZPHUDQegjQvNgn4YGfaL%2Fzh6O%2B%2FUJYaSJJ0dKFPFhm&requestId=Xzq5jdsGDkiXPF4"
53
- }, "hasDelinquentFederalDebt" => false, "duns" => "080037478", "cage" => "7H1Y7", "hasKnownExclusion" => false, "publicDisplay" => true, "expirationDate" => "2016-10-27 10:53:02.0", "status" => "ACTIVE", "corporateStructureCode" => "2J", "stateOfIncorporation" => "VA", "corporateStructureName" => "Sole Proprietorship", "legalBusinessName" => "Sudol, Brendan", "congressionalDistrict" => "VA 08", "businessStartDate" => "2015-10-28", "statusMessage" => "Active", "lastUpdateDate" => "2015-11-02 17:36:23.0", "submissionDate" => "2015-10-28 10:53:02.0", "samAddress" => {
54
- "Zip4" => "2511", "Line1" => "4301 N Henderson Rd Apt 408", "Zip" => "22203", "Country" => "USA", "City" => "Arlington", "stateorProvince" => "VA"
55
- }, "naics" => [{
56
- "isPrimary" => false, "naicsCode" => "518210", "naicsName" => "DATA PROCESSING, HOSTING, AND RELATED SERVICES"
57
- }, {
58
- "isPrimary" => true, "naicsCode" => "541511", "naicsName" => "CUSTOM COMPUTER PROGRAMMING SERVICES"
59
- }], "creditCardUsage" => true, "countryOfIncorporation" => "USA", "electronicBusinessPoc" => {
60
- "lastName" => "SUDOL", "address" => {
61
- "Line1" => "4301 N HENDERSON RD APT 408", "Zip" => "22203", "Country" => "USA", "City" => "Arlington", "stateorProvince" => "VA"
62
- }, "email" => "BRENDANSUDOL@GMAIL.COM", "usPhone" => "5404218332", "firstName" => "BRENDAN"
63
- }, "mailingAddress" => {
64
- "Zip4" => "2511", "Line1" => "4301 N Henderson Rd Apt 408", "Zip" => "22203", "Country" => "USA", "City" => "Arlington", "stateorProvince" => "VA"
65
- }, "purposeOfRegistration" => "ALL_AWARDS"
59
+ "sam_data"=>{
60
+ "registration"=>{
61
+ "govtBusinessPoc"=>{
62
+ "lastName"=>"SUDOL",
63
+ "address"=>{
64
+ "zip"=>"22203",
65
+ "countryCode"=>"USA",
66
+ "line1"=>"4301 N HENDERSON RD APT 408",
67
+ "stateorProvince"=>"VA",
68
+ "city"=>"Arlington"
69
+ },
70
+ "email"=>"BRENDANSUDOL@GMAIL.COM",
71
+ "usPhone"=>"5404218332",
72
+ "firstName"=>"BRENDAN"
73
+ },
74
+ "qualifications"=>{
75
+ },
76
+ "dunsPlus4"=>"0000",
77
+ "activationDate"=>"2015-10-30 11:42:30.0",
78
+ "fiscalYearEndCloseDate"=>"12\/31",
79
+ "businessTypes"=>[
80
+ "VW",
81
+ "2X",
82
+ "27"
83
+ ],
84
+ "registrationDate"=>"2015-10-28 00:00:00.0",
85
+ "certificationsURL"=>{
86
+ "pdfUrl":
87
+ "https:\/\/www.sam.gov\/SAMPortal\/filedownload?reportType=1&orgId=kZhDothaHaS8Y%2BBby2ety%2B1PIcKkDuGxkhITFtBfiwpmpGqNLrKsCz9OrI6CaxsI&pitId=Pg1XpWC8vQH7LKi9e8r5BK5D6ORH953kPtjfCGikUDnIY8Fsp71cFeSgzD8W9Uqd&requestId=OBq2t61SZrN75k9"
88
+ },
89
+ "hasDelinquentFederalDebt"=>false,
90
+ "duns"=>"080037478",
91
+ "cage"=>"7H1Y7",
92
+ "hasKnownExclusion"=>false,
93
+ "publicDisplay"=>true,
94
+ "expirationDate"=>"2016-10-27 10:53:02.0",
95
+ "status"=>"ACTIVE",
96
+ "corporateStructureCode"=>"2J",
97
+ "stateOfIncorporation"=>"VA",
98
+ "corporateStructureName"=>"Sole Proprietorship",
99
+ "legalBusinessName"=>"Sudol, Brendan",
100
+ "congressionalDistrict"=>"VA 08",
101
+ "bondingInformation"=>{
102
+ },
103
+ "businessStartDate"=>"2015-10-28",
104
+ "statusMessage"=>"Active",
105
+ "lastUpdateDate"=>"2015-11-02 17:36:23.0",
106
+ "samAddress"=>{
107
+ "zipPlus4"=>"2511",
108
+ "zip"=>"22203",
109
+ "countryCode"=>"USA",
110
+ "line1"=>"4301 N Henderson Rd Apt 408",
111
+ "stateorProvince"=>"VA",
112
+ "city"=>"Arlington"
113
+ },
114
+ "submissionDate"=>"2015-10-28 10:53:02.0",
115
+ "naics"=>[
116
+ {
117
+ "isPrimary"=>false,
118
+ "naicsCode"=>"518210",
119
+ "naicsName"=>"DATA PROCESSING, HOSTING, AND RELATED SERVICES"
120
+ },
121
+ {
122
+ "isPrimary"=>true,
123
+ "naicsCode"=>"541511",
124
+ "naicsName"=>"CUSTOM COMPUTER PROGRAMMING SERVICES"
66
125
  }
126
+ ],
127
+ "creditCardUsage"=>true,
128
+ "countryOfIncorporation"=>"USA",
129
+ "electronicBusinessPoc"=>{
130
+ "lastName"=>"SUDOL",
131
+ "address"=>{
132
+ "zip"=>"22203",
133
+ "countryCode"=>"USA",
134
+ "line1"=>"4301 N HENDERSON RD APT 408",
135
+ "stateorProvince"=>"VA",
136
+ "city"=>"Arlington"
137
+ },
138
+ "email"=>"BRENDANSUDOL@GMAIL.COM",
139
+ "usPhone"=>"5404218332",
140
+ "firstName"=>"BRENDAN"
141
+ },
142
+ "mailingAddress"=>{
143
+ "zipPlus4"=>"2511",
144
+ "zip"=>"22203",
145
+ "countryCode"=>"USA",
146
+ "line1"=>"4301 N Henderson Rd Apt 408",
147
+ "stateorProvince"=>"VA",
148
+ "city"=>"Arlington"
149
+ },
150
+ "purposeOfRegistration"=>"ALL_AWARDS"
67
151
  }
152
+ }
68
153
  }
154
+ #=>
69
155
  ```
70
156
 
71
157
  ### Validate the format of a DUNS number
@@ -101,8 +187,9 @@ Samwise::Util.format_duns(duns: '08-011-5718')
101
187
  #=> "0801157180000"
102
188
  ```
103
189
 
104
- `duns` can be an 8, 9, or 13 digit number (hyphens are removed):
190
+ `duns` can be a 7, 8, 9, or 13 digit number (hyphens are removed):
105
191
 
192
+ - If it is 7 digits, `00` is prepended, and `0000` is added to the end.
106
193
  - If it is 8 digits, `0` is prepended, and `0000` is added to the end.
107
194
  - If it is 9 digits, `0000` is added to the end.
108
195
  - If it is 13 digits, the number is unchanged.
@@ -144,6 +231,38 @@ gem 'samwise', github: '18f/samwise'
144
231
  $ gem install samwise
145
232
  ```
146
233
 
234
+ ## Command Line Interface
235
+ The samwise gem can be run via command line via a piped in file or with a file input flag.
236
+
237
+ To make the gem executable run `gem install samwise` which calls makes the contents of the `bin` directory executable in the gemspec.
238
+
239
+ #### Input Format
240
+ The CLI expects a .json with the following schema:
241
+
242
+ ```json
243
+ {"users":[{"other_keys": "other_values", "duns":"duns_number"}]}
244
+ ```
245
+
246
+ If the JSON does not include a `"duns"` key, the CLI will abort.
247
+
248
+ The JSON can be piped in or fed in from a file via a `-i` flag. For example:
249
+ ```bash
250
+ cat "input_file.json" | samwise verify > output.json
251
+ samwise verify -i "input_file.json" > output.json
252
+ ```
253
+
254
+ #### Output
255
+ The CLI will output a JSON to `STDOUT` with an addition key to be determined by the method run (see below for reference).
256
+
257
+ #### Available Commands
258
+ | CLI Comand | Samwise Function | JSON OutKey |
259
+ |--------------------|-----------------------------------|-------------|
260
+ | `samwise verify` | `Samwise::Client.duns_is_in_sam?` | `verified` |
261
+ | `samwise excluded` | `Samwise::Client.excluded?` | `excluded` |
262
+ | `samwise get_info` | `Samwise::Client.get_duns_info` | `sam_data` |
263
+ | `samwise check_format` | `Samwise::Util.duns_is_properly_formatted?` | `valid_format` |
264
+ | `samwise format` | `Samwise::Util.format_duns` | `formatted_duns` |
265
+
147
266
  ## Public Domain
148
267
 
149
268
  This project is in the worldwide [public domain](LICENSE.md). As stated in [CONTRIBUTING](CONTRIBUTING.md):
data/bin/samwise ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'samwise'
4
+
5
+ Samwise::Cli.start
data/lib/samwise.rb CHANGED
@@ -3,3 +3,4 @@ require 'samwise/error'
3
3
  require 'samwise/util'
4
4
  require 'samwise/protocol'
5
5
  require 'samwise/client'
6
+ require 'samwise/cli'
@@ -0,0 +1,60 @@
1
+ require "thor"
2
+ require 'json'
3
+
4
+ # require 'samwise'
5
+
6
+ module Samwise
7
+ class Cli < Thor
8
+ method_option :infile, :aliases => "-i", :desc => "Nonpiped version input"
9
+ # method_option :dunsnum, :aliases => "-d", :desc => "DUNS number"
10
+ desc "verify", "Verify DUNS numbers are in SAM.gov"
11
+ def verify
12
+ wrap_sam("verified"){|c, u, j| u[j] = c.duns_is_in_sam?(duns: u['duns'])}
13
+ end
14
+ method_option :infile, :aliases => "-i", :desc => "Nonpiped version input"
15
+ desc "excluded", "Verify Vendor is not on the excluded parties list"
16
+ def excluded
17
+ wrap_sam("excluded"){|c, u, j| u[j] = c.excluded?(duns: u['duns'])}
18
+ end
19
+
20
+ method_option :infile, :aliases => "-i", :desc => "Nonpiped version input"
21
+ desc "get_info", "Get DUNS info"
22
+ def get_info
23
+ wrap_sam("user_info"){|c, u, j| u[j] = c.get_duns_info(duns: u['duns'])}
24
+ end
25
+
26
+ method_option :infile, :aliases => "-i", :desc => "Nonpiped version input"
27
+ desc "check_format", "Validate the format of a DUNS number"
28
+ def check_format
29
+ wrap_sam("valid_format"){|c, u, j| u[j] = Samwise::Util.duns_is_properly_formatted?(duns: u['duns'])}
30
+ end
31
+
32
+ method_option :infile, :aliases => "-i", :desc => "Nonpiped version input"
33
+ desc "format", "Format a DUNS number"
34
+ def format
35
+ wrap_sam("formatted_duns") {|c, u, j| u[j] = Samwise::Util.format_duns(duns: u['duns'])}
36
+ end
37
+
38
+ #Helpers
39
+ desc "private method wrap_sam JSonkeytoadd &block", "Opens the client and cli files for all of the calls"
40
+ def wrap_sam(jsonOutKey, &block)
41
+ infile = ($stdin.tty?) ? File.read(options[:infile]) : $stdin.read #read in a json of users to be samwised
42
+ duns_hash = JSON.parse(infile)
43
+ #check what method called wrap_sam. Do not init samwise client for utils
44
+ thor_method = caller_locations(1,1)[0].label
45
+ client = Samwise::Client.new unless (thor_method == "check_format") || (jsonOutKey =="format")
46
+
47
+
48
+ duns_hash['users'].each do |user|
49
+ #abort process do improperly formated duns
50
+ abort("please use a .json with a duns key") unless user.has_key?("duns")
51
+ block.call(client, user, jsonOutKey)
52
+ end
53
+ puts duns_hash.to_json
54
+
55
+ end
56
+
57
+ private :wrap_sam
58
+
59
+ end
60
+ end
@@ -1,4 +1,3 @@
1
- require 'faraday'
2
1
  require 'json'
3
2
  require 'httpclient'
4
3
 
@@ -7,9 +6,6 @@ module Samwise
7
6
  def initialize(api_key: nil, sam_status_key: Samwise::Protocol::SAM_STATUS_KEY)
8
7
  @api_key = api_key || ENV['DATA_DOT_GOV_API_KEY']
9
8
  @sam_status_key = sam_status_key || ENV['SAM_STATUS_KEY']
10
- @conn = Faraday.new do |faraday|
11
- faraday.adapter :httpclient
12
- end
13
9
  @client = HTTPClient.new
14
10
  end
15
11
 
@@ -18,7 +14,8 @@ module Samwise
18
14
  JSON.parse(response.body)
19
15
  end
20
16
 
21
- def duns_is_in_sam?(duns: nil)
17
+ def duns_is_in_sam?(duns: nil, delay: 1)
18
+ sleep(delay)
22
19
  response = lookup_duns(duns: duns)
23
20
  response.status == 200
24
21
  end
@@ -28,6 +25,37 @@ module Samwise
28
25
  JSON.parse(response.body)
29
26
  end
30
27
 
28
+ def excluded?(duns: nil)
29
+ response = lookup_duns(duns: duns)
30
+ JSON.parse(response.body)["hasKnownExclusion"] == false
31
+ end
32
+
33
+ def small_business?(duns: nil, naicsCode: nil)
34
+ response = lookup_duns(duns: duns)
35
+ data = JSON.parse(response.body)["sam_data"]["registration"]
36
+
37
+ if data["certifications"] == nil
38
+ return false
39
+ end
40
+ data = data["certifications"]["farResponses"]
41
+ small_biz_array = data.find{|far|far["id"]=="FAR 52.219-1"}["answers"].find{"naics"}["naics"]
42
+
43
+ # Allows for exact matches of a NAICS Code *or* NAICS code that starts with the argument.
44
+ # E.g., 541511 matches, but 54151 also matches
45
+ if small_biz_array.class == Array
46
+ naics = small_biz_array.find{|naics|naics["naicsCode"].to_s.start_with?(naicsCode.to_s)}
47
+ else
48
+ naics = small_biz_array
49
+ end
50
+
51
+ # Check for the NAICS Code and, if found, check whether it's a small
52
+ if naics == nil
53
+ false
54
+ else
55
+ naics["isSmallBusiness"] == "Y"
56
+ end
57
+ end
58
+
31
59
  private
32
60
 
33
61
  def lookup_duns(duns: nil)
@@ -1,7 +1,7 @@
1
1
  module Samwise
2
2
  module Protocol
3
3
  SAM_API_BASE_URL = 'https://api.data.gov'
4
- SAM_API_API_VERSION = 'v1'
4
+ SAM_API_API_VERSION = 'v4'
5
5
  SAM_STATUS_URL = 'https://www.sam.gov/samdata/registrations/trackProgress'
6
6
  SAM_STATUS_KEY = '1452031543862'
7
7
 
data/lib/samwise/util.rb CHANGED
@@ -8,6 +8,7 @@ module Samwise
8
8
 
9
9
  return true if duns_contains_forbidden_characters?(duns: duns)
10
10
 
11
+ return true if duns_is_seven_digits?(duns: duns)
11
12
  return true if duns_is_eight_digits?(duns: duns)
12
13
  return true if duns_is_nine_digits?(duns: duns)
13
14
  return true if duns_is_thirteen_digits?(duns: duns)
@@ -24,6 +25,8 @@ module Samwise
24
25
  duns = "#{duns}0000"
25
26
  elsif duns_is_eight_digits?(duns: duns)
26
27
  duns = "0#{duns}0000"
28
+ elsif duns_is_seven_digits?(duns: duns)
29
+ duns = "00#{duns}0000"
27
30
  end
28
31
 
29
32
  duns
@@ -45,6 +48,10 @@ module Samwise
45
48
  return true
46
49
  end
47
50
 
51
+ def self.duns_is_seven_digits?(duns: nil)
52
+ duns.length == 7
53
+ end
54
+
48
55
  def self.duns_is_eight_digits?(duns: nil)
49
56
  duns.length == 8
50
57
  end
@@ -1,3 +1,3 @@
1
1
  module Samwise
2
- VERSION = '0.2.6'
2
+ VERSION = '0.2.7'
3
3
  end
data/samwise.gemspec CHANGED
@@ -37,7 +37,7 @@ Gem::Specification.new do |gem|
37
37
  gem.add_development_dependency 'vcr'
38
38
  gem.add_development_dependency 'pry'
39
39
  gem.add_development_dependency 'webmock'
40
+ gem.add_development_dependency 'thor'
40
41
 
41
42
  gem.add_runtime_dependency 'httpclient'
42
- gem.add_runtime_dependency 'faraday'
43
43
  end
@@ -0,0 +1 @@
1
+ {"users":[{"uid":"1000"},{"uid":"100"}]}
@@ -0,0 +1 @@
1
+ {"users":[{"uid":"1000","duns":"080037478"},{"uid":"100","duns":"080031478"}]}
data/spec/cli_spec.rb ADDED
@@ -0,0 +1,125 @@
1
+ require 'spec_helper'
2
+ require 'samwise'
3
+ require 'json'
4
+ require 'factory'
5
+ require 'stringio'
6
+
7
+ describe Samwise::Cli, vcr: { cassette_name: "Samwise::Cli", record: :new_episodes } do
8
+ let(:goodfile) {'spec/cli_mocks/test.json'}
9
+ let(:piped_file){$stdin = StringIO.new(File.read(goodfile))}
10
+ let(:badfile) {'spec/cli_mocks/bad.json'}
11
+ let(:user_array) {Factory.create_users(["1000", "100"], ["080037478", "080031478"])}
12
+ let(:abort_msg) {'please use a .json with a duns key'}
13
+
14
+ def output(method, file)
15
+ capture(:stdout){Samwise::Cli.new.invoke(method, [], {:infile => file})}
16
+ end
17
+
18
+ after(:example) do
19
+ $stdin = STDIN
20
+ end
21
+
22
+ describe ".verify" do
23
+ let(:method) {:verify}
24
+ let(:verified_user) {Factory.build_users_json(user_array, [{"verified" => true}, {"verified" => false}])+"\n"}
25
+ it "verifies the duns for each user with streamed infile" do
26
+ piped_file
27
+ expect(output(method, goodfile)).to eq(verified_user)
28
+ end
29
+ it "verifies the duns for each user when given an -i flagged test.json with duns key" do
30
+ expect(output(method, goodfile)).to eq(verified_user)
31
+ end
32
+
33
+ it "requests to recieve a good json when recieves json without duns key" do
34
+ begin
35
+ err = capture_stderr(output(method, badfile))
36
+ rescue Exception => e
37
+ expect(e.to_s).to eq(abort_msg)
38
+ end
39
+ end
40
+ end
41
+
42
+ describe ".excluded" do
43
+ let(:method) {:excluded}
44
+ let(:excluded_user){Factory.build_users_json(user_array, [{"excluded" => false}, {"excluded" => false}])+"\n"}
45
+ it "checks if users are excluded for each user in a streamed infile" do
46
+ piped_file
47
+ expect(output(method, goodfile)).to eq(excluded_user)
48
+ end
49
+
50
+ it "checks if users are excluded when given an -i flagged test.json with duns key" do
51
+ expect(output(method, goodfile)).to eq(excluded_user)
52
+ end
53
+
54
+ it "requests to recieve a good json when recieves json without duns key" do
55
+ begin
56
+ output(method, badfile)
57
+ rescue Exception => e
58
+ expect(e.to_s).to eq(abort_msg)
59
+ end
60
+ end
61
+ end
62
+
63
+ describe ".get_info" do
64
+ let(:method){:get_info}
65
+ let(:expected_info) {"sam_data"}
66
+ it "gets the users' information for each user in a streamed infile" do
67
+ piped_file
68
+ expect(output(method, goodfile)).to include(expected_info)
69
+ end
70
+
71
+ it "gets the users' information and adds to the json when given an -i flagged test.json with duns key" do
72
+ expect(output(method, goodfile)).to include(expected_info)
73
+ end
74
+
75
+ it "requests to recieve a good json when recieves json without duns key" do
76
+ begin
77
+ output(method, badfile)
78
+ rescue Exception => e
79
+ expect(e.to_s).to eq(abort_msg)
80
+ end
81
+ end
82
+ end
83
+
84
+ describe ".check_format" do
85
+ let(:method) {:check_format}
86
+ let(:valid_duns){Factory.build_users_json(user_array, [{"valid_format" => true}, {"valid_format" => true}])+"\n"}
87
+ it "verifies that the each duns number is formatted for each user in a streamed infile" do
88
+ piped_file
89
+ expect(output(method, goodfile)).to eq(valid_duns)
90
+ end
91
+
92
+ it "verifies that the each duns number is formatted for -i flagged test.json with duns key" do
93
+ expect(output(method, goodfile)).to eq(valid_duns)
94
+ end
95
+
96
+ it "requests to recieve a good json when recieves json without duns key" do
97
+ begin
98
+ output(method, badfile)
99
+ rescue Exception => e
100
+ expect(e.to_s).to eq(abort_msg)
101
+ end
102
+ end
103
+ end
104
+
105
+ describe ".format" do
106
+ let(:method) {:format}
107
+ let(:format_duns){Factory.build_users_json(user_array, [{"formatted_duns" => "0800374780000"}, {"formatted_duns" => "0800314780000"}])+"\n"}
108
+ it "formats duns numbers when streamed in json with users array and duns key" do
109
+ piped_file
110
+ expect(output(method, goodfile)).to eq(format_duns)
111
+ end
112
+
113
+ it "formats duns numbers when given an -i flagged test.json with duns key " do
114
+ expect(output(method, goodfile)).to eq(format_duns)
115
+ end
116
+
117
+ it "requests to recieve a good json when recieves json without duns key" do
118
+ begin
119
+ output(method, badfile)
120
+ rescue Exception => e
121
+ expect(e.to_s).to eq(abort_msg)
122
+ end
123
+ end
124
+ end
125
+ end