[deploy] Move video_duration_in_minutes_integer to serializer (#10268)

* Move video_duration_in_minutes_integer to serializer

* Add data update script to reindex video articles
This commit is contained in:
Michael Kohl 2020-09-14 09:47:54 +07:00 committed by GitHub
parent 4afa52f591
commit 7b729bbf06
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 23 additions and 5 deletions

View file

@ -360,10 +360,6 @@ class Article < ApplicationRecord
"#{duration[:hours]}:#{minutes_and_seconds}"
end
def video_duration_in_minutes_integer
(video_duration_in_seconds.to_i / 60) % 60
end
def update_score
new_score = reactions.sum(:points) + Reaction.where(reactable_id: user_id, reactable_type: "User").sum(:points)
update_columns(score: new_score,

View file

@ -12,7 +12,9 @@ module Search
# however, it really is a string in the format 00:00 which is why we
# added an extra field to handle that string
attribute :video_duration_string, &:video_duration_in_minutes
attribute :video_duration_in_minutes, &:video_duration_in_minutes_integer
attribute :video_duration_in_minutes do |article|
article.video_duration_in_seconds.to_i / 60
end
attribute :readable_publish_date_string, &:readable_publish_date

View file

@ -0,0 +1,8 @@
module DataUpdateScripts
class ReindexArticlesWithVideos
def run
articles = Article.where.not(video: nil).or(Article.where.not(video: ""))
articles.find_each(&:index_to_elasticsearch_inline)
end
end
end

View file

@ -21,4 +21,16 @@ RSpec.describe Search::ArticleSerializer do
result = Article::SEARCH_CLASS.index(article.id, data_hash)
expect(result["result"]).to eq("created")
end
it "correctly serializes video duration in minutes when video_duration_in_seconds is nil" do
data_hash = described_class.new(article).serializable_hash.dig(:data, :attributes)
expect(data_hash[:video_duration_in_minutes]).to eq(0)
end
it "correctly serializes video duration in minutes when video_duration_in_seconds is not nil" do
duration = (1.hour + 1.minute).to_i
allow(article).to receive(:video_duration_in_seconds).and_return(duration)
data_hash = described_class.new(article).serializable_hash.dig(:data, :attributes)
expect(data_hash[:video_duration_in_minutes]).to eq(61)
end
end