Merge pull request #2833 from ClearlyClaire/glitch-soc/merge-upstream

Merge upstream changes up to 611533cd12
pull/2834/head
Claire 2024-09-03 13:05:14 +02:00 committed by GitHub
commit c461a6ab2f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
53 changed files with 436 additions and 182 deletions

View File

@ -69,7 +69,7 @@ services:
hard: -1
libretranslate:
image: libretranslate/libretranslate:v1.5.7
image: libretranslate/libretranslate:v1.6.0
restart: unless-stopped
volumes:
- lt-data:/home/libretranslate/.local

View File

@ -149,7 +149,7 @@ group :test do
gem 'rails-controller-testing', '~> 1.0'
# Validate schemas in specs
gem 'json-schema', '~> 4.0'
gem 'json-schema', '~> 5.0'
# Test harness fo rack components
gem 'rack-test', '~> 2.1'
@ -210,7 +210,7 @@ group :development, :test do
gem 'test-prof'
# RSpec runner for rails
gem 'rspec-rails', '~> 6.0'
gem 'rspec-rails', '~> 7.0'
end
group :production do

View File

@ -347,7 +347,7 @@ GEM
rainbow (>= 2.2.2, < 4.0)
terminal-table (>= 1.5.1)
idn-ruby (0.1.5)
inline_svg (1.9.0)
inline_svg (1.10.0)
activesupport (>= 3.0)
nokogiri (>= 1.6)
io-console (0.7.2)
@ -373,8 +373,8 @@ GEM
json-ld-preloaded (3.3.0)
json-ld (~> 3.3)
rdf (~> 3.3)
json-schema (4.3.1)
addressable (>= 2.8)
json-schema (5.0.0)
addressable (~> 2.8)
jsonapi-renderer (0.2.2)
jwt (2.7.1)
kaminari (1.2.2)
@ -724,10 +724,10 @@ GEM
rspec-mocks (3.13.1)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-rails (6.1.4)
actionpack (>= 6.1)
activesupport (>= 6.1)
railties (>= 6.1)
rspec-rails (7.0.0)
actionpack (>= 7.0)
activesupport (>= 7.0)
railties (>= 7.0)
rspec-core (~> 3.13)
rspec-expectations (~> 3.13)
rspec-mocks (~> 3.13)
@ -906,7 +906,7 @@ GEM
xorcist (1.1.3)
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.6.17)
zeitwerk (2.6.18)
PLATFORMS
ruby
@ -965,7 +965,7 @@ DEPENDENCIES
irb (~> 1.8)
json-ld
json-ld-preloaded (~> 3.2)
json-schema (~> 4.0)
json-schema (~> 5.0)
kaminari (~> 1.2)
kt-paperclip (~> 7.2)
letter_opener (~> 1.8)
@ -1024,7 +1024,7 @@ DEPENDENCIES
redis-namespace (~> 1.10)
rqrcode (~> 2.2)
rspec-github (~> 2.4)
rspec-rails (~> 6.0)
rspec-rails (~> 7.0)
rspec-sidekiq (~> 5.0)
rubocop
rubocop-capybara

View File

@ -200,14 +200,6 @@ module JsonLdHelper
nil
end
def merge_context(context, new_context)
if context.is_a?(Array)
context << new_context
else
[context, new_context]
end
end
def response_successful?(response)
(200...300).cover?(response.code)
end

View File

@ -248,8 +248,9 @@ function processNewNotification(
}
function trimNotifications(state: NotificationGroupsState) {
if (state.scrolledToTop) {
if (state.scrolledToTop && state.groups.length > NOTIFICATIONS_TRIM_LIMIT) {
state.groups.splice(NOTIFICATIONS_TRIM_LIMIT);
ensureTrailingGap(state.groups);
}
}
@ -400,6 +401,28 @@ function ensureLeadingGap(
}
}
// Ensure the groups list ends with a gap suitable for loading more, mutating it to append one if needed
function ensureTrailingGap(
groups: NotificationGroupsState['groups'],
): NotificationGap {
const groupOrGap = groups.at(-1);
if (groupOrGap?.type === 'gap') {
// We're expecting older notifications, so discard sinceId if it's set
groupOrGap.sinceId = undefined;
return groupOrGap;
} else {
const gap: NotificationGap = {
type: 'gap',
maxId: groupOrGap?.page_min_id,
};
groups.push(gap);
return gap;
}
}
export const notificationGroupsReducer = createReducer<NotificationGroupsState>(
initialState,
(builder) => {

View File

@ -11,6 +11,7 @@
"about.not_available": "Dizze ynformaasje is troch dizze server net iepenbier makke.",
"about.powered_by": "Desintralisearre sosjale media, mooglik makke troch {mastodon}",
"about.rules": "Serverrigels",
"account.account_note_header": "Persoanlike opmerking",
"account.add_or_remove_from_list": "Tafoegje oan of fuortsmite út listen",
"account.badges.bot": "Automatisearre",
"account.badges.group": "Groep",
@ -96,6 +97,8 @@
"block_modal.title": "Brûker blokkearje?",
"block_modal.you_wont_see_mentions": "Jo sjogge gjin berjochten mear dyt dizze account fermelde.",
"boost_modal.combo": "Jo kinne op {combo} drukke om dit de folgjende kear oer te slaan",
"boost_modal.reblog": "Berjocht booste?",
"boost_modal.undo_reblog": "Berjocht net langer booste?",
"bundle_column_error.copy_stacktrace": "Flaterrapport kopiearje",
"bundle_column_error.error.body": "De opfrege side koe net werjûn wurde. It kin wêze troch in flater yn ús koade, of in probleem mei browserkompatibiliteit.",
"bundle_column_error.error.title": "Oh nee!",
@ -169,21 +172,30 @@
"confirmations.block.confirm": "Blokkearje",
"confirmations.delete.confirm": "Fuortsmite",
"confirmations.delete.message": "Binne jo wis dat jo dit berjocht fuortsmite wolle?",
"confirmations.delete.title": "Berjocht fuortsmite?",
"confirmations.delete_list.confirm": "Fuortsmite",
"confirmations.delete_list.message": "Binne jo wis dat jo dizze list foar permanint fuortsmite wolle?",
"confirmations.delete_list.title": "List fuortsmite?",
"confirmations.discard_edit_media.confirm": "Fuortsmite",
"confirmations.discard_edit_media.message": "Jo hawwe net-bewarre wizigingen yn de mediabeskriuwing of foarfertoaning, wolle jo dizze dochs fuortsmite?",
"confirmations.edit.confirm": "Bewurkje",
"confirmations.edit.message": "Troch no te bewurkjen sil it berjocht dat jo no oan it skriuwen binne oerskreaun wurde. Wolle jo trochgean?",
"confirmations.edit.title": "Berjocht oerskriuwe?",
"confirmations.logout.confirm": "Ofmelde",
"confirmations.logout.message": "Binne jo wis dat jo ôfmelde wolle?",
"confirmations.logout.title": "Ofmelde?",
"confirmations.mute.confirm": "Negearje",
"confirmations.redraft.confirm": "Fuortsmite en opnij opstelle",
"confirmations.redraft.message": "Binne jo wis dat jo dit berjocht fuortsmite en opnij opstelle wolle? Favoriten en boosts geane dan ferlern en reaksjes op it oarspronklike berjocht reitsje jo kwyt.",
"confirmations.redraft.title": "Berjocht fuortsmite en opnij opstelle?",
"confirmations.reply.confirm": "Reagearje",
"confirmations.reply.message": "Troch no te reagearjen sil it berjocht dat jo no oan it skriuwen binne oerskreaun wurde. Wolle jo trochgean?",
"confirmations.reply.title": "Berjocht oerskriuwe?",
"confirmations.unfollow.confirm": "Net mear folgje",
"confirmations.unfollow.message": "Binne jo wis dat jo {name} net mear folgje wolle?",
"confirmations.unfollow.title": "Brûker net mear folgje?",
"content_warning.hide": "Berjocht ferstopje",
"content_warning.show": "Dochs toane",
"conversation.delete": "Petear fuortsmite",
"conversation.mark_as_read": "As lêzen markearje",
"conversation.open": "Petear toane",
@ -220,7 +232,9 @@
"domain_pill.username": "Brûkersnamme",
"domain_pill.whats_in_a_handle": "Wat is in fediverse-adres?",
"domain_pill.who_they_are": "Omdat jo oan in fediverse-adres sjen kinne hoet ien hjit en op hokker server dy sit, kinne jo mei minsken op it troch <button>ActivityPub oandreaune</button> sosjale web (fediverse) kommunisearje.",
"domain_pill.who_you_are": "Omdat jo oan in fediverse-adres sjen kinne hoet jo hjitte en op hokker server jo sitte, kinne jo mei minsken op it troch <button>ActivityPub oandreaune</button> sosjale web (fediverse) kommunisearje.",
"domain_pill.your_handle": "Jo fediverse-adres:",
"domain_pill.your_server": "Jo digitale thús, wer't al jo berjochten stean. Is dizze server dochs net nei jo winsk? Dan kinne jo op elk momint nei in oare server ferhúzje en ek jo folgers oerbringe.",
"domain_pill.your_username": "Jo unike identifikaasje-adres op dizze server. It is mooglik dat der brûkers mei deselde brûkersnamme op ferskate servers te finen binne.",
"embed.instructions": "Embed this status on your website by copying the code below.",
"embed.preview": "Sa komt it der út te sjen:",
@ -258,6 +272,7 @@
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
"empty_column.lists": "Jo hawwe noch gjin inkelde list. Wanneart jo der ien oanmakke hawwe, falt dat hjir te sjen.",
"empty_column.mutes": "Jo hawwe noch gjin brûkers negearre.",
"empty_column.notification_requests": "Hielendal leech! Der is hjir neat. Wanneart jo nije meldingen ûntfange, ferskine dizze hjir neffens jo ynstellingen.",
"empty_column.notifications": "Jo hawwe noch gjin meldingen. Ynteraksjes mei oare minsken sjogge jo hjir.",
"empty_column.public": "Der is hjir neat! Skriuw eat publyklik, of folgje sels brûkers fan oare servers om it hjir te foljen",
"error.unexpected_crash.explanation": "Troch in bug in ús koade of in probleem mei de komptabiliteit fan jo browser, koe dizze side net toand wurde.",
@ -288,6 +303,8 @@
"filter_modal.select_filter.subtitle": "In besteande kategory brûke of in nije oanmeitsje",
"filter_modal.select_filter.title": "Dit berjocht filterje",
"filter_modal.title.status": "In berjocht filterje",
"filter_warning.matches_filter": "Komt oerien mei filter {title}",
"filtered_notifications_banner.pending_requests": "Fan {count, plural, =0 {net ien} one {ien persoan} other {# persoanen}} dyt jo mooglik kinne",
"filtered_notifications_banner.title": "Filtere meldingen",
"firehose.all": "Alles",
"firehose.local": "Dizze server",
@ -336,6 +353,14 @@
"hashtag.follow": "Hashtag folgje",
"hashtag.unfollow": "Hashtag ûntfolgje",
"hashtags.and_other": "…en {count, plural, one {}other {# mear}}",
"hints.profiles.followers_may_be_missing": "Folgers foar dit profyl kinne ûntbrekke.",
"hints.profiles.follows_may_be_missing": "De folgers foar dit profyl kinne ûntbrekke.",
"hints.profiles.posts_may_be_missing": "Der ûntbrekke mooglik berjochten fan dit profyl.",
"hints.profiles.see_more_followers": "Besjoch mear folgers op {domain}",
"hints.profiles.see_more_follows": "Besjoch mear folge accounts op {domain}",
"hints.profiles.see_more_posts": "Besjoch mear berjochten op {domain}",
"hints.threads.replies_may_be_missing": "Antwurden fan oare servers kinne ûntbrekke.",
"hints.threads.see_more": "Besjoch mear reaksjes op {domain}",
"home.column_settings.show_reblogs": "Boosts toane",
"home.column_settings.show_replies": "Reaksjes toane",
"home.hide_announcements": "Meidielingen ferstopje",
@ -343,6 +368,17 @@
"home.pending_critical_update.link": "Fernijingen besjen",
"home.pending_critical_update.title": "Kritike befeiligingsfernijing beskikber!",
"home.show_announcements": "Meidielingen toane",
"ignore_notifications_modal.disclaimer": "Mastodon kin brûkers net ynformearje dat jo harren meldingen negearre hawwe. Meldingen negearje sil net foarkomme dat de berjochten sels ferstjoerd wurde.",
"ignore_notifications_modal.filter_instead": "Yn stee derfan filterje",
"ignore_notifications_modal.filter_to_act_users": "Jo binne noch hieltyd yn steat om folchfersiken goed- of ôf te karren en om brûkers te rapportearjen",
"ignore_notifications_modal.filter_to_avoid_confusion": "Filterjen foarkomt potinsjele betizing",
"ignore_notifications_modal.filter_to_review_separately": "Jo kinne filtere meldingen ôfsûnderlik beoardiele",
"ignore_notifications_modal.ignore": "Meldingen negearje",
"ignore_notifications_modal.limited_accounts_title": "Meldingen fan beheinde accounts negearje?",
"ignore_notifications_modal.new_accounts_title": "Meldingen fan nije accounts negearje?",
"ignore_notifications_modal.not_followers_title": "Meldingen negearje fan minsken dyt jo net folgje?",
"ignore_notifications_modal.not_following_title": "Meldingen negearje fan minsken dyt josels net folgje?",
"ignore_notifications_modal.private_mentions_title": "Meldingen negearje fan net frege priveeberjochten?",
"interaction_modal.description.favourite": "Jo kinne mei in Mastodon-account dit berjocht as favoryt markearje, om dy brûker witte te litten dat jo it berjocht wurdearje en om it te bewarjen.",
"interaction_modal.description.follow": "Jo kinne mei in Mastodon-account {name} folgje, om sa harren berjochten op jo starttiidline te ûntfangen.",
"interaction_modal.description.reblog": "Jo kinne mei in Mastodon-account dit berjocht booste, om it sa mei jo folgers te dielen.",
@ -433,6 +469,7 @@
"mute_modal.you_wont_see_mentions": "Jo sjogge gjin berjochten mear dyt dizze account fermelde.",
"mute_modal.you_wont_see_posts": "De persoan kin jo berjochten noch hieltyd sjen, mar jo sjogge harren berjochten net mear.",
"navigation_bar.about": "Oer",
"navigation_bar.administration": "Behear",
"navigation_bar.advanced_interface": "Yn avansearre webomjouwing iepenje",
"navigation_bar.blocks": "Blokkearre brûkers",
"navigation_bar.bookmarks": "Blêdwizers",
@ -449,6 +486,7 @@
"navigation_bar.follows_and_followers": "Folgers en folgjenden",
"navigation_bar.lists": "Listen",
"navigation_bar.logout": "Ofmelde",
"navigation_bar.moderation": "Moderaasje",
"navigation_bar.mutes": "Negearre brûkers",
"navigation_bar.opened_in_classic_interface": "Berjochten, accounts en oare spesifike siden, wurde standert iepene yn de klassike webinterface.",
"navigation_bar.personal": "Persoanlik",
@ -464,9 +502,18 @@
"notification.admin.report_statuses": "{name} rapportearre {target} foar {category}",
"notification.admin.report_statuses_other": "{name} hat {target} rapportearre",
"notification.admin.sign_up": "{name} hat harren registrearre",
"notification.admin.sign_up.name_and_others": "{name} en {count, plural, one {# oar} other {# oaren}} hawwe harren registrearre",
"notification.favourite": "{name} hat jo berjocht as favoryt markearre",
"notification.favourite.name_and_others_with_link": "{name} en <a>{count, plural, one {# oar} other {# oaren}}</a> hawwe jo berjocht as favoryt markearre",
"notification.follow": "{name} folget dy",
"notification.follow.name_and_others": "{name} en {count, plural, one {# oar} other {# oaren}} hawwe jo folge",
"notification.follow_request": "{name} hat dy in folchfersyk stjoerd",
"notification.follow_request.name_and_others": "{name} en {count, plural, one {# oar} other {# oaren}} hawwe frege om jo te folgjen",
"notification.label.mention": "Fermelding",
"notification.label.private_mention": "Priveeberjocht",
"notification.label.private_reply": "Priveereaksje",
"notification.label.reply": "Beäntwurdzje",
"notification.mention": "Fermelding",
"notification.moderation-warning.learn_more": "Mear ynfo",
"notification.moderation_warning": "Jo hawwe in moderaasje-warskôging ûntfongen",
"notification.moderation_warning.action_delete_statuses": "Guon fan jo berjochten binne fuortsmiten.",
@ -479,23 +526,44 @@
"notification.own_poll": "Jo poll is beëinige",
"notification.poll": "In enkête dêrt jo oan meidien hawwe is beëinige",
"notification.reblog": "{name} hat jo berjocht boost",
"notification.reblog.name_and_others_with_link": "{name} en <a>{count, plural, one {# oar} other {# oaren}}</a> hawwe jo berjocht boost",
"notification.relationships_severance_event": "Ferlerne ferbiningen mei {name}",
"notification.relationships_severance_event.account_suspension": "In behearder fan {from} hat {target} útsteld, wat betsjut dat jo gjin updates mear fan harren ûntfange kinne of mei harren kommunisearje kinne.",
"notification.relationships_severance_event.domain_block": "In behearder fan {from} hat {target} blokkearre, ynklusyf {followersCount} fan jo folgers en {followingCount, plural, one {# account} other {# accounts}} dyt jo folgje.",
"notification.relationships_severance_event.learn_more": "Mear ynfo",
"notification.relationships_severance_event.user_domain_block": "Jo hawwe {target} blokkearre, wêrmeit jo {followersCount} fan jo folgers en {followingCount, plural, one {# account} other {# accounts}} dyt jo folgje ferlern binne.",
"notification.status": "{name} hat in berjocht pleatst",
"notification.update": "{name} hat in berjocht bewurke",
"notification_requests.accept": "Akseptearje",
"notification_requests.accept_multiple": "{count, plural, one {# fersyk akseptearje…} other {# fersiken akseptearje…}}",
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Fersyk akseptearje} other {Fersiken akseptearje}}",
"notification_requests.confirm_accept_multiple.message": "Jo steane op it punt om {count, plural, one {ien meldingsfersyk} other {# meldingsfersiken}} te akseptearjen. Binne jo wis dat jo trochgean wolle?",
"notification_requests.confirm_accept_multiple.title": "Meldingsfersiken akseptearje?",
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Fersyk ôfwize} other {Fersiken ôfwize}}",
"notification_requests.confirm_dismiss_multiple.message": "Jo steane op it punt om {count, plural, one {ien meldingsfersyk} other {# meldingsfersiken}} ôf te wizen. Jo sille net yn steat wêze om {count, plural, one {hier} other {hier}} wer maklik tagong ta te krijen. Wolle jo trochgean?",
"notification_requests.confirm_dismiss_multiple.title": "Meldingsfersiken ôfwize?",
"notification_requests.dismiss": "Ofwize",
"notification_requests.dismiss_multiple": "{count, plural, one {# fersyk ôfwize…} other {# fersiken ôfwize…}}",
"notification_requests.edit_selection": "Bewurkje",
"notification_requests.exit_selection": "Klear",
"notification_requests.explainer_for_limited_account": "Meldingen fan dizze account binne filtere, omdat dizze account troch in moderator beheind is.",
"notification_requests.explainer_for_limited_remote_account": "Meldingen fan dizze account binne filtere, omdat dizze account of harren server troch in moderator beheind is.",
"notification_requests.maximize": "Maksimalisearje",
"notification_requests.minimize_banner": "Banner mei filtere meldingen minimalisearje",
"notification_requests.notifications_from": "Meldingen fan {name}",
"notification_requests.title": "Filtere meldingen",
"notification_requests.view": "Meldingen besjen",
"notifications.clear": "Meldingen wiskje",
"notifications.clear_confirmation": "Binne jo wis dat jo al jo meldingen permanint fuortsmite wolle?",
"notifications.clear_title": "Meldingen fuortsmite?",
"notifications.column_settings.admin.report": "Nije rapportaazjes:",
"notifications.column_settings.admin.sign_up": "Nije registraasjes:",
"notifications.column_settings.alert": "Desktopmeldingen",
"notifications.column_settings.beta.category": "Eksperimintele funksjes",
"notifications.column_settings.beta.grouping": "Notifikaasjes groepearje",
"notifications.column_settings.favourite": "Favoriten:",
"notifications.column_settings.filter_bar.advanced": "Alle kategoryen toane",
"notifications.column_settings.filter_bar.category": "Flugge filterbalke",
"notifications.column_settings.follow": "Nije folgers:",
"notifications.column_settings.follow_request": "Nij folchfersyk:",
"notifications.column_settings.mention": "Fermeldingen:",
@ -521,6 +589,23 @@
"notifications.permission_denied": "Desktopmeldingen binne net beskikber, omdat in eardere browsertastimming wegere waard",
"notifications.permission_denied_alert": "Desktopmeldingen kinne net ynskeakele wurde, omdat in eardere browsertastimming wegere waard",
"notifications.permission_required": "Desktopmeldingen binne net beskikber, omdat de nedige tastimming net ferliend is.",
"notifications.policy.accept": "Akseptearje",
"notifications.policy.accept_hint": "Yn meldingen toane",
"notifications.policy.drop": "Negearje",
"notifications.policy.drop_hint": "Permanint fuortsmite",
"notifications.policy.filter": "Filter",
"notifications.policy.filter_hint": "Nei filtere ynboks foar meldingen ferstjoere",
"notifications.policy.filter_limited_accounts_hint": "Beheind troch servermoderatoren",
"notifications.policy.filter_limited_accounts_title": "Moderearre accounts",
"notifications.policy.filter_new_accounts.hint": "Yn de ôfrûne {days, plural, one {dei} other {# dagen}} registrearre",
"notifications.policy.filter_new_accounts_title": "Nije accounts",
"notifications.policy.filter_not_followers_hint": "Ynklusyf minsken dyt jo koarter as {days, plural, one {dei} other {# dagen}} folgje",
"notifications.policy.filter_not_followers_title": "Minsken dyt jo net folgje",
"notifications.policy.filter_not_following_hint": "Oant jo se hânmjittich goedkarre",
"notifications.policy.filter_not_following_title": "Minsken dyt josels net folgje",
"notifications.policy.filter_private_mentions_hint": "Unsichtber útsein it in antwurd is op in priveeberjocht fan jo of wanneart jo de ôfstjoerder folgje",
"notifications.policy.filter_private_mentions_title": "Net frege priveeberjochten",
"notifications.policy.title": "Meldingen beheare fan…",
"notifications_permission_banner.enable": "Desktopmeldingen ynskeakelje",
"notifications_permission_banner.how_to_control": "Om meldingen te ûntfangen wanneart Mastodon net iepen stiet. Jo kinne krekt bepale hokker soarte fan ynteraksjes wol of gjin desktopmeldingen jouwe fia de boppesteande {icon} knop.",
"notifications_permission_banner.title": "Mis neat",
@ -647,6 +732,7 @@
"report.unfollow_explanation": "Jo folgje dizze account. Om harren berjochten net mear op jo starttiidline te sjen, kinne jo dyjinge ûntfolgje.",
"report_notification.attached_statuses": "{count, plural, one {{count} berjocht} other {{count} berjochten}} tafoege",
"report_notification.categories.legal": "Juridysk",
"report_notification.categories.legal_sentence": "yllegale ynhâld",
"report_notification.categories.other": "Oars",
"report_notification.categories.other_sentence": "oars",
"report_notification.categories.spam": "Spam",
@ -680,8 +766,11 @@
"server_banner.about_active_users": "Oantal brûkers yn de ôfrûne 30 dagen (MAU)",
"server_banner.active_users": "warbere brûkers",
"server_banner.administered_by": "Beheard troch:",
"server_banner.is_one_of_many": "{domain} is ien fan de protte ôfhinklike Mastodon-servers dyt jo brûke kinne om diel te nimmen oan de fediverse.",
"server_banner.server_stats": "Serverstatistiken:",
"sign_in_banner.create_account": "Account registrearje",
"sign_in_banner.follow_anyone": "Folgje elkenien yn de fediverse en sjoch it allegearre yn gronologyske folchoarder. Gjin algoritmen, advertinsjes of clickbaits.",
"sign_in_banner.mastodon_is": "Mastodon is de beste manier om wat der bart by te hâlden.",
"sign_in_banner.sign_in": "Oanmelde",
"sign_in_banner.sso_redirect": "Oanmelde of Registrearje",
"status.admin_account": "Moderaasje-omjouwing fan @{name} iepenje",

View File

@ -98,6 +98,7 @@
"block_modal.you_wont_see_mentions": "Tu non videra le messages que mentiona iste persona.",
"boost_modal.combo": "Tu pote premer {combo} pro saltar isto le proxime vice",
"boost_modal.reblog": "Impulsar le message?",
"boost_modal.undo_reblog": "Cessar de impulsar le message?",
"bundle_column_error.copy_stacktrace": "Copiar reporto de error",
"bundle_column_error.error.body": "Le pagina requestate non pote esser visualisate. Pote esser a causa de un defecto in nostre codice o de un problema de compatibilitate del navigator.",
"bundle_column_error.error.title": "Oh, no!",

View File

@ -248,8 +248,9 @@ function processNewNotification(
}
function trimNotifications(state: NotificationGroupsState) {
if (state.scrolledToTop) {
if (state.scrolledToTop && state.groups.length > NOTIFICATIONS_TRIM_LIMIT) {
state.groups.splice(NOTIFICATIONS_TRIM_LIMIT);
ensureTrailingGap(state.groups);
}
}
@ -400,6 +401,28 @@ function ensureLeadingGap(
}
}
// Ensure the groups list ends with a gap suitable for loading more, mutating it to append one if needed
function ensureTrailingGap(
groups: NotificationGroupsState['groups'],
): NotificationGap {
const groupOrGap = groups.at(-1);
if (groupOrGap?.type === 'gap') {
// We're expecting older notifications, so discard sinceId if it's set
groupOrGap.sinceId = undefined;
return groupOrGap;
} else {
const gap: NotificationGap = {
type: 'gap',
maxId: groupOrGap?.page_min_id,
};
groups.push(gap);
return gap;
}
}
export const notificationGroupsReducer = createReducer<NotificationGroupsState>(
initialState,
(builder) => {

View File

@ -29,8 +29,4 @@ class Mention < ApplicationRecord
to: :account,
prefix: true
)
def active?
!silent?
end
end

View File

@ -246,10 +246,6 @@ class User < ApplicationRecord
unconfirmed? || pending?
end
def inactive_message
approved? ? super : :pending
end
def approve!
return if approved?

View File

@ -150,7 +150,7 @@ class PostStatusService < BaseService
@media = @account.media_attachments.where(status_id: nil).where(id: @options[:media_ids].take(Status::MEDIA_ATTACHMENTS_LIMIT).map(&:to_i))
not_found_ids = @options[:media_ids] - @media.map(&:id)
not_found_ids = @options[:media_ids].map(&:to_i) - @media.map(&:id)
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.not_found', ids: not_found_ids.join(', ')) if not_found_ids.any?
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if @media.size > 1 && @media.find(&:audio_or_video?)

View File

@ -74,7 +74,7 @@ class UpdateStatusService < BaseService
media_attachments = @status.account.media_attachments.where(status_id: [nil, @status.id]).where(scheduled_status_id: nil).where(id: @options[:media_ids].take(Status::MEDIA_ATTACHMENTS_LIMIT).map(&:to_i)).to_a
not_found_ids = @options[:media_ids] - media_attachments.map(&:id)
not_found_ids = @options[:media_ids].map(&:to_i) - media_attachments.map(&:id)
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.not_found', ids: not_found_ids.join(', ')) if not_found_ids.any?
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if media_attachments.size > 1 && media_attachments.find(&:audio_or_video?)

View File

@ -1412,6 +1412,7 @@ ca:
media_attachments:
validations:
images_and_video: No es pot adjuntar un vídeo a una publicació que ja contingui imatges
not_found: No s'ha trobat el contingut multimèdia %{ids} o ja s'ha adjuntat a una altra publicació
not_ready: No es poden adjuntar fitxers que no s'hagin acabat de processar. Torna-ho a provar en un moment!
too_many: No es poden adjuntar més de 4 fitxers
migrations:

View File

@ -1454,6 +1454,7 @@ da:
media_attachments:
validations:
images_and_video: En video kan ikke vedhæftes et indlæg med billedindhold
not_found: Mediet %{ids} ikke fundet eller allerede vedhæftet andet indlæg
not_ready: Filer under behandling kan ikke vedhæftes. Forsøg igen senere!
too_many: Maks. 4 filer kan vedhæftes
migrations:

View File

@ -1454,6 +1454,7 @@ de:
media_attachments:
validations:
images_and_video: Es kann kein Video an einen Beitrag angehängt werden, der bereits Bilder enthält
not_found: Medien %{ids} nicht verfügbar oder bereits an einen anderen Beitrag angehängt
not_ready: Dateien, die noch nicht verarbeitet wurden, können nicht angehängt werden. Versuche es gleich noch einmal!
too_many: Mehr als vier Dateien können nicht angehängt werden
migrations:

View File

@ -83,6 +83,7 @@ fy:
access_denied: De boarne-eigener of autorisaasjeserver hat it fersyk wegere.
credential_flow_not_configured: De wachtwurdgegevens-flow fan de boarne-eigener is mislearre, omdat Doorkeeper.configure.resource_owner_from_credentials net ynsteld is.
invalid_client: Clientferifikaasje is mislearre troch in ûnbekende client, ûntbrekkende client-autentikaasje of in net stipe autentikaasjemetoade.
invalid_code_challenge_method: De koadechallengemetoade moat S256 wezen, plain wurdt net stipe.
invalid_grant: De opjûne autorisaasje is ûnjildich, ferrûn, ynlutsen, komt net oerien mei de redirect-URI dyt opjûn is of útjûn waard oan in oere client.
invalid_redirect_uri: De opjûne redirect-URI is ûnjildich.
invalid_request:

View File

@ -1454,6 +1454,7 @@ es-AR:
media_attachments:
validations:
images_and_video: No se puede adjuntar un video a un mensaje que ya contenga imágenes
not_found: Medios %{ids} no encontrados o ya adjuntados a otro mensaje
not_ready: No se pueden adjuntar archivos que no se han terminado de procesar. ¡Intentá de nuevo en un rato!
too_many: No se pueden adjuntar más de 4 archivos
migrations:

View File

@ -1454,6 +1454,7 @@ fi:
media_attachments:
validations:
images_and_video: Videota ei voi liittää tilapäivitykseen, jossa on jo kuvia
not_found: Mediaa %{ids} ei löytynyt, tai se on jo liitetty toiseen julkaisuun
not_ready: Ei voi liittää tiedostoja, joiden käsittely on kesken. Yritä hetken kuluttua uudelleen!
too_many: Tiedostoja voi liittää enintään 4
migrations:

View File

@ -1454,6 +1454,7 @@ fo:
media_attachments:
validations:
images_and_video: Kann ikki viðfesta sjónfílu til ein post, sum longu inniheldur myndir
not_found: Miðilin %{ids} ikki funnin ella longu knýttur at øðrum posti
not_ready: Kann ikki viðfesta fílur, sum ikki eru liðugt viðgjørdar. Roynd aftur um eina løtu!
too_many: Kann ikki viðfest fleiri enn 4 fílur
migrations:

View File

@ -31,6 +31,7 @@ fy:
created_msg: Oanmeitsjen fan opmerking foar moderatoaren slagge!
destroyed_msg: Fuortsmiten fan opmerking foar moderatoaren slagge!
accounts:
add_email_domain_block: E-maildomein blokkearje
approve: Goedkarre
approved_msg: It goedkarren fan de account fan %{username} is slagge
are_you_sure: Binne jo wis?
@ -57,6 +58,7 @@ fy:
demote: Degradearje
destroyed_msg: It fuortsmiten fan de gegevens fan %{username} stiet no yn de wachtrige
disable: Befrieze
disable_sign_in_token_auth: Ferifikaasje mei in tagongskoade fia e-mail útskeakelje
disable_two_factor_authentication: 2FA útskeakelje
disabled: Beferzen
display_name: Werjeftenamme
@ -65,6 +67,7 @@ fy:
email: E-mailadres
email_status: E-mailsteat
enable: Untteie
enable_sign_in_token_auth: Ferifikaasje mei in tagongskoade fia e-mail ynskeakelje
enabled: Ynskeakele
enabled_msg: It ûntteie fan de account fan %{username} is slagge
followers: Folgers
@ -129,6 +132,7 @@ fy:
resubscribe: Opnij abonnearje
role: Rol
search: Sykje
search_same_email_domain: Oare brûkers mei itselde e-maildomein
search_same_ip: Oare brûkers mei itselde IP-adres
security: Befeiliging
security_measures:
@ -169,21 +173,26 @@ fy:
approve_appeal: Beswier goedkarre
approve_user: Brûker goedkarre
assigned_to_self_report: Rapportaazje tawize
change_email_user: E-mailadres fan brûker wizigje
change_role_user: Brûkersrol wizigje
confirm_user: Brûker befêstigje
create_account_warning: Warskôging oanmeitsje
create_announcement: Meidieling oanmeitsje
create_canonical_email_block: E-mailblokkade oanmeitsje
create_custom_emoji: Lokale emoji oanmeitsje
create_domain_allow: Domeingoedkarring oanmeitsje
create_domain_block: Domeinblokkade oanmeitsje
create_email_domain_block: E-maildomeinblokkade oanmeitsje
create_ip_block: IP-rigel oanmeitsje
create_unavailable_domain: Net beskikber domein oanmeitsje
create_user_role: Rol oanmeitsje
demote_user: Brûker degradearje
destroy_announcement: Meidieling fuortsmite
destroy_canonical_email_block: E-mailblokkade fuortsmite
destroy_custom_emoji: Lokale emoji fuortsmite
destroy_domain_allow: Domeingoedkarring fuortsmite
destroy_domain_block: Domeinblokkade fuortsmite
destroy_email_domain_block: E-maildomeinblokkade fuortsmite
destroy_instance: Domein folslein fuortsmite
destroy_ip_block: IP-rigel fuortsmite
destroy_status: Toot fuortsmite
@ -191,8 +200,10 @@ fy:
destroy_user_role: Rol permanint fuortsmite
disable_2fa_user: Twa-stapsferifikaasje útskeakelje
disable_custom_emoji: Lokale emoji útskeakelje
disable_sign_in_token_auth_user: Ferifikaasje mei in tagongskoade fia e-mail foar de brûker útskeakelje
disable_user: Brûker útskeakelje
enable_custom_emoji: Lokale emoji ynskeakelje
enable_sign_in_token_auth_user: Ferifikaasje mei in tagongskoade fia e-mail foar de brûker ynskeakelje
enable_user: Brûker ynskeakelje
memorialize_account: De account yn in Yn memoriam wizigje
promote_user: Brûker promovearje
@ -222,20 +233,26 @@ fy:
approve_appeal_html: "%{name} hat it beswier tsjin de moderaasjemaatregel fan %{target} goedkard"
approve_user_html: "%{name} hat de registraasje fan %{target} goedkard"
assigned_to_self_report_html: "%{name} hat rapportaazje %{target} oan harrensels tawiisd"
change_email_user_html: "%{name} hat it e-mailadres fan brûker %{target} wizige"
change_role_user_html: "%{name} hat de rol fan %{target} wizige"
confirm_user_html: E-mailadres fan brûker %{target} is troch %{name} befêstige
create_account_warning_html: "%{name} hat in warskôging nei %{target} ferstjoerd"
create_announcement_html: "%{name} hat de nije meidieling %{target} oanmakke"
create_canonical_email_block_html: "%{name} hat it e-mailberjocht mei de hash %{target} blokkearre"
create_custom_emoji_html: Nije emoji %{target} is troch %{name} opladen
create_domain_allow_html: "%{name} hat de federaasje mei it domein %{target} goedkard"
create_domain_block_html: Domein %{target} is troch %{name} blokkearre
create_email_domain_block_html: "%{name} hat it e-maildomein %{target} blokkearre"
create_ip_block_html: "%{name} hat de rigel foar IP %{target} oanmakke"
create_unavailable_domain_html: "%{name} hat de besoarging foar domein %{target} beëinige"
create_user_role_html: "%{name} hat de rol %{target} oanmakke"
demote_user_html: Brûker %{target} is troch %{name} degradearre
destroy_announcement_html: "%{name} hat de meidieling %{target} fuortsmiten"
destroy_canonical_email_block_html: "%{name} hat it e-mailberjocht mei de hash %{target} deblokkearre"
destroy_custom_emoji_html: Emoji %{target} is troch %{name} fuortsmiten
destroy_domain_allow_html: "%{name} hat de federaasje mei it domein %{target} ôfkard"
destroy_domain_block_html: Domein %{target} is troch %{name} deblokkearre
destroy_email_domain_block_html: "%{name} hat it e-maildomein %{target} deblokkearre"
destroy_instance_html: "%{name} hat it domein %{target} folslein fuortsmiten"
destroy_ip_block_html: "%{name} hat de rigel foar IP %{target} fuortsmiten"
destroy_status_html: Berjocht fan %{target} is troch %{name} fuortsmiten
@ -243,8 +260,10 @@ fy:
destroy_user_role_html: "%{name} hat de rol %{target} fuortsmiten"
disable_2fa_user_html: De fereaske twa-stapsferifikaasje foar %{target} is troch %{name} útskeakele
disable_custom_emoji_html: Emoji %{target} is troch %{name} útskeakele
disable_sign_in_token_auth_user_html: "%{name} hat ferifikaasje mei in tagongskoade fia e-mail útskeakele foar %{target}"
disable_user_html: Oanmelden foar %{target} is troch %{name} útskeakele
enable_custom_emoji_html: Emoji %{target} is troch %{name} ynskeakele
enable_sign_in_token_auth_user_html: "%{name} hat ferifikaasje mei in tagongskoade fia e-mail ynskeakele foar %{target}"
enable_user_html: Oanmelden foar %{target} is troch %{name} ynskeakele
memorialize_account_html: De account %{target} is troch %{name} yn in Yn memoriam wizige
promote_user_html: Brûker %{target} is troch %{name} promovearre
@ -252,6 +271,7 @@ fy:
reject_user_html: "%{name} hat de registraasje fan %{target} ôfwêzen"
remove_avatar_user_html: "%{name} hat de profylfoto fan %{target} fuortsmiten"
reopen_report_html: "%{name} hat rapportaazje %{target} opnij iepene"
resend_user_html: "%{name} hat it befêstigings-e-mailberjocht foar %{target} opnij ferstjoerd"
reset_password_user_html: Wachtwurd fan brûker %{target} is troch %{name} opnij ynsteld
resolve_report_html: "%{name} hat rapportaazje %{target} oplost"
sensitive_account_html: "%{name} markearre de media fan %{target} as gefoelich"
@ -412,6 +432,7 @@ fy:
attempts_over_week:
one: "%{count} registraasjebesykjen yn de ôfrûne wike"
other: "%{count} registraasjebesykjen yn de ôfrûne wike"
created_msg: E-maildomein blokkearjen slagge
delete: Fuortsmite
dns:
types:
@ -420,8 +441,12 @@ fy:
new:
create: Domein tafoegje
resolve: Domein opsykje
title: Nije e-maildomein blokkearje
no_email_domain_block_selected: Der binne gjin e-maildomeinblokkaden wizige, omdat der gjin ien selektearre waard
not_permitted: Net tastien
resolved_dns_records_hint_html: De domeinnamme slacht op de folgjende MX-domeinen dyt úteinlik ferantwurdlik binne foar it akseptearjen fan e-mail. It blokkearjen fan in MX-domein blokkearret oanmeldingen fan elk e-mailadres dat itselde MX-domein brûkt, sels as de sichtbere domeinnamme oars is. <strong>Pas op dat jo gjin grutte e-mailproviders blokkearje.</strong>
resolved_through_html: Blokkearre fia %{domain}
title: Blokkearre e-maildomeinen
export_domain_allows:
new:
title: Tastiene domeinen ymportearje
@ -575,6 +600,7 @@ fy:
resolve_description_html: Der wurdt tsjin it rapportearre account gjin maatregel nommen, gjin oertrêding registrearre en de rapportaazje wurdt markearre as oplost.
silence_description_html: De account sil allinnich sichtber wêze foar dyjinge dyt it al folgje of it hânmjittich opsykje, wêrtroch it berik earnstich beheind wurdt. Kin altyd weromdraaid wurde. Dit slút alle rapportaazjes oer dizze account.
suspend_description_html: De account en alle ynhâld sil net tagonklik wêze en úteinlik fuortsmiten wurde, en ynteraksje hjirmei sil net mooglik wêze. Binnen 30 dagen werom te draaien. Dit slút alle rapportaazjes oer dizze account.
actions_description_html: Beslis hokker maatregel nommen wurde moat om dizze rapportaazje op te lossen. Wanneart jo in (straf)maatregel tsjin it rapportearre account nimme, kriget de account in e-mailmelding, behalve wanneart de <strong>spam</strong>-kategory keazen is.
actions_description_remote_html: Beslút hokker aksje nommen wurde moat om dizze rapportaazje ôf te hanneljen. Dit hat allinnich ynfloed op hoet <strong>jo</strong> server kommunisearret mei dizze eksterne account en omgiet mei de ynhâld.
add_to_report: Mear oan de rapportaazje tafoegje
already_suspended_badges:
@ -639,6 +665,7 @@ fy:
delete_data_html: It profyl en de ynhâld fan <strong>@%{acct}</strong> wurde nei 30 dagen fan no ôf fuortsmiten, útsein as de account yn de tuskentiid net mear blokkearre wurdt
preview_preamble_html: "<strong>@%{acct}</strong> sil in warskôging ûntfange mei de folgjende ynhâld:"
record_strike_html: In ban tsjin <strong>@%{acct}</strong> ynstelle, om jo te helpen by takomstige skeiningen fan dizze acount te eskalearjen
send_email_html: Stjoer <strong>@%{acct}</strong> in warskôgings-e-mailberjocht
warning_placeholder: Ekstra opsjonele reden foar de moderaasje-aksje.
target_origin: Orizjineel fan rapportearre account
title: Rapportaazjes
@ -678,6 +705,7 @@ fy:
manage_appeals: Beswieren beheare
manage_appeals_description: Stiet brûkers ta om beswieren tsjin moderaasjemaatregelen te beoardielen
manage_blocks: Blokkaden beheare
manage_blocks_description: Stiet brûkers ta om e-mailproviders en IP-adressen te blokkearjen
manage_custom_emojis: Lokale emojis beheare
manage_custom_emojis_description: Stiet brûkers ta om lokale emojis op de server te behearen
manage_federation: Federaasje beheare
@ -695,6 +723,7 @@ fy:
manage_taxonomies: Trends en hashtags beheare
manage_taxonomies_description: Stiet brûkers ta om trending ynhâld te besjen en om hashtagynstellingen by te wurkjen
manage_user_access: Brûkerstagong beheare
manage_user_access_description: Stiet brûkers ta om twa-stapsferifikaasje fan oare brûkers út te skeakeljen, om harren e-mailadres te wizigjen en om harren wachtwurd opnij yn te stellen
manage_users: Brûkers beheare
manage_users_description: Stiet brûkers ta om brûkersdetails fan oaren te besjen en moderaasjemaatregelen tsjin harren te nimmen
manage_webhooks: Webhooks beheare
@ -769,6 +798,7 @@ fy:
destroyed_msg: Fuortsmiten website-oplaad slagge!
software_updates:
critical_update: Krityk — fernij sa gau as mooglik
description: It wurdt oanrekommandearre om jo Mastodon-ynstallaasje by-de-tiid te hâlden om gebrûk meitsje te kinnen fan de nijste oplossingen en funksjes. Boppe dat is it somtiden krúsjaal om Mastodon tidich by te wurkjen om feiligheidsproblemen foar te kommen. Om dizze redenen kontrolearret Mastodon elke 30 minuten fernijingen en bringt jo hjirfan op de hichte neffens jo foarkarren foar e-mailmeldingen.
documentation_link: Mear ynfo
release_notes: Utjefte-opmerkingen
title: Beskikbere fernijingen
@ -855,16 +885,39 @@ fy:
action: Klik hjir foar mear ynformaasje
message_html: "<strong>Jo objektûnthâld is ferkeard konfigurearre. De privacy fan jo brûkers is yn gefaar.</strong>"
tags:
moderation:
not_trendable: Net trendber
not_usable: Net brûkber
pending_review: Moat noch beoardiele wurde
review_requested: Beoardieling oanfrege
reviewed: Beoardiele
title: Status
trendable: Trendber
unreviewed: Net beoardiele
usable: Brûkber
name: Namme
newest: Nijste
oldest: Aldste
open: Yn it iepenbier besjen
reset: Opnij ynstelle
review: Steat beoardiele
search: Sykje
title: Hashtags
updated_msg: Hashtagynstellingen mei sukses bywurke
title: Behear
trends:
allow: Tastean
approved: Goedkarre
confirm_allow: Binne jo wis dat jo de selektearre hashtags tastean wolle?
confirm_disallow: Binne jo wis dat jo de selektearre hashtags ôfkarre wolle?
disallow: Ofkarre
links:
allow: Keppeling goedkarre
allow_provider: Auteur goedkarre
confirm_allow: Binne jo wis dat jo de selektearre keppelingen tastean wolle?
confirm_allow_provider: Binne jo wis dat jo de selektearre websites tastean wolle?
confirm_disallow: Binne jo wis dat jo de selektearre keppelingen ôfkarre wolle?
confirm_disallow_provider: Binne jo wis dat jo de selektearre providers ôfkarre wolle?
description_html: Dit binne keppelingen dyt op dit stuit in protte dield wurde troch accounts wêrt jo server berjochten fan ûntfangt. Hjirtroch kinne jo brûkers sjen wat der yn de wrâld oan de hân is. Der wurde gjin keppelingen werjûn oant jo de website goedkard hawwe. Jo kinne ek yndividuele keppelingen goed- of ôfkarre.
disallow: Keppeling ôfkarre
disallow_provider: Website ôfkarre
@ -888,6 +941,10 @@ fy:
statuses:
allow: Berjocht goedkarre
allow_account: Account goedkarre
confirm_allow: Binne jo wis dat jo de selektearre statussen ofkarre wolle?
confirm_allow_account: Binne jo wis dat jo de selektearre accounts tastean wolle?
confirm_disallow: Binne jo wis dat jo de selektearre statussen ôfkarre wolle?
confirm_disallow_account: Binne jo wis dat jo de selektearre accounts ôfkarre wolle?
description_html: Dit binne berjochten dyt op jo server bekend binne en dyt op dit stuit in protte dield wurde en as favoryt markearre wurde. Hjirmei kinne nije en weromkearende brûkers mear minsken fine om te folgjen. Der wurde gjin berjochten yn it iepenbier werjûn oant de account troch jo goedkard is en de brûker tastiet dat harren account oan oaren oanrekommandearre wurdt. Jo kinne ek yndividuele berjochten goed- of ôfkarre.
disallow: Berjocht ôfkarre
disallow_account: Account ôfkarre
@ -920,6 +977,7 @@ fy:
used_by_over_week:
one: Dizze wike troch ien persoan brûkt
other: Dizze wike troch %{count} persoanen brûkt
title: Oanrekommandaasjes & trends
trending: Trending
warning_presets:
add_new: Nije tafoegje
@ -1004,7 +1062,9 @@ fy:
guide_link_text: Elkenien kin bydrage.
sensitive_content: Gefoelige ynhâld
application_mailer:
notification_preferences: E-mailynstellingen wizigje
salutation: "%{name},"
settings: 'E-mailfoarkarren wizigje: %{link}'
unsubscribe: Ofmelde
view: 'Besjoch:'
view_profile: Profyl besjen
@ -1024,6 +1084,7 @@ fy:
hint_html: Noch ien ding! Jo moatte befêstigje dat jo in minske binne (dit is om de spam bûten de doar te hâlden!). Los de ûndersteande CAPTCHA op en klik op Trochgean.
title: Befeiligingskontrôle
confirmations:
awaiting_review: Jo e-mailadres is befêstige! De %{domain}-meiwurkers binne no dwaande mei it besjen fan jo registraasje. Jo ûntfange in e-mailberjocht as de jo account goedkarre!
awaiting_review_title: Jo registraasje wurdt beoardield
clicking_this_link: klik op dizze keppeling
login_link: oanmelde
@ -1031,6 +1092,7 @@ fy:
redirect_to_app_html: Jo soene omlaad wêze moatte nei de <strong>%{app_name}</strong> app. As dat net bard is, probearje dan %{clicking_this_link} of kear hânmjittich werom nei de app.
registration_complete: Jo registraasje op %{domain} is no foltôge!
welcome_title: Wolkom, %{name}!
wrong_email_hint: As it e-mailadres net korrekt is, kinne jo dat wizigje yn de accountynstellingen.
delete_account: Account fuortsmite
delete_account_html: Wanneart jo jo account graach fuortsmite wolle, kinne jo dat <a href="%{path}">hjir dwaan</a>. Wy freegje jo dêr om in befêstiging.
description:
@ -1051,6 +1113,7 @@ fy:
or_log_in_with: Of oanmelde mei
privacy_policy_agreement_html: Ik haw it <a href="%{privacy_policy_path}" target="_blank">privacybelied</a> lêzen en gean dêrmei akkoard
progress:
confirm: E-mailadres werhelje
details: Jo gegevens
review: Us beoardieling
rules: Regels akseptearje
@ -1072,8 +1135,10 @@ fy:
security: Befeiliging
set_new_password: Nij wachtwurd ynstelle
setup:
email_below_hint_html: Kontrolearje jo map Net-winske, of freegje in nije befêstigingskeppeling oan. Jo kinne jo e-mailadres wizigje as it ferkeard is.
email_settings_hint_html: Klik op de keppeling dyt wy jo stjoerd hawwe om %{email} te ferifiearjen. Wy wachtsje wol even.
link_not_received: Gjin keppeling krigen?
new_confirmation_instructions_sent: Jo ûntfange binnen inkelde minuten in nij e-mailberjocht mei de befêstigingskeppeling!
title: Kontrolearje jo Postfek YN
sign_in:
preamble_html: Meld jo oan mei de oanmeldgegevens fan <strong>%{domain}</strong>. As jo account op in oare server stiet, kinne jo hjir net oanmelde.
@ -1084,7 +1149,9 @@ fy:
title: Litte wy jo account op %{domain} ynstelle.
status:
account_status: Accountsteat
confirming: Oan it wachtsjen oant it e-mailadres befêstige is.
functional: Jo account kin folslein brûkt wurde.
pending: Jo oanfraach moat noch beoardiele wurde troch ien fan ús meiwurkers. Dit kin miskien efkes duorje. Jo ûntfangt in e-mailberjocht wanneart jo oanfraach goedkard is.
redirecting_to: Jo account is ynaktyf, omdat it op dit stuit trochferwezen wurdt nei %{acct}.
self_destruct: Omdat %{domain} sluten sil, krije jo mar beheind tagong ta jo account.
view_strikes: Besjoch de earder troch moderatoaren fêststelde skeiningen dyt jo makke hawwe
@ -1127,6 +1194,9 @@ fy:
before: 'Lês dizze tekst soarchfâldich eardat jo troch gean:'
caches: Berjochten en media dyt op oare servers bewarre binne kinne dêr efterbliuwe
data_removal: Jo berjochten en oare gegevens wurde permanint fuortmiten
email_change_html: Jo kinne <a href="%{path}">jo e-mailadres wizigje</a> sûnder dat jo jo account fuort hoege te smiten
email_contact_html: Wanneart it noch hieltyd net oankomt, kinne jo foar help in e-mailberjocht stjoere nei <a href="mailto:%{email}">%{email}</a>
email_reconfirmation_html: Wanneart jo it befêstigings-e-mailberjocht net ûntfongen hawwe, kinne jo dizze <a href="%{path}">opnij oanfreegje</a>
irreversible: Jo sille net yn steat wêze om jo account te werstellen of te de-aktivearjen
more_details_html: Sjoch it <a href="%{terms_path}">privacybelied</a> foar mear ynformaasje.
username_available: Jo brûkersnamme sil wer beskikber komme
@ -1359,6 +1429,7 @@ fy:
authentication_methods:
otp: twa-stapsferifikaasje-app
password: wachtwurd
sign_in_token: befeiligingskoade fia e-mailberjocht
webauthn: befeiligingskaaien
description_html: Wanneart jo aktiviteit sjogge dyt jo net werkenne, tink dan nei om jo wachtwurd te wizigjen en twa-stapsferifikaasje yn te skeakeljen.
empty: Gjin oanmeldskiednis beskikber
@ -1369,6 +1440,16 @@ fy:
unsubscribe:
action: Ja, ôfmelde
complete: Ofmelden
confirmation_html: Binne jo wis dat jo jo ôfmelde wolle foar it ûntfangen fan %{type} fan Mastodon op %{domain} op jo e-mailadres %{email}? Jo kinne jo altyd opnij abonnearje yn jo <a href="%{settings_path}">ynstellingen foar e-mailmeldingen</a>.
emails:
notification_emails:
favourite: e-mailmeldingen foar favoriten
follow: e-mailmeldingen foar nije folgers
follow_request: e-mailmeldingen foar folchfersiken
mention: e-mailmeldingen foar fermeldingen
reblog: e-mailmeldingen foar boosts
resubscribe_html: As jo jo mei fersin ôfmeld hawwe, kinne jo jo opnij abonnearje yn jo <a href="%{settings_path}">ynstellingen foar e-mailmeldingen</a>.
success_html: Jo ûntfange net langer %{type} fan Mastodon op %{domain} op jo e-mailadres %{email}.
title: Ofmelde
media_attachments:
validations:
@ -1449,6 +1530,8 @@ fy:
update:
subject: "%{name} hat in berjocht bewurke"
notifications:
administration_emails: E-mailmeldingen behearder
email_events: E-mailmeldingen foar eveneminten
email_events_hint: 'Selektearje eveneminten wêrfoart jo meldingen ûntfange wolle:'
number:
human:
@ -1607,6 +1690,7 @@ fy:
import: Ymportearje
import_and_export: Ymportearje en eksportearje
migrate: Accountmigraasje
notifications: E-mailmeldingen
preferences: Ynstellingen
profile: Profyl
relationships: Folgers en folgjenden
@ -1853,6 +1937,7 @@ fy:
invalid_otp_token: Unjildige twa-stapstagongskoade
otp_lost_help_html: As jo tagong ta beide kwytrekke binne, nim dan kontakt op fia %{email}
rate_limited: Te folle autentikaasjebesykjen, probearje it letter opnij.
seamless_external_login: Jo binne oanmeld fia in eksterne tsjinst, dêrom binne wachtwurden en e-mailynstellingen net beskikber.
signed_in_as: 'Oanmeld as:'
verification:
extra_instructions_html: <strong>Tip:</strong> De keppeling op jo website kin ûnsichtber wêze. It wichtige part is <code>rel="me"</code> dat ympersonaasje op websites mei user-generated ynhâld foarkomt. Jo kinne sels in <code>link</code>-label brûke yn de header fan de side yn stee fan <code>a</code>, mar de HTML moat ek sûnder JavaScript tagonklik wêze.

View File

@ -1454,6 +1454,7 @@ gl:
media_attachments:
validations:
images_and_video: Non podes anexar un vídeo a unha publicación que xa contén imaxes
not_found: Non se atopou o multimedia %{ids} ou xa é adxunto noutra publicación
not_ready: Non se poden anexar ficheiros que aínda se están a procesar. Agarda un intre!
too_many: Non pode anexar máis de 4 ficheiros
migrations:

View File

@ -661,6 +661,7 @@ ia:
delete_data_html: Deler le profilo e contento de <strong>@%{acct}</strong> in 30 dies excepte si le suspension es disfacite intertanto
preview_preamble_html: "<strong>@%{acct}</strong> recipera un advertimento con le sequente contento:"
record_strike_html: Registra un sanction contra <strong>@%{acct}</strong> pro adjutar te a prender mesuras adequate in caso de futur violationes committite desde iste conto
send_email_html: Inviar un e-mail de advertimento a <strong>@%{acct}</strong>
warning_placeholder: Motivation supplementari facultative pro le action de moderation.
target_origin: Origine del conto reportate
title: Reportos
@ -700,6 +701,7 @@ ia:
manage_appeals: Gerer appellos
manage_appeals_description: Permitte que usatores revide appellos contra actiones de moderation
manage_blocks: Gerer blocadas
manage_blocks_description: Permitter que usatores bloca le fornitores de e-mail e le adresses IP
manage_custom_emojis: Gerer emojis personalisate
manage_custom_emojis_description: Permitte que usatores gere emojis personalisate sur le servitor
manage_federation: Gerer federation
@ -717,6 +719,7 @@ ia:
manage_taxonomies: Gerer taxonomias
manage_taxonomies_description: Permitte que usatores revide contento in tendentias e actualisa le parametros de hashtag
manage_user_access: Gerer le accesso de usatores
manage_user_access_description: Permitte que usatores disactiva le authentication bifactorial de altere usatores, cambia lor adresses de e-mail, e reinitialisa lor contrasigno
manage_users: Gerer usatores
manage_users_description: Permitte que usatores vide le detalios de altere usatores e exeque actiones de moderation contra illes
manage_webhooks: Gerer Webhooks
@ -791,6 +794,7 @@ ia:
destroyed_msg: Le file incargate al sito ha essite delite!
software_updates:
critical_update: Critic per favor, actualisa rapidemente
description: Il es recommendate mantener tu installation de Mastodon actualisate pro beneficiar del ultime reparationes e functiones. In ultra, de tempore a tempore, il es de importantia critic actualisar Mastodon in tempore utile pro evitar problemas de securitate. Pro iste rationes, Mastodon verifica le presentia de actualisationes cata 30 minutas, e te notificara secundo tu preferentias de notification in e-mail.
documentation_link: Pro saper plus
release_notes: Notas de version
title: Actualisationes disponibile
@ -878,6 +882,7 @@ ia:
message_html: "<strong>Tu immagazinage de objectos es mal configurate. Le confidentialitate de tu usatores es in risco.</strong>"
tags:
moderation:
not_trendable: Non pro tendentia
pending_review: Attende revision
title: Stato
name: Nomine

View File

@ -1456,6 +1456,7 @@ it:
media_attachments:
validations:
images_and_video: Impossibile allegare video a un post che contiene già immagini
not_found: Media %{ids} non trovato o già collegato a un altro post
not_ready: Impossibile allegare file per cui l'elaborazione non è finita. Riprova tra poco!
too_many: Impossibile allegare più di 4 file
migrations:

View File

@ -1430,6 +1430,7 @@ ko:
media_attachments:
validations:
images_and_video: 이미 사진이 첨부된 게시물엔 동영상을 첨부할 수 없습니다.
not_found: 미디어 %{ids}는 찾을 수 없거나 이미 다른 게시물에 첨부되었습니다
not_ready: 처리가 끝나지 않은 파일은 첨부할 수 없습니다. 잠시 후에 다시 시도해 주세요!
too_many: 최대 4개까지 첨부할 수 있습니다
migrations:

View File

@ -941,6 +941,7 @@ lt:
media_attachments:
validations:
images_and_video: Negalima pridėti video prie statuso, kuris jau turi nuotrauką
not_found: Medija %{ids} nerasta arba jau pridėta prie kito įrašo.
too_many: Negalima pridėti daugiau nei 4 failų
migrations:
acct: Perkelta į

View File

@ -1454,6 +1454,7 @@ nl:
media_attachments:
validations:
images_and_video: Een video kan niet aan een bericht met afbeeldingen worden gekoppeld
not_found: Media %{ids} niet gevonden of al toegevoegd aan een ander bericht
not_ready: Kan geen bestanden toevoegen die nog niet zijn verwerkt. Probeer het later opnieuw!
too_many: Er kunnen niet meer dan 4 afbeeldingen toegevoegd worden
migrations:

View File

@ -1506,6 +1506,7 @@ pl:
media_attachments:
validations:
images_and_video: Nie możesz załączyć pliku wideo do wpisu, który zawiera już zdjęcia
not_found: Nie znaleziono mediów %{ids}, lub są już dołączone do innego wpisu
not_ready: Nie można załączyć plików których przetwarzanie nie zostało ukończone. Spróbuj ponownie za chwilę!
too_many: Nie możesz załączyć więcej niż 4 plików
migrations:

View File

@ -314,6 +314,7 @@ fy:
listable: Tastean dat dizze hashtag yn sykopdrachten en oanrekommandaasjes te sjen is
name: Hashtag
trendable: Goedkarre dat dizze hashtag ûnder trends te sjen is
usable: Berjochten tastean dizze hashtag lokaal te brûken
user:
role: Rol
time_zone: Tiidsône

View File

@ -1446,6 +1446,7 @@ sq:
media_attachments:
validations:
images_and_video: Smund të bashkëngjitet video te një gjendje që përmban figura tashmë
not_found: Su gjet media %{ids}, ose është bashkëngjitur tashmë një tjetër postimi
not_ready: Smund të bashkëngjiten kartela që skanë përfunduar së përpunuari. Riprovoni pas një çasti!
too_many: Smund të bashkëngjiten më shumë se 4 kartela
migrations:

View File

@ -1506,6 +1506,7 @@ uk:
media_attachments:
validations:
images_and_video: Не можна додати відео до допису з зображеннями
not_found: Медіа %{ids} не знайдено або вже прикріплено до іншого допису
not_ready: Не можна прикріпити файли, оброблення яких ще не закінчилося. Спробуйте ще раз через хвилину!
too_many: Не можна додати більше 4 файлів
migrations:

View File

@ -1428,6 +1428,7 @@ vi:
media_attachments:
validations:
images_and_video: Không thể đính kèm video vào tút đã chứa hình ảnh
not_found: Không tìm thấy %{ids} hoặc nó đã bị đính kèm với tút khác
not_ready: Tập tin này vẫn chưa xử lý xong. Hãy thử lại sau!
too_many: Không thể đính kèm hơn 4 tệp
migrations:

View File

@ -1430,6 +1430,7 @@ zh-TW:
media_attachments:
validations:
images_and_video: 無法於已有圖片之嘟文中加入影片
not_found: 找不到多媒體 %{ids} 或已附加於另一嘟文中
not_ready: 修但幾勒!不能附加未完成處理的檔案欸,咁按呢?
too_many: 無法加入超過 4 個檔案
migrations:

View File

@ -1,22 +0,0 @@
# Be sure to restart your server when you modify this file.
# Your secret key is used for verifying the integrity of signed cookies.
# If you change this key, all old signed cookies will become invalid!
# Make sure the secret is at least 30 characters and all random,
# no regular words or you'll be exposed to dictionary attacks.
# You can use `rails secret` to generate a secure secret key.
# Make sure the secrets in this file are kept private
# if you're sharing your code publicly.
development:
secret_key_base: d4398e4af52f1fc5be5c3c8764e9ecce7beac5462826cb8b649373b2aad5a0f133598ed817c4e9931e943041460d6b6eda40a854e825e1bbd510c4594b1538f2
test:
secret_key_base: 5be187ddbd651211a906f9aa399f4a148edf6e06b971c7c0b5429b9483df6e21d262cc846447d0f89b89c32d56a99e151039df5dd874ede7f712afbe041a9269
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

View File

@ -21,6 +21,34 @@ describe JsonLdHelper do
end
end
describe '#uri_from_bearcap' do
subject { helper.uri_from_bearcap(string) }
context 'when a bear string has a u param' do
let(:string) { 'bear:?t=TOKEN&u=https://example.com/foo' }
it 'returns the value from the u query param' do
expect(subject).to eq('https://example.com/foo')
end
end
context 'when a bear string does not have a u param' do
let(:string) { 'bear:?t=TOKEN&h=https://example.com/foo' }
it 'returns nil' do
expect(subject).to be_nil
end
end
context 'when a non-bear string' do
let(:string) { 'http://example.com' }
it 'returns the string' do
expect(subject).to eq('http://example.com')
end
end
end
describe '#first_of_value' do
context 'when value.is_a?(Array)' do
it 'returns value.first' do

View File

@ -23,12 +23,6 @@ describe StatusesHelper do
end
end
def status_text_summary(status)
return if status.spoiler_text.blank?
I18n.t('statuses.content_warning', warning: status.spoiler_text)
end
describe 'fa_visibility_icon' do
context 'with a status that is public' do
let(:status) { Status.new(visibility: 'public') }

View File

@ -0,0 +1,16 @@
# frozen_string_literal: true
require 'rails_helper'
describe AnnualReport do
describe '#generate' do
subject { described_class.new(account, Time.zone.now.year) }
let(:account) { Fabricate :account }
it 'builds a report for an account' do
expect { subject.generate }
.to change(GeneratedAnnualReport, :count).by(1)
end
end
end

View File

@ -114,10 +114,11 @@ describe '/api/v1/accounts' do
expect(response).to have_http_status(200)
json = body_as_json
expect(json[:following]).to be true
expect(json[:requested]).to be false
expect(body_as_json)
.to include(
following: true,
requested: false
)
expect(user.account.following?(other_account)).to be true
end
@ -133,10 +134,11 @@ describe '/api/v1/accounts' do
expect(response).to have_http_status(200)
json = body_as_json
expect(json[:following]).to be false
expect(json[:requested]).to be true
expect(body_as_json)
.to include(
following: false,
requested: true
)
expect(user.account.requested?(other_account)).to be true
end

View File

@ -96,10 +96,11 @@ RSpec.describe 'Canonical Email Blocks' do
subject
expect(response).to have_http_status(200)
json = body_as_json
expect(json[:id]).to eq(canonical_email_block.id.to_s)
expect(json[:canonical_email_hash]).to eq(canonical_email_block.canonical_email_hash)
expect(body_as_json)
.to include(
id: eq(canonical_email_block.id.to_s),
canonical_email_hash: eq(canonical_email_block.canonical_email_hash)
)
end
end

View File

@ -133,10 +133,8 @@ RSpec.describe 'Domain Blocks' do
it 'creates a domain block with the expected domain name and severity', :aggregate_failures do
subject
body = body_as_json
expect(response).to have_http_status(200)
expect(body).to match a_hash_including(
expect(body_as_json).to match a_hash_including(
{
domain: 'foo.bar.com',
severity: 'silence',
@ -156,10 +154,8 @@ RSpec.describe 'Domain Blocks' do
it 'creates a domain block with the expected domain name and severity', :aggregate_failures do
subject
body = body_as_json
expect(response).to have_http_status(200)
expect(body).to match a_hash_including(
expect(body_as_json).to match a_hash_including(
{
domain: 'foo.bar.com',
severity: 'suspend',

View File

@ -88,10 +88,12 @@ RSpec.describe 'IP Blocks' do
subject
expect(response).to have_http_status(200)
json = body_as_json
expect(json[:ip]).to eq("#{ip_block.ip}/#{ip_block.ip.prefix}")
expect(json[:severity]).to eq(ip_block.severity.to_s)
expect(body_as_json)
.to include(
ip: eq("#{ip_block.ip}/#{ip_block.ip.prefix}"),
severity: eq(ip_block.severity.to_s)
)
end
context 'when ip block does not exist' do
@ -118,11 +120,12 @@ RSpec.describe 'IP Blocks' do
subject
expect(response).to have_http_status(200)
json = body_as_json
expect(json[:ip]).to eq("#{params[:ip]}/32")
expect(json[:severity]).to eq(params[:severity])
expect(json[:comment]).to eq(params[:comment])
expect(body_as_json)
.to include(
ip: eq("#{params[:ip]}/32"),
severity: eq(params[:severity]),
comment: eq(params[:comment])
)
end
context 'when the required ip param is not provided' do

View File

@ -61,9 +61,10 @@ RSpec.describe 'Apps' do
expect(response).to have_http_status(200)
expect(Doorkeeper::Application.find_by(name: client_name)).to be_present
body = body_as_json
expect(body[:scopes]).to eq Doorkeeper.config.default_scopes.to_a
expect(body_as_json)
.to include(
scopes: Doorkeeper.config.default_scopes.to_a
)
end
end
@ -81,9 +82,10 @@ RSpec.describe 'Apps' do
expect(app).to be_present
expect(app.scopes.to_s).to eq 'read'
body = body_as_json
expect(body[:scopes]).to eq ['read']
expect(body_as_json)
.to include(
scopes: %w(read)
)
end
end
@ -163,10 +165,11 @@ RSpec.describe 'Apps' do
expect(app.redirect_uri).to eq redirect_uris
expect(app.redirect_uris).to eq redirect_uris.split
body = body_as_json
expect(body[:redirect_uri]).to eq redirect_uris
expect(body[:redirect_uris]).to eq redirect_uris.split
expect(body_as_json)
.to include(
redirect_uri: redirect_uris,
redirect_uris: redirect_uris.split
)
end
end
@ -184,10 +187,11 @@ RSpec.describe 'Apps' do
expect(app.redirect_uri).to eq redirect_uris.join "\n"
expect(app.redirect_uris).to eq redirect_uris
body = body_as_json
expect(body[:redirect_uri]).to eq redirect_uris.join "\n"
expect(body[:redirect_uris]).to eq redirect_uris
expect(body_as_json)
.to include(
redirect_uri: redirect_uris.join("\n"),
redirect_uris: redirect_uris
)
end
end

View File

@ -55,10 +55,8 @@ RSpec.describe 'Blocks' do
it 'queries the blocks in range according to max_id', :aggregate_failures do
subject
response_body = body_as_json
expect(response_body.size).to be 1
expect(response_body[0][:id]).to eq(blocks[0].target_account.id.to_s)
expect(body_as_json)
.to contain_exactly(include(id: blocks.first.target_account.id.to_s))
end
end
@ -68,10 +66,8 @@ RSpec.describe 'Blocks' do
it 'queries the blocks in range according to since_id', :aggregate_failures do
subject
response_body = body_as_json
expect(response_body.size).to be 1
expect(response_body[0][:id]).to eq(blocks[2].target_account.id.to_s)
expect(body_as_json)
.to contain_exactly(include(id: blocks[2].target_account.id.to_s))
end
end
end

View File

@ -37,9 +37,7 @@ RSpec.describe 'FeaturedTags' do
it 'returns an empty body' do
get '/api/v1/featured_tags', headers: headers
body = body_as_json
expect(body).to be_empty
expect(body_as_json).to be_empty
end
end
@ -49,10 +47,10 @@ RSpec.describe 'FeaturedTags' do
it 'returns only the featured tags belonging to the requesting user' do
get '/api/v1/featured_tags', headers: headers
body = body_as_json
expected_ids = user_featured_tags.pluck(:id).map(&:to_s)
expect(body.pluck(:id)).to match_array(expected_ids)
expect(body_as_json.pluck(:id))
.to match_array(
user_featured_tags.pluck(:id).map(&:to_s)
)
end
end
end
@ -69,9 +67,10 @@ RSpec.describe 'FeaturedTags' do
it 'returns the correct tag name' do
post '/api/v1/featured_tags', headers: headers, params: params
body = body_as_json
expect(body[:name]).to eq(params[:name])
expect(body_as_json)
.to include(
name: params[:name]
)
end
it 'creates a new featured tag for the requesting user' do
@ -142,9 +141,7 @@ RSpec.describe 'FeaturedTags' do
it 'returns an empty body' do
delete "/api/v1/featured_tags/#{id}", headers: headers
body = body_as_json
expect(body).to be_empty
expect(body_as_json).to be_empty
end
it 'deletes the featured tag', :inline_jobs do

View File

@ -17,13 +17,12 @@ RSpec.describe 'API Markers' do
end
it 'returns markers', :aggregate_failures do
json = body_as_json
expect(response).to have_http_status(200)
expect(json.key?(:home)).to be true
expect(json[:home][:last_read_id]).to eq '123'
expect(json.key?(:notifications)).to be true
expect(json[:notifications][:last_read_id]).to eq '456'
expect(body_as_json)
.to include(
home: include(last_read_id: '123'),
notifications: include(last_read_id: '456')
)
end
end

View File

@ -58,10 +58,8 @@ RSpec.describe 'Mutes' do
it 'queries mutes in range according to max_id', :aggregate_failures do
subject
body = body_as_json
expect(body.size).to eq 1
expect(body[0][:id]).to eq mutes[0].target_account_id.to_s
expect(body_as_json)
.to contain_exactly(include(id: mutes.first.target_account_id.to_s))
end
end
@ -71,10 +69,8 @@ RSpec.describe 'Mutes' do
it 'queries mutes in range according to since_id', :aggregate_failures do
subject
body = body_as_json
expect(body.size).to eq 1
expect(body[0][:id]).to eq mutes[1].target_account_id.to_s
expect(body_as_json)
.to contain_exactly(include(id: mutes[1].target_account_id.to_s))
end
end

View File

@ -24,11 +24,14 @@ describe 'API V1 Statuses Reblogs' do
expect(user.account.reblogged?(status)).to be true
hash_body = body_as_json
expect(hash_body[:reblog][:id]).to eq status.id.to_s
expect(hash_body[:reblog][:reblogs_count]).to eq 1
expect(hash_body[:reblog][:reblogged]).to be true
expect(body_as_json)
.to include(
reblog: include(
id: status.id.to_s,
reblogs_count: 1,
reblogged: true
)
)
end
end
@ -57,11 +60,12 @@ describe 'API V1 Statuses Reblogs' do
expect(user.account.reblogged?(status)).to be false
hash_body = body_as_json
expect(hash_body[:id]).to eq status.id.to_s
expect(hash_body[:reblogs_count]).to eq 0
expect(hash_body[:reblogged]).to be false
expect(body_as_json)
.to include(
id: status.id.to_s,
reblogs_count: 0,
reblogged: false
)
end
end
@ -81,11 +85,12 @@ describe 'API V1 Statuses Reblogs' do
expect(user.account.reblogged?(status)).to be false
hash_body = body_as_json
expect(hash_body[:id]).to eq status.id.to_s
expect(hash_body[:reblogs_count]).to eq 0
expect(hash_body[:reblogged]).to be false
expect(body_as_json)
.to include(
id: status.id.to_s,
reblogs_count: 0,
reblogged: false
)
end
end

View File

@ -32,10 +32,8 @@ RSpec.describe 'Suggestions' do
it 'returns accounts' do
subject
body = body_as_json
expect(body.size).to eq 2
expect(body.pluck(:id)).to match_array([bob, jeff].map { |i| i.id.to_s })
expect(body_as_json)
.to contain_exactly(include(id: bob.id.to_s), include(id: jeff.id.to_s))
end
context 'with limit param' do

View File

@ -42,9 +42,11 @@ RSpec.describe 'API V2 Filters Keywords' do
it 'creates a filter', :aggregate_failures do
expect(response).to have_http_status(200)
json = body_as_json
expect(json[:keyword]).to eq 'magic'
expect(json[:whole_word]).to be false
expect(body_as_json)
.to include(
keyword: 'magic',
whole_word: false
)
filter = user.account.custom_filters.first
expect(filter).to_not be_nil
@ -71,9 +73,11 @@ RSpec.describe 'API V2 Filters Keywords' do
it 'responds with the keyword', :aggregate_failures do
expect(response).to have_http_status(200)
json = body_as_json
expect(json[:keyword]).to eq 'foo'
expect(json[:whole_word]).to be false
expect(body_as_json)
.to include(
keyword: 'foo',
whole_word: false
)
end
context "when trying to access another user's filter keyword" do

View File

@ -43,8 +43,10 @@ RSpec.describe 'API V2 Filters Statuses' do
it 'creates a filter', :aggregate_failures do
expect(response).to have_http_status(200)
json = body_as_json
expect(json[:status_id]).to eq status.id.to_s
expect(body_as_json)
.to include(
status_id: status.id.to_s
)
filter = user.account.custom_filters.first
expect(filter).to_not be_nil
@ -71,8 +73,10 @@ RSpec.describe 'API V2 Filters Statuses' do
it 'responds with the filter', :aggregate_failures do
expect(response).to have_http_status(200)
json = body_as_json
expect(json[:status_id]).to eq status_filter.status_id.to_s
expect(body_as_json)
.to include(
status_id: status_filter.status.id.to_s
)
end
context "when trying to access another user's filter keyword" do

View File

@ -58,12 +58,15 @@ RSpec.describe 'Filters' do
it 'returns a filter with keywords', :aggregate_failures do
subject
json = body_as_json
expect(json[:title]).to eq 'magic'
expect(json[:filter_action]).to eq 'hide'
expect(json[:context]).to eq ['home']
expect(json[:keywords].map { |keyword| keyword.slice(:keyword, :whole_word) }).to match [{ keyword: 'magic', whole_word: true }]
expect(body_as_json)
.to include(
title: 'magic',
filter_action: 'hide',
context: %w(home),
keywords: contain_exactly(
include(keyword: 'magic', whole_word: true)
)
)
end
it 'creates a filter', :aggregate_failures do

View File

@ -129,9 +129,11 @@ describe 'The /.well-known/webfinger endpoint' do
end
it 'returns links for the internal account' do
json = body_as_json
expect(json[:subject]).to eq 'acct:mastodon.internal@cb6e6126.ngrok.io'
expect(json[:aliases]).to eq ['https://cb6e6126.ngrok.io/actor']
expect(body_as_json)
.to include(
subject: 'acct:mastodon.internal@cb6e6126.ngrok.io',
aliases: ['https://cb6e6126.ngrok.io/actor']
)
end
end

View File

@ -34,7 +34,7 @@ RSpec.describe PostStatusService do
it 'schedules a status for future creation and does not create one immediately' do
media = Fabricate(:media_attachment, account: account)
status = subject.call(account, text: 'Hi future!', media_ids: [media.id], scheduled_at: future)
status = subject.call(account, text: 'Hi future!', media_ids: [media.id.to_s], scheduled_at: future)
expect(status)
.to be_a(ScheduledStatus)
@ -42,7 +42,7 @@ RSpec.describe PostStatusService do
scheduled_at: eq(future),
params: include(
'text' => eq('Hi future!'),
'media_ids' => contain_exactly(media.id)
'media_ids' => contain_exactly(media.id.to_s)
)
)
expect(media.reload.status).to be_nil
@ -219,7 +219,7 @@ RSpec.describe PostStatusService do
status = subject.call(
account,
text: 'test status update',
media_ids: [media.id]
media_ids: [media.id.to_s]
)
expect(media.reload.status).to eq status
@ -233,7 +233,7 @@ RSpec.describe PostStatusService do
subject.call(
account,
text: 'test status update',
media_ids: [media.id]
media_ids: [media.id.to_s]
)
end.to raise_error(
Mastodon::ValidationError,
@ -249,7 +249,7 @@ RSpec.describe PostStatusService do
subject.call(
account,
text: 'test status update',
media_ids: Array.new(2) { Fabricate(:media_attachment, account: account) }.map(&:id)
media_ids: Array.new(2) { Fabricate(:media_attachment, account: account) }.map { |m| m.id.to_s }
)
end.to raise_error(
Mastodon::ValidationError,
@ -271,7 +271,7 @@ RSpec.describe PostStatusService do
media_ids: [
video,
image,
].map(&:id)
].map { |m| m.id.to_s }
)
end.to raise_error(
Mastodon::ValidationError,

View File

@ -69,7 +69,7 @@ RSpec.describe UpdateStatusService do
before do
status.media_attachments << detached_media_attachment
subject.call(status, status.account_id, text: 'Foo', media_ids: [attached_media_attachment.id])
subject.call(status, status.account_id, text: 'Foo', media_ids: [attached_media_attachment.id.to_s])
end
it 'updates media attachments' do
@ -95,7 +95,7 @@ RSpec.describe UpdateStatusService do
before do
status.media_attachments << media_attachment
subject.call(status, status.account_id, text: 'Foo', media_ids: [media_attachment.id], media_attributes: [{ id: media_attachment.id, description: 'New description' }])
subject.call(status, status.account_id, text: 'Foo', media_ids: [media_attachment.id.to_s], media_attributes: [{ id: media_attachment.id, description: 'New description' }])
end
it 'does not detach media attachment' do