CE-port for 7714-view-recent-boards
Adds additional count param to Boards::Visits::LatestService
This commit is contained in:
parent
31353188f8
commit
c5b3b71e89
8 changed files with 65 additions and 26 deletions
|
@ -10,7 +10,7 @@ class BoardGroupRecentVisit < ActiveRecord::Base
|
|||
validates :group, presence: true
|
||||
validates :board, presence: true
|
||||
|
||||
scope :by_user_group, -> (user, group) { where(user: user, group: group).order(:updated_at) }
|
||||
scope :by_user_group, -> (user, group) { where(user: user, group: group) }
|
||||
|
||||
def self.visited!(user, board)
|
||||
visit = find_or_create_by(user: user, group: board.group, board: board)
|
||||
|
@ -19,7 +19,10 @@ class BoardGroupRecentVisit < ActiveRecord::Base
|
|||
retry
|
||||
end
|
||||
|
||||
def self.latest(user, group)
|
||||
by_user_group(user, group).last
|
||||
def self.latest(user, group, count: nil)
|
||||
visits = by_user_group(user, group).order(updated_at: :desc)
|
||||
visits = visits.preload(:board) if count && count > 1
|
||||
|
||||
visits.first(count)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -10,7 +10,7 @@ class BoardProjectRecentVisit < ActiveRecord::Base
|
|||
validates :project, presence: true
|
||||
validates :board, presence: true
|
||||
|
||||
scope :by_user_project, -> (user, project) { where(user: user, project: project).order(:updated_at) }
|
||||
scope :by_user_project, -> (user, project) { where(user: user, project: project) }
|
||||
|
||||
def self.visited!(user, board)
|
||||
visit = find_or_create_by(user: user, project: board.project, board: board)
|
||||
|
@ -19,7 +19,10 @@ class BoardProjectRecentVisit < ActiveRecord::Base
|
|||
retry
|
||||
end
|
||||
|
||||
def self.latest(user, project)
|
||||
by_user_project(user, project).last
|
||||
def self.latest(user, project, count: nil)
|
||||
visits = by_user_project(user, project).order(updated_at: :desc)
|
||||
visits = visits.preload(:board) if count && count > 1
|
||||
|
||||
visits.first(count)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -6,11 +6,13 @@ module Boards
|
|||
def execute
|
||||
return nil unless current_user
|
||||
|
||||
if parent.is_a?(Group)
|
||||
BoardGroupRecentVisit.latest(current_user, parent)
|
||||
else
|
||||
BoardProjectRecentVisit.latest(current_user, parent)
|
||||
end
|
||||
recent_visit_model.latest(current_user, parent, count: params[:count])
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def recent_visit_model
|
||||
parent.is_a?(Group) ? BoardGroupRecentVisit : BoardProjectRecentVisit
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -67,7 +67,7 @@ constraints(::Constraints::GroupUrlConstrainer.new) do
|
|||
end
|
||||
end
|
||||
|
||||
resources :boards, only: [:index, :show]
|
||||
resources :boards, only: [:index, :show], constraints: { id: /\d+/ }
|
||||
|
||||
resources :runners, only: [:index, :edit, :update, :destroy, :show] do
|
||||
member do
|
||||
|
|
|
@ -394,8 +394,7 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do
|
|||
|
||||
get 'noteable/:target_type/:target_id/notes' => 'notes#index', as: 'noteable_notes'
|
||||
|
||||
# On CE only index and show are needed
|
||||
resources :boards, only: [:index, :show]
|
||||
resources :boards, only: [:index, :show], constraints: { id: /\d+/ }
|
||||
|
||||
resources :todos, only: [:create]
|
||||
|
||||
|
|
|
@ -50,15 +50,25 @@ describe BoardGroupRecentVisit do
|
|||
end
|
||||
|
||||
describe '#latest' do
|
||||
it 'returns the most recent visited' do
|
||||
board2 = create(:board, group: group)
|
||||
board3 = create(:board, group: group)
|
||||
def create_visit(time)
|
||||
create :board_group_recent_visit, group: group, user: user, updated_at: time
|
||||
end
|
||||
|
||||
create :board_group_recent_visit, group: board.group, board: board, user: user, updated_at: 7.days.ago
|
||||
create :board_group_recent_visit, group: board2.group, board: board2, user: user, updated_at: 5.days.ago
|
||||
recent = create :board_group_recent_visit, group: board3.group, board: board3, user: user, updated_at: 1.day.ago
|
||||
it 'returns the most recent visited' do
|
||||
create_visit(7.days.ago)
|
||||
create_visit(5.days.ago)
|
||||
recent = create_visit(1.day.ago)
|
||||
|
||||
expect(described_class.latest(user, group)).to eq recent
|
||||
end
|
||||
|
||||
it 'returns last 3 visited boards' do
|
||||
create_visit(7.days.ago)
|
||||
visit1 = create_visit(3.days.ago)
|
||||
visit2 = create_visit(2.days.ago)
|
||||
visit3 = create_visit(5.days.ago)
|
||||
|
||||
expect(described_class.latest(user, group, count: 3)).to eq([visit2, visit1, visit3])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -50,15 +50,25 @@ describe BoardProjectRecentVisit do
|
|||
end
|
||||
|
||||
describe '#latest' do
|
||||
it 'returns the most recent visited' do
|
||||
board2 = create(:board, project: project)
|
||||
board3 = create(:board, project: project)
|
||||
def create_visit(time)
|
||||
create :board_project_recent_visit, project: project, user: user, updated_at: time
|
||||
end
|
||||
|
||||
create :board_project_recent_visit, project: board.project, board: board, user: user, updated_at: 7.days.ago
|
||||
create :board_project_recent_visit, project: board2.project, board: board2, user: user, updated_at: 5.days.ago
|
||||
recent = create :board_project_recent_visit, project: board3.project, board: board3, user: user, updated_at: 1.day.ago
|
||||
it 'returns the most recent visited' do
|
||||
create_visit(7.days.ago)
|
||||
create_visit(5.days.ago)
|
||||
recent = create_visit(1.day.ago)
|
||||
|
||||
expect(described_class.latest(user, project)).to eq recent
|
||||
end
|
||||
|
||||
it 'returns last 3 visited boards' do
|
||||
create_visit(7.days.ago)
|
||||
visit1 = create_visit(3.days.ago)
|
||||
visit2 = create_visit(2.days.ago)
|
||||
visit3 = create_visit(5.days.ago)
|
||||
|
||||
expect(described_class.latest(user, project, count: 3)).to eq([visit2, visit1, visit3])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -23,6 +23,12 @@ describe Boards::Visits::LatestService do
|
|||
|
||||
service.execute
|
||||
end
|
||||
|
||||
it 'queries for last N visits' do
|
||||
expect(BoardProjectRecentVisit).to receive(:latest).with(user, project, count: 5).once
|
||||
|
||||
described_class.new(project_board.parent, user, count: 5).execute
|
||||
end
|
||||
end
|
||||
|
||||
context 'when a group board' do
|
||||
|
@ -42,6 +48,12 @@ describe Boards::Visits::LatestService do
|
|||
|
||||
service.execute
|
||||
end
|
||||
|
||||
it 'queries for last N visits' do
|
||||
expect(BoardGroupRecentVisit).to receive(:latest).with(user, group, count: 5).once
|
||||
|
||||
described_class.new(group_board.parent, user, count: 5).execute
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue