diff --git a/app/javascript/mastodon/api_types/accounts.ts b/app/javascript/mastodon/api_types/accounts.ts
index ead54bdd36..41694af4b4 100644
--- a/app/javascript/mastodon/api_types/accounts.ts
+++ b/app/javascript/mastodon/api_types/accounts.ts
@@ -31,6 +31,13 @@ export interface ApiAccountOtherSettingsJSON {
subscription_policy: 'allow' | 'followers_only' | 'block';
}
+export interface ApiServerFeaturesJSON {
+ circle: boolean;
+ emoji_reaction: boolean;
+ quote: boolean;
+ status_reference: boolean;
+}
+
// See app/serializers/rest/account_serializer.rb
export interface ApiAccountJSON {
acct: string;
@@ -56,6 +63,7 @@ export interface ApiAccountJSON {
note: string;
other_settings: ApiAccountOtherSettingsJSON;
roles?: ApiAccountJSON[];
+ server_features: ApiServerFeaturesJSON;
subscribable: boolean;
statuses_count: number;
uri: string;
diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx
index 4cb76f208f..5bb538208f 100644
--- a/app/javascript/mastodon/components/status.jsx
+++ b/app/javascript/mastodon/components/status.jsx
@@ -606,7 +606,7 @@ class Status extends ImmutablePureComponent {
let emojiReactionsBar = null;
if (!this.props.withoutEmojiReactions && status.get('emoji_reactions')) {
const emojiReactions = status.get('emoji_reactions');
- const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || status.getIn(['account', 'emoji_reaction_available_server']);
+ const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || status.getIn(['account', 'server_features', 'emoji_reaction']);
if (emojiReactions.size > 0 && enableEmojiReaction && emojiReactionAvailableServer) {
emojiReactionsBar = ;
}
diff --git a/app/javascript/mastodon/components/status_action_bar.jsx b/app/javascript/mastodon/components/status_action_bar.jsx
index 9eadc0f921..c2be106293 100644
--- a/app/javascript/mastodon/components/status_action_bar.jsx
+++ b/app/javascript/mastodon/components/status_action_bar.jsx
@@ -350,11 +350,13 @@ class StatusActionBar extends ImmutablePureComponent {
menu.push({ text: intl.formatMessage(status.get('reblogged') ? messages.cancelReblog : messages.reblog), action: this.handleReblogForceModalClick, tag: 'reblog' });
if (publicStatus) {
- if (allowQuote) {
+ if (allowQuote && (account.getIn(['server_features', 'quote']) || !isHideItem('quote_unavailable_server'))) {
menu.push({ text: intl.formatMessage(messages.quote), action: this.handleQuote, tag: 'reblog' });
}
- menu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference, tag: 'reblog' });
+ if (account.getIn(['server_features', 'status_reference']) || !isHideItem('status_reference_unavailable_server')) {
+ menu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference, tag: 'reblog' });
+ }
}
}
@@ -439,11 +441,13 @@ class StatusActionBar extends ImmutablePureComponent {
}
if (publicStatus) {
- if (allowQuote) {
+ if (allowQuote && (account.getIn(['server_features', 'quote']) || !isHideItem('quote_unavailable_server'))) {
reblogMenu.push({ text: intl.formatMessage(messages.quote), action: this.handleQuote });
}
- reblogMenu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference });
+ if (account.getIn(['server_features', 'status_reference']) || !isHideItem('status_reference_unavailable_server')) {
+ reblogMenu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference });
+ }
}
}
@@ -485,7 +489,7 @@ class StatusActionBar extends ImmutablePureComponent {
);
- const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || account.get('emoji_reaction_available_server');
+ const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || account.getIn(['server_features', 'emoji_reaction']);
const emojiReactionPolicy = account.getIn(['other_settings', 'emoji_reaction_policy']) || 'allow';
const following = emojiReactionPolicy !== 'following_only' || (relationship && relationship.get('following'));
const followed = emojiReactionPolicy !== 'followers_only' || (relationship && relationship.get('followed_by'));
diff --git a/app/javascript/mastodon/features/status/components/action_bar.jsx b/app/javascript/mastodon/features/status/components/action_bar.jsx
index b6077e8aec..15078e7f75 100644
--- a/app/javascript/mastodon/features/status/components/action_bar.jsx
+++ b/app/javascript/mastodon/features/status/components/action_bar.jsx
@@ -277,11 +277,13 @@ class ActionBar extends PureComponent {
menu.push({ text: intl.formatMessage(status.get('reblogged') ? messages.cancel_reblog : messages.reblog), action: this.handleReblogForceModalClick, tag: 'reblog' });
if (publicStatus) {
- if (allowQuote) {
+ if (allowQuote && (account.getIn(['server_features', 'quote']) || !isHideItem('quote_unavailable_server'))) {
menu.push({ text: intl.formatMessage(messages.quote), action: this.handleQuote, tag: 'reblog' });
}
- menu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference, tag: 'reblog' });
+ if (account.getIn(['server_features', 'status_reference']) || !isHideItem('status_reference_unavailable_server')) {
+ menu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference, tag: 'reblog' });
+ }
}
}
@@ -356,11 +358,13 @@ class ActionBar extends PureComponent {
}
if (publicStatus) {
- if (allowQuote) {
+ if (allowQuote && (account.getIn(['server_features', 'quote']) || !isHideItem('quote_unavailable_server'))) {
reblogMenu.push({ text: intl.formatMessage(messages.quote), action: this.handleQuote });
}
- reblogMenu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference });
+ if (account.getIn(['server_features', 'status_reference']) || !isHideItem('status_reference_unavailable_server')) {
+ reblogMenu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference });
+ }
}
}
@@ -395,7 +399,7 @@ class ActionBar extends PureComponent {
reblogMenu = [];
}
- const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || account.get('emoji_reaction_available_server');
+ const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || account.getIn(['server_features', 'emoji_reaction']);
const emojiReactionPolicy = account.getIn(['other_settings', 'emoji_reaction_policy']) || 'allow';
const following = emojiReactionPolicy !== 'following_only' || (relationship && relationship.get('following'));
const followed = emojiReactionPolicy !== 'followers_only' || (relationship && relationship.get('followed_by'));
diff --git a/app/javascript/mastodon/features/status/components/detailed_status.jsx b/app/javascript/mastodon/features/status/components/detailed_status.jsx
index 132b91ded8..fe76d22a34 100644
--- a/app/javascript/mastodon/features/status/components/detailed_status.jsx
+++ b/app/javascript/mastodon/features/status/components/detailed_status.jsx
@@ -222,7 +222,7 @@ class DetailedStatus extends ImmutablePureComponent {
}
let emojiReactionsBar = null;
- const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || status.getIn(['account', 'emoji_reaction_available_server']);
+ const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || status.getIn(['account', 'server_features', 'emoji_reaction']);
if (status.get('emoji_reactions')) {
const emojiReactions = status.get('emoji_reactions');
if (emojiReactions.size > 0 && enableEmojiReaction && emojiReactionAvailableServer) {
diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js
index 800fffc649..100bd15dd4 100644
--- a/app/javascript/mastodon/initial_state.js
+++ b/app/javascript/mastodon/initial_state.js
@@ -9,8 +9,10 @@
* | 'favourite_menu'
* | 'quote_in_home'
* | 'quote_in_public'
+ * | 'quote_unavailable_server'
* | 'recent_emojis'
* | 'relationships'
+ * | 'status_reference_unavailable_server'
* } HideItemsDefinition
*/
diff --git a/app/javascript/mastodon/models/account.ts b/app/javascript/mastodon/models/account.ts
index fa0ed9c966..fc6b2d4682 100644
--- a/app/javascript/mastodon/models/account.ts
+++ b/app/javascript/mastodon/models/account.ts
@@ -8,6 +8,7 @@ import type {
ApiAccountRoleJSON,
ApiAccountOtherSettingsJSON,
ApiAccountJSON,
+ ApiServerFeaturesJSON,
} from 'mastodon/api_types/accounts';
import type { ApiCustomEmojiJSON } from 'mastodon/api_types/custom_emoji';
import emojify from 'mastodon/features/emoji/emoji';
@@ -61,6 +62,18 @@ const AccountOtherSettingsFactory = ImmutableRecord({
subscription_policy: 'allow',
});
+// ServerFeatures
+export type AccountServerFeaturesShape = ApiServerFeaturesJSON;
+export type AccountServerFeatures = RecordOf;
+
+const AccountServerFeaturesFactory =
+ ImmutableRecord({
+ circle: false,
+ emoji_reaction: false,
+ quote: false,
+ status_reference: false,
+ });
+
// Account
export interface AccountShape
extends Required<
@@ -88,6 +101,7 @@ export const accountDefaultValues: AccountShape = {
indexable: false,
display_name: '',
display_name_html: '',
+ server_features: AccountServerFeaturesFactory(),
emoji_reaction_available_server: false,
emojis: List(),
fields: List(),
diff --git a/app/lib/entity_cache.rb b/app/lib/entity_cache.rb
index 80b0046eea..c3c6545045 100644
--- a/app/lib/entity_cache.rb
+++ b/app/lib/entity_cache.rb
@@ -31,6 +31,8 @@ class EntityCache
uncached.each_value { |item| Rails.cache.write(to_key(:emoji, item.shortcode, domain), item, expires_in: MAX_EXPIRATION) }
end
+ uncached ||= {}
+
shortcodes.filter_map { |shortcode| cached[to_key(:emoji, shortcode, domain)] || uncached[shortcode] }
end
diff --git a/app/models/concerns/user/has_settings.rb b/app/models/concerns/user/has_settings.rb
index 1b5899ac4e..56557b40f4 100644
--- a/app/models/concerns/user/has_settings.rb
+++ b/app/models/concerns/user/has_settings.rb
@@ -263,6 +263,14 @@ module User::HasSettings
settings['web.hide_emoji_reaction_unavailable_server']
end
+ def setting_hide_quote_unavailable_server
+ settings['web.hide_quote_unavailable_server']
+ end
+
+ def setting_hide_status_reference_unavailable_server
+ settings['web.hide_status_reference_unavailable_server']
+ end
+
def setting_hide_emoji_reaction_count
settings['web.hide_emoji_reaction_count']
end
diff --git a/app/models/instance_info.rb b/app/models/instance_info.rb
index 98367f31ea..ac1d6654df 100644
--- a/app/models/instance_info.rb
+++ b/app/models/instance_info.rb
@@ -31,6 +31,12 @@ class InstanceInfo < ApplicationRecord
sharkey
).freeze
+ QUOTE_AVAILABLE_SOFTWARES = EMOJI_REACTION_AVAILABLE_SOFTWARES
+
+ STATUS_REFERENCE_AVAILABLE_SOFTWARES = %w(fedibird).freeze
+
+ CIRCLE_AVAILABLE_SOFTWARES = %w(fedibird).freeze
+
class << self
def emoji_reaction_available?(domain)
return Setting.enable_emoji_reaction if domain.nil?
@@ -38,12 +44,39 @@ class InstanceInfo < ApplicationRecord
Rails.cache.fetch("emoji_reaction_available_domain:#{domain}") { load_emoji_reaction_available(domain) }
end
+ def available_features(domain)
+ return local_features if domain.nil?
+
+ Rails.cache.fetch("domain_available_features:#{domain}") { load_available_features(domain) }
+ end
+
private
- def load_emoji_reaction_available(domain)
+ def load_available_features(domain)
+ return local_features if domain.nil?
+
info = InstanceInfo.find_by(domain: domain)
+
+ {
+ emoji_reaction: feature_available?(info, EMOJI_REACTION_AVAILABLE_SOFTWARES, 'emoji_reaction'),
+ quote: feature_available?(info, QUOTE_AVAILABLE_SOFTWARES, 'quote'),
+ status_reference: feature_available?(info, STATUS_REFERENCE_AVAILABLE_SOFTWARES, 'status_reference'),
+ circle: feature_available?(info, CIRCLE_AVAILABLE_SOFTWARES, 'circle'),
+ }
+ end
+
+ def local_features
+ {
+ emoji_reaction: Setting.enable_emoji_reaction,
+ quote: true,
+ status_reference: true,
+ circle: true,
+ }
+ end
+
+ def feature_available?(info, softwares, feature_name)
return false if info.nil?
- return true if EMOJI_REACTION_AVAILABLE_SOFTWARES.include?(info['software'])
+ return true if softwares.include?(info['software'])
return false unless info.data.is_a?(Hash)
return false unless info.data['metadata'].is_a?(Hash)
@@ -51,7 +84,7 @@ class InstanceInfo < ApplicationRecord
features = info.data.dig('metadata', 'features')
return false unless features.is_a?(Array)
- features.include?('emoji_reaction')
+ features.include?(feature_name)
end
end
@@ -59,5 +92,6 @@ class InstanceInfo < ApplicationRecord
def reset_cache
Rails.cache.delete("emoji_reaction_available_domain:#{domain}")
+ Rails.cache.delete("domain_available_features:#{domain}")
end
end
diff --git a/app/models/status.rb b/app/models/status.rb
index 7d3668ee98..3538e76a33 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -555,8 +555,8 @@ class Status < ApplicationRecord
Status.where(id: status_ids).pluck(:account_id).uniq.index_with { |a| Account.find_by(id: a).show_emoji_reaction?(my_account) }
end
- def emoji_reaction_availables_map(domains)
- domains.index_with { |d| InstanceInfo.emoji_reaction_available?(d) }
+ def available_features_map(domains)
+ domains.index_with { |d| InstanceInfo.available_features(d) }
end
def from_text(text)
diff --git a/app/models/user_settings.rb b/app/models/user_settings.rb
index ffe2f44e26..2cbd5c8d1d 100644
--- a/app/models/user_settings.rb
+++ b/app/models/user_settings.rb
@@ -75,6 +75,8 @@ class UserSettings
setting :show_relationships, default: true
setting :hide_blocking_quote, default: true
setting :hide_emoji_reaction_unavailable_server, default: false
+ setting :hide_quote_unavailable_server, default: false
+ setting :hide_status_reference_unavailable_server, default: false
setting :hide_favourite_menu, default: false
setting :hide_emoji_reaction_count, default: false
diff --git a/app/presenters/status_relationships_presenter.rb b/app/presenters/status_relationships_presenter.rb
index 38eef67038..e42bdb560f 100644
--- a/app/presenters/status_relationships_presenter.rb
+++ b/app/presenters/status_relationships_presenter.rb
@@ -4,7 +4,7 @@ class StatusRelationshipsPresenter
PINNABLE_VISIBILITIES = %w(public public_unlisted unlisted login private).freeze
attr_reader :reblogs_map, :favourites_map, :mutes_map, :pins_map, :blocks_map, :domain_blocks_map,
- :bookmarks_map, :filters_map, :attributes_map, :emoji_reaction_allows_map, :emoji_reaction_availables_map
+ :bookmarks_map, :filters_map, :attributes_map, :emoji_reaction_allows_map
def initialize(statuses, current_account_id = nil, **options)
@current_account_id = current_account_id
diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb
index f5ffa246d6..a4a3f27a25 100644
--- a/app/serializers/initial_state_serializer.rb
+++ b/app/serializers/initial_state_serializer.rb
@@ -42,6 +42,8 @@ class InitialStateSerializer < ActiveModel::Serializer
object_account_user.setting_hide_recent_emojis ? 'recent_emojis' : nil,
object_account_user.setting_hide_blocking_quote ? 'blocking_quote' : nil,
object_account_user.setting_hide_emoji_reaction_unavailable_server ? 'emoji_reaction_unavailable_server' : nil,
+ object_account_user.setting_hide_quote_unavailable_server ? 'quote_unavailable_server' : nil,
+ object_account_user.setting_hide_status_reference_unavailable_server ? 'status_reference_unavailable_server' : nil,
object_account_user.setting_hide_emoji_reaction_count ? 'emoji_reaction_count' : nil,
object_account_user.setting_show_emoji_reaction_on_timeline ? nil : 'emoji_reaction_on_timeline',
object_account_user.setting_show_quote_in_home ? nil : 'quote_in_home',
diff --git a/app/serializers/rest/account_serializer.rb b/app/serializers/rest/account_serializer.rb
index 1cf43eaf46..b7520bbfb4 100644
--- a/app/serializers/rest/account_serializer.rb
+++ b/app/serializers/rest/account_serializer.rb
@@ -8,7 +8,8 @@ class REST::AccountSerializer < ActiveModel::Serializer
attributes :id, :username, :acct, :display_name, :locked, :bot, :discoverable, :indexable, :group, :created_at,
:note, :url, :uri, :avatar, :avatar_static, :header, :header_static, :subscribable, :emoji_reaction_available_server,
- :followers_count, :following_count, :statuses_count, :last_status_at, :hide_collections, :other_settings, :noindex
+ :followers_count, :following_count, :statuses_count, :last_status_at, :hide_collections, :other_settings, :noindex,
+ :server_features
has_one :moved_to_account, key: :moved, serializer: REST::AccountSerializer, if: :moved_and_not_nested?
@@ -120,9 +121,11 @@ class REST::AccountSerializer < ActiveModel::Serializer
end
def emoji_reaction_available_server
- return Setting.enable_emoji_reaction if object.local?
+ server_features[:emoji_reaction]
+ end
- InstanceInfo.emoji_reaction_available?(object.domain)
+ def server_features
+ InstanceInfo.available_features(object.domain)
end
def moved_to_account
diff --git a/app/views/settings/preferences/appearance/show.html.haml b/app/views/settings/preferences/appearance/show.html.haml
index 3c16087727..cf5025a77b 100644
--- a/app/views/settings/preferences/appearance/show.html.haml
+++ b/app/views/settings/preferences/appearance/show.html.haml
@@ -66,9 +66,16 @@
- if Setting.enable_emoji_reaction
= ff.input :'web.enable_emoji_reaction', wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_enable_emoji_reaction'), hint: I18n.t('simple_form.hints.defaults.setting_enable_emoji_reaction')
= ff.input :'web.show_emoji_reaction_on_timeline', wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_show_emoji_reaction_on_timeline')
- = ff.input :'web.hide_emoji_reaction_unavailable_server', wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_hide_emoji_reaction_unavailable_server')
= ff.input :'web.show_emoji_reaction_count', wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_show_emoji_reaction_count')
+ %h4= t 'appearance.remote_server_features'
+
+ .fields-group
+ - if Setting.enable_emoji_reaction
+ = ff.input :'web.hide_emoji_reaction_unavailable_server', wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_hide_emoji_reaction_unavailable_server')
+ = ff.input :'web.hide_quote_unavailable_server', wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_hide_quote_unavailable_server')
+ = ff.input :'web.hide_status_reference_unavailable_server', wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_hide_status_reference_unavailable_server')
+
%h4= t 'appearance.saved_posts'
.fields-group
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 60e713d508..5e7b0d1653 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1337,6 +1337,7 @@ en:
guide_link_text: Everyone can contribute.
media: Media
quotes: Quotes
+ remote_server_features: Other server features
saved_posts: Saving posts
sensitive_content: Sensitive content
status_action_bar: Post menu
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 2ea1b460d3..1c6e53397c 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -1330,6 +1330,7 @@ ja:
guide_link_text: 誰でも参加することができます。
media: メディア
quotes: 引用
+ remote_server_features: 他のサーバーの機能
saved_posts: 投稿の記録
sensitive_content: 閲覧注意コンテンツ
status_action_bar: 投稿のメニュー
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index 83c3b4d112..b8ff97002e 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -280,6 +280,8 @@ en:
setting_expand_spoilers: Always expand posts marked with content warnings
setting_hide_emoji_reaction_unavailable_server: Hide emoji reaction button from unavailable server
setting_hide_network: Hide your social graph
+ setting_hide_quote_unavailable_server: Hide quote menu from unavailable server
+ setting_hide_status_reference_unavailable_server: Hide quiet quote (reference named by Fedibird) menu from unavailable server
setting_lock_follow_from_bot: Request approval about bot follow
setting_public_post_to_unlisted: Convert public post to public unlisted if not using Web app
setting_reduce_motion: Reduce motion in animations
diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml
index 6be4ef0cd9..824d5602c2 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -287,6 +287,8 @@ ja:
setting_expand_spoilers: 閲覧注意としてマークされた投稿を常に展開する
setting_hide_emoji_reaction_unavailable_server: 絵文字リアクションに対応していないと思われるサーバーの投稿から絵文字リアクション機能を隠す
setting_hide_network: 繋がりを隠す
+ setting_hide_quote_unavailable_server: 引用に対応していないと思われるサーバーの投稿からメニューを隠す
+ setting_hide_status_reference_unavailable_server: ひかえめな引用(Fedibirdの参照)に対応していないと思われるサーバーの投稿からメニューを隠す
setting_lock_follow_from_bot: botからのフォローを承認制にする
setting_show_blocking_quote: ブロックしたユーザーの投稿を引用した投稿を表示する
setting_show_emoji_reaction_count: 投稿につけられた各絵文字の数を表示する
diff --git a/spec/models/instance_info_spec.rb b/spec/models/instance_info_spec.rb
index 884e2dd2be..6d3c5b4ff1 100644
--- a/spec/models/instance_info_spec.rb
+++ b/spec/models/instance_info_spec.rb
@@ -3,8 +3,12 @@
require 'rails_helper'
RSpec.describe InstanceInfo do
- describe '.emoji_reaction_availables_map' do
- subject { described_class.emoji_reaction_available?('example.com') }
+ describe '.available_features' do
+ subject { described_class.available_features('example.com')[:emoji_reaction] }
+
+ it 'availables if local account' do
+ expect(described_class.available_features(nil)[:emoji_reaction]).to be true
+ end
it 'availables if features contains emoji_reaction' do
Fabricate(:instance_info, domain: 'example.com', software: 'mastodon', data: { metadata: { features: ['emoji_reaction'] } })
diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb
index 1715175590..e855bb7ce5 100644
--- a/spec/models/status_spec.rb
+++ b/spec/models/status_spec.rb
@@ -460,8 +460,8 @@ RSpec.describe Status do
end
end
- describe '.emoji_reaction_availables_map' do
- subject { described_class.emoji_reaction_availables_map(domains) }
+ describe '.available_features_map' do
+ subject { described_class.available_features_map(domains) }
let(:domains) { %w(features_available.com mastodon.com misskey.com) }
@@ -472,15 +472,15 @@ RSpec.describe Status do
end
it 'availables if features contains emoji_reaction' do
- expect(subject['features_available.com']).to be true
+ expect(subject['features_available.com'][:emoji_reaction]).to be true
end
it 'unavailables if mastodon server' do
- expect(subject['mastodon.com']).to be false
+ expect(subject['mastodon.com'][:emoji_reaction]).to be false
end
it 'availables if misskey server' do
- expect(subject['misskey.com']).to be true
+ expect(subject['misskey.com'][:emoji_reaction]).to be true
end
end