diff options
Diffstat (limited to 'spec/lib/gitlab/github_import/milestone_finder_spec.rb')
-rw-r--r-- | spec/lib/gitlab/github_import/milestone_finder_spec.rb | 57 |
1 files changed, 53 insertions, 4 deletions
diff --git a/spec/lib/gitlab/github_import/milestone_finder_spec.rb b/spec/lib/gitlab/github_import/milestone_finder_spec.rb index e7f47d334e8..62886981de1 100644 --- a/spec/lib/gitlab/github_import/milestone_finder_spec.rb +++ b/spec/lib/gitlab/github_import/milestone_finder_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Gitlab::GithubImport::MilestoneFinder, :clean_gitlab_redis_cache do +RSpec.describe Gitlab::GithubImport::MilestoneFinder, :clean_gitlab_redis_cache, feature_category: :importers do let_it_be(:project) { create(:project) } let_it_be(:milestone) { create(:milestone, project: project) } @@ -20,23 +20,72 @@ RSpec.describe Gitlab::GithubImport::MilestoneFinder, :clean_gitlab_redis_cache expect(finder.id_for(issuable)).to eq(milestone.id) end - it 'returns nil for an empty cache key' do + it 'returns nil if object does not exist' do + missing_issuable = double(:issuable, milestone_number: 999) + + expect(finder.id_for(missing_issuable)).to be_nil + end + + it 'fetches object id from database if not in cache' do key = finder.cache_key_for(milestone.iid) Gitlab::Cache::Import::Caching.write(key, '') - expect(finder.id_for(issuable)).to be_nil + expect(finder.id_for(issuable)).to eq(milestone.id) end it 'returns nil for an issuable with a non-existing milestone' do expect(finder.id_for(double(:issuable, milestone_number: 5))).to be_nil end + + it 'returns nil and skips database read if cache has no record' do + key = finder.cache_key_for(milestone.iid) + + Gitlab::Cache::Import::Caching.write(key, -1) + + expect(finder.id_for(issuable)).to be_nil + end end context 'without a cache in place' do - it 'returns nil' do + it 'caches the ID of a database row and returns the ID' do + expect(Gitlab::Cache::Import::Caching) + .to receive(:write) + .with("github-import/milestone-finder/#{project.id}/1", milestone.id) + .and_call_original + + expect(finder.id_for(issuable)).to eq(milestone.id) + end + end + + context 'with FF import_fallback_to_db_empty_cache disabled' do + before do + stub_feature_flags(import_fallback_to_db_empty_cache: false) + end + + it 'returns nil if object does not exist' do + missing_issuable = double(:issuable, milestone_number: 999) + + expect(finder.id_for(missing_issuable)).to be_nil + end + + it 'does not fetch object id from database if not in cache' do expect(finder.id_for(issuable)).to be_nil end + + it 'fetches object id from cache if present' do + finder.build_cache + + expect(finder.id_for(issuable)).to eq(milestone.id) + end + + it 'returns -1 if cache is -1' do + key = finder.cache_key_for(milestone.iid) + + Gitlab::Cache::Import::Caching.write(key, -1) + + expect(finder.id_for(issuable)).to eq(-1) + end end end |