Welcome to mirror list, hosted at ThFree Co, Russian Federation.

redis_tracking_spec.rb « concerns « controllers « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 1b41e1820b17f0d417437ad4209ef62de9dac659 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# frozen_string_literal: true

require "spec_helper"

RSpec.describe RedisTracking do
  let(:event_name) { 'g_compliance_dashboard' }
  let(:feature) { 'g_compliance_dashboard_feature' }
  let(:user) { create(:user) }

  controller(ApplicationController) do
    include RedisTracking

    skip_before_action :authenticate_user!, only: :show
    track_redis_hll_event :index, :show, name: 'i_analytics_dev_ops_score', feature: :g_compliance_dashboard_feature, feature_default_enabled: true

    def index
      render html: 'index'
    end

    def new
      render html: 'new'
    end

    def show
      render html: 'show'
    end
  end

  context 'with feature disabled' do
    it 'does not track the event' do
      stub_feature_flags(feature => false)

      expect(Gitlab::UsageDataCounters::HLLRedisCounter).not_to receive(:track_event)

      get :index
    end
  end

  context 'with feature enabled' do
    before do
      stub_feature_flags(feature => true)
    end

    context 'when user is logged in' do
      it 'tracks the event' do
        sign_in(user)

        expect(Gitlab::UsageDataCounters::HLLRedisCounter).to receive(:track_event)

        get :index
      end

      it 'passes default_enabled flag' do
        sign_in(user)

        expect(controller).to receive(:metric_feature_enabled?).with(feature.to_sym, true)

        get :index
      end
    end

    context 'when user is not logged in and there is a visitor_id' do
      let(:visitor_id) { SecureRandom.uuid }

      before do
        routes.draw { get 'show' => 'anonymous#show' }
      end

      it 'tracks the event' do
        cookies[:visitor_id] = { value: visitor_id, expires: 24.months }

        expect(Gitlab::UsageDataCounters::HLLRedisCounter).to receive(:track_event)

        get :show
      end
    end

    context 'when user is not logged in and there is no visitor_id' do
      it 'does not tracks the event' do
        expect(Gitlab::UsageDataCounters::HLLRedisCounter).not_to receive(:track_event)

        get :index
      end
    end

    context 'for untracked action' do
      it 'does not tracks the event' do
        expect(Gitlab::UsageDataCounters::HLLRedisCounter).not_to receive(:track_event)

        get :new
      end
    end
  end
end