From 809506bdd40871ae8c56fa755d8d61bc279095a0 Mon Sep 17 00:00:00 2001
From: Matt Jankowski <matt@jankowski.online>
Date: Mon, 11 Dec 2023 02:59:40 -0500
Subject: [PATCH] Controller spec to request spec: `api/v1/accounts/pins`
 (#28300)

---
 .../api/v1/accounts/pins_controller_spec.rb   | 40 ------------------
 spec/requests/api/v1/accounts/pins_spec.rb    | 41 +++++++++++++++++++
 2 files changed, 41 insertions(+), 40 deletions(-)
 delete mode 100644 spec/controllers/api/v1/accounts/pins_controller_spec.rb
 create mode 100644 spec/requests/api/v1/accounts/pins_spec.rb

diff --git a/spec/controllers/api/v1/accounts/pins_controller_spec.rb b/spec/controllers/api/v1/accounts/pins_controller_spec.rb
deleted file mode 100644
index 36f525e75..000000000
--- a/spec/controllers/api/v1/accounts/pins_controller_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Api::V1::Accounts::PinsController do
-  let(:john)  { Fabricate(:user) }
-  let(:kevin) { Fabricate(:user) }
-  let(:token) { Fabricate(:accessible_access_token, resource_owner_id: john.id, scopes: 'write:accounts') }
-
-  before do
-    kevin.account.followers << john.account
-    allow(controller).to receive(:doorkeeper_token) { token }
-  end
-
-  describe 'POST #create' do
-    subject { post :create, params: { account_id: kevin.account.id } }
-
-    it 'creates account_pin', :aggregate_failures do
-      expect do
-        subject
-      end.to change { AccountPin.where(account: john.account, target_account: kevin.account).count }.by(1)
-      expect(response).to have_http_status(200)
-    end
-  end
-
-  describe 'DELETE #destroy' do
-    subject { delete :destroy, params: { account_id: kevin.account.id } }
-
-    before do
-      Fabricate(:account_pin, account: john.account, target_account: kevin.account)
-    end
-
-    it 'destroys account_pin', :aggregate_failures do
-      expect do
-        subject
-      end.to change { AccountPin.where(account: john.account, target_account: kevin.account).count }.by(-1)
-      expect(response).to have_http_status(200)
-    end
-  end
-end
diff --git a/spec/requests/api/v1/accounts/pins_spec.rb b/spec/requests/api/v1/accounts/pins_spec.rb
new file mode 100644
index 000000000..c293715f7
--- /dev/null
+++ b/spec/requests/api/v1/accounts/pins_spec.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe 'Accounts Pins API' do
+  let(:user)     { Fabricate(:user) }
+  let(:token)    { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
+  let(:scopes)   { 'write:accounts' }
+  let(:headers)  { { 'Authorization' => "Bearer #{token.token}" } }
+  let(:kevin) { Fabricate(:user) }
+
+  before do
+    kevin.account.followers << user.account
+  end
+
+  describe 'POST /api/v1/accounts/:account_id/pin' do
+    subject { post "/api/v1/accounts/#{kevin.account.id}/pin", headers: headers }
+
+    it 'creates account_pin', :aggregate_failures do
+      expect do
+        subject
+      end.to change { AccountPin.where(account: user.account, target_account: kevin.account).count }.by(1)
+      expect(response).to have_http_status(200)
+    end
+  end
+
+  describe 'POST /api/v1/accounts/:account_id/unpin' do
+    subject { post "/api/v1/accounts/#{kevin.account.id}/unpin", headers: headers }
+
+    before do
+      Fabricate(:account_pin, account: user.account, target_account: kevin.account)
+    end
+
+    it 'destroys account_pin', :aggregate_failures do
+      expect do
+        subject
+      end.to change { AccountPin.where(account: user.account, target_account: kevin.account).count }.by(-1)
+      expect(response).to have_http_status(200)
+    end
+  end
+end