mirror of
https://github.com/discourse/discourse.git
synced 2025-04-28 16:54:35 +08:00
DEV: ensure user export ordering is predictable (#13340)
Flaky spec due to random ordering for the post_actions table. Introduces consistent ordering.
This commit is contained in:
parent
0241748876
commit
023ff9a282
@ -280,6 +280,7 @@ module Jobs
|
|||||||
.with_deleted
|
.with_deleted
|
||||||
.where(user_id: @current_user.id)
|
.where(user_id: @current_user.id)
|
||||||
.where(post_action_type_id: PostActionType.flag_types.values)
|
.where(post_action_type_id: PostActionType.flag_types.values)
|
||||||
|
.order(:created_at)
|
||||||
.each do |pa|
|
.each do |pa|
|
||||||
yield [
|
yield [
|
||||||
pa.id,
|
pa.id,
|
||||||
@ -303,6 +304,7 @@ module Jobs
|
|||||||
.with_deleted
|
.with_deleted
|
||||||
.where(user_id: @current_user.id)
|
.where(user_id: @current_user.id)
|
||||||
.where(post_action_type_id: PostActionType.types[:like])
|
.where(post_action_type_id: PostActionType.types[:like])
|
||||||
|
.order(:created_at)
|
||||||
.each do |pa|
|
.each do |pa|
|
||||||
post = Post.with_deleted.find_by(id: pa.post_id)
|
post = Post.with_deleted.find_by(id: pa.post_id)
|
||||||
yield [
|
yield [
|
||||||
@ -332,6 +334,7 @@ module Jobs
|
|||||||
.with_deleted
|
.with_deleted
|
||||||
.where(user_id: @current_user.id)
|
.where(user_id: @current_user.id)
|
||||||
.where.not(post_action_type_id: PostActionType.flag_types.values + [PostActionType.types[:like], PostActionType.types[:bookmark]])
|
.where.not(post_action_type_id: PostActionType.flag_types.values + [PostActionType.types[:like], PostActionType.types[:bookmark]])
|
||||||
|
.order(:created_at)
|
||||||
.each do |pa|
|
.each do |pa|
|
||||||
yield [
|
yield [
|
||||||
pa.id,
|
pa.id,
|
||||||
@ -352,6 +355,7 @@ module Jobs
|
|||||||
# Most Reviewable fields staff-private, but post content needs to be exported.
|
# Most Reviewable fields staff-private, but post content needs to be exported.
|
||||||
ReviewableQueuedPost
|
ReviewableQueuedPost
|
||||||
.where(created_by: @current_user.id)
|
.where(created_by: @current_user.id)
|
||||||
|
.order(:created_at)
|
||||||
.each do |rev|
|
.each do |rev|
|
||||||
|
|
||||||
yield [
|
yield [
|
||||||
|
@ -159,7 +159,7 @@ describe Jobs::ExportUserArchive do
|
|||||||
it 'can export a post from a deleted category' do
|
it 'can export a post from a deleted category' do
|
||||||
cat2 = Fabricate(:category)
|
cat2 = Fabricate(:category)
|
||||||
topic2 = Fabricate(:topic, category: cat2, user: user)
|
topic2 = Fabricate(:topic, category: cat2, user: user)
|
||||||
post2 = Fabricate(:post, topic: topic2, user: user)
|
_post2 = Fabricate(:post, topic: topic2, user: user)
|
||||||
|
|
||||||
cat2_id = cat2.id
|
cat2_id = cat2.id
|
||||||
cat2.destroy!
|
cat2.destroy!
|
||||||
@ -182,7 +182,7 @@ describe Jobs::ExportUserArchive do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it 'properly includes the profile fields' do
|
it 'properly includes the profile fields' do
|
||||||
serializer = job.preferences_export
|
_serializer = job.preferences_export
|
||||||
# puts MultiJson.dump(serializer, indent: 4)
|
# puts MultiJson.dump(serializer, indent: 4)
|
||||||
output = make_component_json
|
output = make_component_json
|
||||||
payload = output['user']
|
payload = output['user']
|
||||||
@ -205,7 +205,7 @@ describe Jobs::ExportUserArchive do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it 'properly includes session records' do
|
it 'properly includes session records' do
|
||||||
data, csv_out = make_component_csv
|
data, _csv_out = make_component_csv
|
||||||
expect(data.length).to eq(1)
|
expect(data.length).to eq(1)
|
||||||
|
|
||||||
expect(data[0]['user_agent']).to eq('MyWebBrowser')
|
expect(data[0]['user_agent']).to eq('MyWebBrowser')
|
||||||
@ -214,7 +214,7 @@ describe Jobs::ExportUserArchive do
|
|||||||
context 'auth token logs' do
|
context 'auth token logs' do
|
||||||
let(:component) { 'auth_token_logs' }
|
let(:component) { 'auth_token_logs' }
|
||||||
it 'includes details such as the path' do
|
it 'includes details such as the path' do
|
||||||
data, csv_out = make_component_csv
|
data, _csv_out = make_component_csv
|
||||||
expect(data.length).to eq(1)
|
expect(data.length).to eq(1)
|
||||||
|
|
||||||
expect(data[0]['action']).to eq('generate')
|
expect(data[0]['action']).to eq('generate')
|
||||||
@ -240,7 +240,7 @@ describe Jobs::ExportUserArchive do
|
|||||||
BadgeGranter.grant(badge3, user, post_id: Fabricate(:post).id)
|
BadgeGranter.grant(badge3, user, post_id: Fabricate(:post).id)
|
||||||
BadgeGranter.grant(badge3, user, post_id: Fabricate(:post).id)
|
BadgeGranter.grant(badge3, user, post_id: Fabricate(:post).id)
|
||||||
|
|
||||||
data, csv_out = make_component_csv
|
data, _csv_out = make_component_csv
|
||||||
expect(data.length).to eq(6)
|
expect(data.length).to eq(6)
|
||||||
|
|
||||||
expect(data[0]['badge_id']).to eq(badge1.id.to_s)
|
expect(data[0]['badge_id']).to eq(badge1.id.to_s)
|
||||||
@ -285,7 +285,7 @@ describe Jobs::ExportUserArchive do
|
|||||||
|
|
||||||
BookmarkReminderNotificationHandler.send_notification(pending_reminder)
|
BookmarkReminderNotificationHandler.send_notification(pending_reminder)
|
||||||
|
|
||||||
data, csv_out = make_component_csv
|
data, _csv_out = make_component_csv
|
||||||
|
|
||||||
expect(data.length).to eq(4)
|
expect(data.length).to eq(4)
|
||||||
|
|
||||||
@ -341,7 +341,7 @@ describe Jobs::ExportUserArchive do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it 'correctly exports the CategoryUser table' do
|
it 'correctly exports the CategoryUser table' do
|
||||||
data, csv_out = make_component_csv
|
data, _csv_out = make_component_csv
|
||||||
|
|
||||||
expect(data.find { |r| r['category_id'] == category.id }).to be_nil
|
expect(data.find { |r| r['category_id'] == category.id }).to be_nil
|
||||||
expect(data.length).to eq(4)
|
expect(data.length).to eq(4)
|
||||||
@ -376,10 +376,11 @@ describe Jobs::ExportUserArchive do
|
|||||||
PostActionCreator.spam(user, post3)
|
PostActionCreator.spam(user, post3)
|
||||||
PostActionDestroyer.destroy(user, post3, :spam)
|
PostActionDestroyer.destroy(user, post3, :spam)
|
||||||
PostActionCreator.inappropriate(user, post3)
|
PostActionCreator.inappropriate(user, post3)
|
||||||
|
|
||||||
result3 = PostActionCreator.off_topic(user, post4)
|
result3 = PostActionCreator.off_topic(user, post4)
|
||||||
result3.reviewable.perform(admin, :agree_and_keep)
|
result3.reviewable.perform(admin, :agree_and_keep)
|
||||||
|
|
||||||
data, csv_out = make_component_csv
|
data, _csv_out = make_component_csv
|
||||||
expect(data.length).to eq(4)
|
expect(data.length).to eq(4)
|
||||||
data.sort_by! { |row| row['post_id'].to_i }
|
data.sort_by! { |row| row['post_id'].to_i }
|
||||||
|
|
||||||
@ -411,7 +412,7 @@ describe Jobs::ExportUserArchive do
|
|||||||
PostActionDestroyer.destroy(user, post3, :like)
|
PostActionDestroyer.destroy(user, post3, :like)
|
||||||
post3.destroy!
|
post3.destroy!
|
||||||
|
|
||||||
data, csv_out = make_component_csv
|
data, _csv_out = make_component_csv
|
||||||
expect(data.length).to eq(2)
|
expect(data.length).to eq(2)
|
||||||
data.sort_by! { |row| row['post_id'].to_i }
|
data.sort_by! { |row| row['post_id'].to_i }
|
||||||
|
|
||||||
@ -461,7 +462,7 @@ describe Jobs::ExportUserArchive do
|
|||||||
UserVisit.create(user_id: user.id, visited_at: 1.year.ago, posts_read: 4, mobile: false, time_read: 40)
|
UserVisit.create(user_id: user.id, visited_at: 1.year.ago, posts_read: 4, mobile: false, time_read: 40)
|
||||||
UserVisit.create(user_id: user2.id, visited_at: 1.minute.ago, posts_read: 1, mobile: false, time_read: 50)
|
UserVisit.create(user_id: user2.id, visited_at: 1.minute.ago, posts_read: 1, mobile: false, time_read: 50)
|
||||||
|
|
||||||
data, csv_out = make_component_csv
|
data, _csv_out = make_component_csv
|
||||||
|
|
||||||
# user2's data is not mixed in
|
# user2's data is not mixed in
|
||||||
expect(data.length).to eq(4)
|
expect(data.length).to eq(4)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user