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

usage_metric_generator_spec.rb « gitlab « generators « lib « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: f38815acca6bdc4a908c564a0cbcf5c741ef0ac0 (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
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Gitlab::UsageMetricGenerator, :silence_stdout do
  let(:ce_temp_dir) { Dir.mktmpdir }
  let(:ee_temp_dir) { Dir.mktmpdir }
  let(:spec_ce_temp_dir) { Dir.mktmpdir }
  let(:spec_ee_temp_dir) { Dir.mktmpdir }
  let(:args) { ['CountFoo'] }
  let(:options) { { 'type' => 'redis_hll' } }

  before do
    stub_const("#{described_class}::CE_DIR", ce_temp_dir)
    stub_const("#{described_class}::EE_DIR", ee_temp_dir)
    stub_const("#{described_class}::SPEC_CE_DIR", spec_ce_temp_dir)
    stub_const("#{described_class}::SPEC_EE_DIR", spec_ee_temp_dir)
  end

  after do
    FileUtils.rm_rf([ce_temp_dir, ee_temp_dir, spec_ce_temp_dir, spec_ee_temp_dir])
  end

  def expect_generated_file(directory, file_name, content)
    file_path = File.join(directory, file_name)
    file = File.read(file_path)

    expect(file).to eq(content)
  end

  describe 'Creating metric instrumentation files' do
    let(:sample_metric_dir) { 'lib/generators/gitlab/usage_metric_generator' }
    let(:sample_metric) { fixture_file(File.join(sample_metric_dir, 'sample_metric.rb')) }
    let(:sample_spec) { fixture_file(File.join(sample_metric_dir, 'sample_metric_test.rb')) }

    it 'creates CE metric instrumentation files using the template' do
      described_class.new(args, options).invoke_all

      expect_generated_file(ce_temp_dir, 'count_foo_metric.rb', sample_metric)
      expect_generated_file(spec_ce_temp_dir, 'count_foo_metric_spec.rb', sample_spec)
    end

    context 'with EE flag true' do
      let(:options) { { 'type' => 'redis_hll', 'ee' => true } }

      it 'creates EE metric instrumentation files using the template' do
        described_class.new(args, options).invoke_all

        expect_generated_file(ee_temp_dir, 'count_foo_metric.rb', sample_metric)
        expect_generated_file(spec_ee_temp_dir, 'count_foo_metric_spec.rb', sample_spec)
      end
    end

    context 'with type option missing' do
      let(:options) { {} }

      it 'raises an ArgumentError' do
        expect { described_class.new(args, options).invoke_all }.to raise_error(ArgumentError, /Type is required/)
      end
    end

    context 'with type option value not included in approved superclasses' do
      let(:options) { { 'type' => 'some_other_type' } }

      it 'raises an ArgumentError' do
        expect { described_class.new(args, options).invoke_all }.to raise_error(ArgumentError, /Unknown type 'some_other_type'/)
      end
    end
  end
end