From 5a8c651e8f0252c7135042e79396f782361302d9 Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Fri, 3 Mar 2023 21:06:31 +0100 Subject: Only offer translation for supported languages (#23879) --- spec/models/status_spec.rb | 79 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) (limited to 'spec/models') diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index 1e58c6d0d..1f6cfc796 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -114,6 +114,85 @@ RSpec.describe Status, type: :model do end end + describe '#translatable?' do + before do + allow(TranslationService).to receive(:configured?).and_return(true) + allow(TranslationService).to receive(:configured).and_return(TranslationService.new) + allow(TranslationService.configured).to receive(:supported?).with('es', 'en').and_return(true) + + subject.language = 'es' + subject.visibility = :public + end + + context 'all conditions are satisfied' do + it 'returns true' do + expect(subject.translatable?).to be true + end + end + + context 'translation service is not configured' do + it 'returns false' do + allow(TranslationService).to receive(:configured?).and_return(false) + allow(TranslationService).to receive(:configured).and_raise(TranslationService::NotConfiguredError) + expect(subject.translatable?).to be false + end + end + + context 'status language is nil' do + it 'returns true' do + subject.language = nil + allow(TranslationService.configured).to receive(:supported?).with(nil, 'en').and_return(true) + expect(subject.translatable?).to be true + end + end + + context 'status language is same as default locale' do + it 'returns false' do + subject.language = I18n.locale + expect(subject.translatable?).to be false + end + end + + context 'status language is unsupported' do + it 'returns false' do + subject.language = 'af' + allow(TranslationService.configured).to receive(:supported?).with('af', 'en').and_return(false) + expect(subject.translatable?).to be false + end + end + + context 'default locale is unsupported' do + it 'returns false' do + allow(TranslationService.configured).to receive(:supported?).with('es', 'af').and_return(false) + I18n.with_locale('af') do + expect(subject.translatable?).to be false + end + end + end + + context 'default locale has region' do + it 'returns true' do + I18n.with_locale('en-GB') do + expect(subject.translatable?).to be true + end + end + end + + context 'status text is blank' do + it 'returns false' do + subject.text = ' ' + expect(subject.translatable?).to be false + end + end + + context 'status visiblity is hidden' do + it 'returns false' do + subject.visibility = 'limited' + expect(subject.translatable?).to be false + end + end + end + describe '#content' do it 'returns the text of the status if it is not a reblog' do expect(subject.content).to eql subject.text -- cgit From f9c2213ae5e12f14a38506c728a9598b337969cb Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sat, 4 Mar 2023 10:43:47 -0500 Subject: Models specs coverage (#23940) --- .../preview_card_provider_fabricator.rb | 5 +++ spec/models/account_warning_preset_spec.rb | 17 +++++++++ spec/models/extended_description_spec.rb | 29 +++++++++++++++ spec/models/preview_card_provider_spec.rb | 42 ++++++++++++++++++++++ spec/models/privacy_policy_spec.rb | 28 +++++++++++++++ 5 files changed, 121 insertions(+) create mode 100644 spec/fabricators/preview_card_provider_fabricator.rb create mode 100644 spec/models/account_warning_preset_spec.rb create mode 100644 spec/models/extended_description_spec.rb create mode 100644 spec/models/preview_card_provider_spec.rb create mode 100644 spec/models/privacy_policy_spec.rb (limited to 'spec/models') diff --git a/spec/fabricators/preview_card_provider_fabricator.rb b/spec/fabricators/preview_card_provider_fabricator.rb new file mode 100644 index 000000000..78db71000 --- /dev/null +++ b/spec/fabricators/preview_card_provider_fabricator.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +Fabricator(:preview_card_provider) do + domain { Faker::Internet.domain_name } +end diff --git a/spec/models/account_warning_preset_spec.rb b/spec/models/account_warning_preset_spec.rb new file mode 100644 index 000000000..f171df7c9 --- /dev/null +++ b/spec/models/account_warning_preset_spec.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe AccountWarningPreset do + describe 'alphabetical' do + let(:first) { Fabricate(:account_warning_preset, title: 'aaa', text: 'aaa') } + let(:second) { Fabricate(:account_warning_preset, title: 'bbb', text: 'aaa') } + let(:third) { Fabricate(:account_warning_preset, title: 'bbb', text: 'bbb') } + + it 'returns records in order of title and text' do + results = described_class.alphabetic + + expect(results).to eq([first, second, third]) + end + end +end diff --git a/spec/models/extended_description_spec.rb b/spec/models/extended_description_spec.rb new file mode 100644 index 000000000..ecc27c0f6 --- /dev/null +++ b/spec/models/extended_description_spec.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe ExtendedDescription do + describe '.current' do + context 'with the default values' do + it 'makes a new instance' do + record = described_class.current + + expect(record.text).to be_nil + expect(record.updated_at).to be_nil + end + end + + context 'with a custom setting value' do + before do + setting = instance_double(Setting, value: 'Extended text', updated_at: 10.days.ago) + allow(Setting).to receive(:find_by).with(var: 'site_extended_description').and_return(setting) + end + + it 'has the privacy text' do + record = described_class.current + + expect(record.text).to eq('Extended text') + end + end + end +end diff --git a/spec/models/preview_card_provider_spec.rb b/spec/models/preview_card_provider_spec.rb new file mode 100644 index 000000000..7425b9394 --- /dev/null +++ b/spec/models/preview_card_provider_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe PreviewCardProvider do + describe 'scopes' do + let(:trendable_and_reviewed) { Fabricate(:preview_card_provider, trendable: true, reviewed_at: 5.days.ago) } + let(:not_trendable_and_not_reviewed) { Fabricate(:preview_card_provider, trendable: false, reviewed_at: nil) } + + describe 'trendable' do + it 'returns the relevant records' do + results = described_class.trendable + + expect(results).to eq([trendable_and_reviewed]) + end + end + + describe 'not_trendable' do + it 'returns the relevant records' do + results = described_class.not_trendable + + expect(results).to eq([not_trendable_and_not_reviewed]) + end + end + + describe 'reviewed' do + it 'returns the relevant records' do + results = described_class.reviewed + + expect(results).to eq([trendable_and_reviewed]) + end + end + + describe 'pending_review' do + it 'returns the relevant records' do + results = described_class.pending_review + + expect(results).to eq([not_trendable_and_not_reviewed]) + end + end + end +end diff --git a/spec/models/privacy_policy_spec.rb b/spec/models/privacy_policy_spec.rb new file mode 100644 index 000000000..0d7471375 --- /dev/null +++ b/spec/models/privacy_policy_spec.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe PrivacyPolicy do + describe '.current' do + context 'with the default values' do + it 'has the privacy text' do + policy = described_class.current + + expect(policy.text).to eq(PrivacyPolicy::DEFAULT_PRIVACY_POLICY) + end + end + + context 'with a custom setting value' do + before do + terms_setting = instance_double(Setting, value: 'Terms text', updated_at: 10.days.ago) + allow(Setting).to receive(:find_by).with(var: 'site_terms').and_return(terms_setting) + end + + it 'has the privacy text' do + policy = described_class.current + + expect(policy.text).to eq('Terms text') + end + end + end +end -- cgit From c40d5e5a8fb02f2c603a23a1b0130b3f86a15710 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sat, 4 Mar 2023 11:00:00 -0500 Subject: Misc coverage improvements for validators (#23928) --- app/validators/ed25519_key_validator.rb | 2 +- app/validators/ed25519_signature_validator.rb | 2 +- spec/models/import_spec.rb | 5 +++++ spec/models/one_time_key_spec.rb | 19 ++++++++++++++++++- spec/validators/email_mx_validator_spec.rb | 16 ++++++++++++++++ 5 files changed, 41 insertions(+), 3 deletions(-) (limited to 'spec/models') diff --git a/app/validators/ed25519_key_validator.rb b/app/validators/ed25519_key_validator.rb index 00a448d5a..adf49296b 100644 --- a/app/validators/ed25519_key_validator.rb +++ b/app/validators/ed25519_key_validator.rb @@ -6,7 +6,7 @@ class Ed25519KeyValidator < ActiveModel::EachValidator key = Base64.decode64(value) - record.errors[attribute] << I18n.t('crypto.errors.invalid_key') unless verified?(key) + record.errors.add(attribute, I18n.t('crypto.errors.invalid_key')) unless verified?(key) end private diff --git a/app/validators/ed25519_signature_validator.rb b/app/validators/ed25519_signature_validator.rb index 77a21b837..0e74c231e 100644 --- a/app/validators/ed25519_signature_validator.rb +++ b/app/validators/ed25519_signature_validator.rb @@ -8,7 +8,7 @@ class Ed25519SignatureValidator < ActiveModel::EachValidator signature = Base64.decode64(value) message = option_to_value(record, :message) - record.errors[attribute] << I18n.t('crypto.errors.invalid_signature') unless verified?(verify_key, signature, message) + record.errors.add(attribute, I18n.t('crypto.errors.invalid_signature')) unless verified?(verify_key, signature, message) end private diff --git a/spec/models/import_spec.rb b/spec/models/import_spec.rb index 81c75a964..1c8474413 100644 --- a/spec/models/import_spec.rb +++ b/spec/models/import_spec.rb @@ -23,6 +23,11 @@ RSpec.describe Import, type: :model do expect(import).to model_have_error_on_field(:data) end + it 'is invalid with malformed data' do + import = Import.create(account: account, type: type, data: StringIO.new('\"test')) + expect(import).to model_have_error_on_field(:data) + end + it 'is invalid with too many rows in data' do import = Import.create(account: account, type: type, data: StringIO.new("foo@bar.com\n" * (ImportService::ROWS_PROCESSING_LIMIT + 10))) expect(import).to model_have_error_on_field(:data) diff --git a/spec/models/one_time_key_spec.rb b/spec/models/one_time_key_spec.rb index 2a5fe8a9d..6ff7ffc5c 100644 --- a/spec/models/one_time_key_spec.rb +++ b/spec/models/one_time_key_spec.rb @@ -2,5 +2,22 @@ require 'rails_helper' -RSpec.describe OneTimeKey, type: :model do +describe OneTimeKey do + describe 'validations' do + context 'with an invalid signature' do + let(:one_time_key) { Fabricate.build(:one_time_key, signature: 'wrong!') } + + it 'is invalid' do + expect(one_time_key).to_not be_valid + end + end + + context 'with an invalid key' do + let(:one_time_key) { Fabricate.build(:one_time_key, key: 'wrong!') } + + it 'is invalid' do + expect(one_time_key).to_not be_valid + end + end + end end diff --git a/spec/validators/email_mx_validator_spec.rb b/spec/validators/email_mx_validator_spec.rb index ffb6851d0..a11b8e01e 100644 --- a/spec/validators/email_mx_validator_spec.rb +++ b/spec/validators/email_mx_validator_spec.rb @@ -41,6 +41,22 @@ describe EmailMxValidator do expect(user.errors).to_not have_received(:add) end + it 'adds an error if the TagManager fails to normalize domain' do + double = instance_double(TagManager) + allow(TagManager).to receive(:instance).and_return(double) + allow(double).to receive(:normalize_domain).with('example.com').and_raise(Addressable::URI::InvalidURIError) + + user = double(email: 'foo@example.com', errors: double(add: nil)) + subject.validate(user) + expect(user.errors).to have_received(:add) + end + + it 'adds an error if the domain email portion is blank' do + user = double(email: 'foo@', errors: double(add: nil)) + subject.validate(user) + expect(user.errors).to have_received(:add) + end + it 'adds an error if the email domain name contains empty labels' do resolver = double -- cgit From cd99fa8cebc6efa059b4fca743d517c88f8d9686 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sat, 4 Mar 2023 11:12:09 -0500 Subject: Fabricator specs (#23925) --- spec/fabricators/account_alias_fabricator.rb | 7 ------- spec/fabricators/account_deletion_request_fabricator.rb | 5 ----- spec/fabricators/account_migration_fabricator.rb | 1 + spec/fabricators/account_moderation_note_fabricator.rb | 3 ++- spec/fabricators/account_pin_fabricator.rb | 5 +++-- spec/fabricators/account_stat_fabricator.rb | 8 ++++---- spec/fabricators/account_tag_stat_fabricator.rb | 5 ----- spec/fabricators/account_warning_preset_fabricator.rb | 5 ----- spec/fabricators/admin_action_log_fabricator.rb | 2 +- spec/fabricators/announcement_mute_fabricator.rb | 6 ------ spec/fabricators/announcement_reaction_fabricator.rb | 7 ------- spec/fabricators/conversation_account_fabricator.rb | 8 -------- spec/fabricators/conversation_mute_fabricator.rb | 4 ---- spec/fabricators/custom_emoji_category_fabricator.rb | 5 ----- spec/fabricators/encrypted_message_fabricator.rb | 10 ---------- spec/fabricators/featured_tag_fabricator.rb | 8 -------- .../follow_recommendation_suppression_fabricator.rb | 5 ----- spec/fabricators/identity_fabricator.rb | 2 +- spec/fabricators/import_fabricator.rb | 4 ---- spec/fabricators/ip_block_fabricator.rb | 8 -------- spec/fabricators/list_account_fabricator.rb | 7 ------- spec/fabricators/one_time_key_fabricator.rb | 13 ------------- spec/fabricators/setting_fabricator.rb | 1 + spec/fabricators/site_upload_fabricator.rb | 1 + spec/fabricators/status_edit_fabricator.rb | 9 --------- spec/fabricators/status_stat_fabricator.rb | 8 -------- spec/fabricators/unavailable_domain_fabricator.rb | 2 +- spec/fabricators/user_invite_request_fabricator.rb | 6 ------ spec/fabricators/web_setting_fabricator.rb | 4 ---- spec/fabricators_spec.rb | 12 ++++++++++++ spec/models/account_spec.rb | 6 ------ spec/models/block_spec.rb | 5 ----- spec/models/domain_block_spec.rb | 5 ----- spec/models/email_domain_block_spec.rb | 7 ------- spec/models/follow_spec.rb | 5 ----- spec/models/mention_spec.rb | 5 ----- spec/models/report_spec.rb | 6 ------ 37 files changed, 27 insertions(+), 183 deletions(-) delete mode 100644 spec/fabricators/account_alias_fabricator.rb delete mode 100644 spec/fabricators/account_deletion_request_fabricator.rb delete mode 100644 spec/fabricators/account_tag_stat_fabricator.rb delete mode 100644 spec/fabricators/account_warning_preset_fabricator.rb delete mode 100644 spec/fabricators/announcement_mute_fabricator.rb delete mode 100644 spec/fabricators/announcement_reaction_fabricator.rb delete mode 100644 spec/fabricators/conversation_account_fabricator.rb delete mode 100644 spec/fabricators/conversation_mute_fabricator.rb delete mode 100644 spec/fabricators/custom_emoji_category_fabricator.rb delete mode 100644 spec/fabricators/encrypted_message_fabricator.rb delete mode 100644 spec/fabricators/featured_tag_fabricator.rb delete mode 100644 spec/fabricators/follow_recommendation_suppression_fabricator.rb delete mode 100644 spec/fabricators/import_fabricator.rb delete mode 100644 spec/fabricators/ip_block_fabricator.rb delete mode 100644 spec/fabricators/list_account_fabricator.rb delete mode 100644 spec/fabricators/one_time_key_fabricator.rb delete mode 100644 spec/fabricators/status_edit_fabricator.rb delete mode 100644 spec/fabricators/status_stat_fabricator.rb delete mode 100644 spec/fabricators/user_invite_request_fabricator.rb delete mode 100644 spec/fabricators/web_setting_fabricator.rb create mode 100644 spec/fabricators_spec.rb (limited to 'spec/models') diff --git a/spec/fabricators/account_alias_fabricator.rb b/spec/fabricators/account_alias_fabricator.rb deleted file mode 100644 index 4f434c078..000000000 --- a/spec/fabricators/account_alias_fabricator.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:account_alias) do - account - acct 'test@example.com' - uri 'https://example.com/users/test' -end diff --git a/spec/fabricators/account_deletion_request_fabricator.rb b/spec/fabricators/account_deletion_request_fabricator.rb deleted file mode 100644 index 3d3d37398..000000000 --- a/spec/fabricators/account_deletion_request_fabricator.rb +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:account_deletion_request) do - account -end diff --git a/spec/fabricators/account_migration_fabricator.rb b/spec/fabricators/account_migration_fabricator.rb index fd453f6d2..ae6143a65 100644 --- a/spec/fabricators/account_migration_fabricator.rb +++ b/spec/fabricators/account_migration_fabricator.rb @@ -5,4 +5,5 @@ Fabricator(:account_migration) do target_account { |attrs| Fabricate(:account, also_known_as: [ActivityPub::TagManager.instance.uri_for(attrs[:account])]) } acct { |attrs| attrs[:target_account].acct } followers_count 1234 + created_at { 60.days.ago } end diff --git a/spec/fabricators/account_moderation_note_fabricator.rb b/spec/fabricators/account_moderation_note_fabricator.rb index 403870db6..341a24dea 100644 --- a/spec/fabricators/account_moderation_note_fabricator.rb +++ b/spec/fabricators/account_moderation_note_fabricator.rb @@ -2,5 +2,6 @@ Fabricator(:account_moderation_note) do content 'MyText' - account nil + account + target_account { Fabricate(:account) } end diff --git a/spec/fabricators/account_pin_fabricator.rb b/spec/fabricators/account_pin_fabricator.rb index 7d8a77bb5..32a5f3bdb 100644 --- a/spec/fabricators/account_pin_fabricator.rb +++ b/spec/fabricators/account_pin_fabricator.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true Fabricator(:account_pin) do - account nil - target_account nil + account + target_account(fabricator: :account) + before_create { |account_pin, _| account_pin.account.follow!(account_pin.target_account) } end diff --git a/spec/fabricators/account_stat_fabricator.rb b/spec/fabricators/account_stat_fabricator.rb index 45b1524ef..e6085c5f2 100644 --- a/spec/fabricators/account_stat_fabricator.rb +++ b/spec/fabricators/account_stat_fabricator.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true Fabricator(:account_stat) do - account nil - statuses_count '' - following_count '' - followers_count '' + account + statuses_count '123' + following_count '456' + followers_count '789' end diff --git a/spec/fabricators/account_tag_stat_fabricator.rb b/spec/fabricators/account_tag_stat_fabricator.rb deleted file mode 100644 index 769015bd0..000000000 --- a/spec/fabricators/account_tag_stat_fabricator.rb +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:account_tag_stat) do - accounts_count '' -end diff --git a/spec/fabricators/account_warning_preset_fabricator.rb b/spec/fabricators/account_warning_preset_fabricator.rb deleted file mode 100644 index 7588e7f9c..000000000 --- a/spec/fabricators/account_warning_preset_fabricator.rb +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:account_warning_preset) do - text 'MyText' -end diff --git a/spec/fabricators/admin_action_log_fabricator.rb b/spec/fabricators/admin_action_log_fabricator.rb index eb738c01c..a259644bd 100644 --- a/spec/fabricators/admin_action_log_fabricator.rb +++ b/spec/fabricators/admin_action_log_fabricator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true Fabricator('Admin::ActionLog') do - account nil + account action 'MyString' target nil end diff --git a/spec/fabricators/announcement_mute_fabricator.rb b/spec/fabricators/announcement_mute_fabricator.rb deleted file mode 100644 index 109fec041..000000000 --- a/spec/fabricators/announcement_mute_fabricator.rb +++ /dev/null @@ -1,6 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:announcement_mute) do - account - announcement -end diff --git a/spec/fabricators/announcement_reaction_fabricator.rb b/spec/fabricators/announcement_reaction_fabricator.rb deleted file mode 100644 index 5da51caaa..000000000 --- a/spec/fabricators/announcement_reaction_fabricator.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:announcement_reaction) do - account - announcement - name '🌿' -end diff --git a/spec/fabricators/conversation_account_fabricator.rb b/spec/fabricators/conversation_account_fabricator.rb deleted file mode 100644 index f69d36855..000000000 --- a/spec/fabricators/conversation_account_fabricator.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:conversation_account) do - account nil - conversation nil - participant_account_ids '' - last_status nil -end diff --git a/spec/fabricators/conversation_mute_fabricator.rb b/spec/fabricators/conversation_mute_fabricator.rb deleted file mode 100644 index 5cf4dd3d5..000000000 --- a/spec/fabricators/conversation_mute_fabricator.rb +++ /dev/null @@ -1,4 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:conversation_mute) do -end diff --git a/spec/fabricators/custom_emoji_category_fabricator.rb b/spec/fabricators/custom_emoji_category_fabricator.rb deleted file mode 100644 index 6019baba2..000000000 --- a/spec/fabricators/custom_emoji_category_fabricator.rb +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:custom_emoji_category) do - name 'MyString' -end diff --git a/spec/fabricators/encrypted_message_fabricator.rb b/spec/fabricators/encrypted_message_fabricator.rb deleted file mode 100644 index 289882754..000000000 --- a/spec/fabricators/encrypted_message_fabricator.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:encrypted_message) do - device - from_account - from_device_id { Faker::Number.number(digits: 5) } - type 0 - body '' - message_franking '' -end diff --git a/spec/fabricators/featured_tag_fabricator.rb b/spec/fabricators/featured_tag_fabricator.rb deleted file mode 100644 index 4bfa3e924..000000000 --- a/spec/fabricators/featured_tag_fabricator.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:featured_tag) do - account - tag - statuses_count 1_337 - last_status_at Time.now.utc -end diff --git a/spec/fabricators/follow_recommendation_suppression_fabricator.rb b/spec/fabricators/follow_recommendation_suppression_fabricator.rb deleted file mode 100644 index 6477baee1..000000000 --- a/spec/fabricators/follow_recommendation_suppression_fabricator.rb +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:follow_recommendation_suppression) do - account -end diff --git a/spec/fabricators/identity_fabricator.rb b/spec/fabricators/identity_fabricator.rb index b83010111..58072c0d6 100644 --- a/spec/fabricators/identity_fabricator.rb +++ b/spec/fabricators/identity_fabricator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true Fabricator(:identity) do - user nil + user provider 'MyString' uid 'MyString' end diff --git a/spec/fabricators/import_fabricator.rb b/spec/fabricators/import_fabricator.rb deleted file mode 100644 index 11602f407..000000000 --- a/spec/fabricators/import_fabricator.rb +++ /dev/null @@ -1,4 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:import) do -end diff --git a/spec/fabricators/ip_block_fabricator.rb b/spec/fabricators/ip_block_fabricator.rb deleted file mode 100644 index a5da3f706..000000000 --- a/spec/fabricators/ip_block_fabricator.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:ip_block) do - ip '' - severity '' - expires_at '2020-10-08 22:20:37' - comment 'MyText' -end diff --git a/spec/fabricators/list_account_fabricator.rb b/spec/fabricators/list_account_fabricator.rb deleted file mode 100644 index b0af29e6f..000000000 --- a/spec/fabricators/list_account_fabricator.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:list_account) do - list nil - account nil - follow nil -end diff --git a/spec/fabricators/one_time_key_fabricator.rb b/spec/fabricators/one_time_key_fabricator.rb deleted file mode 100644 index e317c28bd..000000000 --- a/spec/fabricators/one_time_key_fabricator.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:one_time_key) do - device - key_id { Faker::Alphanumeric.alphanumeric(number: 10) } - key { Base64.strict_encode64(Ed25519::SigningKey.generate.verify_key.to_bytes) } - - signature do |attrs| - signing_key = Ed25519::SigningKey.generate - attrs[:device].update(fingerprint_key: Base64.strict_encode64(signing_key.verify_key.to_bytes)) - Base64.strict_encode64(signing_key.sign(attrs[:key])) - end -end diff --git a/spec/fabricators/setting_fabricator.rb b/spec/fabricators/setting_fabricator.rb index 336d7c355..ce9a48e90 100644 --- a/spec/fabricators/setting_fabricator.rb +++ b/spec/fabricators/setting_fabricator.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true Fabricator(:setting) do + var 'var' end diff --git a/spec/fabricators/site_upload_fabricator.rb b/spec/fabricators/site_upload_fabricator.rb index ad1b777cc..87553ccb8 100644 --- a/spec/fabricators/site_upload_fabricator.rb +++ b/spec/fabricators/site_upload_fabricator.rb @@ -2,4 +2,5 @@ Fabricator(:site_upload) do file { Rails.root.join('spec', 'fabricators', 'assets', 'utah_teapot.png').open } + var 'thumbnail' end diff --git a/spec/fabricators/status_edit_fabricator.rb b/spec/fabricators/status_edit_fabricator.rb deleted file mode 100644 index 33735a459..000000000 --- a/spec/fabricators/status_edit_fabricator.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:status_edit) do - status nil - account nil - text 'MyText' - spoiler_text 'MyText' - media_attachments_changed false -end diff --git a/spec/fabricators/status_stat_fabricator.rb b/spec/fabricators/status_stat_fabricator.rb deleted file mode 100644 index 8a358c51a..000000000 --- a/spec/fabricators/status_stat_fabricator.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:status_stat) do - status_id nil - replies_count '' - reblogs_count '' - favourites_count '' -end diff --git a/spec/fabricators/unavailable_domain_fabricator.rb b/spec/fabricators/unavailable_domain_fabricator.rb index 300a9e7a1..cb9707020 100644 --- a/spec/fabricators/unavailable_domain_fabricator.rb +++ b/spec/fabricators/unavailable_domain_fabricator.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true Fabricator(:unavailable_domain) do - domain { Faker::Internet.domain } + domain { Faker::Internet.domain_name } end diff --git a/spec/fabricators/user_invite_request_fabricator.rb b/spec/fabricators/user_invite_request_fabricator.rb deleted file mode 100644 index 7736263e4..000000000 --- a/spec/fabricators/user_invite_request_fabricator.rb +++ /dev/null @@ -1,6 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:user_invite_request) do - user - text { Faker::Lorem.sentence } -end diff --git a/spec/fabricators/web_setting_fabricator.rb b/spec/fabricators/web_setting_fabricator.rb deleted file mode 100644 index 7c9f30079..000000000 --- a/spec/fabricators/web_setting_fabricator.rb +++ /dev/null @@ -1,4 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:web_setting, from: Web::Setting) do -end diff --git a/spec/fabricators_spec.rb b/spec/fabricators_spec.rb new file mode 100644 index 000000000..3b76c56ce --- /dev/null +++ b/spec/fabricators_spec.rb @@ -0,0 +1,12 @@ +require 'rails_helper' + +Fabrication.manager.load_definitions if Fabrication.manager.empty? + +Fabrication.manager.schematics.map(&:first).each do |factory_name| + describe "The #{factory_name} factory" do + it 'is valid' do + factory = Fabricate(factory_name) + expect(factory).to be_valid + end + end +end diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index 1e5a80963..ae4e5ee32 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -704,12 +704,6 @@ RSpec.describe Account, type: :model do end describe 'validations' do - it 'has a valid fabricator' do - account = Fabricate.build(:account) - account.valid? - expect(account).to be_valid - end - it 'is invalid without a username' do account = Fabricate.build(:account, username: nil) account.valid? diff --git a/spec/models/block_spec.rb b/spec/models/block_spec.rb index 64c39fce6..6e31786d0 100644 --- a/spec/models/block_spec.rb +++ b/spec/models/block_spec.rb @@ -4,11 +4,6 @@ require 'rails_helper' RSpec.describe Block, type: :model do describe 'validations' do - it 'has a valid fabricator' do - block = Fabricate.build(:block) - expect(block).to be_valid - end - it 'is invalid without an account' do block = Fabricate.build(:block, account: nil) block.valid? diff --git a/spec/models/domain_block_spec.rb b/spec/models/domain_block_spec.rb index 6a5925b89..9839ee9d4 100644 --- a/spec/models/domain_block_spec.rb +++ b/spec/models/domain_block_spec.rb @@ -4,11 +4,6 @@ require 'rails_helper' RSpec.describe DomainBlock, type: :model do describe 'validations' do - it 'has a valid fabricator' do - domain_block = Fabricate.build(:domain_block) - expect(domain_block).to be_valid - end - it 'is invalid without a domain' do domain_block = Fabricate.build(:domain_block, domain: nil) domain_block.valid? diff --git a/spec/models/email_domain_block_spec.rb b/spec/models/email_domain_block_spec.rb index 01a7a0f0e..3321ffc81 100644 --- a/spec/models/email_domain_block_spec.rb +++ b/spec/models/email_domain_block_spec.rb @@ -3,13 +3,6 @@ require 'rails_helper' RSpec.describe EmailDomainBlock, type: :model do - describe 'validations' do - it 'has a valid fabricator' do - email_domain_block = Fabricate.build(:email_domain_block) - expect(email_domain_block).to be_valid - end - end - describe 'block?' do let(:input) { nil } diff --git a/spec/models/follow_spec.rb b/spec/models/follow_spec.rb index f49d58532..a9a9af88a 100644 --- a/spec/models/follow_spec.rb +++ b/spec/models/follow_spec.rb @@ -9,11 +9,6 @@ RSpec.describe Follow, type: :model do describe 'validations' do subject { Follow.new(account: alice, target_account: bob, rate_limit: true) } - it 'has a valid fabricator' do - follow = Fabricate.build(:follow) - expect(follow).to be_valid - end - it 'is invalid without an account' do follow = Fabricate.build(:follow, account: nil) follow.valid? diff --git a/spec/models/mention_spec.rb b/spec/models/mention_spec.rb index 3de2b4a07..044bb80cf 100644 --- a/spec/models/mention_spec.rb +++ b/spec/models/mention_spec.rb @@ -4,11 +4,6 @@ require 'rails_helper' RSpec.describe Mention, type: :model do describe 'validations' do - it 'has a valid fabricator' do - mention = Fabricate.build(:mention) - expect(mention).to be_valid - end - it 'is invalid without an account' do mention = Fabricate.build(:mention, account: nil) mention.valid? diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb index d5d40a34f..20a048c33 100644 --- a/spec/models/report_spec.rb +++ b/spec/models/report_spec.rb @@ -121,12 +121,6 @@ describe Report do end describe 'validations' do - it 'has a valid fabricator' do - report = Fabricate(:report) - report.valid? - expect(report).to be_valid - end - it 'is invalid if comment is longer than 1000 characters' do report = Fabricate.build(:report, comment: Faker::Lorem.characters(number: 1001)) report.valid? -- cgit From 506b16cf595bf441b9a85db608b6d19e8934fd7d Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sat, 4 Mar 2023 11:16:45 -0500 Subject: Pending example models minimal coverage (#23912) --- spec/models/appeal_spec.rb | 35 +++++++++++++++++++++++++++++-- spec/models/custom_emoji_category_spec.rb | 11 ++++++++-- spec/models/domain_allow_spec.rb | 15 +++++++++++-- spec/models/ip_block_spec.rb | 12 +++++++++-- spec/models/marker_spec.rb | 13 ++++++++++-- spec/models/poll_spec.rb | 29 +++++++++++++++++++++++-- spec/models/rule_spec.rb | 16 ++++++++++++-- spec/models/status_edit_spec.rb | 10 +++++++-- spec/models/trends/tags_spec.rb | 4 +++- 9 files changed, 128 insertions(+), 17 deletions(-) (limited to 'spec/models') diff --git a/spec/models/appeal_spec.rb b/spec/models/appeal_spec.rb index 6aa013aba..12373a949 100644 --- a/spec/models/appeal_spec.rb +++ b/spec/models/appeal_spec.rb @@ -2,6 +2,37 @@ require 'rails_helper' -RSpec.describe Appeal, type: :model do - pending "add some examples to (or delete) #{__FILE__}" +describe Appeal do + describe 'scopes' do + describe 'approved' do + let(:approved_appeal) { Fabricate(:appeal, approved_at: 10.days.ago) } + let(:not_approved_appeal) { Fabricate(:appeal, approved_at: nil) } + + it 'finds the correct records' do + results = described_class.approved + expect(results).to eq([approved_appeal]) + end + end + + describe 'rejected' do + let(:rejected_appeal) { Fabricate(:appeal, rejected_at: 10.days.ago) } + let(:not_rejected_appeal) { Fabricate(:appeal, rejected_at: nil) } + + it 'finds the correct records' do + results = described_class.rejected + expect(results).to eq([rejected_appeal]) + end + end + + describe 'pending' do + let(:approved_appeal) { Fabricate(:appeal, approved_at: 10.days.ago) } + let(:rejected_appeal) { Fabricate(:appeal, rejected_at: 10.days.ago) } + let(:pending_appeal) { Fabricate(:appeal, rejected_at: nil, approved_at: nil) } + + it 'finds the correct records' do + results = described_class.pending + expect(results).to eq([pending_appeal]) + end + end + end end diff --git a/spec/models/custom_emoji_category_spec.rb b/spec/models/custom_emoji_category_spec.rb index 74881b26c..30de07bd8 100644 --- a/spec/models/custom_emoji_category_spec.rb +++ b/spec/models/custom_emoji_category_spec.rb @@ -2,6 +2,13 @@ require 'rails_helper' -RSpec.describe CustomEmojiCategory, type: :model do - pending "add some examples to (or delete) #{__FILE__}" +describe CustomEmojiCategory do + describe 'validations' do + it 'validates name presence' do + record = described_class.new(name: nil) + + expect(record).to_not be_valid + expect(record).to model_have_error_on_field(:name) + end + end end diff --git a/spec/models/domain_allow_spec.rb b/spec/models/domain_allow_spec.rb index 18cf5fe4c..49e16376e 100644 --- a/spec/models/domain_allow_spec.rb +++ b/spec/models/domain_allow_spec.rb @@ -2,6 +2,17 @@ require 'rails_helper' -RSpec.describe DomainAllow, type: :model do - pending "add some examples to (or delete) #{__FILE__}" +describe DomainAllow do + describe 'scopes' do + describe 'matches_domain' do + let(:domain) { Fabricate(:domain_allow, domain: 'example.com') } + let(:other_domain) { Fabricate(:domain_allow, domain: 'example.biz') } + + it 'returns the correct records' do + results = described_class.matches_domain('example.com') + + expect(results).to eq([domain]) + end + end + end end diff --git a/spec/models/ip_block_spec.rb b/spec/models/ip_block_spec.rb index 4c4028576..ed5882667 100644 --- a/spec/models/ip_block_spec.rb +++ b/spec/models/ip_block_spec.rb @@ -2,6 +2,14 @@ require 'rails_helper' -RSpec.describe IpBlock, type: :model do - pending "add some examples to (or delete) #{__FILE__}" +describe IpBlock do + describe 'to_log_human_identifier' do + let(:ip_block) { described_class.new(ip: '192.168.0.1') } + + it 'combines the IP and prefix into a string' do + result = ip_block.to_log_human_identifier + + expect(result).to eq('192.168.0.1/32') + end + end end diff --git a/spec/models/marker_spec.rb b/spec/models/marker_spec.rb index e8561c4c6..51dd58438 100644 --- a/spec/models/marker_spec.rb +++ b/spec/models/marker_spec.rb @@ -2,6 +2,15 @@ require 'rails_helper' -RSpec.describe Marker, type: :model do - pending "add some examples to (or delete) #{__FILE__}" +describe Marker do + describe 'validations' do + describe 'timeline' do + it 'must be included in valid list' do + record = described_class.new(timeline: 'not real timeline') + + expect(record).to_not be_valid + expect(record).to model_have_error_on_field(:timeline) + end + end + end end diff --git a/spec/models/poll_spec.rb b/spec/models/poll_spec.rb index 474399bf6..8ae04ca41 100644 --- a/spec/models/poll_spec.rb +++ b/spec/models/poll_spec.rb @@ -2,6 +2,31 @@ require 'rails_helper' -RSpec.describe Poll, type: :model do - pending "add some examples to (or delete) #{__FILE__}" +describe Poll do + describe 'scopes' do + let(:status) { Fabricate(:status) } + let(:attached_poll) { Fabricate(:poll, status: status) } + let(:not_attached_poll) do + Fabricate(:poll).tap do |poll| + poll.status = nil + poll.save(validate: false) + end + end + + describe 'attached' do + it 'finds the correct records' do + results = described_class.attached + + expect(results).to eq([attached_poll]) + end + end + + describe 'unattached' do + it 'finds the correct records' do + results = described_class.unattached + + expect(results).to eq([not_attached_poll]) + end + end + end end diff --git a/spec/models/rule_spec.rb b/spec/models/rule_spec.rb index d5ec13ddf..c9b9c5502 100644 --- a/spec/models/rule_spec.rb +++ b/spec/models/rule_spec.rb @@ -2,6 +2,18 @@ require 'rails_helper' -RSpec.describe Rule, type: :model do - pending "add some examples to (or delete) #{__FILE__}" +describe Rule do + describe 'scopes' do + describe 'ordered' do + let(:deleted_rule) { Fabricate(:rule, deleted_at: 10.days.ago) } + let(:first_rule) { Fabricate(:rule, deleted_at: nil, priority: 1) } + let(:last_rule) { Fabricate(:rule, deleted_at: nil, priority: 10) } + + it 'finds the correct records' do + results = described_class.ordered + + expect(results).to eq([first_rule, last_rule]) + end + end + end end diff --git a/spec/models/status_edit_spec.rb b/spec/models/status_edit_spec.rb index 0b9fa7087..2d3351452 100644 --- a/spec/models/status_edit_spec.rb +++ b/spec/models/status_edit_spec.rb @@ -2,6 +2,12 @@ require 'rails_helper' -RSpec.describe StatusEdit, type: :model do - pending "add some examples to (or delete) #{__FILE__}" +describe StatusEdit do + describe '#reblog?' do + it 'returns false' do + record = described_class.new + + expect(record).to_not be_a_reblog + end + end end diff --git a/spec/models/trends/tags_spec.rb b/spec/models/trends/tags_spec.rb index a9473e15c..09ac918d0 100644 --- a/spec/models/trends/tags_spec.rb +++ b/spec/models/trends/tags_spec.rb @@ -24,7 +24,9 @@ RSpec.describe Trends::Tags do end describe '#query' do - pending + it 'returns a composable query scope' do + expect(subject.query).to be_a Trends::Query + end end describe '#refresh' do -- cgit