-
-
Notifications
You must be signed in to change notification settings - Fork 719
/
registration_spec.rb
275 lines (222 loc) · 9.87 KB
/
registration_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
# frozen_string_literal: true
require 'system_helper'
RSpec.describe "Registration" do
include AuthenticationHelper
include WebHelper
describe "Registering a Profile" do
let(:user) { create(:user, password: "password", password_confirmation: "password") }
before do
Spree::Config.enterprises_require_tos = false
albania = Spree::Country.create!({ name: "Albania", iso3: "ALB", iso: "AL",
iso_name: "ALBANIA", numcode: "8" })
Spree::State.create!({ name: "Berat", abbr: "BRA", country: albania })
Spree::Country.create!({ name: "Chad", iso3: "TCD", iso: "TD", iso_name: "CHAD",
numcode: "148" })
allow_any_instance_of(AddressGeocoder).to receive(:geocode)
end
after do
Spree::State.where(name: 'Berat').delete_all
Spree::Country.where(name: 'Albania').delete_all
Spree::Country.where(name: 'Chad').delete_all
end
it "Allows a logged in user to register a profile" do
visit registration_path
expect(Spree::Config.enterprises_require_tos).to eq false
expect(URI.parse(current_url).path).to eq registration_auth_path
page.has_selector? "dd", text: "Login"
switch_to_login_tab
# Enter Login details
fill_in "Email", with: user.email
fill_in "Password", with: user.password
click_button "Login"
expect(page).to have_content("Hi there!")
expect(URI.parse(current_url).path).to eq registration_path
# Done reading introduction
expect(page).to have_text "What do I get?"
click_button "Let's get started!"
expect(page).to have_content 'Woot!'
# Filling in details
fill_in 'enterprise_name', with: "My Awesome Enterprise"
# Filling in address
fill_in 'enterprise_address', with: '123 Abc Street'
fill_in 'enterprise_city', with: 'Northcote'
fill_in 'enterprise_zipcode', with: '3070'
expect(page).to have_select('enterprise_country', options: ["Albania", "Australia", "France"],
selected: 'Australia')
select 'Vic', from: 'enterprise_state'
click_button "Continue"
expect(page).to have_content 'Who is responsible for managing My Awesome Enterprise?'
# Filling in Contact Details
fill_in 'enterprise_contact', with: 'Saskia Munroe'
expect(page).to have_field 'enterprise_email_address', with: user.email
fill_in 'enterprise_phone', with: '12 3456 7890'
click_button "Continue"
expect(page).to have_content 'Last step to add My Awesome Enterprise!'
# Choosing a type
click_button "Create Profile"
expect(page).to have_content("Please choose one. Are you are producer?")
expect(page).to have_button "Create Profile", disabled: false
click_link "producer-panel"
expect(page).to have_selector '#producer-panel.selected'
# Next (profile is created at this point)
click_button "Create Profile"
expect(page).to have_content 'Nice one!'
# Enterprise should be created
e = Enterprise.find_by(name: 'My Awesome Enterprise')
expect(e.address.address1).to eq "123 Abc Street"
expect(e.sells).to eq "unspecified"
expect(e.is_primary_producer).to eq true
expect(e.contact.id).to eq e.owner_id
expect(e.contact_name).to eq "Saskia Munroe"
# Filling in about
fill_in 'enterprise_description', with: 'Short description'
fill_in 'enterprise_long_desc', with: 'Long description'
fill_in 'enterprise_abn', with: '12345'
fill_in 'enterprise_acn', with: '54321'
choose 'Yes' # enterprise_charges_sales_tax
click_button "Continue"
expect(page).to have_content 'Step 1. Select Logo Image'
# Images
# Upload logo image
attach_file "image-select", Rails.root.join("spec/fixtures/files/logo.png"), visible: false
expect(page).not_to have_css('#image-placeholder .loading')
expect(page.find('#image-placeholder img')['src']).not_to be_empty
# Move from logo page
click_button "Continue"
expect(page).to have_content 'Step 3. Select Promo Image'
# Upload promo image
attach_file "image-select", Rails.root.join("spec/fixtures/files/promo.png"), visible: false
expect(page).not_to have_css('#image-placeholder .loading')
expect(page.find('#image-placeholder img')['src']).not_to be_empty
# Move from promo page
click_button "Continue"
expect(page).to have_content 'How can people find My Awesome Enterprise online?'
# Filling in social with invalid value for instagram - a link to a post instead of user
fill_in "enterprise_instagram", with: 'https://www.instagram.com/p/Cpg4McNPyJA/'
accept_alert "Failed to update your enterprise." do
click_button "Continue"
end
expect(page).to have_content "Must be user name only eg. the_prof"
# Filling in social
fill_in 'enterprise_website', with: 'www.shop.com'
fill_in 'enterprise_facebook', with: 'FaCeBoOk'
fill_in 'enterprise_linkedin', with: 'LiNkEdIn'
fill_in 'enterprise_twitter', with: 'https://twitter.com/@OpenFoodNet'
fill_in 'enterprise_instagram', with: 'https://www.instagram.com/OpenFoodNetwork/'
click_button "Continue"
expect(page).to have_content 'Finished!'
# Done
# Check values set in about tab
e.reload
expect(e.description).to eq "Short description"
expect(e.long_description).to eq "Long description"
expect(e.abn).to eq '12345'
expect(e.acn).to eq '54321'
expect(e.charges_sales_tax).to be true
# Check values set in social tab
expect(e.website).to eq "www.shop.com"
expect(e.facebook).to eq "FaCeBoOk"
expect(e.linkedin).to eq "LiNkEdIn"
expect(e.twitter).to eq "OpenFoodNet"
expect(e.instagram).to eq "openfoodnetwork"
click_link "Go to Enterprise Dashboard"
expect(page).to have_content "CHOOSE YOUR PACKAGE"
page.find('.full_hub h3').click
click_button "Select and Continue"
expect(page).to have_content "Your profile live"
click_link "Manage My Awesome Enterprise"
expect(page).to have_checked_field "enterprise_visible_only_through_links"
end
context "Enterprise name is already taken" do
let(:owner) do
Spree::User.create!(email: "penny.profile@example.org", password: "cannotbeblank")
end
before do
address = Spree::Address.create!(firstname: 'John', lastname: 'Doe',
address1: '1400 Sesame street', zipcode: '3070',
city: 'Southcote', phone: '12 3456 7890',
country_id: 1, state_id: 1, company: 'unused')
Enterprise.create(name: 'My Awesome Enterprise', address:, owner:)
end
it "checks that button after failure is still enabled" do
visit registration_path
switch_to_login_tab
fill_in "Email", with: user.email
fill_in "Password", with: user.password
click_button "Login"
click_button "Let's get started!"
fill_in 'enterprise_name', with: "My Awesome Enterprise"
fill_in 'enterprise_address', with: '123 Abc Street'
fill_in 'enterprise_city', with: 'Northcote'
fill_in 'enterprise_zipcode', with: '3070'
select 'Vic', from: 'enterprise_state'
click_button "Continue"
fill_in 'enterprise_contact', with: 'Saskia Munroe'
fill_in 'enterprise_phone', with: '12 3456 7890'
click_button "Continue"
click_button "Create Profile"
click_link "producer-panel"
alert_text = <<~TEXT.strip
Name has already been taken. If this is your enterprise and you would \
like to claim ownership, or if you would like to trade with this \
enterprise please contact the current manager of this profile at \
penny.profile@example.org.
TEXT
accept_alert(alert_text) do
click_button "Create Profile"
end
expect(page).to have_button "Create Profile", disabled: false
end
end
context "when the user has no more remaining enterprises" do
before do
user.update(enterprise_limit: 0)
end
it "displays the limit reached page" do
visit registration_path
expect(page).to have_selector "dd", text: "Login"
switch_to_login_tab
# Enter Login details
fill_in "Email", with: user.email
fill_in "Password", with: user.password
click_button 'Login'
expect(page).to have_content 'Oh no!'
end
end
end
describe "Terms of Service agreement" do
let!(:user2) { create(:user) }
before do
login_as user2
end
context "if accepting Terms of Service is not required" do
before { Spree::Config.enterprises_require_tos = false }
it "allows registration as normal" do
visit registration_path
click_button "Let's get started!"
expect(find("div#progress-bar")).to be_visible
end
end
context "if accepting Terms of Service is required" do
before { Spree::Config.enterprises_require_tos = true }
it "does not allow registration unless checkbox is checked" do
visit registration_path
expect(page).to have_content "Terms of Service"
expect(page).to have_selector "input.button.primary[disabled]"
check "accept_terms"
expect(page).not_to have_selector "input.button.primary[disabled]"
click_button "Let's get started!"
expect(find("div#progress-bar")).to be_visible
end
end
end
def switch_to_login_tab
# Link appears to be unresponsive for a while, so keep clicking it until it works
using_wait_time 0.5 do
10.times do
find("a", text: "Login").click
break if page.has_selector? "dd.active", text: "Login"
end
end
end
end