Add specs for caching commit author
This commit is contained in:
parent
8a9fc2b67e
commit
d27e36f35a
2 changed files with 35 additions and 7 deletions
|
@ -178,14 +178,18 @@ class Commit
|
|||
end
|
||||
|
||||
def author
|
||||
key = "commit_author:#{author_email}"
|
||||
|
||||
# nil is a valid value since no author may exist in the system
|
||||
unless RequestStore.store.has_key?(key)
|
||||
RequestStore.store[key] = User.find_by_any_email(author_email.downcase)
|
||||
if RequestStore.active?
|
||||
key = "commit_author:#{author_email.downcase}"
|
||||
# nil is a valid value since no author may exist in the system
|
||||
if RequestStore.store.has_key?(key)
|
||||
@author = RequestStore.store[key]
|
||||
else
|
||||
@author = find_author_by_any_email
|
||||
RequestStore.store[key] = @author
|
||||
end
|
||||
else
|
||||
@author ||= find_author_by_any_email
|
||||
end
|
||||
|
||||
@author ||= RequestStore.store[key]
|
||||
end
|
||||
|
||||
def committer
|
||||
|
@ -313,6 +317,10 @@ class Commit
|
|||
|
||||
private
|
||||
|
||||
def find_author_by_any_email
|
||||
User.find_by_any_email(author_email.downcase)
|
||||
end
|
||||
|
||||
def repo_changes
|
||||
changes = { added: [], modified: [], removed: [] }
|
||||
|
||||
|
|
|
@ -13,6 +13,26 @@ describe Commit, models: true do
|
|||
it { is_expected.to include_module(StaticModel) }
|
||||
end
|
||||
|
||||
describe '#author' do
|
||||
it 'looks up the author in a case-insensitive way' do
|
||||
user = create(:user, email: commit.author_email.upcase)
|
||||
expect(commit.author).to eq(user)
|
||||
end
|
||||
|
||||
it 'caches the author' do
|
||||
user = create(:user, email: commit.author_email)
|
||||
expect(RequestStore).to receive(:active?).twice.and_return(true)
|
||||
expect_any_instance_of(Commit).to receive(:find_author_by_any_email).and_call_original
|
||||
|
||||
expect(commit.author).to eq(user)
|
||||
key = "commit_author:#{commit.author_email}"
|
||||
expect(RequestStore.store[key]).to eq(user)
|
||||
|
||||
expect(commit.author).to eq(user)
|
||||
RequestStore.store.clear
|
||||
end
|
||||
end
|
||||
|
||||
describe '#to_reference' do
|
||||
it 'returns a String reference to the object' do
|
||||
expect(commit.to_reference).to eq commit.id
|
||||
|
|
Loading…
Reference in a new issue