Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add spec coverage for models/form/custom_emoji_batch class #28388

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions spec/fabricators/custom_emoji_category_fabricator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# frozen_string_literal: true

Fabricator(:custom_emoji_category) do
name { sequence(:name) { |i| "name_#{i}" } }
end
118 changes: 118 additions & 0 deletions spec/models/form/custom_emoji_batch_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
# frozen_string_literal: true

require 'rails_helper'

describe Form::CustomEmojiBatch do
describe '#save' do
subject { described_class.new({ current_account: account }.merge(options)) }

let(:options) { {} }
let(:account) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }

context 'with empty custom_emoji_ids' do
let(:options) { { custom_emoji_ids: [] } }

it 'does nothing if custom_emoji_ids is empty' do
expect(subject.save).to be_nil
end
end

describe 'the update action' do
let(:custom_emoji) { Fabricate(:custom_emoji, category: Fabricate(:custom_emoji_category)) }
let(:custom_emoji_category) { Fabricate(:custom_emoji_category) }

context 'without anything to change' do
let(:options) { { action: 'update' } }

it 'silently exits without updating any custom emojis' do
expect { subject.save }.to_not change(Admin::ActionLog, :count)
end
end

context 'with a category_id' do
let(:options) { { action: 'update', custom_emoji_ids: [custom_emoji.id], category_id: custom_emoji_category.id } }

it 'updates the category of the emoji' do
subject.save

expect(custom_emoji.reload.category).to eq(custom_emoji_category)
end
end

context 'with a category_name' do
let(:options) { { action: 'update', custom_emoji_ids: [custom_emoji.id], category_name: custom_emoji_category.name } }

it 'updates the category of the emoji' do
subject.save

expect(custom_emoji.reload.category).to eq(custom_emoji_category)
end
end
end

describe 'the list action' do
let(:custom_emoji) { Fabricate(:custom_emoji, visible_in_picker: false) }
let(:options) { { action: 'list', custom_emoji_ids: [custom_emoji.id] } }

it 'updates the picker visibility of the emoji' do
subject.save

expect(custom_emoji.reload.visible_in_picker).to be(true)
end
end

describe 'the unlist action' do
let(:custom_emoji) { Fabricate(:custom_emoji, visible_in_picker: true) }
let(:options) { { action: 'unlist', custom_emoji_ids: [custom_emoji.id] } }

it 'updates the picker visibility of the emoji' do
subject.save

expect(custom_emoji.reload.visible_in_picker).to be(false)
end
end

describe 'the enable action' do
let(:custom_emoji) { Fabricate(:custom_emoji, disabled: true) }
let(:options) { { action: 'enable', custom_emoji_ids: [custom_emoji.id] } }

it 'updates the disabled value of the emoji' do
subject.save

expect(custom_emoji.reload).to_not be_disabled
end
end

describe 'the disable action' do
let(:custom_emoji) { Fabricate(:custom_emoji, visible_in_picker: false) }
let(:options) { { action: 'disable', custom_emoji_ids: [custom_emoji.id] } }

it 'updates the disabled value of the emoji' do
subject.save

expect(custom_emoji.reload).to be_disabled
end
end

describe 'the copy action' do
let(:custom_emoji) { Fabricate(:custom_emoji) }
let(:options) { { action: 'copy', custom_emoji_ids: [custom_emoji.id] } }

it 'makes a copy of the emoji' do
expect { subject.save }
.to change(CustomEmoji, :count).by(1)
end
end

describe 'the delete action' do
let(:custom_emoji) { Fabricate(:custom_emoji) }
let(:options) { { action: 'delete', custom_emoji_ids: [custom_emoji.id] } }

it 'destroys the emoji' do
subject.save

expect { custom_emoji.reload }.to raise_error(ActiveRecord::RecordNotFound)
end
end
end
end