Skip to content

Commit

Permalink
FIX: Change base importer to create new Bookmark records (#9603)
Browse files Browse the repository at this point in the history
Also add a spec and fixture with a mock importer that we can use to test the create_X methods of the base importer
  • Loading branch information
martin-brennan committed May 1, 2020
1 parent 37e9391 commit 867bc3b
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 3 deletions.
7 changes: 4 additions & 3 deletions script/import_scripts/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -606,9 +606,10 @@ def create_bookmarks(results, opts = {})
skipped += 1
puts "Skipping bookmark for user id #{params[:user_id]} and post id #{params[:post_id]}"
else
result = PostActionCreator.create(user, post, :bookmark)
created += 1 if result.success?
skipped += 1 if result.failed?
result = BookmarkManager.new(user).create(post_id: post.id)

created += 1 if result.errors.none?
skipped += 1 if result.errors.any?
end
end

Expand Down
57 changes: 57 additions & 0 deletions spec/fixtures/json/base-import-data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{
"bookmarks":[
{
"post_id":10,
"user_id":20
},
{
"post_id":11,
"user_id":20
},
{
"post_id":12,
"user_id":20
},
{
"post_id":13,
"user_id":20
},
{
"post_id":14,
"user_id":20
}
],
"posts":[
{
"user_id":20,
"id":10,
"raw":"This is test post 1"
},
{
"user_id":20,
"id":11,
"raw":"This is test post 2"
},
{
"user_id":20,
"id":12,
"raw":"This is test post 3"
},
{
"user_id":20,
"id":13,
"raw":"This is test post 4"
},
{
"user_id":20,
"id":14,
"raw":"This is test post 5"
}
],
"users":[
{
"id":20,
"email":"testimportuser@test.com"
}
]
}
57 changes: 57 additions & 0 deletions spec/script/import_scripts/base_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# frozen_string_literal: true

require 'rails_helper'
require_relative '../../../script/import_scripts/base'

describe ImportScripts::Base do
before do
STDOUT.stubs(:write)
end

class MockSpecImporter < ImportScripts::Base
def initialize(data)
super()
@import_data = data
end

def execute
import_users
import_posts
import_bookmarks
end

def import_users
users = @import_data[:users]
create_users(users) do |row|
{ email: row[:email], id: row[:id] }
end
end

def import_posts
posts = @import_data[:posts]
create_posts(posts) do |row|
user_id = @lookup.user_id_from_imported_user_id(row[:user_id]) || -1
{ user_id: user_id, raw: row[:raw], id: row[:id], title: "Test topic for post #{row[:id]}" }
end
end

def import_bookmarks
bookmarks = @import_data[:bookmarks]
create_bookmarks(bookmarks) do |row|
{ post_id: row[:post_id], user_id: row[:user_id] }
end
end
end

let(:import_data) do
import_file = Rack::Test::UploadedFile.new(file_from_fixtures("base-import-data.json", "json"))
ActiveSupport::HashWithIndifferentAccess.new(JSON.parse(import_file.read))
end

it "creates bookmarks, posts, and users" do
MockSpecImporter.new(import_data).perform
expect(Bookmark.count).to eq(5)
expect(Post.count).to eq(5)
expect(User.where('id > 0').count).to eq(1)
end
end

0 comments on commit 867bc3b

Please sign in to comment.