Skip to content

Commit ad9a8f0

Browse files
authored
Merge pull request #495 from coopdevs/members_by_login
sort members by last_sign_in_at by default
2 parents b1e7145 + 8712b41 commit ad9a8f0

File tree

2 files changed

+37
-23
lines changed

2 files changed

+37
-23
lines changed

app/controllers/users_controller.rb

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ class UsersController < ApplicationController
22
before_filter :authenticate_user!
33

44
def index
5-
search_and_load_members current_organization.members.active, {s: 'member_uid asc'}
5+
search_and_load_members current_organization.members.active, { s: 'user_last_sign_in_at DESC' }
66
end
77

88
def manage
9-
search_and_load_members current_organization.members, {s: 'member_uid asc'}
9+
search_and_load_members current_organization.members, { s: 'member_uid ASC' }
1010
end
1111

1212
def show
@@ -60,8 +60,11 @@ def update
6060
def search_and_load_members(members_scope, default_search_params)
6161
@search = members_scope.ransack(default_search_params.merge(params.fetch(:q, {})))
6262

63-
@members =
64-
@search.result.eager_load(:account, :user).page(params[:page]).per(20)
63+
result = @search.result
64+
orders = result.orders.map { |order| order.direction == :asc ? "#{order.to_sql} NULLS FIRST" : "#{order.to_sql} NULLS LAST" }
65+
result = result.except(:order).order(orders.join(", ")) if orders.count > 0
66+
67+
@members = result.eager_load(:account, :user).page(params[:page]).per(20)
6568

6669
@member_view_models =
6770
@members.map { |m| MemberDecorator.new(m, self.class.helpers) }

spec/controllers/users_controller_spec.rb

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,14 @@
4040
describe "GET #index" do
4141
before { login(user) }
4242

43-
it 'sorts the users by their member_uid asc by default' do
44-
member.increment!(:member_uid, Member.maximum(:member_uid) + 1)
43+
it 'sorts the users by their last_sign_in_at desc by default' do
44+
member.user.update_column(:last_sign_in_at, DateTime.now)
45+
another_member.user.update_column(:last_sign_in_at, nil)
4546

4647
get :index
4748

48-
expect(assigns(:members).last).to eq(member)
49+
expect(assigns(:members).first).to eq(member)
50+
expect(assigns(:members).last).to eq(another_member)
4951
end
5052

5153
it 'allows to sort by member_uid' do
@@ -81,8 +83,6 @@
8183

8284
context "with an normal logged user" do
8385
it "populates and array of users" do
84-
login(user)
85-
8686
get "index"
8787

8888
expect(assigns(:members).map(&:user))
@@ -101,17 +101,39 @@
101101
end
102102
end
103103

104+
context 'when searching' do
105+
it 'allows to search by member_uid' do
106+
user = Fabricate(:user, username: 'foo', email: '[email protected]')
107+
member = Fabricate(:member, user: user, organization: test_organization, member_uid: 1000)
108+
109+
get :index, q: { user_username_or_user_email_or_member_uid_search_contains: 1000 }
110+
111+
expect(assigns(:members)).to include(member)
112+
end
113+
end
114+
end
115+
116+
describe "GET #manage" do
117+
before { login(user) }
118+
119+
it 'sorts the users by their member_uid asc by default' do
120+
member.increment!(:member_uid, Member.maximum(:member_uid) + 1)
121+
122+
get :manage
123+
124+
expect(assigns(:members).last).to eq(member)
125+
end
126+
104127
context 'when sorting by balance' do
105128
before do
106-
login(user)
107129
member_admin.account.update_attribute(:balance, 3600)
108130
end
109131

110132
context 'desc' do
111133
let(:direction) { 'desc' }
112134

113135
it 'orders the rows by their balance' do
114-
get :index, q: { s: "account_balance #{direction}" }
136+
get :manage, q: { s: "account_balance #{direction}" }
115137

116138
expect(assigns(:members).pluck(:user_id).first).to eq(admin_user.id)
117139
end
@@ -121,23 +143,12 @@
121143
let(:direction) { 'asc' }
122144

123145
it 'orders the rows by their balance' do
124-
get :index, q: { s: "account_balance #{direction}" }
146+
get :manage, q: { s: "account_balance #{direction}" }
125147

126148
expect(assigns(:members).pluck(:user_id).last).to eq(admin_user.id)
127149
end
128150
end
129151
end
130-
131-
context 'when searching' do
132-
it 'allows to search by member_uid' do
133-
user = Fabricate(:user, username: 'foo', email: '[email protected]')
134-
member = Fabricate(:member, user: user, organization: test_organization, member_uid: 1000)
135-
136-
get :index, q: { user_username_or_user_email_or_member_uid_search_contains: 1000 }
137-
138-
expect(assigns(:members)).to include(member)
139-
end
140-
end
141152
end
142153

143154
describe "GET #show" do

0 commit comments

Comments
 (0)