30 lines
		
	
	
		
			915 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			915 B
		
	
	
	
		
			Ruby
		
	
	
	
| require 'spec_helper'
 | |
| 
 | |
| describe Gitlab::ActionRateLimiter do
 | |
|   let(:redis) { double('redis') }
 | |
|   let(:user) { create(:user) }
 | |
|   let(:project) { create(:project) }
 | |
|   let(:key) { [user, project] }
 | |
|   let(:cache_key) { "action_rate_limiter:test_action:user:#{user.id}:project:#{project.id}" }
 | |
| 
 | |
|   subject { described_class.new(action: :test_action, expiry_time: 100) }
 | |
| 
 | |
|   before do
 | |
|     allow(Gitlab::Redis::Cache).to receive(:with).and_yield(redis)
 | |
|   end
 | |
| 
 | |
|   it 'increases the throttle count and sets the expire time' do
 | |
|     expect(redis).to receive(:incr).with(cache_key).and_return(1)
 | |
|     expect(redis).to receive(:expire).with(cache_key, 100)
 | |
| 
 | |
|     expect(subject.throttled?(key, 1)).to be false
 | |
|   end
 | |
| 
 | |
|   it 'returns true if the key is throttled' do
 | |
|     expect(redis).to receive(:incr).with(cache_key).and_return(2)
 | |
|     expect(redis).not_to receive(:expire)
 | |
| 
 | |
|     expect(subject.throttled?(key, 1)).to be true
 | |
|   end
 | |
| end
 |