solidus_br_common 1.1.0
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 +1 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +14 -0
- data/Gemfile +19 -0
- data/LICENSE +26 -0
- data/README.md +55 -0
- data/Rakefile +21 -0
- data/app/assets/javascripts/spree/backend/solidus_br_common.js +2 -0
- data/app/assets/javascripts/spree/frontend/address.js +119 -0
- data/app/assets/javascripts/spree/frontend/mask.js +21 -0
- data/app/assets/javascripts/spree/frontend/plugins/jquery.mask.extension.js +4 -0
- data/app/assets/javascripts/spree/frontend/plugins/jquery.mask.js +395 -0
- data/app/assets/javascripts/spree/frontend/routes.js.erb +4 -0
- data/app/assets/javascripts/spree/frontend/solidus_br_common.js +1 -0
- data/app/assets/stylesheets/spree/backend/solidus_br_common.css +4 -0
- data/app/assets/stylesheets/spree/frontend/solidus_br_common.css +4 -0
- data/app/controllers/spree/addresses_controller.rb +24 -0
- data/app/controllers/spree/api/cities_controller.rb +33 -0
- data/app/controllers/spree/user_registrations_controller_decorator.rb +13 -0
- data/app/helpers/spree/api/api_helpers_decorator.rb +9 -0
- data/app/helpers/spree/base_helper_decorator.rb +5 -0
- data/app/models/spree/ability_decorator.rb +21 -0
- data/app/models/spree/address_decorator.rb +6 -0
- data/app/models/spree/city.rb +7 -0
- data/app/models/spree/permitted_attributes_decorator.rb +8 -0
- data/app/models/spree/state_decorator.rb +3 -0
- data/app/models/spree/user_decorator.rb +52 -0
- data/app/overrides/spree/address/_form/add_district.html.erb.deface +5 -0
- data/app/overrides/spree/address/_form/add_number.html.erb.deface +5 -0
- data/app/overrides/spree/address/_form/hide_country.html.erb.deface +4 -0
- data/app/overrides/spree/address/_form/move_city_to_after_state.deface +2 -0
- data/app/overrides/spree/address/_form/move_zipcode_after_last_name.deface +2 -0
- data/app/overrides/spree/address/_form/replace_city_input_text_by_select.html.erb.deface +18 -0
- data/app/overrides/spree/address/_form/set_data_uf_to_state.html.erb.deface +15 -0
- data/app/overrides/spree/admin/users/_form/add_extras_fields.html.erb.deface +39 -0
- data/app/overrides/spree/shared/_user_form/add_extra_fields.html.erb.deface +19 -0
- data/app/overrides/spree/users/show/add_details.html.erb.deface +13 -0
- data/app/views/spree/api/cities/index.v1.rabl +11 -0
- data/app/views/spree/api/cities/show.v1.rabl +2 -0
- data/bin/rails +7 -0
- data/config/locales/en.yml +11 -0
- data/config/locales/pt-BR.yml +14 -0
- data/config/routes.rb +7 -0
- data/db/default/country.rb +3 -0
- data/db/default/shipping_categories.rb +1 -0
- data/db/default/shipping_zones.rb +3 -0
- data/db/default/states.rb +31 -0
- data/db/default/states_cities_of_acre.rb +26 -0
- data/db/default/states_cities_of_alagoas.rb +107 -0
- data/db/default/states_cities_of_amapa.rb +20 -0
- data/db/default/states_cities_of_amazonas.rb +67 -0
- data/db/default/states_cities_of_bahia.rb +421 -0
- data/db/default/states_cities_of_ceara.rb +188 -0
- data/db/default/states_cities_of_distrito_federal.rb +5 -0
- data/db/default/states_cities_of_espirito_santo.rb +82 -0
- data/db/default/states_cities_of_goias.rb +250 -0
- data/db/default/states_cities_of_maranhao.rb +221 -0
- data/db/default/states_cities_of_mato_grosso.rb +145 -0
- data/db/default/states_cities_of_mato_grosso_do_sul.rb +82 -0
- data/db/default/states_cities_of_minas_gerais.rb +857 -0
- data/db/default/states_cities_of_para.rb +147 -0
- data/db/default/states_cities_of_paraiba.rb +227 -0
- data/db/default/states_cities_of_parana.rb +403 -0
- data/db/default/states_cities_of_pernambuco.rb +189 -0
- data/db/default/states_cities_of_piaui.rb +227 -0
- data/db/default/states_cities_of_rio_de_janeiro.rb +96 -0
- data/db/default/states_cities_of_rio_grande_do_norte.rb +171 -0
- data/db/default/states_cities_of_rio_grande_do_sul.rb +500 -0
- data/db/default/states_cities_of_rondonia.rb +56 -0
- data/db/default/states_cities_of_roraima.rb +19 -0
- data/db/default/states_cities_of_santa_catarina.rb +297 -0
- data/db/default/states_cities_of_sao_paulo.rb +649 -0
- data/db/default/states_cities_of_sergipe.rb +79 -0
- data/db/default/states_cities_of_tocantins.rb +144 -0
- data/db/default/stock.rb +1 -0
- data/db/default/tax_categories.rb +1 -0
- data/db/default/user.rb +100 -0
- data/db/migrate/20150503011715_create_spree_cities.rb +13 -0
- data/db/migrate/20150504004509_remove_city_from_spree_address.rb +5 -0
- data/db/migrate/20150504004648_add_city_to_spree_address.rb +5 -0
- data/db/migrate/20150505020218_add_number_and_district_to_spree_address.rb +6 -0
- data/db/migrate/20150505031019_add_details_to_spree_user.rb +10 -0
- data/db/seeds.rb +5 -0
- data/lib/generators/solidus_br_common/install/install_generator.rb +31 -0
- data/lib/solidus_br_common/engine.rb +20 -0
- data/lib/solidus_br_common/factories/address_factory.rb +7 -0
- data/lib/solidus_br_common/factories/city_factory.rb +8 -0
- data/lib/solidus_br_common/factories/user_factory.rb +12 -0
- data/lib/solidus_br_common/factories.rb +3 -0
- data/lib/solidus_br_common.rb +2 -0
- data/solidus_br_common.gemspec +33 -0
- data/spec/controllers/spree/addresses_controller_spec.rb +27 -0
- data/spec/controllers/spree/api/cities_controller_spec.rb +91 -0
- data/spec/features/address_checkout_spec.rb +89 -0
- data/spec/features/user_account_spec.rb +46 -0
- data/spec/features/user_signup_spec.rb +24 -0
- data/spec/fixtures/vcr_cassettes/Checkout/visitor_makes_checkout_as_guest_without_registration/full_checkout/does_not_break_the_per-item_shipping_method_calculator.yml +49 -0
- data/spec/fixtures/vcr_cassettes/Checkout/visitor_makes_checkout_as_guest_without_registration/full_checkout/in_Brazil/should_autocomplete_zipcode.yml +46 -0
- data/spec/fixtures/vcr_cassettes/Spree_AddressesController/_show/does_not_find_an_incorrect_cep.yml +38 -0
- data/spec/fixtures/vcr_cassettes/Spree_AddressesController/_show/shows_the_correct_address.yml +46 -0
- data/spec/models/spree/address_spec.rb +32 -0
- data/spec/models/spree/city_spec.rb +7 -0
- data/spec/models/spree/user_spec.rb +88 -0
- data/spec/spec_helper.rb +61 -0
- data/spec/support/controller_hacks.rb +33 -0
- data/spec/support/database_cleaner.rb +24 -0
- data/spec/support/shared_context/checkout_setup.rb +9 -0
- data/spec/support/shoulda_matchers.rb +6 -0
- data/spec/support/vcr.rb +8 -0
- metadata +385 -0
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Checkout', type: :feature, inaccessible: true do
|
4
|
+
include_context 'checkout setup'
|
5
|
+
|
6
|
+
let!(:city) { create(:city, state: Spree::State.first!) }
|
7
|
+
|
8
|
+
context 'visitor makes checkout as guest without registration' do
|
9
|
+
before(:each) do
|
10
|
+
stock_location.stock_items.update_all(count_on_hand: 1)
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'full checkout', :vcr do
|
14
|
+
before do
|
15
|
+
shipping_method.calculator.update!(preferred_amount: 10)
|
16
|
+
mug.shipping_category = shipping_method.shipping_categories.first
|
17
|
+
mug.save!
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'does not break the per-item shipping method calculator', :js => true do
|
21
|
+
add_mug_to_cart
|
22
|
+
click_button 'Checkout'
|
23
|
+
|
24
|
+
fill_in 'order_email', :with => 'test@example.com'
|
25
|
+
click_button 'Continue'
|
26
|
+
|
27
|
+
fill_in_address
|
28
|
+
click_button 'Save and Continue'
|
29
|
+
|
30
|
+
expect(page).not_to have_content("undefined method `promotion'")
|
31
|
+
click_button 'Save and Continue'
|
32
|
+
expect(page).to have_content('Shipping total: $10.00')
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'in Brazil' do
|
36
|
+
before do
|
37
|
+
brazil = create(:country, name: 'Brasil')
|
38
|
+
minas_gerais_state = create(:state, abbr: 'MG', name: 'Minas Gerais', country: brazil)
|
39
|
+
minas_gerais_city = create(:city, name: 'Minas Gerais', state: minas_gerais_state)
|
40
|
+
@sao_paulo_state = create(:state, abbr: 'SP', name: 'São Paulo', country: brazil)
|
41
|
+
@sao_paulo_city = create(:city, name: 'São Paulo', state: @sao_paulo_state)
|
42
|
+
|
43
|
+
Spree::Config[:default_country_id] = brazil.id
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should autocomplete zipcode', :js => true do
|
47
|
+
add_mug_to_cart
|
48
|
+
click_button 'Checkout'
|
49
|
+
|
50
|
+
fill_in 'order_email', :with => 'test@example.com'
|
51
|
+
click_button 'Continue'
|
52
|
+
|
53
|
+
address = 'order_bill_address_attributes'
|
54
|
+
fill_in "#{address}_zipcode", with: '04089000'
|
55
|
+
|
56
|
+
wait_for_ajax
|
57
|
+
|
58
|
+
expect(find_by_id("#{address}_address1").value).to eq('Alameda dos Maracatins')
|
59
|
+
expect(find_by_id("#{address}_district").value).to eq('Indianópolis')
|
60
|
+
expect(find_by_id("#{address}_state_id").value).to eq(@sao_paulo_state.id.to_s)
|
61
|
+
expect(find_by_id("#{address}_city_id").value).to eq(@sao_paulo_city.id.to_s)
|
62
|
+
end
|
63
|
+
|
64
|
+
after do
|
65
|
+
Spree::Config[:default_country_id] = nil
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def fill_in_address
|
72
|
+
address = 'order_bill_address_attributes'
|
73
|
+
fill_in "#{address}_firstname", with: 'Ryan'
|
74
|
+
fill_in "#{address}_lastname", with: 'Bigg'
|
75
|
+
fill_in "#{address}_address1", with: 'Swan Street'
|
76
|
+
fill_in "#{address}_number", with: '143'
|
77
|
+
fill_in "#{address}_district", with: 'Carville'
|
78
|
+
select 'Alabama', from: "#{address}_state_id"
|
79
|
+
select city.name, from: "#{address}_city_id"
|
80
|
+
fill_in "#{address}_zipcode", with: '12345'
|
81
|
+
fill_in "#{address}_phone", with: '(555) 555-5555'
|
82
|
+
end
|
83
|
+
|
84
|
+
def add_mug_to_cart
|
85
|
+
visit spree.root_path
|
86
|
+
click_link mug.name
|
87
|
+
click_button 'add-to-cart-button'
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Accounts', type: :feature, inaccessible: true, js: true do
|
4
|
+
def login_as(user)
|
5
|
+
visit spree.login_path
|
6
|
+
fill_in 'Email', with: user.email
|
7
|
+
fill_in 'Password', with: user.password
|
8
|
+
click_button 'Login'
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:user) { create(:user) }
|
12
|
+
|
13
|
+
before do
|
14
|
+
login_as(user)
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'editing' do
|
18
|
+
scenario 'should rename user with success' do
|
19
|
+
Spree::Auth::Config.set(signout_after_password_change: false)
|
20
|
+
click_link 'My Account'
|
21
|
+
|
22
|
+
expect(page).to have_text user.email
|
23
|
+
click_link 'Edit'
|
24
|
+
fill_in 'First Name', with: 'Diego'
|
25
|
+
fill_in 'Last Name', with: 'Domingues'
|
26
|
+
fill_in Spree.t(:date_of_birth), with: 19.years.ago.strftime(Spree.t('date_picker.format', default: '%Y/%m/%d'))
|
27
|
+
click_button 'Update'
|
28
|
+
|
29
|
+
expect(page).to have_text 'Diego Domingues'
|
30
|
+
expect(page).to have_text 'Account updated'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'showing' do
|
35
|
+
scenario 'should show details of user' do
|
36
|
+
click_link 'My Account'
|
37
|
+
|
38
|
+
expect(page).to have_text user.full_name
|
39
|
+
expect(page).to have_text user.cpf_formatted
|
40
|
+
expect(page).to have_text user.phone
|
41
|
+
expect(page).to have_text user.alternative_phone if user.alternative_phone.present?
|
42
|
+
expect(page).to have_text user.date_of_birth.to_date
|
43
|
+
expect(page).to have_text user.email
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Sign Up', type: :feature, inaccessible: true do
|
4
|
+
context 'with valid data' do
|
5
|
+
scenario 'create a user with success', js: true do
|
6
|
+
visit spree.signup_path
|
7
|
+
|
8
|
+
fill_in Spree.t(:first_name), with: 'Carlos'
|
9
|
+
fill_in Spree.t(:last_name), with: 'Andrade'
|
10
|
+
fill_in Spree.t(:cpf), with: '53229124367'
|
11
|
+
fill_in Spree.t(:date_of_birth), with: 18.years.ago.strftime(Spree.t('date_picker.format', default: '%Y/%m/%d'))
|
12
|
+
fill_in Spree.t(:email), with: 'email@person.com'
|
13
|
+
fill_in Spree.t(:phone), with: '11 12211221'
|
14
|
+
fill_in Spree.t(:alternative_phone), with: '11 12211221'
|
15
|
+
fill_in Spree.t(:password), with: 'password'
|
16
|
+
fill_in 'Password Confirmation', with: 'password'
|
17
|
+
|
18
|
+
click_button 'Create'
|
19
|
+
|
20
|
+
expect(page).to have_text 'You have signed up successfully.'
|
21
|
+
expect(Spree::User.count).to eq(1)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://api.postmon.com.br/v1/cep/12345
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- "*/*; q=0.5, application/xml"
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip, deflate
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 404
|
19
|
+
message: Not Found
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx/1.1.19
|
23
|
+
Date:
|
24
|
+
- Tue, 12 May 2015 05:46:09 GMT
|
25
|
+
Content-Type:
|
26
|
+
- text/html; charset=UTF-8
|
27
|
+
Content-Length:
|
28
|
+
- '368'
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Vary:
|
32
|
+
- Accept-Encoding
|
33
|
+
Content-Encoding:
|
34
|
+
- gzip
|
35
|
+
body:
|
36
|
+
encoding: ASCII-8BIT
|
37
|
+
string: !binary |-
|
38
|
+
H4sIAAAAAAAAA3VSTU/CQBC9+ytGSDyJ2/KRYFt7EEokQSRaDh6X7pQ2lu66
|
39
|
+
uxga439325pAi+xpZ+fNmzfz9grM8a6nL5PwfRXAU/i8gNX6cTGfQKdHyDwI
|
40
|
+
Z4RMw2md6d9ZhATLjn9VlSV6l9XXOkTKjmH1pFOdoR9IyaUDQ2sIS65hxvc5
|
41
|
+
80ida+KVLjIEXQh86Gg8aBIp1WliAMq28L2h0cdWllS9iGclfxcRXYh5rnsx
|
42
|
+
3aVZ4YCiuXJ/WvUbzop/6+M4dk1WMjSRLQ6geJYy6DLG3BZHfQRlLM23BjwS
|
43
|
+
Bxd2VG7T/C9qdxUSL4u+0PTY4JzRI9WyTvZPmgZ45Zyt/Sb2BTNMookU/huX
|
44
|
+
srgFnSBI/Nyj0shg/bowrmr/pmsN7t1Ea+EQkvGIZglX2hlbY4t82SRCQez+
|
45
|
+
YDiqccZs3XYRIrpXhpHmgJUkj4i2Bol+qTEuNTpQc51zl7CTLRzHNmNVP/QX
|
46
|
+
8ak9XOUCAAA=
|
47
|
+
http_version:
|
48
|
+
recorded_at: Tue, 12 May 2015 05:37:46 GMT
|
49
|
+
recorded_with: VCR 2.9.3
|
@@ -0,0 +1,46 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://api.postmon.com.br/v1/cep/04089000
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- "*/*; q=0.5, application/xml"
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip, deflate
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx/1.1.19
|
23
|
+
Date:
|
24
|
+
- Tue, 12 May 2015 05:51:31 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json
|
27
|
+
Content-Length:
|
28
|
+
- '334'
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Access-Control-Allow-Origin:
|
32
|
+
- "*"
|
33
|
+
Cache-Control:
|
34
|
+
- public, max-age=2592000
|
35
|
+
X-Cache:
|
36
|
+
- HIT
|
37
|
+
body:
|
38
|
+
encoding: UTF-8
|
39
|
+
string: '{"complemento": "at\u00e9 470 - lado par", "bairro": "Indian\u00f3polis",
|
40
|
+
"cidade": "S\u00e3o Paulo", "logradouro": "Alameda dos Maracatins", "estado_info":
|
41
|
+
{"area_km2": "248.222,362", "codigo_ibge": "35", "nome": "S\u00e3o Paulo"},
|
42
|
+
"cep": "04089000", "cidade_info": {"area_km2": "1521,101", "codigo_ibge":
|
43
|
+
"3550308"}, "estado": "SP"}'
|
44
|
+
http_version:
|
45
|
+
recorded_at: Tue, 12 May 2015 05:43:08 GMT
|
46
|
+
recorded_with: VCR 2.9.3
|
data/spec/fixtures/vcr_cassettes/Spree_AddressesController/_show/does_not_find_an_incorrect_cep.yml
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://api.postmon.com.br/v1/cep/00000000
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- "*/*; q=0.5, application/xml"
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip, deflate
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 404
|
19
|
+
message: CEP 00000000 nao encontrado
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx/1.1.19
|
23
|
+
Date:
|
24
|
+
- Fri, 08 May 2015 02:39:13 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json
|
27
|
+
Content-Length:
|
28
|
+
- '0'
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Access-Control-Allow-Origin:
|
32
|
+
- "*"
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: ''
|
36
|
+
http_version:
|
37
|
+
recorded_at: Fri, 08 May 2015 02:30:57 GMT
|
38
|
+
recorded_with: VCR 2.9.3
|
data/spec/fixtures/vcr_cassettes/Spree_AddressesController/_show/shows_the_correct_address.yml
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://api.postmon.com.br/v1/cep/04089000
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- "*/*; q=0.5, application/xml"
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip, deflate
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx/1.1.19
|
23
|
+
Date:
|
24
|
+
- Fri, 08 May 2015 02:39:13 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json
|
27
|
+
Content-Length:
|
28
|
+
- '334'
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Access-Control-Allow-Origin:
|
32
|
+
- "*"
|
33
|
+
Cache-Control:
|
34
|
+
- public, max-age=2592000
|
35
|
+
X-Cache:
|
36
|
+
- MISS
|
37
|
+
body:
|
38
|
+
encoding: UTF-8
|
39
|
+
string: '{"complemento": "at\u00e9 470 - lado par", "bairro": "Indian\u00f3polis",
|
40
|
+
"cidade": "S\u00e3o Paulo", "logradouro": "Alameda dos Maracatins", "estado_info":
|
41
|
+
{"area_km2": "248.222,801", "codigo_ibge": "35", "nome": "S\u00e3o Paulo"},
|
42
|
+
"cep": "04089000", "cidade_info": {"area_km2": "1521,101", "codigo_ibge":
|
43
|
+
"3550308"}, "estado": "SP"}'
|
44
|
+
http_version:
|
45
|
+
recorded_at: Fri, 08 May 2015 02:30:57 GMT
|
46
|
+
recorded_with: VCR 2.9.3
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Spree::Address do
|
4
|
+
let(:address) {build(:address)}
|
5
|
+
|
6
|
+
it { is_expected.to validate_presence_of(:number) }
|
7
|
+
it { is_expected.to validate_presence_of(:district) }
|
8
|
+
|
9
|
+
it 'should validate length of district' do
|
10
|
+
address.district = string_with_length(151)
|
11
|
+
|
12
|
+
expect(address).to_not be_valid
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should validate number negative' do
|
16
|
+
address.number = -1
|
17
|
+
|
18
|
+
expect(address).to_not be_valid
|
19
|
+
end
|
20
|
+
|
21
|
+
context '#save' do
|
22
|
+
subject { address }
|
23
|
+
|
24
|
+
before { address.save! }
|
25
|
+
|
26
|
+
it { is_expected.to be_persisted }
|
27
|
+
end
|
28
|
+
|
29
|
+
def string_with_length(length)
|
30
|
+
(1..length).map { (65 + rand(26)).chr }.join
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Spree::User do
|
4
|
+
def string_with_length(length)
|
5
|
+
(1..length).map { (65 + rand(26)).chr }.join
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:user) { build(:user) }
|
9
|
+
|
10
|
+
it {
|
11
|
+
is_expected.to validate_presence_of(:cpf)
|
12
|
+
is_expected.to validate_presence_of(:first_name)
|
13
|
+
is_expected.to validate_presence_of(:last_name)
|
14
|
+
is_expected.to validate_presence_of(:date_of_birth)
|
15
|
+
is_expected.to validate_presence_of(:phone)
|
16
|
+
}
|
17
|
+
|
18
|
+
context '#full_name' do
|
19
|
+
it 'should return first_name + last_name' do
|
20
|
+
full_name = "#{user.first_name} #{user.last_name}"
|
21
|
+
|
22
|
+
expect(user.full_name).to eq(full_name)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context '#cpf_formatted' do
|
27
|
+
it 'should return cpf formatted' do
|
28
|
+
user.cpf = '12345678910'
|
29
|
+
|
30
|
+
expect(user.cpf_formatted).to eql('123.456.789-10')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should respond to extra properties' do
|
35
|
+
expect(user).to respond_to :first_name, :last_name, :cpf, :date_of_birth, :phone, :alternative_phone
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should save user with success' do
|
39
|
+
expect(user.save!).to be_truthy
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should save user with sanitize cpf' do
|
43
|
+
cpf_formatted = CPF.generate(true)
|
44
|
+
user.cpf = cpf_formatted
|
45
|
+
cpf = CPF.new(cpf_formatted)
|
46
|
+
|
47
|
+
user.save!
|
48
|
+
|
49
|
+
expect(user.cpf).to eq(cpf.stripped)
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should save user with sanitize phone' do
|
53
|
+
user.phone = '(011) 3882-8877'
|
54
|
+
user.save!
|
55
|
+
|
56
|
+
expect(user.phone).to eq('01138828877')
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should validate cpf' do
|
60
|
+
expect(user).to be_valid
|
61
|
+
|
62
|
+
user.cpf = '123456789'
|
63
|
+
|
64
|
+
expect(user).to_not be_valid
|
65
|
+
|
66
|
+
user.cpf = '12345678910'
|
67
|
+
|
68
|
+
expect(user).to_not be_valid
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should validate length of first_name' do
|
72
|
+
user.first_name = string_with_length(101)
|
73
|
+
|
74
|
+
expect(user).to_not be_valid
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'should validate length of last_name' do
|
78
|
+
user.last_name = string_with_length(101)
|
79
|
+
|
80
|
+
expect(user).to_not be_valid
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'should validate date_of_birth is greater or equal to 18 years' do
|
84
|
+
user.date_of_birth = 17.years.ago
|
85
|
+
|
86
|
+
expect(user).to_not be_valid
|
87
|
+
end
|
88
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# Run Coverage report
|
2
|
+
require 'codeclimate-test-reporter'
|
3
|
+
CodeClimate::TestReporter.start
|
4
|
+
|
5
|
+
# Configure Rails Environment
|
6
|
+
ENV['RAILS_ENV'] = 'test'
|
7
|
+
|
8
|
+
require File.expand_path('../dummy/config/environment.rb', __FILE__)
|
9
|
+
|
10
|
+
require 'rspec/rails'
|
11
|
+
require 'database_cleaner'
|
12
|
+
require 'ffaker'
|
13
|
+
|
14
|
+
require 'capybara/rspec'
|
15
|
+
require 'capybara-screenshot/rspec'
|
16
|
+
|
17
|
+
if ENV['WEBDRIVER'] == 'accessible'
|
18
|
+
require 'capybara/accessible'
|
19
|
+
Capybara.javascript_driver = :accessible
|
20
|
+
else
|
21
|
+
require 'capybara/poltergeist'
|
22
|
+
Capybara.javascript_driver = :poltergeist
|
23
|
+
end
|
24
|
+
|
25
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
26
|
+
# in spec/support/ and its subdirectories.
|
27
|
+
Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
|
28
|
+
|
29
|
+
# Requires factories and other useful helpers defined in spree_core.
|
30
|
+
require 'spree/testing_support/authorization_helpers'
|
31
|
+
require 'spree/testing_support/capybara_ext'
|
32
|
+
require 'spree/testing_support/controller_requests'
|
33
|
+
require 'spree/testing_support/factories'
|
34
|
+
require 'spree/testing_support/url_helpers'
|
35
|
+
|
36
|
+
require 'spree/api/testing_support/helpers'
|
37
|
+
|
38
|
+
# Requires factories defined in lib/solidus_br_common/factories.rb
|
39
|
+
require 'solidus_br_common/factories'
|
40
|
+
|
41
|
+
RSpec.configure do |config|
|
42
|
+
config.include FactoryGirl::Syntax::Methods
|
43
|
+
|
44
|
+
# Infer an example group's spec type from the file location.
|
45
|
+
config.infer_spec_type_from_file_location!
|
46
|
+
|
47
|
+
# == URL Helpers
|
48
|
+
#
|
49
|
+
# Allows access to Spree's routes in specs:
|
50
|
+
#
|
51
|
+
# visit spree.admin_path
|
52
|
+
# current_path.should eql(spree.products_path)
|
53
|
+
config.include Spree::TestingSupport::UrlHelpers
|
54
|
+
config.include Spree::Api::TestingSupport::Helpers
|
55
|
+
|
56
|
+
config.mock_with :rspec
|
57
|
+
config.color = true
|
58
|
+
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
59
|
+
config.fail_fast = ENV['FAIL_FAST'] || false
|
60
|
+
config.order = 'random'
|
61
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'active_support/all'
|
2
|
+
module ControllerHacks
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
routes { Spree::Core::Engine.routes }
|
7
|
+
end
|
8
|
+
|
9
|
+
def api_get(action, params={}, session=nil, flash=nil)
|
10
|
+
api_process(action, params, session, flash, "GET")
|
11
|
+
end
|
12
|
+
|
13
|
+
def api_post(action, params={}, session=nil, flash=nil)
|
14
|
+
api_process(action, params, session, flash, "POST")
|
15
|
+
end
|
16
|
+
|
17
|
+
def api_put(action, params={}, session=nil, flash=nil)
|
18
|
+
api_process(action, params, session, flash, "PUT")
|
19
|
+
end
|
20
|
+
|
21
|
+
def api_delete(action, params={}, session=nil, flash=nil)
|
22
|
+
api_process(action, params, session, flash, "DELETE")
|
23
|
+
end
|
24
|
+
|
25
|
+
def api_process(action, params={}, session=nil, flash=nil, method="get")
|
26
|
+
scoping = respond_to?(:resource_scoping) ? resource_scoping : {}
|
27
|
+
process(action, method, params.merge(scoping).reverse_merge!(:format => :json), session, flash)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
RSpec.configure do |config|
|
32
|
+
config.include ControllerHacks, type: :controller
|
33
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
RSpec.configure do |config|
|
2
|
+
# Capybara javascript drivers require transactional fixtures set to false, and we use DatabaseCleaner
|
3
|
+
# to cleanup after each test instead. Without transactional fixtures set to false the records created
|
4
|
+
# to setup a test will be unavailable to the browser, which runs under a separate server instance.
|
5
|
+
config.use_transactional_fixtures = false
|
6
|
+
|
7
|
+
config.before(:suite) do
|
8
|
+
DatabaseCleaner.strategy = :transaction
|
9
|
+
DatabaseCleaner.clean_with(:truncation)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Before each spec check if it is a Javascript test and switch between using database transactions or not where necessary.
|
13
|
+
config.before(:each) do
|
14
|
+
DatabaseCleaner.strategy = RSpec.current_example.metadata[:js] ? :truncation : :transaction
|
15
|
+
end
|
16
|
+
|
17
|
+
config.before(:each) do
|
18
|
+
DatabaseCleaner.start
|
19
|
+
end
|
20
|
+
|
21
|
+
config.after(:each) do
|
22
|
+
DatabaseCleaner.clean
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
shared_context 'checkout setup' do
|
2
|
+
let!(:country) { create(:country, states_required: true) }
|
3
|
+
let!(:state) { create(:state, country: country) }
|
4
|
+
let!(:shipping_method) { create(:shipping_method) }
|
5
|
+
let!(:stock_location) { create(:stock_location) }
|
6
|
+
let!(:mug) { create(:product, name: "RoR Mug") }
|
7
|
+
let!(:payment_method) { create(:check_payment_method) }
|
8
|
+
let!(:zone) { create(:zone) }
|
9
|
+
end
|