56 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| require 'spec_helper'
 | |
| 
 | |
| RSpec.describe Gitlab::ReferenceCounter, :clean_gitlab_redis_shared_state do
 | |
|   let(:reference_counter) { described_class.new('project-1') }
 | |
| 
 | |
|   describe '#increase' do
 | |
|     it 'increases and sets the expire time of a reference count for a path' do
 | |
|       expect { reference_counter.increase }.to change { reference_counter.value }.by(1)
 | |
|       expect(reference_counter.expires_in).to be_positive
 | |
|       expect(reference_counter.increase).to be(true)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '#decrease' do
 | |
|     it 'decreases the reference count for a path' do
 | |
|       reference_counter.increase
 | |
| 
 | |
|       expect { reference_counter.decrease }.to change { reference_counter.value }.by(-1)
 | |
|     end
 | |
| 
 | |
|     it 'warns if attempting to decrease a counter with a value of zero or less, and resets the counter' do
 | |
|       expect(Rails.logger).to receive(:warn).with("Reference counter for project-1" \
 | |
|         " decreased when its value was less than 1. Resetting the counter.")
 | |
|       expect { reference_counter.decrease }.not_to change { reference_counter.value }
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '#value' do
 | |
|     it 'get the reference count for a path' do
 | |
|       expect(reference_counter.value).to eq(0)
 | |
| 
 | |
|       reference_counter.increase
 | |
| 
 | |
|       expect(reference_counter.value).to eq(1)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '#reset!' do
 | |
|     it 'resets reference count down to zero' do
 | |
|       3.times { reference_counter.increase }
 | |
| 
 | |
|       expect { reference_counter.reset! }.to change { reference_counter.value}.from(3).to(0)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '#expires_in' do
 | |
|     it 'displays the expiration time in seconds' do
 | |
|       reference_counter.increase
 | |
| 
 | |
|       expect(reference_counter.expires_in).to be_between(500, 600)
 | |
|     end
 | |
|   end
 | |
| end
 |