diff --git a/lib/duplicate_article_deleter.rb b/lib/duplicate_article_deleter.rb index 8cfdf2156b..da48bada15 100644 --- a/lib/duplicate_article_deleter.rb +++ b/lib/duplicate_article_deleter.rb @@ -49,7 +49,8 @@ def delete_duplicates_in(article_group) def delete_duplicates(title, ns) articles = Article.where(title:, namespace: ns, wiki_id: @wiki.id, deleted: false) .order(:created_at) - keeper = articles.first + # Default order is ascendent, so we want to keep the last article + keeper = articles.last return [] if keeper.nil? # Here we must verify that the titles match, since searching by title is case-insensitive. diff --git a/spec/lib/duplicate_article_deleter_spec.rb b/spec/lib/duplicate_article_deleter_spec.rb index ebef8d1b88..1d823a1a88 100644 --- a/spec/lib/duplicate_article_deleter_spec.rb +++ b/spec/lib/duplicate_article_deleter_spec.rb @@ -31,26 +31,26 @@ deleted: true) end - it 'marks one deleted when there are two ids for one page' do - first = create(:article, - id: 2262715, - title: 'Kostanay', - namespace: 0, - created_at: 1.day.from_now) - second = create(:article, - id: 46349871, - title: 'Kostanay', - namespace: 0, - created_at: 1.day.ago) - described_class.new.resolve_duplicates([first]) - undeleted = Article.where( + it 'marks oldest one deleted when there are two ids for one page' do + new_article = create(:article, + id: 2262715, + title: 'Kostanay', + namespace: 0, + created_at: 1.day.from_now) + duplicate_article = create(:article, + id: 46349871, + title: 'Kostanay', + namespace: 0, + created_at: 1.day.ago) + described_class.new.resolve_duplicates([new_article]) + deleted = Article.where( title: 'Kostanay', namespace: 0, - deleted: false + deleted: true ) - expect(undeleted.count).to eq(1) - expect(undeleted.first.id).to eq(second.id) + expect(deleted.count).to eq(1) + expect(deleted.first.id).to eq(duplicate_article.id) end it 'does not mark any deleted when articles different in title case' do