Skip to content

Commit e67a42a

Browse files
add missing feature tests
1 parent e64a9e9 commit e67a42a

File tree

5 files changed

+246
-25
lines changed

5 files changed

+246
-25
lines changed
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
require "features/shared/authentication_error"
2+
require "features/shared/authorization_error"
3+
4+
describe "Groups", type: :feature do
5+
let!(:store) { create(:media_store, :database) }
6+
let(:path) { "/media-service/stores/database/groups/" }
7+
8+
context "for public" do
9+
before do
10+
visit path
11+
end
12+
13+
it "doesn't display user's dropdown in navbar" do
14+
expect(page).not_to have_css('.navbar a.dropdown-toggle')
15+
end
16+
17+
it_displays "authentication error"
18+
it_displays "authorization error"
19+
end
20+
21+
context "for an ordinary user" do
22+
let(:user) { create(:user) }
23+
24+
before { sign_in }
25+
26+
it_displays "authorization error"
27+
end
28+
29+
context "for an user with admin role" do
30+
let(:user) { create(:user, :with_admin_role) }
31+
32+
before { sign_in }
33+
34+
it_displays "authorization error"
35+
end
36+
37+
context "for an user with system admin role" do
38+
let(:user) { create(:user, :with_system_admin_role) }
39+
let!(:group_1) { create(:group, name: "Empty group") }
40+
let!(:group_2) { create(:group, :with_user, name: "Masters") }
41+
let!(:group_3) { create(:group, name: "Family") }
42+
let!(:institutional_group) do
43+
create(:institutional_group,
44+
name: "Foo Institutional Group",
45+
institutional_name: "FOO.InstitutionalGroup")
46+
end
47+
48+
before do
49+
group_3.users << create_list(:user, 3)
50+
store.groups << [group_1, group_2]
51+
end
52+
53+
before do
54+
sign_in
55+
56+
visit path
57+
end
58+
59+
describe "listing" do
60+
it "displays header" do
61+
expect(page).to have_css("h2", text: "Media-Store database Groups")
62+
end
63+
64+
it "displays table with groups" do
65+
expect(page).to have_css("table.groups tbody tr", count: 4)
66+
67+
expect_order(group_1, group_3, institutional_group, group_2)
68+
69+
expect_row(group_1, priority: 0, users_count: 0)
70+
expect_row(group_3, priority: "-", users_count: 3)
71+
expect_row(institutional_group, priority: "-", users_count: 0)
72+
expect_row(group_2, priority: 0, users_count: 1)
73+
end
74+
75+
describe "filtering by user" do
76+
let(:path) { "/media-service/stores/database/groups/?including-user=#{user.id}" }
77+
78+
before do
79+
group_1.users << user
80+
institutional_group.users << user
81+
end
82+
83+
it "filters groups out" do
84+
expect(page).to have_css("table.groups tbody tr", count: 2)
85+
86+
expect_order(group_1, institutional_group)
87+
88+
expect_row(group_1, priority: 0, users_count: 1)
89+
expect_row(institutional_group, priority: "-", users_count: 1)
90+
end
91+
end
92+
end
93+
94+
describe "groups's priority" do
95+
it "is editable" do
96+
expect_row(group_1, priority: 0, users_count: 0)
97+
expect(page).not_to have_css(".modal")
98+
99+
within "tr[data-id='#{group_1.id}'] .priority-component" do
100+
click_button "Edit"
101+
end
102+
103+
within ".modal" do
104+
fill_in "priority", with: 5
105+
click_button "Save"
106+
end
107+
108+
expect_row(group_1, priority: 5, users_count: 0)
109+
expect(page).not_to have_css(".modal")
110+
end
111+
112+
it "is deletable" do
113+
expect(page).not_to have_css(".modal")
114+
115+
within "tr[data-id='#{group_3.id}'] .priority-component" do
116+
click_button "Edit"
117+
end
118+
within ".modal" do
119+
fill_in "priority", with: 3
120+
click_button "Save"
121+
end
122+
123+
within "tr[data-id='#{group_3.id}'] .priority-component" do
124+
click_button "Edit"
125+
end
126+
within ".modal" do
127+
fill_in "priority", with: ""
128+
click_button "Save"
129+
end
130+
131+
expect_row(group_3, priority: "-", users_count: 3)
132+
expect(page).not_to have_css(".modal")
133+
end
134+
end
135+
end
136+
end
137+
138+
def collect_data_ids
139+
all("tr[data-id]").map { |tr| tr[:"data-id"] }
140+
end
141+
142+
def expect_order(*groups)
143+
expect(collect_data_ids).to eq(groups.map(&:id))
144+
end
145+
146+
def expect_row(group, priority:, users_count:)
147+
within "tr[data-id='#{group.id}']" do
148+
expect(page).to have_content(group.name)
149+
expect(page).to have_css(".priority-component", text: priority)
150+
expect(page).to have_css(".users-count", text: users_count)
151+
end
152+
end

spec/features/stores/users_spec.rb

Lines changed: 90 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,17 @@
6969
expect(page).to have_content "Liana Warner (liana@example.com)"
7070
end
7171
end
72+
73+
specify "resetting filters" do
74+
fill_in "term", with: "arn"
75+
76+
expect(page).to have_css("table.users tbody tr", count: 2)
77+
78+
click_link "reset-query-params"
79+
80+
expect(page).to have_css("table.users tbody tr", count: 4)
81+
expect(page).to have_field("term", with: "")
82+
end
7283
end
7384
end
7485

@@ -77,14 +88,7 @@
7788
expect(page).to have_css(".direct-priority-component", text: "-", count: 4)
7889
expect(page).to have_css(".combined-priority-component", text: "-", count: 4)
7990

80-
within "tr[data-id='#{user.id}'] .direct-priority-component" do
81-
click_button "Edit"
82-
end
83-
84-
expect(page).to have_css(".modal")
85-
fill_in "direct_priority", with: 5
86-
87-
within(".modal") { click_button "Save" }
91+
set_direct_priority_of(user, to: 5)
8892

8993
expect(page).to have_css('table.users tbody tr', count: 4)
9094
within "tr[data-id='#{user.id}'] .combined-priority-component" do
@@ -93,29 +97,94 @@
9397
end
9498

9599
it "is deletable" do
100+
set_direct_priority_of(user_2, to: 3)
101+
set_direct_priority_of(user_2, to: "")
102+
96103
within "tr[data-id='#{user_2.id}'] .direct-priority-component" do
97-
click_button "Edit"
104+
expect(page).to have_content "-"
98105
end
99-
within ".modal" do
100-
fill_in "direct_priority", with: 3
101-
click_button "Save"
106+
within "tr[data-id='#{user_2.id}'] .combined-priority-component" do
107+
expect(page).to have_content "-"
102108
end
109+
end
110+
end
103111

104-
within "tr[data-id='#{user_2.id}'] .direct-priority-component" do
105-
click_button "Edit"
112+
describe "managing" do
113+
it "navigates to groups page" do
114+
within "table.users tbody tr[data-id='#{user_2.id}']" do
115+
click_link "Manage"
116+
117+
expect(page).to have_current_path(
118+
"/media-service/stores/database/groups/?including-user=#{user_2.id}"
119+
)
106120
end
107-
within ".modal" do
108-
fill_in "direct_priority", with: ""
109-
click_button "Save"
121+
end
122+
end
123+
124+
describe "user's combined priority" do
125+
context "when user belongs to a group" do
126+
let!(:group) { create(:group) }
127+
128+
before do
129+
group.users << user
130+
131+
set_direct_priority_of(user, to: 4)
110132
end
111133

112-
within "tr[data-id='#{user_2.id}'] .direct-priority-component" do
113-
expect(page).to have_content "-"
134+
context "and group's priority value is higher" do
135+
it "display correct combined priority" do
136+
within "tr[data-id='#{user.id}'" do
137+
click_link "Manage"
138+
end
139+
within("tr[data-id='#{group.id}']") { click_button "Edit" }
140+
within ".modal" do
141+
fill_in "priority", with: 5
142+
click_button "Save"
143+
end
144+
145+
visit path
146+
147+
within "tr[data-id='#{user.id}']" do
148+
expect(page).to have_css(".combined-priority-component", text: 5)
149+
expect(page).to have_css(".direct-priority-component", text: 4)
150+
expect(page).to have_css(".groups-priority-component", text: 5)
151+
end
152+
end
114153
end
115-
within "tr[data-id='#{user_2.id}'] .combined-priority-component" do
116-
expect(page).to have_content "-"
154+
155+
context "and group's priority value is lower" do
156+
it "display correct combined priority" do
157+
within "tr[data-id='#{user.id}'" do
158+
click_link "Manage"
159+
end
160+
within("tr[data-id='#{group.id}']") { click_button "Edit" }
161+
within ".modal" do
162+
fill_in "priority", with: 3
163+
click_button "Save"
164+
end
165+
166+
visit path
167+
168+
within "tr[data-id='#{user.id}']" do
169+
expect(page).to have_css(".combined-priority-component", text: 4)
170+
expect(page).to have_css(".direct-priority-component", text: 4)
171+
expect(page).to have_css(".groups-priority-component", text: 3)
172+
end
173+
end
117174
end
118175
end
119176
end
120177
end
121178
end
179+
180+
def set_direct_priority_of(user, to:)
181+
within "tr[data-id='#{user.id}'] .direct-priority-component" do
182+
click_button "Edit"
183+
end
184+
within ".modal" do
185+
fill_in "direct_priority", with: to
186+
click_button "Save"
187+
end
188+
189+
expect(page).not_to have_css(".modal")
190+
end

spec/requests/stores/groups_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
expect(response.status).to eq(200)
5454
end
5555

56-
it "returns users for the store" do
56+
it "returns groups for the store" do
5757
expect(parsed_body).to eq({
5858
groups: [
5959
{

src/all/madek/media_service/resources/stores/store/groups/main.cljs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,11 @@
9393
]])
9494

9595
(defn group-row-component [group]
96-
[:tr
96+
[:tr {:data-id (:key group)}
9797
[:td.text-monospace (:index group)]
9898
[:td.text-center [group-name-ident-component group]]
9999
[:td.text-right [priority-component group]]
100-
[:td.text-right.text-monospace (:users_count group)]
100+
[:td.text-right.text-monospace.users-count (:users_count group)]
101101
])
102102

103103
(defn groups-table-component [groups]

src/all/madek/media_service/resources/stores/store/users/main.cljs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@
102102
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
103103

104104
(defn groups-priority-component [user]
105-
[:div
105+
[:div.groups-priority-component
106106
(if-let [p (:groups_priority user)]
107107
[:span.text-monospace p]
108108
[:span "-"])

0 commit comments

Comments
 (0)