Skip to content
This repository was archived by the owner on Mar 23, 2023. It is now read-only.

Commit 9434ce3

Browse files
Update jobs controller and test to block anonymous access to unpublished jobs
1 parent e6b9803 commit 9434ce3

9 files changed

Lines changed: 98 additions & 16 deletions

File tree

app/controllers/application_controller.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ def authenticate_admin
3232
end
3333
end
3434

35+
def user_is_owner?(objkt)
36+
(user_signed_in? && current_user.id == objkt.user_id)
37+
end
38+
3539
def user_is_admin?
3640
(user_signed_in? && current_user.admin?)
3741
end

app/controllers/jobs_controller.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ def list_jobs
3535

3636
# GET /jobs/1
3737
def show
38+
unless @job.approved?
39+
unless (user_is_owner?(@job) || user_is_admin?)
40+
render_404
41+
end
42+
end
43+
3844
@page_title = @job.title
3945
@page_description = @job.title + ' at ' + @job.company_name
4046
@page_keywords = AppSettings.meta_tags_keywords
@@ -78,7 +84,9 @@ def edit
7884
# PATCH/PUT /jobs/1
7985
def update
8086
if @job.update(job_params)
81-
@job.request_edit! unless @job.draft?
87+
unless(@job.draft? || current_user.admin?)
88+
@job.request_edit!
89+
end
8290

8391
redirect_to(@job, notice: 'Job post was successfully updated.')
8492
else

app/views/invitations/index.html.erb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919

2020
</section><!-- #page-title end -->
2121

22-
<%= render('shared/flash') %>
23-
2422
<!-- Content
2523
============================================= -->
2624
<section id="content">

app/views/private/api_keys/index.html.erb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313

1414
</section><!-- #page-title end -->
1515

16-
<%= render('shared/flash') %>
17-
1816
<!-- Content
1917
============================================= -->
2018
<section id="content">

app/views/profiles/show.html.erb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<!-- Content
22
============================================= -->
3-
<%= render('shared/flash') %>
43

54
<section id="content">
65

spec/requests/jobs_spec.rb

Lines changed: 79 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@
134134
describe "GET /jobs/show" do
135135
before do
136136
@job = create(:job, user: user, aasm_state: 'approved')
137+
@unpublished_job = create(:job, user: user, aasm_state: 'draft')
137138
end
138139

139140
it "should allow anonymous viewing of a job" do
@@ -171,6 +172,13 @@
171172
expect(page).to have_content('Statistics')
172173
expect(page).to have_content(member.name)
173174
end
175+
176+
it "should not allow anonymous visitors from accessing the job page if job is not published" do
177+
visit(job_path(@unpublished_job))
178+
179+
expect(page).to have_content('The page you were looking for doesn\'t exist.')
180+
expect(page).to have_content('You may have mistyped the address or the page may have moved.')
181+
end
174182
end
175183

176184
describe "DELETE /jobs/1" do
@@ -211,10 +219,77 @@
211219
end
212220
end
213221

222+
describe "PUT /jobs/:id" do
223+
before do
224+
@pending_job = create(:job, user: user, aasm_state: 'under_review')
225+
@profile = create(:profile, user: admin)
226+
create(:profile, user: user)
227+
create(:profile, user: member)
228+
229+
allow(SlackNotifierWorker).to receive(:perform_async).and_return(true)
230+
allow(BufferNotifierWorker).to receive(:perform_async).and_return(true)
231+
end
232+
233+
it "should allow admin to update job without changing job state" do
234+
sign_in admin
235+
visit(list_jobs_admin_path)
236+
237+
expect(page).to have_content(@pending_job.title)
238+
239+
click_on('Edit', match: :first)
240+
241+
expect(page).to have_content('Job title')
242+
fill_in 'job_title', with: @pending_job.title + ' 1'
243+
244+
# not approved yet
245+
expect(page).to_not have_content('Share this job:')
246+
247+
click_on('Save and continue', match: :first)
248+
249+
expect(@pending_job.reload.aasm_state).to eq("under_review")
250+
end
251+
252+
it "should allow job owner to update job and changing job state back to draft" do
253+
sign_in user
254+
visit(job_path(@pending_job))
255+
256+
expect(page).to have_content(@pending_job.title)
257+
expect(page).to have_content("Job Post Actions")
258+
259+
click_on('Edit', match: :first)
260+
261+
expect(page).to have_content('Job title')
262+
fill_in 'job_title', with: @pending_job.title + ' 1'
263+
264+
# not approved yet
265+
expect(page).to_not have_content('Share this job:')
266+
267+
click_on('Save and continue', match: :first)
268+
269+
expect(@pending_job.reload.aasm_state).to eq("draft")
270+
end
271+
272+
it "should not allow any member to visit or update job" do
273+
sign_in member
274+
visit(edit_job_path(@pending_job))
275+
276+
expect(page).to have_content('The page you were looking for doesn\'t exist.')
277+
expect(page).to have_content('If you are the application owner check the logs for more information.')
278+
end
279+
280+
it "should not allow any anonymous visitor to visit an unpublished job post for editing" do
281+
visit(edit_job_path(@pending_job))
282+
283+
expect(page).to have_content('You need to sign in or sign up before continuing.')
284+
expect(page).to_not have_content('Edit')
285+
expect(page).to_not have_content('Approve')
286+
end
287+
end
288+
214289
describe "PUT /jobs/:id/pre_approve" do
215290
before do
216291
@draft_job = create(:job, user: user, aasm_state: 'draft')
217-
@profile = create(:profile, user: user)
292+
create(:profile, user: user)
218293

219294
allow(SlackNotifierWorker).to receive(:perform_async).and_return(true)
220295
allow(BufferNotifierWorker).to receive(:perform_async).and_return(true)
@@ -238,7 +313,7 @@
238313
describe "PUT /jobs/:id/approve" do
239314
before do
240315
@pending_job = create(:job, user: user, aasm_state: 'under_review')
241-
@profile = create(:profile, user: admin)
316+
create(:profile, user: admin)
242317

243318
allow(SlackNotifierWorker).to receive(:perform_async).and_return(true)
244319
allow(BufferNotifierWorker).to receive(:perform_async).and_return(true)
@@ -277,7 +352,7 @@
277352
describe "PUT /jobs/:id/take_down" do
278353
before do
279354
@approved_job = create(:job, user: user, aasm_state: 'approved')
280-
@profile = create(:profile, user: admin)
355+
create(:profile, user: admin)
281356

282357
allow(SlackNotifierWorker).to receive(:perform_async).and_return(true)
283358
allow(BufferNotifierWorker).to receive(:perform_async).and_return(true)
@@ -301,7 +376,7 @@
301376
describe "PUT /jobs/:id/feedback" do
302377
before do
303378
@offline_job = create(:job, user: user, aasm_state: 'disabled')
304-
@profile = create(:profile, user: user)
379+
create(:profile, user: user)
305380

306381
allow(SlackNotifierWorker).to receive(:perform_async).and_return(true)
307382
allow(BufferNotifierWorker).to receive(:perform_async).and_return(true)

spec/requests/members_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
expect(page).to have_content(user_1.name)
2121
expect(page).to have_content(user_2.name)
2222
expect(page).to have_content(user_3.name)
23-
expect(page).to have_content('My profile')
23+
expect(page).to have_content('My Account')
2424
expect(page).to have_content('Logout')
2525
end
2626
end
@@ -35,7 +35,7 @@
3535

3636
expect(page).not_to have_content(user_2.name)
3737
expect(page).not_to have_content(user_3.name)
38-
expect(page).to have_content('My profile')
38+
expect(page).to have_content('My Account')
3939
expect(page).to have_content('Logout')
4040
end
4141
end

spec/requests/profiles_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
it "should show user their profile" do
1414
visit(user_profile_path(user))
1515
expect(page).to have_content(user.name.titleize)
16-
expect(page).to have_content('My profile')
16+
expect(page).to have_content('My Account')
1717
expect(page).to have_content('Logout')
1818
expect(page).to have_content(user.email)
1919
end

spec/requests/users_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
click_on('Log in')
2525

26-
expect(page).to have_content("My profile")
26+
expect(page).to have_content("My Account")
2727
expect(page).to have_content("Logout")
2828
end
2929

@@ -136,7 +136,7 @@
136136

137137
click_on('Log in')
138138

139-
expect(page).to have_content("My profile")
139+
expect(page).to have_content("My Account")
140140
expect(page).to have_content("Logout")
141141
end
142142

@@ -212,7 +212,7 @@
212212
expect(page).to have_content(open_profile_member.email)
213213
expect(page).to have_content(open_profile_member.name.titleize)
214214
expect(page).not_to have_content(member.email)
215-
expect(page).to have_content('My profile')
215+
expect(page).to have_content('My Account')
216216
expect(page).to have_content('Logout')
217217
end
218218
end

0 commit comments

Comments
 (0)