correios_sigep 0.0.1
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 +7 -0
- data/.gitignore +14 -0
- data/.rspec +3 -0
- data/.rubocop.yml +7 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +31 -0
- data/Rakefile +5 -0
- data/bin/rake +16 -0
- data/correios_sigep.gemspec +30 -0
- data/lib/correios_sigep.rb +38 -0
- data/lib/correios_sigep/builders/xml/authentication.rb +36 -0
- data/lib/correios_sigep/builders/xml/collect.rb +33 -0
- data/lib/correios_sigep/builders/xml/collect_objects.rb +25 -0
- data/lib/correios_sigep/builders/xml/product.rb +21 -0
- data/lib/correios_sigep/builders/xml/recipient.rb +30 -0
- data/lib/correios_sigep/builders/xml/request_collect_number.rb +16 -0
- data/lib/correios_sigep/builders/xml/sender.rb +34 -0
- data/lib/correios_sigep/configuration.rb +6 -0
- data/lib/correios_sigep/logistic_reverse/base_client.rb +32 -0
- data/lib/correios_sigep/logistic_reverse/request_collect_number.rb +53 -0
- data/lib/correios_sigep/models/collect.rb +27 -0
- data/lib/correios_sigep/models/correios_response_codes.rb +12 -0
- data/lib/correios_sigep/models/errors/collect_not_answered_for_the_zipcode.rb +8 -0
- data/lib/correios_sigep/models/errors/inexistent_zipcode.rb +8 -0
- data/lib/correios_sigep/models/errors/ticket_already_used.rb +8 -0
- data/lib/correios_sigep/models/errors/unavailable_house_collect.rb +8 -0
- data/lib/correios_sigep/models/errors/unavailable_service.rb +8 -0
- data/lib/correios_sigep/models/errors/unknown_error.rb +8 -0
- data/lib/correios_sigep/models/logistic_reverse.rb +23 -0
- data/lib/correios_sigep/models/object.rb +16 -0
- data/lib/correios_sigep/models/product.rb +14 -0
- data/lib/correios_sigep/models/recipient.rb +25 -0
- data/lib/correios_sigep/models/sender.rb +30 -0
- data/lib/correios_sigep/version.rb +3 -0
- data/spec/correios_sigep/builders/xml/request_collect_number_spec.rb +22 -0
- data/spec/correios_sigep/configuration_spec.rb +84 -0
- data/spec/correios_sigep/logistic_reverse/base_client_spec.rb +25 -0
- data/spec/correios_sigep/logistic_reverse/request_collect_number_spec.rb +101 -0
- data/spec/correios_sigep/models/collect_spec.rb +149 -0
- data/spec/correios_sigep/models/logistic_reverse_spec.rb +62 -0
- data/spec/correios_sigep/models/object_spec.rb +53 -0
- data/spec/correios_sigep/models/product_spec.rb +37 -0
- data/spec/correios_sigep/models/recipient_spec.rb +108 -0
- data/spec/correios_sigep/models/sender_spec.rb +141 -0
- data/spec/correios_sigep_spec.rb +41 -0
- data/spec/fixtures/correios/response_already_in_use.xml +14 -0
- data/spec/fixtures/correios/response_inexistent_zipcode.xml +14 -0
- data/spec/fixtures/correios/response_not_answered_for_zipcode.xml +14 -0
- data/spec/fixtures/correios/response_success.xml +27 -0
- data/spec/fixtures/correios/response_unavailable_house_collect.xml +14 -0
- data/spec/fixtures/correios/response_unavailable_service.xml +14 -0
- data/spec/fixtures/correios/response_unexpected.xml +14 -0
- data/spec/fixtures/correios/wsdl.xml +188 -0
- data/spec/spec_helper.rb +38 -0
- data/spec/support/fixture_helper.rb +5 -0
- data/spec/support/logistic_reverse_helper.rb +15 -0
- metadata +240 -0
@@ -0,0 +1,53 @@
|
|
1
|
+
module CorreiosSigep
|
2
|
+
module LogisticReverse
|
3
|
+
class RequestCollectNumber < BaseClient
|
4
|
+
def initialize(logistic_reverse)
|
5
|
+
@logistic_reverse = logistic_reverse
|
6
|
+
super()
|
7
|
+
end
|
8
|
+
|
9
|
+
def process
|
10
|
+
xml = Builders::XML::RequestCollectNumber.build_xml(@logistic_reverse)
|
11
|
+
response = invoke(:solicitar_postagem_reversa, xml)
|
12
|
+
process_response response
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def process_response(response)
|
18
|
+
response_xml = response.to_xml.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
|
19
|
+
response_doc = Nokogiri::XML.parse(response_xml)
|
20
|
+
code = response_doc.search('//cod-erro | //cod_erro').text.to_i rescue nil
|
21
|
+
handle_errors code, response_doc
|
22
|
+
end
|
23
|
+
|
24
|
+
def handle_errors code, response_doc
|
25
|
+
result_string = '//resultado-solicitacao | //resultado_solicitacao'
|
26
|
+
result_node = response_doc.search(result_string)
|
27
|
+
|
28
|
+
case code
|
29
|
+
|
30
|
+
when Models::CorreiosResponseCodes::SUCCESS
|
31
|
+
result = result_node.search('//numero-coleta | //numero_coleta')
|
32
|
+
if node = result.first
|
33
|
+
collect_number = node.text
|
34
|
+
end
|
35
|
+
when Models::CorreiosResponseCodes::TICKET_ALREADY_USED
|
36
|
+
raise Models::Errors::TicketAlreadyUsed.new result_node
|
37
|
+
.search('//msg_erro | //msg_erro').text
|
38
|
+
when Models::CorreiosResponseCodes::UNAVAILABLE_SERVICE
|
39
|
+
raise Models::Errors::UnavailableService
|
40
|
+
when Models::CorreiosResponseCodes::INEXISTENT_ZIPCODE
|
41
|
+
raise Models::Errors::InexistentZipcode
|
42
|
+
when Models::CorreiosResponseCodes::UNAVAILABLE_HOUSE_COLLECT
|
43
|
+
raise Models::Errors::UnavailableHouseCollect
|
44
|
+
when Models::CorreiosResponseCodes::COLLECT_NOT_ANSWERED_FOR_THE_ZIPCODE
|
45
|
+
raise Models::Errors::CollectNotAnsweredForTheZipcode
|
46
|
+
else
|
47
|
+
raise Models::Errors::UnknownError.new result_node
|
48
|
+
.search('//msg_erro | //msg_erro').text
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module CorreiosSigep
|
2
|
+
module Models
|
3
|
+
class Collect
|
4
|
+
attr_accessor :aditional_service, :ag, :ar, :card, :checklist,
|
5
|
+
:declared_value, :description, :number, :objects, :product,
|
6
|
+
:product_params, :type, :sender, :sender_params, :client_id
|
7
|
+
|
8
|
+
def initialize(options={})
|
9
|
+
@aditional_service = options[:aditional_service]
|
10
|
+
@ag = options[:ag]
|
11
|
+
@ar = options[:ar]
|
12
|
+
@card = options[:card]
|
13
|
+
@checklist = options[:checklist]
|
14
|
+
@client_id = options[:client_id]
|
15
|
+
@declared_value = options[:declared_value]
|
16
|
+
@description = options[:description]
|
17
|
+
@number = options[:number]
|
18
|
+
@type = options[:type]
|
19
|
+
|
20
|
+
@product = options[:product] || Product.new(options.fetch(:product_params, {}))
|
21
|
+
@sender = options[:sender] || Sender.new(options.fetch(:sender_params, {}))
|
22
|
+
@objects = options.fetch(:objects, [])
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module CorreiosSigep
|
2
|
+
module Models
|
3
|
+
module CorreiosResponseCodes
|
4
|
+
SUCCESS = 0
|
5
|
+
TICKET_ALREADY_USED = 195
|
6
|
+
UNAVAILABLE_SERVICE = 210
|
7
|
+
INEXISTENT_ZIPCODE = 113
|
8
|
+
UNAVAILABLE_HOUSE_COLLECT = 111
|
9
|
+
COLLECT_NOT_ANSWERED_FOR_THE_ZIPCODE = 117
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module CorreiosSigep
|
2
|
+
module Models
|
3
|
+
class LogisticReverse
|
4
|
+
attr_accessor :collect, :recipient
|
5
|
+
|
6
|
+
def initialize(options={})
|
7
|
+
@collect = options[:collect] || Models::Collect.new
|
8
|
+
@recipient = options[:recipient] || Models::Recipient.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_xml
|
12
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
13
|
+
xml.root do
|
14
|
+
Builders::XML::Recipient.new(xml, recipient).build_xml
|
15
|
+
Builders::XML::Collect.new(xml, collect).build_xml
|
16
|
+
end
|
17
|
+
end
|
18
|
+
builder.to_xml
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module CorreiosSigep
|
2
|
+
module Models
|
3
|
+
class Object
|
4
|
+
attr_accessor :description, :id, :item, :num, :ship
|
5
|
+
|
6
|
+
def initialize(options={})
|
7
|
+
@description = options[:description]
|
8
|
+
@id = options[:id]
|
9
|
+
@item = options[:item]
|
10
|
+
@num = options[:num]
|
11
|
+
@ship = options[:ship]
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module CorreiosSigep
|
2
|
+
module Models
|
3
|
+
class Recipient
|
4
|
+
attr_accessor :address, :area_code, :city, :complement, :email, :name,
|
5
|
+
:neighborhood, :number, :phone, :postal_code, :reference,
|
6
|
+
:state
|
7
|
+
|
8
|
+
def initialize(options={})
|
9
|
+
@address = options[:address]
|
10
|
+
@area_code = options[:area_code]
|
11
|
+
@city = options[:city]
|
12
|
+
@complement = options[:complement]
|
13
|
+
@email = options[:email]
|
14
|
+
@name = options[:name]
|
15
|
+
@neighborhood = options[:neighborhood]
|
16
|
+
@number = options[:number]
|
17
|
+
@phone = options[:phone]
|
18
|
+
@postal_code = options[:postal_code]
|
19
|
+
@reference = options[:reference]
|
20
|
+
@state = options[:state]
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module CorreiosSigep
|
2
|
+
module Models
|
3
|
+
class Sender
|
4
|
+
attr_accessor :address, :area_code, :city, :complement, :email,
|
5
|
+
:identification, :mobile_area_code, :mobile_phone, :name,
|
6
|
+
:neighborhood, :number, :phone, :postal_code, :reference,
|
7
|
+
:sms, :state
|
8
|
+
|
9
|
+
def initialize(options={})
|
10
|
+
@area_code = options[:area_code]
|
11
|
+
@address = options[:address]
|
12
|
+
@city = options[:city]
|
13
|
+
@complement = options[:complement]
|
14
|
+
@email = options[:email]
|
15
|
+
@identification = options[:identification]
|
16
|
+
@mobile_area_code = options[:mobile_area_code]
|
17
|
+
@mobile_phone = options[:mobile_phone]
|
18
|
+
@name = options[:name]
|
19
|
+
@neighborhood = options[:neighborhood]
|
20
|
+
@number = options[:number]
|
21
|
+
@phone = options[:phone]
|
22
|
+
@postal_code = options[:postal_code]
|
23
|
+
@reference = options[:reference]
|
24
|
+
@sms = options[:sms]
|
25
|
+
@state = options[:state]
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module CorreiosSigep
|
4
|
+
module Builders
|
5
|
+
module XML
|
6
|
+
describe RequestCollectNumber do
|
7
|
+
describe '.build_xml' do
|
8
|
+
let(:logistic_reverse) { CorreiosSigep::Models::LogisticReverse.new }
|
9
|
+
let(:expected_xml) do
|
10
|
+
"<cartao>0057018901</cartao><codigo_servico>41076</codigo_servico><contrato>9912208555</contrato><codAdministrativo>08082650</codAdministrativo><senha>8o8otn</senha><usuario>60618043</usuario>\n <destinatario>\n <nome>ESTABELECIMENT W*M</nome>\n <logradouro>ESTRADA DE ACESSO A JANDIRA</logradouro>\n <numero>1400</numero>\n <complemento>G4</complemento>\n <bairro>FAZENDA ITAQUI</bairro>\n <referencia>REFERENCE</referencia>\n <cidade>BARUERI</cidade>\n <uf>SP</uf>\n <cep>06442130</cep>\n <ddd>11</ddd>\n <telefone>21683228</telefone>\n <email>teste@example.com</email>\n </destinatario>\n <coletas_solicitadas>\n <tipo>CA</tipo>\n <id_cliente>1405670</id_cliente>\n <valor_declarado>100.5</valor_declarado>\n <descricao>teste</descricao>\n <cklist>cklist</cklist>\n <numero>1</numero>\n <ag>1</ag>\n <cartao>1234</cartao>\n <servico_adicional>20.5</servico_adicional>\n <ar>2</ar>\n <remetente>\n <nome>JEFERSON VAZ DOS SANTOS</nome>\n <logradouro>RUA BLA BLA BLA</logradouro>\n <numero>666</numero>\n <complemento>APT 100</complemento>\n <bairro>PINHEIROS</bairro>\n <reference>REFERENCE</reference>\n <cidade>SÃO PAULO</cidade>\n <uf>SP</uf>\n <cep>05427020</cep>\n <ddd>16</ddd>\n <telefone>41606809</telefone>\n <email>jeff@example.com</email>\n <identificacao/>\n <ddd_celular/>\n <celular/>\n <sms/>\n </remetente>\n <produto>\n <codigo>code</codigo>\n <tipo>type</tipo>\n <qtd>3</qtd>\n </produto>\n <obj_col>\n <obj>\n <item>127078</item>\n <id>1405670</id>\n <desc>Pen Drive SAndisk 16GB SDCZ50-016G-A95</desc>\n <ship>ship</ship>\n <num>1</num>\n </obj>\n <obj>\n <item>277574</item>\n <id>1405670</id>\n <desc>Chip unico claro Pre pago</desc>\n <ship>ship</ship>\n <num>2</num>\n </obj>\n </obj_col>\n </coletas_solicitadas>\n\n"
|
11
|
+
end
|
12
|
+
subject { described_class.build_xml(logistic_reverse) }
|
13
|
+
before :each do
|
14
|
+
seed_logistic_reverse(logistic_reverse)
|
15
|
+
end
|
16
|
+
|
17
|
+
it { should eq expected_xml }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module CorreiosSigep
|
2
|
+
describe Configuration do
|
3
|
+
subject { described_class.new }
|
4
|
+
|
5
|
+
describe '#administrative_code' do
|
6
|
+
it 'return nil when unset' do
|
7
|
+
expect(subject.administrative_code).to_not be
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#administrative_code=' do
|
12
|
+
it 'can set the administrative code in configuration' do
|
13
|
+
subject.administrative_code = '12345'
|
14
|
+
expect(subject.administrative_code).to eq '12345'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#card' do
|
19
|
+
it 'return nil when unset' do
|
20
|
+
expect(subject.card).to_not be
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#card=' do
|
25
|
+
it 'can set the card in configuration' do
|
26
|
+
subject.card = 'card'
|
27
|
+
expect(subject.card).to eq 'card'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#contract' do
|
32
|
+
it 'return nil when unset' do
|
33
|
+
expect(subject.contract).to_not be
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#contract=' do
|
38
|
+
it 'can set the contract in configuration' do
|
39
|
+
subject.contract = 'contract'
|
40
|
+
expect(subject.contract).to eq 'contract'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '#password' do
|
45
|
+
it 'return nil when unset' do
|
46
|
+
expect(subject.password).to_not be
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '#password=' do
|
51
|
+
it 'can set the password in configuration' do
|
52
|
+
subject.password = 'password'
|
53
|
+
expect(subject.password).to eq 'password'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
describe '#service_code' do
|
59
|
+
it 'return nil when unset' do
|
60
|
+
expect(subject.service_code).to_not be
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#service_code=' do
|
65
|
+
it 'can set the password in configuration' do
|
66
|
+
subject.service_code = 'service_code'
|
67
|
+
expect(subject.service_code).to eq 'service_code'
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe '#user' do
|
72
|
+
it 'return nil when unset' do
|
73
|
+
expect(subject.user).to_not be
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe '#user=' do
|
78
|
+
it 'can set the user in configuration' do
|
79
|
+
subject.user = 'user'
|
80
|
+
expect(subject.user).to eq 'user'
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module CorreiosSigep
|
4
|
+
module LogisticReverse
|
5
|
+
describe BaseClient do
|
6
|
+
describe '#wsdl' do
|
7
|
+
subject { described_class.new.wsdl }
|
8
|
+
context 'in a test environment' do
|
9
|
+
it 'return the staging url' do
|
10
|
+
allow(ENV).to receive(:[]).with('GEM_ENV').and_return 'test'
|
11
|
+
expect(subject).to eq 'http://webservicescolhomologacao.correios.com.br/ScolWeb/WebServiceScol?wsdl'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'in other environment' do
|
16
|
+
it 'return the production url' do
|
17
|
+
allow(ENV).to receive(:[]).with('GEM_ENV').and_return 'prod'
|
18
|
+
expect(subject).to eq 'http://webservicescol.correios.com.br/ScolWeb/WebServiceScol?wsdl'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module CorreiosSigep
|
4
|
+
module LogisticReverse
|
5
|
+
describe RequestCollectNumber do
|
6
|
+
let(:logistic_reverse) { Models::LogisticReverse.new }
|
7
|
+
let(:request_collect) { described_class.new logistic_reverse }
|
8
|
+
|
9
|
+
before do
|
10
|
+
seed_logistic_reverse(logistic_reverse)
|
11
|
+
stub_request(:get, "http://webservicescolhomologacao.correios.com.br/ScolWeb/WebServiceScol?wsdl").
|
12
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
13
|
+
to_return(:status => 200, :body => correios_fixture('wsdl.xml'), :headers => {})
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '.process' do
|
17
|
+
subject { request_collect.process }
|
18
|
+
|
19
|
+
context 'with success response' do
|
20
|
+
it 'should return the collect number' do
|
21
|
+
stub_request(:post, "http://webservicescolhomologacao.correios.com.br/ScolWeb/WebServiceScol").
|
22
|
+
with(:body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?><env:Envelope xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:tns=\"http://webservice.scol.correios.com.br/\" xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\"><env:Body><tns:solicitarPostagemReversa><cartao>0057018901</cartao><codigo_servico>41076</codigo_servico><contrato>9912208555</contrato><codAdministrativo>08082650</codAdministrativo><senha>8o8otn</senha><usuario>60618043</usuario>\n <destinatario>\n <nome>ESTABELECIMENT W*M</nome>\n <logradouro>ESTRADA DE ACESSO A JANDIRA</logradouro>\n <numero>1400</numero>\n <complemento>G4</complemento>\n <bairro>FAZENDA ITAQUI</bairro>\n <referencia>REFERENCE</referencia>\n <cidade>BARUERI</cidade>\n <uf>SP</uf>\n <cep>06442130</cep>\n <ddd>11</ddd>\n <telefone>21683228</telefone>\n <email>teste@example.com</email>\n </destinatario>\n <coletas_solicitadas>\n <tipo>CA</tipo>\n <id_cliente>1405670</id_cliente>\n <valor_declarado>100.5</valor_declarado>\n <descricao>teste</descricao>\n <cklist>cklist</cklist>\n <numero>1</numero>\n <ag>1</ag>\n <cartao>1234</cartao>\n <servico_adicional>20.5</servico_adicional>\n <ar>2</ar>\n <remetente>\n <nome>JEFERSON VAZ DOS SANTOS</nome>\n <logradouro>RUA BLA BLA BLA</logradouro>\n <numero>666</numero>\n <complemento>APT 100</complemento>\n <bairro>PINHEIROS</bairro>\n <reference>REFERENCE</reference>\n <cidade>SÃO PAULO</cidade>\n <uf>SP</uf>\n <cep>05427020</cep>\n <ddd>16</ddd>\n <telefone>41606809</telefone>\n <email>jeff@example.com</email>\n <identificacao/>\n <ddd_celular/>\n <celular/>\n <sms/>\n </remetente>\n <produto>\n <codigo>code</codigo>\n <tipo>type</tipo>\n <qtd>3</qtd>\n </produto>\n <obj_col>\n <obj>\n <item>127078</item>\n <id>1405670</id>\n <desc>Pen Drive SAndisk 16GB SDCZ50-016G-A95</desc>\n <ship>ship</ship>\n <num>1</num>\n </obj>\n <obj>\n <item>277574</item>\n <id>1405670</id>\n <desc>Chip unico claro Pre pago</desc>\n <ship>ship</ship>\n <num>2</num>\n </obj>\n </obj_col>\n </coletas_solicitadas>\n\n</tns:solicitarPostagemReversa></env:Body></env:Envelope>",
|
23
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Length'=>'2306', 'Content-Type'=>'text/xml;charset=UTF-8', 'Soapaction'=>'"solicitarPostagemReversa"', 'User-Agent'=>'Ruby'}).
|
24
|
+
to_return(:status => 200, :body => correios_fixture('response_success.xml'), :headers => {})
|
25
|
+
|
26
|
+
expect(subject).to eq '373533437'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'with ticket already in use' do
|
31
|
+
it 'should raise TicketAlreadyUsed error' do
|
32
|
+
stub_request(:post, "http://webservicescolhomologacao.correios.com.br/ScolWeb/WebServiceScol").
|
33
|
+
with(:body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?><env:Envelope xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:tns=\"http://webservice.scol.correios.com.br/\" xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\"><env:Body><tns:solicitarPostagemReversa><cartao>0057018901</cartao><codigo_servico>41076</codigo_servico><contrato>9912208555</contrato><codAdministrativo>08082650</codAdministrativo><senha>8o8otn</senha><usuario>60618043</usuario>\n <destinatario>\n <nome>ESTABELECIMENT W*M</nome>\n <logradouro>ESTRADA DE ACESSO A JANDIRA</logradouro>\n <numero>1400</numero>\n <complemento>G4</complemento>\n <bairro>FAZENDA ITAQUI</bairro>\n <referencia>REFERENCE</referencia>\n <cidade>BARUERI</cidade>\n <uf>SP</uf>\n <cep>06442130</cep>\n <ddd>11</ddd>\n <telefone>21683228</telefone>\n <email>teste@example.com</email>\n </destinatario>\n <coletas_solicitadas>\n <tipo>CA</tipo>\n <id_cliente>1405670</id_cliente>\n <valor_declarado>100.5</valor_declarado>\n <descricao>teste</descricao>\n <cklist>cklist</cklist>\n <numero>1</numero>\n <ag>1</ag>\n <cartao>1234</cartao>\n <servico_adicional>20.5</servico_adicional>\n <ar>2</ar>\n <remetente>\n <nome>JEFERSON VAZ DOS SANTOS</nome>\n <logradouro>RUA BLA BLA BLA</logradouro>\n <numero>666</numero>\n <complemento>APT 100</complemento>\n <bairro>PINHEIROS</bairro>\n <reference>REFERENCE</reference>\n <cidade>SÃO PAULO</cidade>\n <uf>SP</uf>\n <cep>05427020</cep>\n <ddd>16</ddd>\n <telefone>41606809</telefone>\n <email>jeff@example.com</email>\n <identificacao/>\n <ddd_celular/>\n <celular/>\n <sms/>\n </remetente>\n <produto>\n <codigo>code</codigo>\n <tipo>type</tipo>\n <qtd>3</qtd>\n </produto>\n <obj_col>\n <obj>\n <item>127078</item>\n <id>1405670</id>\n <desc>Pen Drive SAndisk 16GB SDCZ50-016G-A95</desc>\n <ship>ship</ship>\n <num>1</num>\n </obj>\n <obj>\n <item>277574</item>\n <id>1405670</id>\n <desc>Chip unico claro Pre pago</desc>\n <ship>ship</ship>\n <num>2</num>\n </obj>\n </obj_col>\n </coletas_solicitadas>\n\n</tns:solicitarPostagemReversa></env:Body></env:Envelope>",
|
34
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Length'=>'2306', 'Content-Type'=>'text/xml;charset=UTF-8', 'Soapaction'=>'"solicitarPostagemReversa"', 'User-Agent'=>'Ruby'}).
|
35
|
+
to_return(:status => 200, :body => correios_fixture('response_already_in_use.xml'), :headers => {})
|
36
|
+
|
37
|
+
expect{subject}.to raise_error(Models::Errors::TicketAlreadyUsed)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'when service is unavailable' do
|
42
|
+
it 'should raise UnvailableService error' do
|
43
|
+
stub_request(:post, "http://webservicescolhomologacao.correios.com.br/ScolWeb/WebServiceScol").
|
44
|
+
with(:body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?><env:Envelope xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:tns=\"http://webservice.scol.correios.com.br/\" xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\"><env:Body><tns:solicitarPostagemReversa><cartao>0057018901</cartao><codigo_servico>41076</codigo_servico><contrato>9912208555</contrato><codAdministrativo>08082650</codAdministrativo><senha>8o8otn</senha><usuario>60618043</usuario>\n <destinatario>\n <nome>ESTABELECIMENT W*M</nome>\n <logradouro>ESTRADA DE ACESSO A JANDIRA</logradouro>\n <numero>1400</numero>\n <complemento>G4</complemento>\n <bairro>FAZENDA ITAQUI</bairro>\n <referencia>REFERENCE</referencia>\n <cidade>BARUERI</cidade>\n <uf>SP</uf>\n <cep>06442130</cep>\n <ddd>11</ddd>\n <telefone>21683228</telefone>\n <email>teste@example.com</email>\n </destinatario>\n <coletas_solicitadas>\n <tipo>CA</tipo>\n <id_cliente>1405670</id_cliente>\n <valor_declarado>100.5</valor_declarado>\n <descricao>teste</descricao>\n <cklist>cklist</cklist>\n <numero>1</numero>\n <ag>1</ag>\n <cartao>1234</cartao>\n <servico_adicional>20.5</servico_adicional>\n <ar>2</ar>\n <remetente>\n <nome>JEFERSON VAZ DOS SANTOS</nome>\n <logradouro>RUA BLA BLA BLA</logradouro>\n <numero>666</numero>\n <complemento>APT 100</complemento>\n <bairro>PINHEIROS</bairro>\n <reference>REFERENCE</reference>\n <cidade>SÃO PAULO</cidade>\n <uf>SP</uf>\n <cep>05427020</cep>\n <ddd>16</ddd>\n <telefone>41606809</telefone>\n <email>jeff@example.com</email>\n <identificacao/>\n <ddd_celular/>\n <celular/>\n <sms/>\n </remetente>\n <produto>\n <codigo>code</codigo>\n <tipo>type</tipo>\n <qtd>3</qtd>\n </produto>\n <obj_col>\n <obj>\n <item>127078</item>\n <id>1405670</id>\n <desc>Pen Drive SAndisk 16GB SDCZ50-016G-A95</desc>\n <ship>ship</ship>\n <num>1</num>\n </obj>\n <obj>\n <item>277574</item>\n <id>1405670</id>\n <desc>Chip unico claro Pre pago</desc>\n <ship>ship</ship>\n <num>2</num>\n </obj>\n </obj_col>\n </coletas_solicitadas>\n\n</tns:solicitarPostagemReversa></env:Body></env:Envelope>",
|
45
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Length'=>'2306', 'Content-Type'=>'text/xml;charset=UTF-8', 'Soapaction'=>'"solicitarPostagemReversa"', 'User-Agent'=>'Ruby'}).
|
46
|
+
to_return(:status => 200, :body => correios_fixture('response_unavailable_service.xml'), :headers => {})
|
47
|
+
|
48
|
+
expect{subject}.to raise_error(Models::Errors::UnavailableService)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'when zipcode not exist' do
|
53
|
+
it 'should raise InexistentZipcode error' do
|
54
|
+
stub_request(:post, "http://webservicescolhomologacao.correios.com.br/ScolWeb/WebServiceScol").
|
55
|
+
with(:body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?><env:Envelope xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:tns=\"http://webservice.scol.correios.com.br/\" xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\"><env:Body><tns:solicitarPostagemReversa><cartao>0057018901</cartao><codigo_servico>41076</codigo_servico><contrato>9912208555</contrato><codAdministrativo>08082650</codAdministrativo><senha>8o8otn</senha><usuario>60618043</usuario>\n <destinatario>\n <nome>ESTABELECIMENT W*M</nome>\n <logradouro>ESTRADA DE ACESSO A JANDIRA</logradouro>\n <numero>1400</numero>\n <complemento>G4</complemento>\n <bairro>FAZENDA ITAQUI</bairro>\n <referencia>REFERENCE</referencia>\n <cidade>BARUERI</cidade>\n <uf>SP</uf>\n <cep>06442130</cep>\n <ddd>11</ddd>\n <telefone>21683228</telefone>\n <email>teste@example.com</email>\n </destinatario>\n <coletas_solicitadas>\n <tipo>CA</tipo>\n <id_cliente>1405670</id_cliente>\n <valor_declarado>100.5</valor_declarado>\n <descricao>teste</descricao>\n <cklist>cklist</cklist>\n <numero>1</numero>\n <ag>1</ag>\n <cartao>1234</cartao>\n <servico_adicional>20.5</servico_adicional>\n <ar>2</ar>\n <remetente>\n <nome>JEFERSON VAZ DOS SANTOS</nome>\n <logradouro>RUA BLA BLA BLA</logradouro>\n <numero>666</numero>\n <complemento>APT 100</complemento>\n <bairro>PINHEIROS</bairro>\n <reference>REFERENCE</reference>\n <cidade>SÃO PAULO</cidade>\n <uf>SP</uf>\n <cep>05427020</cep>\n <ddd>16</ddd>\n <telefone>41606809</telefone>\n <email>jeff@example.com</email>\n <identificacao/>\n <ddd_celular/>\n <celular/>\n <sms/>\n </remetente>\n <produto>\n <codigo>code</codigo>\n <tipo>type</tipo>\n <qtd>3</qtd>\n </produto>\n <obj_col>\n <obj>\n <item>127078</item>\n <id>1405670</id>\n <desc>Pen Drive SAndisk 16GB SDCZ50-016G-A95</desc>\n <ship>ship</ship>\n <num>1</num>\n </obj>\n <obj>\n <item>277574</item>\n <id>1405670</id>\n <desc>Chip unico claro Pre pago</desc>\n <ship>ship</ship>\n <num>2</num>\n </obj>\n </obj_col>\n </coletas_solicitadas>\n\n</tns:solicitarPostagemReversa></env:Body></env:Envelope>",
|
56
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Length'=>'2306', 'Content-Type'=>'text/xml;charset=UTF-8', 'Soapaction'=>'"solicitarPostagemReversa"', 'User-Agent'=>'Ruby'}).
|
57
|
+
to_return(:status => 200, :body => correios_fixture('response_inexistent_zipcode.xml'), :headers => {})
|
58
|
+
|
59
|
+
expect{subject}.to raise_error(Models::Errors::InexistentZipcode)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'when collect is not available for the house' do
|
64
|
+
it 'should raise UnavailableHouseCollect error' do
|
65
|
+
stub_request(:post, "http://webservicescolhomologacao.correios.com.br/ScolWeb/WebServiceScol").
|
66
|
+
with(:body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?><env:Envelope xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:tns=\"http://webservice.scol.correios.com.br/\" xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\"><env:Body><tns:solicitarPostagemReversa><cartao>0057018901</cartao><codigo_servico>41076</codigo_servico><contrato>9912208555</contrato><codAdministrativo>08082650</codAdministrativo><senha>8o8otn</senha><usuario>60618043</usuario>\n <destinatario>\n <nome>ESTABELECIMENT W*M</nome>\n <logradouro>ESTRADA DE ACESSO A JANDIRA</logradouro>\n <numero>1400</numero>\n <complemento>G4</complemento>\n <bairro>FAZENDA ITAQUI</bairro>\n <referencia>REFERENCE</referencia>\n <cidade>BARUERI</cidade>\n <uf>SP</uf>\n <cep>06442130</cep>\n <ddd>11</ddd>\n <telefone>21683228</telefone>\n <email>teste@example.com</email>\n </destinatario>\n <coletas_solicitadas>\n <tipo>CA</tipo>\n <id_cliente>1405670</id_cliente>\n <valor_declarado>100.5</valor_declarado>\n <descricao>teste</descricao>\n <cklist>cklist</cklist>\n <numero>1</numero>\n <ag>1</ag>\n <cartao>1234</cartao>\n <servico_adicional>20.5</servico_adicional>\n <ar>2</ar>\n <remetente>\n <nome>JEFERSON VAZ DOS SANTOS</nome>\n <logradouro>RUA BLA BLA BLA</logradouro>\n <numero>666</numero>\n <complemento>APT 100</complemento>\n <bairro>PINHEIROS</bairro>\n <reference>REFERENCE</reference>\n <cidade>SÃO PAULO</cidade>\n <uf>SP</uf>\n <cep>05427020</cep>\n <ddd>16</ddd>\n <telefone>41606809</telefone>\n <email>jeff@example.com</email>\n <identificacao/>\n <ddd_celular/>\n <celular/>\n <sms/>\n </remetente>\n <produto>\n <codigo>code</codigo>\n <tipo>type</tipo>\n <qtd>3</qtd>\n </produto>\n <obj_col>\n <obj>\n <item>127078</item>\n <id>1405670</id>\n <desc>Pen Drive SAndisk 16GB SDCZ50-016G-A95</desc>\n <ship>ship</ship>\n <num>1</num>\n </obj>\n <obj>\n <item>277574</item>\n <id>1405670</id>\n <desc>Chip unico claro Pre pago</desc>\n <ship>ship</ship>\n <num>2</num>\n </obj>\n </obj_col>\n </coletas_solicitadas>\n\n</tns:solicitarPostagemReversa></env:Body></env:Envelope>",
|
67
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Length'=>'2306', 'Content-Type'=>'text/xml;charset=UTF-8', 'Soapaction'=>'"solicitarPostagemReversa"', 'User-Agent'=>'Ruby'}).
|
68
|
+
to_return(:status => 200, :body => correios_fixture('response_unavailable_house_collect.xml'), :headers => {})
|
69
|
+
|
70
|
+
expect{subject}.to raise_error(Models::Errors::UnavailableHouseCollect)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
context 'when collect is for a not answered zipcode' do
|
76
|
+
it 'should raise CollectNotAnsweredForTheZipcode error' do
|
77
|
+
stub_request(:post, "http://webservicescolhomologacao.correios.com.br/ScolWeb/WebServiceScol").
|
78
|
+
with(:body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?><env:Envelope xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:tns=\"http://webservice.scol.correios.com.br/\" xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\"><env:Body><tns:solicitarPostagemReversa><cartao>0057018901</cartao><codigo_servico>41076</codigo_servico><contrato>9912208555</contrato><codAdministrativo>08082650</codAdministrativo><senha>8o8otn</senha><usuario>60618043</usuario>\n <destinatario>\n <nome>ESTABELECIMENT W*M</nome>\n <logradouro>ESTRADA DE ACESSO A JANDIRA</logradouro>\n <numero>1400</numero>\n <complemento>G4</complemento>\n <bairro>FAZENDA ITAQUI</bairro>\n <referencia>REFERENCE</referencia>\n <cidade>BARUERI</cidade>\n <uf>SP</uf>\n <cep>06442130</cep>\n <ddd>11</ddd>\n <telefone>21683228</telefone>\n <email>teste@example.com</email>\n </destinatario>\n <coletas_solicitadas>\n <tipo>CA</tipo>\n <id_cliente>1405670</id_cliente>\n <valor_declarado>100.5</valor_declarado>\n <descricao>teste</descricao>\n <cklist>cklist</cklist>\n <numero>1</numero>\n <ag>1</ag>\n <cartao>1234</cartao>\n <servico_adicional>20.5</servico_adicional>\n <ar>2</ar>\n <remetente>\n <nome>JEFERSON VAZ DOS SANTOS</nome>\n <logradouro>RUA BLA BLA BLA</logradouro>\n <numero>666</numero>\n <complemento>APT 100</complemento>\n <bairro>PINHEIROS</bairro>\n <reference>REFERENCE</reference>\n <cidade>SÃO PAULO</cidade>\n <uf>SP</uf>\n <cep>05427020</cep>\n <ddd>16</ddd>\n <telefone>41606809</telefone>\n <email>jeff@example.com</email>\n <identificacao/>\n <ddd_celular/>\n <celular/>\n <sms/>\n </remetente>\n <produto>\n <codigo>code</codigo>\n <tipo>type</tipo>\n <qtd>3</qtd>\n </produto>\n <obj_col>\n <obj>\n <item>127078</item>\n <id>1405670</id>\n <desc>Pen Drive SAndisk 16GB SDCZ50-016G-A95</desc>\n <ship>ship</ship>\n <num>1</num>\n </obj>\n <obj>\n <item>277574</item>\n <id>1405670</id>\n <desc>Chip unico claro Pre pago</desc>\n <ship>ship</ship>\n <num>2</num>\n </obj>\n </obj_col>\n </coletas_solicitadas>\n\n</tns:solicitarPostagemReversa></env:Body></env:Envelope>",
|
79
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Length'=>'2306', 'Content-Type'=>'text/xml;charset=UTF-8', 'Soapaction'=>'"solicitarPostagemReversa"', 'User-Agent'=>'Ruby'}).
|
80
|
+
to_return(:status => 200, :body => correios_fixture('response_not_answered_for_zipcode.xml'), :headers => {})
|
81
|
+
|
82
|
+
expect{subject}.to raise_error(Models::Errors::CollectNotAnsweredForTheZipcode)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
context 'when correios answer with another code' do
|
88
|
+
it 'should raise UnknownError error' do
|
89
|
+
stub_request(:post, "http://webservicescolhomologacao.correios.com.br/ScolWeb/WebServiceScol").
|
90
|
+
with(:body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?><env:Envelope xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:tns=\"http://webservice.scol.correios.com.br/\" xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\"><env:Body><tns:solicitarPostagemReversa><cartao>0057018901</cartao><codigo_servico>41076</codigo_servico><contrato>9912208555</contrato><codAdministrativo>08082650</codAdministrativo><senha>8o8otn</senha><usuario>60618043</usuario>\n <destinatario>\n <nome>ESTABELECIMENT W*M</nome>\n <logradouro>ESTRADA DE ACESSO A JANDIRA</logradouro>\n <numero>1400</numero>\n <complemento>G4</complemento>\n <bairro>FAZENDA ITAQUI</bairro>\n <referencia>REFERENCE</referencia>\n <cidade>BARUERI</cidade>\n <uf>SP</uf>\n <cep>06442130</cep>\n <ddd>11</ddd>\n <telefone>21683228</telefone>\n <email>teste@example.com</email>\n </destinatario>\n <coletas_solicitadas>\n <tipo>CA</tipo>\n <id_cliente>1405670</id_cliente>\n <valor_declarado>100.5</valor_declarado>\n <descricao>teste</descricao>\n <cklist>cklist</cklist>\n <numero>1</numero>\n <ag>1</ag>\n <cartao>1234</cartao>\n <servico_adicional>20.5</servico_adicional>\n <ar>2</ar>\n <remetente>\n <nome>JEFERSON VAZ DOS SANTOS</nome>\n <logradouro>RUA BLA BLA BLA</logradouro>\n <numero>666</numero>\n <complemento>APT 100</complemento>\n <bairro>PINHEIROS</bairro>\n <reference>REFERENCE</reference>\n <cidade>SÃO PAULO</cidade>\n <uf>SP</uf>\n <cep>05427020</cep>\n <ddd>16</ddd>\n <telefone>41606809</telefone>\n <email>jeff@example.com</email>\n <identificacao/>\n <ddd_celular/>\n <celular/>\n <sms/>\n </remetente>\n <produto>\n <codigo>code</codigo>\n <tipo>type</tipo>\n <qtd>3</qtd>\n </produto>\n <obj_col>\n <obj>\n <item>127078</item>\n <id>1405670</id>\n <desc>Pen Drive SAndisk 16GB SDCZ50-016G-A95</desc>\n <ship>ship</ship>\n <num>1</num>\n </obj>\n <obj>\n <item>277574</item>\n <id>1405670</id>\n <desc>Chip unico claro Pre pago</desc>\n <ship>ship</ship>\n <num>2</num>\n </obj>\n </obj_col>\n </coletas_solicitadas>\n\n</tns:solicitarPostagemReversa></env:Body></env:Envelope>",
|
91
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Length'=>'2306', 'Content-Type'=>'text/xml;charset=UTF-8', 'Soapaction'=>'"solicitarPostagemReversa"', 'User-Agent'=>'Ruby'}).
|
92
|
+
to_return(:status => 200, :body => correios_fixture('response_unexpected.xml'), :headers => {})
|
93
|
+
|
94
|
+
expect{subject}.to raise_error(Models::Errors::UnknownError)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|