Since efe5e0e send_message is called with an extra param; fix mocked
send_message to handle this param.
52 lines
1.3 KiB
Ruby
52 lines
1.3 KiB
Ruby
module PostArchiveTestHelper
|
|
def setup
|
|
super
|
|
|
|
mock_post_archive_service!
|
|
start_post_archive_transaction
|
|
end
|
|
|
|
def teardown
|
|
super
|
|
|
|
rollback_post_archive_transaction
|
|
end
|
|
|
|
def mock_post_archive_service!
|
|
mock_sqs_service = Class.new do
|
|
def send_message(msg, *options)
|
|
_, json = msg.split(/\n/)
|
|
json = JSON.parse(json)
|
|
json.delete("created_at")
|
|
json["version"] = 1 + PostArchive.where(post_id: json["post_id"]).count
|
|
prev = PostArchive.where(post_id: json["post_id"]).order("id desc").first
|
|
if prev
|
|
json["added_tags"] = json["tags"].scan(/\S+/) - prev.tags.scan(/\S+/)
|
|
json["removed_tags"] = prev.tags.scan(/\S+/) - json["tags"].scan(/\S+/)
|
|
else
|
|
json["added_tags"] = json["tags"].scan(/\S+/)
|
|
end
|
|
if merge?(prev, json)
|
|
prev.update_columns(json)
|
|
else
|
|
PostArchive.create(json)
|
|
end
|
|
end
|
|
|
|
def merge?(prev, json)
|
|
prev && (prev.updater_id == json["updater_id"]) && (prev.updated_at >= 1.hour.ago)
|
|
end
|
|
end
|
|
|
|
PostArchive.stubs(:sqs_service).returns(mock_sqs_service.new)
|
|
end
|
|
|
|
def start_post_archive_transaction
|
|
PostArchive.connection.begin_transaction joinable: false
|
|
end
|
|
|
|
def rollback_post_archive_transaction
|
|
PostArchive.connection.rollback_transaction
|
|
end
|
|
end
|