Skip to content

Commit 7bedaaa

Browse files
committed
Update facilitator and user specs to correctly cross-reference
1 parent 935bd20 commit 7bedaaa

File tree

5 files changed

+85
-22
lines changed

5 files changed

+85
-22
lines changed

spec/factories/users.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@
4646
super_user { true }
4747
end
4848

49+
trait :with_facilitator do
50+
facilitator { association :facilitator, user: instance }
51+
end
52+
4953
trait :orphaned_reports do
5054
email { "orphaned_reports@awbw.org" }
5155
super_user { true }

spec/models/facilitator_spec.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@
1111
end
1212

1313
describe "#name" do
14-
let(:user) { build(:user, first_name: "Jane", last_name: "Doe") }
15-
let(:facilitator) { build(:facilitator, user: user) }
14+
let(:facilitator) { build(:facilitator, first_name: "Jane", last_name: "Doe") }
1615

1716
context "when display_name_preference is full_name" do
1817
it "returns the full name" do
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
require 'rails_helper'
22

33
RSpec.describe "facilitators/index", type: :view do
4-
let(:user) { create(:user) }
54
let(:admin) { create(:user, :admin) }
65

76
let(:facilitator) { create(:facilitator)}
87
let(:facilitator_2) { create(:facilitator)}
98

109
before(:each) do
1110
assign(:facilitators, paginated([facilitator, facilitator_2]))
12-
allow(view).to receive(:current_user).and_return(user)
11+
allow(view).to receive(:current_user).and_return(admin)
1312
end
1413

1514
it "renders a list of facilitators" do
1615
render
17-
expect(rendered).to match(facilitator.user.first_name)
18-
expect(rendered).to match(facilitator_2.user.first_name)
16+
expect(rendered).to match(facilitator.first_name)
17+
expect(rendered).to match(facilitator_2.first_name)
1918
end
2019
end
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
require 'rails_helper'
22

33
RSpec.describe "facilitators/show", type: :view do
4-
let(:user) { create(:user) }
54
let(:admin) { create(:user, :admin) }
65

76
let(:facilitator) { create(:facilitator)}
87

98
before do
109
assign(:facilitator, facilitator.decorate)
11-
allow(view).to receive(:current_user).and_return(user)
10+
allow(view).to receive(:current_user).and_return(admin)
1211
render
1312
end
1413

1514
it "renders attributes" do
16-
expect(rendered).to match(facilitator.user.first_name)
17-
expect(rendered).to match(facilitator.user.last_name)
15+
expect(rendered).to match(facilitator.first_name)
16+
expect(rendered).to match(facilitator.last_name)
1817
expect(rendered).to match(facilitator.user.email)
1918
end
2019
end
Lines changed: 74 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,83 @@
1-
require 'rails_helper'
1+
require "rails_helper"
22

33
RSpec.describe "users/index", type: :view do
4-
let(:admin_user) { create(:user, :admin) } # or super_user trait
4+
let(:admin_user) { create(:user, :admin) }
55

6-
before(:each) do
7-
allow(view).to receive(:current_user).and_return(admin_user) # Stub current_user for Devise
8-
users = create_list(:user, 3, first_name: "Alice")
9-
paginated_users = WillPaginate::Collection.create(1, 10, users.size) do |pager|
10-
pager.replace(users)
6+
before do
7+
allow(view).to receive(:current_user).and_return(admin_user)
8+
end
9+
10+
context "when users have facilitators" do
11+
before do
12+
@users = create_list(:user, 2, :with_facilitator) # Factory should build facilitator + avatar if needed
13+
14+
paginated = WillPaginate::Collection.create(1, 10, @users.size) do |pager|
15+
pager.replace(@users)
16+
end
17+
18+
assign(:users, paginated)
19+
assign(:users_count, @users.size)
20+
end
21+
22+
it "renders facilitator profile buttons instead of 'Create facilitator'" do
23+
render
24+
25+
# Two rows
26+
expect(rendered).to have_selector("table tbody tr", count: 2)
27+
28+
@users.each do |user|
29+
facilitator = user.facilitator
30+
31+
# The helper output (button) must appear
32+
expect(rendered).to include(facilitator.name)
33+
34+
# Should NOT show "Create facilitator"
35+
expect(rendered).not_to include("Create facilitator")
36+
end
1137
end
12-
assign(:users, paginated_users)
1338
end
1439

15-
it "renders a list of users" do
16-
render
40+
context "when a user has NO facilitator" do
41+
let!(:user_without_facilitator) { create(:user) }
42+
43+
before do
44+
paginated = WillPaginate::Collection.create(1, 10, 1) do |pager|
45+
pager.replace([user_without_facilitator])
46+
end
1747

18-
assert_select "table tbody tr", count: 3
19-
assert_select "table tbody tr td", text: /Alice/
48+
assign(:users, paginated)
49+
assign(:users_count, 1)
50+
end
51+
52+
it "shows 'Create facilitator' button" do
53+
render
54+
55+
expect(rendered).to include("Create facilitator")
56+
expect(rendered).to have_link(
57+
"Create facilitator",
58+
href: new_facilitator_path(user_id: user_without_facilitator.id)
59+
)
60+
end
61+
end
62+
63+
context "general index behavior" do
64+
before do
65+
users = create_list(:user, 3)
66+
67+
paginated = WillPaginate::Collection.create(1, 10, users.size) do |pager|
68+
pager.replace(users)
69+
end
70+
71+
assign(:users, paginated)
72+
assign(:users_count, users.size)
73+
end
74+
75+
it "renders correct table structure" do
76+
render
77+
78+
expect(rendered).to have_selector("table thead tr th", text: "Name")
79+
expect(rendered).to have_selector("table thead tr th", text: "Email")
80+
expect(rendered).to have_selector("table tbody tr", count: 3)
81+
end
2082
end
2183
end

0 commit comments

Comments
 (0)