Make columns of user and ordergroup lists sortable
This commit implements the sort functionality for the user lists (by name, email, last_activity) and ordergroup lists (by name). It is a first attempt addressing issue #560.
This commit is contained in:
parent
8f94403ccf
commit
0a6345c60b
14 changed files with 278 additions and 25 deletions
|
|
@ -22,6 +22,90 @@ describe Ordergroup do
|
|||
expect(Ordergroup.active).not_to be_empty
|
||||
end
|
||||
|
||||
describe 'sort correctly' do
|
||||
it 'by name' do
|
||||
group_b = create :ordergroup, name: 'bbb'
|
||||
group_a = create :ordergroup, name: 'aaa'
|
||||
group_c = create :ordergroup, name: 'ccc'
|
||||
|
||||
expect(Ordergroup.sort_by_param('name')).to eq([group_a, group_b, group_c])
|
||||
end
|
||||
|
||||
it 'reverse by name' do
|
||||
group_b = create :ordergroup, name: 'bbb'
|
||||
group_a = create :ordergroup, name: 'aaa'
|
||||
group_c = create :ordergroup, name: 'ccc'
|
||||
|
||||
expect(Ordergroup.sort_by_param('name_reverse')).to eq([group_c, group_b, group_a])
|
||||
end
|
||||
|
||||
it 'by members_count' do
|
||||
users_b = [create(:user)]
|
||||
users_a = []
|
||||
users_c = [create(:user), create(:user), create(:user)]
|
||||
group_b = create :ordergroup, name: 'bbb', user_ids: users_b.map(&:id)
|
||||
group_a = create :ordergroup, name: 'aaa', user_ids: users_a.map(&:id)
|
||||
group_c = create :ordergroup, name: 'ccc', user_ids: users_c.map(&:id)
|
||||
|
||||
expect(Ordergroup.sort_by_param('members_count')).to eq([group_a, group_b, group_c])
|
||||
end
|
||||
|
||||
it 'reverse by members_count' do
|
||||
users_b = [create(:user)]
|
||||
users_a = []
|
||||
users_c = [create(:user), create(:user), create(:user)]
|
||||
group_b = create :ordergroup, name: 'bbb', user_ids: users_b.map(&:id)
|
||||
group_a = create :ordergroup, name: 'aaa', user_ids: users_a.map(&:id)
|
||||
group_c = create :ordergroup, name: 'ccc', user_ids: users_c.map(&:id)
|
||||
|
||||
expect(Ordergroup.sort_by_param('members_count_reverse')).to eq([group_c, group_b, group_a])
|
||||
end
|
||||
|
||||
it 'by last_user_activity' do
|
||||
user_b = create :user, last_activity: 3.days.ago
|
||||
user_a = create :user, last_activity: 5.days.ago
|
||||
user_c = create :user, last_activity: Time.now
|
||||
group_b = create :ordergroup, name: 'bbb', user_ids: [user_b.id]
|
||||
group_a = create :ordergroup, name: 'aaa', user_ids: [user_a.id]
|
||||
group_c = create :ordergroup, name: 'ccc', user_ids: [user_c.id]
|
||||
|
||||
expect(Ordergroup.sort_by_param('last_user_activity')).to eq([group_a, group_b, group_c])
|
||||
end
|
||||
|
||||
it 'reverse by last_user_activity' do
|
||||
user_b = create :user, last_activity: 3.days.ago
|
||||
user_a = create :user, last_activity: 5.days.ago
|
||||
user_c = create :user, last_activity: Time.now
|
||||
group_b = create :ordergroup, name: 'bbb', user_ids: [user_b.id]
|
||||
group_a = create :ordergroup, name: 'aaa', user_ids: [user_a.id]
|
||||
group_c = create :ordergroup, name: 'ccc', user_ids: [user_c.id]
|
||||
|
||||
expect(Ordergroup.sort_by_param('last_user_activity_reverse')).to eq([group_c, group_b, group_a])
|
||||
end
|
||||
|
||||
it 'by last_order' do
|
||||
group_b = create :ordergroup, name: 'bbb'
|
||||
group_a = create :ordergroup, name: 'aaa'
|
||||
group_c = create :ordergroup, name: 'ccc'
|
||||
group_b.group_orders.create! order: create(:order, starts: 6.days.ago)
|
||||
group_a.group_orders.create! order: create(:order, starts: 4.months.ago)
|
||||
group_c.group_orders.create! order: create(:order, starts: Time.now)
|
||||
|
||||
expect(Ordergroup.sort_by_param('last_order')).to eq([group_a, group_b, group_c])
|
||||
end
|
||||
|
||||
it 'reverse by last_order' do
|
||||
group_b = create :ordergroup, name: 'bbb'
|
||||
group_a = create :ordergroup, name: 'aaa'
|
||||
group_c = create :ordergroup, name: 'ccc'
|
||||
group_b.group_orders.create! order: create(:order, starts: 6.days.ago)
|
||||
group_a.group_orders.create! order: create(:order, starts: 4.months.ago)
|
||||
group_c.group_orders.create! order: create(:order, starts: Time.now)
|
||||
|
||||
expect(Ordergroup.sort_by_param('last_order_reverse')).to eq([group_c, group_b, group_a])
|
||||
end
|
||||
end
|
||||
|
||||
context 'with financial transactions' do
|
||||
before do
|
||||
og = user.ordergroup
|
||||
|
|
|
|||
|
|
@ -78,4 +78,122 @@ describe User do
|
|||
|
||||
it 'default admin role' do expect(user.role_admin?).to be_truthy end
|
||||
end
|
||||
|
||||
describe 'sort correctly' do
|
||||
it 'by nick' do
|
||||
user_b = create :user, nick: 'bbb'
|
||||
user_a = create :user, nick: 'aaa'
|
||||
user_c = create :user, nick: 'ccc'
|
||||
|
||||
expect(User.sort_by_param('nick')).to eq([user_a, user_b, user_c])
|
||||
end
|
||||
|
||||
it 'reverse by nick' do
|
||||
user_b = create :user, nick: 'bbb'
|
||||
user_a = create :user, nick: 'aaa'
|
||||
user_c = create :user, nick: 'ccc'
|
||||
|
||||
expect(User.sort_by_param('nick_reverse')).to eq([user_c, user_b, user_a])
|
||||
end
|
||||
|
||||
it 'by name' do
|
||||
user_b = create :user, first_name: 'aaa', last_name: 'bbb'
|
||||
user_a = create :user, first_name: 'aaa', last_name: 'aaa'
|
||||
user_c = create :user, first_name: 'ccc', last_name: 'aaa'
|
||||
|
||||
expect(User.sort_by_param('name')).to eq([user_a, user_b, user_c])
|
||||
end
|
||||
|
||||
it 'reverse by name' do
|
||||
user_b = create :user, first_name: 'aaa', last_name: 'bbb'
|
||||
user_a = create :user, first_name: 'aaa', last_name: 'aaa'
|
||||
user_c = create :user, first_name: 'ccc', last_name: 'aaa'
|
||||
|
||||
expect(User.sort_by_param('name_reverse')).to eq([user_c, user_b, user_a])
|
||||
end
|
||||
|
||||
it 'by email' do
|
||||
user_b = create :user, email: 'bbb@dummy.com'
|
||||
user_a = create :user, email: 'aaa@dummy.com'
|
||||
user_c = create :user, email: 'ccc@dummy.com'
|
||||
|
||||
expect(User.sort_by_param('email')).to eq([user_a, user_b, user_c])
|
||||
end
|
||||
|
||||
it 'reverse by email' do
|
||||
user_b = create :user, email: 'bbb@dummy.com'
|
||||
user_a = create :user, email: 'aaa@dummy.com'
|
||||
user_c = create :user, email: 'ccc@dummy.com'
|
||||
|
||||
expect(User.sort_by_param('email_reverse')).to eq([user_c, user_b, user_a])
|
||||
end
|
||||
|
||||
it 'by phone' do
|
||||
user_b = create :user, phone: 'bbb'
|
||||
user_a = create :user, phone: 'aaa'
|
||||
user_c = create :user, phone: 'ccc'
|
||||
|
||||
expect(User.sort_by_param('phone')).to eq([user_a, user_b, user_c])
|
||||
end
|
||||
|
||||
it 'reverse by phone' do
|
||||
user_b = create :user, phone: 'bbb'
|
||||
user_a = create :user, phone: 'aaa'
|
||||
user_c = create :user, phone: 'ccc'
|
||||
|
||||
expect(User.sort_by_param('phone_reverse')).to eq([user_c, user_b, user_a])
|
||||
end
|
||||
|
||||
it 'by last_activity' do
|
||||
user_b = create :user, last_activity: 3.days.ago
|
||||
user_a = create :user, last_activity: 5.days.ago
|
||||
user_c = create :user, last_activity: Time.now
|
||||
|
||||
expect(User.sort_by_param('last_activity')).to eq([user_a, user_b, user_c])
|
||||
end
|
||||
|
||||
it 'reverse by last_activity' do
|
||||
user_b = create :user, last_activity: 3.days.ago
|
||||
user_a = create :user, last_activity: 5.days.ago
|
||||
user_c = create :user, last_activity: Time.now
|
||||
|
||||
expect(User.sort_by_param('last_activity_reverse')).to eq([user_c, user_b, user_a])
|
||||
end
|
||||
|
||||
it 'by ordergroup' do
|
||||
user_b = create :user, groups: [create(:workgroup, name: 'a'), create(:ordergroup, name: 'bb')]
|
||||
user_a = create :user, groups: [create(:workgroup, name: 'b'), create(:ordergroup, name: 'aa')]
|
||||
user_c = create :user, groups: [create(:workgroup, name: 'c'), create(:ordergroup, name: 'cc')]
|
||||
|
||||
expect(User.sort_by_param('ordergroup')).to eq([user_a, user_b, user_c])
|
||||
end
|
||||
|
||||
it 'reverse by ordergroup' do
|
||||
user_b = create :user, groups: [create(:workgroup, name: 'a'), create(:ordergroup, name: 'bb')]
|
||||
user_a = create :user, groups: [create(:workgroup, name: 'b'), create(:ordergroup, name: 'aa')]
|
||||
user_c = create :user, groups: [create(:workgroup, name: 'c'), create(:ordergroup, name: 'cc')]
|
||||
|
||||
expect(User.sort_by_param('ordergroup_reverse')).to eq([user_c, user_b, user_a])
|
||||
end
|
||||
|
||||
it 'and users are only listed once' do
|
||||
create :user
|
||||
|
||||
expect(User.sort_by_param('ordergroup').size).to eq(1)
|
||||
end
|
||||
|
||||
it 'and users belonging to a workgroup are only listed once' do
|
||||
create :admin
|
||||
|
||||
expect(User.sort_by_param('ordergroup').size).to eq(1)
|
||||
end
|
||||
|
||||
it 'and users belonging to 2 ordergroups are only listed once' do
|
||||
user = create :user
|
||||
create :ordergroup, user_ids: [user.id]
|
||||
create :ordergroup, user_ids: [user.id]
|
||||
|
||||
expect(User.sort_by_param('ordergroup').size).to eq(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue