Compare commits

...

16 Commits

Author SHA1 Message Date
Zee Aslam
deb1b41639
Merge 32c7ae3c0c into 199376a080 2025-11-27 10:57:24 +01:00
Matt Jankowski
199376a080
Use existing time format string to generate backup archive filename (#36469)
Some checks are pending
Check i18n / check-i18n (push) Waiting to run
Chromatic / Run Chromatic (push) Waiting to run
CodeQL / Analyze (actions) (push) Waiting to run
CodeQL / Analyze (javascript) (push) Waiting to run
CodeQL / Analyze (ruby) (push) Waiting to run
Check formatting / lint (push) Waiting to run
Haml Linting / lint (push) Waiting to run
JavaScript Linting / lint (push) Waiting to run
Ruby Linting / lint (push) Waiting to run
JavaScript Testing / test (push) Waiting to run
Historical data migration test / test (14-alpine) (push) Waiting to run
Historical data migration test / test (15-alpine) (push) Waiting to run
Historical data migration test / test (16-alpine) (push) Waiting to run
Historical data migration test / test (17-alpine) (push) Waiting to run
Ruby Testing / build (production) (push) Waiting to run
Ruby Testing / build (test) (push) Waiting to run
Ruby Testing / test (.ruby-version) (push) Blocked by required conditions
Ruby Testing / test (3.2) (push) Blocked by required conditions
Ruby Testing / test (3.3) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (.ruby-version) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (3.2) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (3.3) (push) Blocked by required conditions
Ruby Testing / End to End testing (.ruby-version) (push) Blocked by required conditions
Ruby Testing / End to End testing (3.2) (push) Blocked by required conditions
Ruby Testing / End to End testing (3.3) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:8.10.2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, opensearchproject/opensearch:2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (3.2, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (3.3, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
2025-11-27 09:38:27 +00:00
diondiondion
e126cfc76d
Fix error page when logging out or boosting on mobile (#37028) 2025-11-27 09:36:58 +00:00
David Roetzel
322a4fee53
First steps towards a collection creation service (#37020)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2025-11-27 09:36:44 +00:00
renovate[bot]
be2caba527
chore(deps): update dependency i18n-tasks to v1.1.2 (#37027)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-27 09:29:14 +00:00
Zee Aslam
32c7ae3c0c
Merge branch 'main' into fix-10609-poll-options 2025-10-29 13:23:39 -04:00
Zee Aslam
d85fb8aeb7
Merge branch 'main' into fix-10609-poll-options 2025-10-14 23:56:42 -04:00
Zee Aslam
036eefcc94
Merge branch 'main' into fix-10609-poll-options 2025-07-02 22:57:00 -04:00
Zee Aslam
06af2d2bc3
Merge branch 'main' into fix-10609-poll-options 2025-07-01 12:39:21 -04:00
Zee Aslam
491686db20
Merge branch 'main' into fix-10609-poll-options 2025-06-30 17:14:04 -04:00
Zee Aslam
f5e6722627
Merge branch 'main' into fix-10609-poll-options 2025-06-29 19:58:51 -04:00
Zee Aslam
0e66f139c8
Merge branch 'main' into fix-10609-poll-options 2025-06-26 12:17:40 -04:00
Zee Aslam
aa6a77fa1b
Update poll_options_validator.rb
Fix defaults to upstream mastodon values instead of glitch-soc
2025-06-25 19:08:28 -04:00
Zee Aslam
553642b43f
Merge branch 'main' into fix-10609-poll-options 2025-06-25 15:35:42 -04:00
Zee Aslam
9b9e3dd453
Update .env.production.sample 2025-06-25 14:25:12 -04:00
Zee Aslam
1761ae6ab0
Update poll_options_validator.rb 2025-06-25 14:22:46 -04:00
7 changed files with 142 additions and 5 deletions

View File

@ -88,3 +88,27 @@ S3_ALIAS_HOST=files.example.com
# -----------------------
IP_RETENTION_PERIOD=31556952
SESSION_RETENTION_PERIOD=31556952
# Fetch All Replies Behavior
# --------------------------
# Period to wait between fetching replies (in minutes)
FETCH_REPLIES_COOLDOWN_MINUTES=15
# Period to wait after a post is first created before fetching its replies (in minutes)
FETCH_REPLIES_INITIAL_WAIT_MINUTES=5
# Max number of replies to fetch - total, recursively through a whole reply tree
FETCH_REPLIES_MAX_GLOBAL=1000
# Max number of replies to fetch - for a single post
FETCH_REPLIES_MAX_SINGLE=500
# Max number of replies Collection pages to fetch - total
FETCH_REPLIES_MAX_PAGES=500
# Maximum allowed poll options
MAX_POLL_OPTIONS=4
# Maximum allowed poll option characters
MAX_POLL_OPTION_CHARS=50

View File

@ -324,7 +324,7 @@ GEM
rainbow (>= 2.0.0)
i18n (1.14.7)
concurrent-ruby (~> 1.0)
i18n-tasks (1.1.1)
i18n-tasks (1.1.2)
activesupport (>= 4.0.2)
ast (>= 2.1.0)
erubi

View File

@ -136,7 +136,7 @@ export default class ModalRoot extends PureComponent {
<Base backgroundColor={backgroundColor} onClose={this.handleClose} ignoreFocus={ignoreFocus}>
{visible && (
<>
<BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading} error={this.renderError} renderDelay={200}>
<BundleContainer key={type} fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading} error={this.renderError} renderDelay={200}>
{(SpecificComponent) => {
return <SpecificComponent {...props} onChangeBackgroundColor={this.setBackgroundColor} onClose={this.handleClose} ref={this.setModalRef} />;
}}

View File

@ -63,7 +63,7 @@ class BackupService < BaseService
dump_actor!(zipfile)
end
archive_filename = "#{['archive', Time.now.utc.strftime('%Y%m%d%H%M%S'), SecureRandom.hex(16)].join('-')}.zip"
archive_filename = "#{['archive', Time.current.to_fs(:number), SecureRandom.hex(16)].join('-')}.zip"
@backup.dump = ActionDispatch::Http::UploadedFile.new(tempfile: tmp_file, filename: archive_filename)
@backup.processed = true

View File

@ -0,0 +1,31 @@
# frozen_string_literal: true
class CreateCollectionService
def call(params, account)
tag = params.delete(:tag)
account_ids = params.delete(:account_ids)
@collection = Collection.new(params.merge({ account:, local: true, tag: find_or_create_tag(tag) }))
build_items(account_ids)
@collection.save!
@collection
end
private
def find_or_create_tag(name)
return nil if name.blank?
Tag.find_or_create_by_names(name).first
end
def build_items(account_ids)
return if account_ids.blank?
account_ids.each do |account_id|
account = Account.find(account_id)
# TODO: validate preferences
@collection.collection_items.build(account:)
end
end
end

View File

@ -1,8 +1,8 @@
# frozen_string_literal: true
class PollOptionsValidator < ActiveModel::Validator
MAX_OPTIONS = 4
MAX_OPTION_CHARS = 50
MAX_OPTIONS = (ENV['MAX_POLL_OPTIONS'] || 4).to_i
MAX_OPTION_CHARS = (ENV['MAX_POLL_OPTION_CHARS'] || 50).to_i
def validate(poll)
poll.errors.add(:options, I18n.t('polls.errors.too_few_options')) unless poll.options.size > 1

View File

@ -0,0 +1,82 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe CreateCollectionService do
subject { described_class.new }
let(:author) { Fabricate.create(:account) }
describe '#call' do
let(:base_params) do
{
name: 'People to follow',
description: 'All my favourites',
sensitive: false,
discoverable: true,
}
end
context 'when given valid parameters' do
it 'creates a new local collection' do
collection = nil
expect do
collection = subject.call(base_params, author)
end.to change(Collection, :count).by(1)
expect(collection).to be_a(Collection)
expect(collection).to be_local
end
context 'when given account ids' do
let(:account_ids) do
Fabricate.times(2, :account).map { |a| a.id.to_s }
end
let(:params) do
base_params.merge(account_ids:)
end
it 'also creates collection items' do
expect do
subject.call(params, author)
end.to change(CollectionItem, :count).by(2)
end
end
context 'when given a tag' do
let(:params) { base_params.merge(tag: '#people') }
context 'when the tag exists' do
let!(:tag) { Fabricate.create(:tag, name: 'people') }
it 'correctly assigns the existing tag' do
collection = subject.call(params, author)
expect(collection.tag).to eq tag
end
end
context 'when the tag does not exist' do
it 'creates a new tag' do
collection = nil
expect do
collection = subject.call(params, author)
end.to change(Tag, :count).by(1)
expect(collection.tag.name).to eq 'people'
end
end
end
end
context 'when given invalid parameters' do
it 'raises an exception' do
expect do
subject.call({}, author)
end.to raise_error(ActiveRecord::RecordInvalid)
end
end
end
end