diff --git a/app/models/user.rb b/app/models/user.rb
index 0d14ea3d..d87e6a4b 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -103,6 +103,11 @@ class User < ApplicationRecord
order(Arel.sql("#{column} #{direction}"))
end
+ # Returns a list of rooms ordered by last session
+ def ordered_rooms
+ [main_room] + rooms.where.not(id: main_room.id).order("last_session desc")
+ end
+
# Activates an account and initialize a users main room
def activate
update_attributes(email_verified: true, activated_at: Time.zone.now)
diff --git a/app/views/rooms/show.html.erb b/app/views/rooms/show.html.erb
index 99413afc..897768d1 100644
--- a/app/views/rooms/show.html.erb
+++ b/app/views/rooms/show.html.erb
@@ -77,7 +77,7 @@
- <% current_user.rooms.each do |room| %>
+ <% current_user.ordered_rooms.each do |room| %>
<%= link_to room do %>
<%= render "rooms/components/room_block", room: room %>
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 44568837..7ab823f5 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -112,6 +112,28 @@ describe User, type: :model do
end
end
+ context '#ordered_rooms' do
+ it 'correctly orders the users rooms' do
+ user = create(:user)
+ room1 = create(:room, owner: user)
+ room2 = create(:room, owner: user)
+ room3 = create(:room, owner: user)
+ room4 = create(:room, owner: user)
+
+ room4.update_attributes(sessions: 1, last_session: "2020-02-24 19:52:57")
+ room3.update_attributes(sessions: 1, last_session: "2020-01-25 19:52:57")
+ room2.update_attributes(sessions: 1, last_session: "2019-09-05 19:52:57")
+ room1.update_attributes(sessions: 1, last_session: "2015-02-24 19:52:57")
+
+ rooms = user.ordered_rooms
+ expect(rooms[0]).to eq(user.main_room)
+ expect(rooms[1]).to eq(room4)
+ expect(rooms[2]).to eq(room3)
+ expect(rooms[3]).to eq(room2)
+ expect(rooms[4]).to eq(room1)
+ end
+ end
+
context 'password reset' do
it 'creates token and respective reset digest' do
user = create(:user)