correios_sigep 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|