Skip to content
Snippets Groups Projects
Commit c2af1381 authored by nullkal's avatar nullkal Committed by Eugen Rochko
Browse files

Allow multiple pinned statuses to be shown and make them be ordered b… (#4690)

* Allow multiple pinned statuses to be shown and make them be ordered by pinned date

* Set timestamps NOT NULL

* Make single-line pinned_statuses

* Spec for pinned_statuses

* Remove redundant empty line
parent fb8aa2b3
No related branches found
No related tags found
No related merge requests found
......@@ -14,7 +14,7 @@ class AccountsController < ApplicationController
return
end
@pinned_statuses = cache_collection(@account.pinned_statuses.limit(1), Status) unless media_requested?
@pinned_statuses = cache_collection(@account.pinned_statuses, Status) unless media_requested?
@statuses = filtered_statuses.paginate_by_max_id(20, params[:max_id], params[:since_id])
@statuses = cache_collection(@statuses, Status)
@next_url = next_url unless @statuses.empty?
......
......@@ -79,7 +79,7 @@ class Account < ApplicationRecord
# Pinned statuses
has_many :status_pins, inverse_of: :account, dependent: :destroy
has_many :pinned_statuses, through: :status_pins, class_name: 'Status', source: :status
has_many :pinned_statuses, -> { reorder('status_pins.created_at DESC') }, through: :status_pins, class_name: 'Status', source: :status
# Media
has_many :media_attachments, dependent: :destroy
......
......@@ -6,6 +6,8 @@
# id :integer not null, primary key
# account_id :integer not null
# status_id :integer not null
# created_at :datetime not null
# updated_at :datetime not null
#
class StatusPin < ApplicationRecord
......
class AddTimestampsToStatusPins < ActiveRecord::Migration[5.1]
def change
add_timestamps :status_pins, null: false, default: -> { 'CURRENT_TIMESTAMP' }
end
end
......@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20170823162448) do
ActiveRecord::Schema.define(version: 20170824103029) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
......@@ -285,6 +285,8 @@ ActiveRecord::Schema.define(version: 20170823162448) do
create_table "status_pins", force: :cascade do |t|
t.bigint "account_id", null: false
t.bigint "status_id", null: false
t.datetime "created_at", default: -> { "now()" }, null: false
t.datetime "updated_at", default: -> { "now()" }, null: false
t.index ["account_id", "status_id"], name: "index_status_pins_on_account_id_and_status_id", unique: true
t.index ["account_id"], name: "index_status_pins_on_account_id"
t.index ["status_id"], name: "index_status_pins_on_status_id"
......
......@@ -10,6 +10,13 @@ RSpec.describe AccountsController, type: :controller do
let!(:status2) { Status.create!(account: alice, text: 'Boop', thread: status1) }
let!(:status3) { Status.create!(account: alice, text: 'Picture!') }
let!(:status4) { Status.create!(account: alice, text: 'Mentioning @alice') }
let!(:status5) { Status.create!(account: alice, text: 'Kitsune') }
let!(:status6) { Status.create!(account: alice, text: 'Neko') }
let!(:status7) { Status.create!(account: alice, text: 'Tanuki') }
let!(:status_pin1) { StatusPin.create!(account: alice, status: status5, created_at: 5.days.ago) }
let!(:status_pin2) { StatusPin.create!(account: alice, status: status6, created_at: 2.years.ago) }
let!(:status_pin3) { StatusPin.create!(account: alice, status: status7, created_at: 10.minutes.ago) }
before do
status3.media_attachments.create!(account: alice, file: fixture_file_upload('files/attachment.jpg', 'image/jpeg'))
......@@ -70,6 +77,14 @@ RSpec.describe AccountsController, type: :controller do
expect(statuses[1]).to eq status2
end
it 'assigns @pinned_statuses' do
pinned_statuses = assigns(:pinned_statuses).to_a
expect(pinned_statuses.size).to eq 3
expect(pinned_statuses[0]).to eq status7
expect(pinned_statuses[1]).to eq status5
expect(pinned_statuses[2]).to eq status6
end
it 'returns http success' do
expect(response).to have_http_status(:success)
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment