diff --git a/spec/lib/mastodon/cli/accounts_spec.rb b/spec/lib/mastodon/cli/accounts_spec.rb
index d62aaadd7b..ba49e480ad 100644
--- a/spec/lib/mastodon/cli/accounts_spec.rb
+++ b/spec/lib/mastodon/cli/accounts_spec.rb
@@ -924,4 +924,78 @@ describe Mastodon::CLI::Accounts do
       end
     end
   end
+
+  describe '#rotate' do
+    context 'when neither username nor --all option are given' do
+      it 'exits with an error message' do
+        expect { cli.rotate }.to output(
+          a_string_including('No account(s) given')
+        ).to_stdout
+          .and raise_error(SystemExit)
+      end
+    end
+
+    context 'when a username is given' do
+      let(:account) { Fabricate(:account) }
+
+      it 'correctly rotates keys for the specified account' do
+        old_private_key = account.private_key
+        old_public_key = account.public_key
+
+        cli.rotate(account.username)
+        account.reload
+
+        expect(account.private_key).to_not eq(old_private_key)
+        expect(account.public_key).to_not eq(old_public_key)
+      end
+
+      it 'broadcasts the new keys for the specified account' do
+        allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_in)
+
+        cli.rotate(account.username)
+
+        expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_in).with(anything, account.id, anything).once
+      end
+
+      context 'when the given username is not found' do
+        it 'exits with an error message when the specified username is not found' do
+          expect { cli.rotate('non_existent_username') }.to output(
+            a_string_including('No such account')
+          ).to_stdout
+            .and raise_error(SystemExit)
+        end
+      end
+    end
+
+    context 'when --all option is provided' do
+      let(:accounts) { Fabricate.times(3, :account) }
+      let(:options)  { { all: true } }
+
+      before do
+        allow(Account).to receive(:local).and_return(Account.where(id: accounts.map(&:id)))
+        cli.options = { all: true }
+      end
+
+      it 'correctly rotates keys for all local accounts' do
+        old_private_keys = accounts.map(&:private_key)
+        old_public_keys = accounts.map(&:public_key)
+
+        cli.rotate
+        accounts.each(&:reload)
+
+        expect(accounts.map(&:private_key)).to_not eq(old_private_keys)
+        expect(accounts.map(&:public_key)).to_not eq(old_public_keys)
+      end
+
+      it 'broadcasts the new keys for each account' do
+        allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_in)
+
+        cli.rotate
+
+        accounts.each do |account|
+          expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_in).with(anything, account.id, anything).once
+        end
+      end
+    end
+  end
 end