Fix Idempotency-Key ignored when scheduling a post (#30084)
This commit is contained in:
		@@ -160,7 +160,7 @@ class PostStatusService < BaseService
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  def idempotency_duplicate
 | 
					  def idempotency_duplicate
 | 
				
			||||||
    if scheduled?
 | 
					    if scheduled?
 | 
				
			||||||
      @account.schedule_statuses.find(@idempotency_duplicate)
 | 
					      @account.scheduled_statuses.find(@idempotency_duplicate)
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
      @account.statuses.find(@idempotency_duplicate)
 | 
					      @account.statuses.find(@idempotency_duplicate)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
@@ -211,7 +211,7 @@ class PostStatusService < BaseService
 | 
				
			|||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def scheduled_options
 | 
					  def scheduled_options
 | 
				
			||||||
    @options.tap do |options_hash|
 | 
					    @options.dup.tap do |options_hash|
 | 
				
			||||||
      options_hash[:in_reply_to_id]  = options_hash.delete(:thread)&.id
 | 
					      options_hash[:in_reply_to_id]  = options_hash.delete(:thread)&.id
 | 
				
			||||||
      options_hash[:application_id]  = options_hash.delete(:application)&.id
 | 
					      options_hash[:application_id]  = options_hash.delete(:application)&.id
 | 
				
			||||||
      options_hash[:scheduled_at]    = nil
 | 
					      options_hash[:scheduled_at]    = nil
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,6 +54,13 @@ RSpec.describe PostStatusService do
 | 
				
			|||||||
        .to not_change { account.statuses_count }
 | 
					        .to not_change { account.statuses_count }
 | 
				
			||||||
        .and(not_change { previous_status.replies_count })
 | 
					        .and(not_change { previous_status.replies_count })
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'returns existing status when used twice with idempotency key' do
 | 
				
			||||||
 | 
					      account = Fabricate(:account)
 | 
				
			||||||
 | 
					      status1 = subject.call(account, text: 'test', idempotency: 'meepmeep', scheduled_at: future)
 | 
				
			||||||
 | 
					      status2 = subject.call(account, text: 'test', idempotency: 'meepmeep', scheduled_at: future)
 | 
				
			||||||
 | 
					      expect(status2.id).to eq status1.id
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it 'creates response to the original status of boost' do
 | 
					  it 'creates response to the original status of boost' do
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user