Skip to content

Instantly share code, notes, and snippets.

@mateuszbialowas
Created October 23, 2022 00:45
Show Gist options
  • Save mateuszbialowas/964fbd6d9eafc55258ba55aa914dec0e to your computer and use it in GitHub Desktop.
Save mateuszbialowas/964fbd6d9eafc55258ba55aa914dec0e to your computer and use it in GitHub Desktop.
# frozen_string_literal: true
require 'rails_helper'
require 'benchmark'
describe Users::Roles::Create do
subject(:service) { described_class.new(user, role_params).call }
let(:user) { create(:user) }
Benchmark.bmbm do |x|
x.report('with few its') do
1000.times do
context 'with few its' do
let(:role_params) { { advertiser: true, publisher: true, copywriter: false } }
before { create(:advertiser, user:) }
it 'creates only new role' do
expect { service }.to change { user.reload.roles.count }.by(1)
end
it { is_expected.to be_success }
it do
service
expect(user.reload.roles).to include(be_a(Publisher), be_a(Advertiser))
end
it do
service
expect(user.reload.roles).not_to include(be_a(Copywriter))
end
end
end
end
x.report('with one it') do
1000.times do
context 'with one it' do
let(:role_params) { { advertiser: true, publisher: true, copywriter: false } }
before { create(:advertiser, user:) }
it 'creates only new role' do
expect { service }.to change { user.reload.roles.count }.by(1)
expect(user.reload.roles).to include(be_a(Publisher), be_a(Advertiser))
expect(user.reload.roles).not_to include(be_a(Copywriter))
expect(service).to be_success
end
end
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment