summaryrefslogtreecommitdiff
path: root/spec/models/users_statistics_spec.rb
blob: fc23bed711fb8a43464a6c00f2a183317864ed1b (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
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe UsersStatistics do
  describe '.create_current_stats!' do
    before do
      create_list(:user_highest_role, 4)
      create_list(:user_highest_role, 2, :guest)
      create_list(:user_highest_role, 3, :reporter)
      create_list(:user_highest_role, 4, :developer)
      create_list(:user_highest_role, 3, :maintainer)
      create_list(:user_highest_role, 2, :owner)
      create_list(:user, 2, :bot)
      create_list(:user, 1, :blocked)

      allow(ActiveRecord::Base.connection).to receive(:transaction_open?).and_return(false)
    end

    context 'when successful' do
      it 'creates an entry with the current statistics values' do
        expect(described_class.create_current_stats!).to have_attributes(
          without_groups_and_projects: 4,
          with_highest_role_guest: 2,
          with_highest_role_reporter: 3,
          with_highest_role_developer: 4,
          with_highest_role_maintainer: 3,
          with_highest_role_owner: 2,
          bots: 2,
          blocked: 1
        )
      end
    end

    context 'when unsuccessful' do
      it 'raises an ActiveRecord::RecordInvalid exception' do
        allow(UsersStatistics).to receive(:create!).and_raise(ActiveRecord::RecordInvalid)

        expect { described_class.create_current_stats! }.to raise_error(ActiveRecord::RecordInvalid)
      end
    end
  end
end