103 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
require 'spec_helper'
 | 
						|
 | 
						|
describe Gitlab::DiscussionsDiff::HighlightCache, :clean_gitlab_redis_cache do
 | 
						|
  describe '#write_multiple' do
 | 
						|
    it 'sets multiple keys serializing content as JSON' do
 | 
						|
      mapping = {
 | 
						|
        3 => [
 | 
						|
          {
 | 
						|
            text: 'foo',
 | 
						|
            type: 'new',
 | 
						|
            index: 2,
 | 
						|
            old_pos: 10,
 | 
						|
            new_pos: 11,
 | 
						|
            line_code: 'xpto',
 | 
						|
            rich_text: '<blips>blops</blips>'
 | 
						|
          },
 | 
						|
          {
 | 
						|
            text: 'foo',
 | 
						|
            type: 'new',
 | 
						|
            index: 3,
 | 
						|
            old_pos: 11,
 | 
						|
            new_pos: 12,
 | 
						|
            line_code: 'xpto',
 | 
						|
            rich_text: '<blops>blips</blops>'
 | 
						|
          }
 | 
						|
        ]
 | 
						|
      }
 | 
						|
 | 
						|
      described_class.write_multiple(mapping)
 | 
						|
 | 
						|
      mapping.each do |key, value|
 | 
						|
        full_key = described_class.cache_key_for(key)
 | 
						|
        found = Gitlab::Redis::Cache.with { |r| r.get(full_key) }
 | 
						|
 | 
						|
        expect(found).to eq(value.to_json)
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  describe '#read_multiple' do
 | 
						|
    it 'reads multiple keys and serializes content into Gitlab::Diff::Line objects' do
 | 
						|
      mapping = {
 | 
						|
        3 => [
 | 
						|
          {
 | 
						|
            text: 'foo',
 | 
						|
            type: 'new',
 | 
						|
            index: 2,
 | 
						|
            old_pos: 11,
 | 
						|
            new_pos: 12,
 | 
						|
            line_code: 'xpto',
 | 
						|
            rich_text: '<blips>blops</blips>'
 | 
						|
          },
 | 
						|
          {
 | 
						|
            text: 'foo',
 | 
						|
            type: 'new',
 | 
						|
            index: 3,
 | 
						|
            old_pos: 10,
 | 
						|
            new_pos: 11,
 | 
						|
            line_code: 'xpto',
 | 
						|
            rich_text: '<blips>blops</blips>'
 | 
						|
          }
 | 
						|
        ]
 | 
						|
      }
 | 
						|
 | 
						|
      described_class.write_multiple(mapping)
 | 
						|
 | 
						|
      found = described_class.read_multiple(mapping.keys)
 | 
						|
 | 
						|
      expect(found.size).to eq(1)
 | 
						|
      expect(found.first.size).to eq(2)
 | 
						|
      expect(found.first).to all(be_a(Gitlab::Diff::Line))
 | 
						|
    end
 | 
						|
 | 
						|
    it 'returns nil when cached key is not found' do
 | 
						|
      mapping = {
 | 
						|
        3 => [
 | 
						|
          {
 | 
						|
            text: 'foo',
 | 
						|
            type: 'new',
 | 
						|
            index: 2,
 | 
						|
            old_pos: 11,
 | 
						|
            new_pos: 12,
 | 
						|
            line_code: 'xpto',
 | 
						|
            rich_text: '<blips>blops</blips>'
 | 
						|
          }
 | 
						|
        ]
 | 
						|
      }
 | 
						|
 | 
						|
      described_class.write_multiple(mapping)
 | 
						|
 | 
						|
      found = described_class.read_multiple([2, 3])
 | 
						|
 | 
						|
      expect(found.size).to eq(2)
 | 
						|
 | 
						|
      expect(found.first).to eq(nil)
 | 
						|
      expect(found.second.size).to eq(1)
 | 
						|
      expect(found.second).to all(be_a(Gitlab::Diff::Line))
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |