tests: fix post and pool version tests helpers.
* Fix the pool version SQS service to always be mocked before every test. Before we had to manually set it up before every test dealing with pool versions. * Fix it so that we reconnect to the post/pool version databases before every test. Before using $ARCHIVE_DATABASE_URL to set the database url failed because environment variables weren't loaded by dotenv yet when connections were first established.
This commit is contained in:
@@ -3,10 +3,14 @@ class PoolVersion < ApplicationRecord
|
||||
belongs_to :pool
|
||||
|
||||
def self.enabled?
|
||||
Danbooru.config.aws_sqs_archives_url.present?
|
||||
Rails.env.test? || Danbooru.config.aws_sqs_archives_url.present?
|
||||
end
|
||||
|
||||
establish_connection (ENV["ARCHIVE_DATABASE_URL"] || "archive_#{Rails.env}".to_sym) if enabled?
|
||||
def self.database_url
|
||||
ENV["ARCHIVE_DATABASE_URL"] || "archive_#{Rails.env}".to_sym
|
||||
end
|
||||
|
||||
establish_connection database_url if enabled?
|
||||
|
||||
module SearchMethods
|
||||
def default_order
|
||||
|
||||
@@ -9,7 +9,11 @@ class PostVersion < ApplicationRecord
|
||||
Rails.env.test? || Danbooru.config.aws_sqs_archives_url.present?
|
||||
end
|
||||
|
||||
establish_connection (ENV["ARCHIVE_DATABASE_URL"] || "archive_#{Rails.env}".to_sym) if enabled?
|
||||
def self.database_url
|
||||
ENV["ARCHIVE_DATABASE_URL"] || "archive_#{Rails.env}".to_sym
|
||||
end
|
||||
|
||||
establish_connection database_url if enabled?
|
||||
|
||||
def self.check_for_retry(msg)
|
||||
if msg =~ /can't get socket descriptor/ && msg =~ /post_versions/
|
||||
|
||||
@@ -3,8 +3,6 @@ require 'test_helper'
|
||||
class PoolElementsControllerTest < ActionDispatch::IntegrationTest
|
||||
context "The pools posts controller" do
|
||||
setup do
|
||||
mock_pool_archive_service!
|
||||
start_pool_archive_transaction
|
||||
@user = travel_to(1.month.ago) {create(:user)}
|
||||
@mod = create(:moderator_user)
|
||||
as_user do
|
||||
@@ -13,10 +11,6 @@ class PoolElementsControllerTest < ActionDispatch::IntegrationTest
|
||||
end
|
||||
end
|
||||
|
||||
teardown do
|
||||
rollback_pool_archive_transaction
|
||||
end
|
||||
|
||||
context "create action" do
|
||||
should "add a post to a pool" do
|
||||
post_auth pool_element_path, @user, params: {:pool_id => @pool.id, :post_id => @post.id, :format => "json"}
|
||||
|
||||
@@ -3,30 +3,17 @@ require 'test_helper'
|
||||
class PoolVersionsControllerTest < ActionDispatch::IntegrationTest
|
||||
context "The pool versions controller" do
|
||||
setup do
|
||||
mock_pool_archive_service!
|
||||
start_pool_archive_transaction
|
||||
@user = create(:user)
|
||||
end
|
||||
|
||||
teardown do
|
||||
rollback_pool_archive_transaction
|
||||
end
|
||||
|
||||
context "index action" do
|
||||
setup do
|
||||
as_user do
|
||||
@pool = create(:pool)
|
||||
end
|
||||
@pool = as(@user) { create(:pool) }
|
||||
@user_2 = create(:user)
|
||||
@user_3 = create(:user)
|
||||
|
||||
CurrentUser.scoped(@user_2, "1.2.3.4") do
|
||||
@pool.update(:post_ids => "1 2")
|
||||
end
|
||||
|
||||
CurrentUser.scoped(@user_3, "5.6.7.8") do
|
||||
@pool.update(:post_ids => "1 2 3 4")
|
||||
end
|
||||
as(@user_2) { @pool.update(post_ids: "1 2") }
|
||||
as(@user_3) { @pool.update(post_ids: "1 2 3 4") }
|
||||
|
||||
@versions = @pool.versions
|
||||
end
|
||||
|
||||
@@ -3,10 +3,6 @@ require 'test_helper'
|
||||
class PoolsControllerTest < ActionDispatch::IntegrationTest
|
||||
context "The pools controller" do
|
||||
setup do
|
||||
mock_pool_archive_service!
|
||||
PoolVersion.sqs_service.stubs(:merge?).returns(false)
|
||||
start_pool_archive_transaction
|
||||
|
||||
travel_to(1.month.ago) do
|
||||
@user = create(:user)
|
||||
@mod = create(:moderator_user)
|
||||
@@ -17,10 +13,6 @@ class PoolsControllerTest < ActionDispatch::IntegrationTest
|
||||
end
|
||||
end
|
||||
|
||||
teardown do
|
||||
rollback_pool_archive_transaction
|
||||
end
|
||||
|
||||
context "index action" do
|
||||
should "list all pools" do
|
||||
get pools_path
|
||||
|
||||
@@ -57,14 +57,17 @@ end
|
||||
class ActiveSupport::TestCase
|
||||
include ActiveJob::TestHelper
|
||||
include FactoryBot::Syntax::Methods
|
||||
include PostArchiveTestHelper
|
||||
include PoolArchiveTestHelper
|
||||
extend PostArchiveTestHelper
|
||||
extend PoolArchiveTestHelper
|
||||
include ReportbooruHelper
|
||||
include DownloadTestHelper
|
||||
include IqdbTestHelper
|
||||
include UploadTestHelper
|
||||
include TestHelpers
|
||||
|
||||
mock_post_version_service!
|
||||
mock_pool_version_service!
|
||||
|
||||
setup do
|
||||
Socket.stubs(:gethostname).returns("www.example.com")
|
||||
mock_popular_search_service!
|
||||
@@ -84,9 +87,12 @@ class ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
class ActionDispatch::IntegrationTest
|
||||
include PostArchiveTestHelper
|
||||
include PoolArchiveTestHelper
|
||||
include TestHelpers
|
||||
extend PostArchiveTestHelper
|
||||
extend PoolArchiveTestHelper
|
||||
|
||||
mock_post_version_service!
|
||||
mock_pool_version_service!
|
||||
|
||||
def method_authenticated(method_name, url, user, options)
|
||||
post session_path, params: { name: user.name, password: user.password }
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
module PoolArchiveTestHelper
|
||||
def mock_pool_archive_service!
|
||||
mock_sqs_service = Class.new do
|
||||
def send_message(msg, *options)
|
||||
_, json = msg.split(/\n/)
|
||||
json = JSON.parse(json)
|
||||
prev = PoolVersion.where(pool_id: json["pool_id"]).order("id desc").first
|
||||
if merge?(prev, json)
|
||||
prev.update_columns(json)
|
||||
else
|
||||
PoolVersion.create(json)
|
||||
end
|
||||
end
|
||||
def mock_pool_version_service!
|
||||
setup do
|
||||
PoolVersion.stubs(:sqs_service).returns(MockPoolSqsService.new)
|
||||
PoolVersion.establish_connection(PoolVersion.database_url)
|
||||
PoolVersion.connection.begin_transaction joinable: false
|
||||
end
|
||||
|
||||
def merge?(prev, json)
|
||||
prev && (prev.updater_id == json["updater_id"]) && (prev.updated_at >= 1.hour.ago)
|
||||
teardown do
|
||||
PoolVersion.connection.rollback_transaction
|
||||
end
|
||||
end
|
||||
|
||||
class MockPoolSqsService
|
||||
def send_message(msg, *options)
|
||||
_, json = msg.split(/\n/)
|
||||
json = JSON.parse(json)
|
||||
prev = PoolVersion.where(pool_id: json["pool_id"]).order("id desc").first
|
||||
if merge?(prev, json)
|
||||
prev.update_columns(json)
|
||||
else
|
||||
PoolVersion.create!(json)
|
||||
end
|
||||
end
|
||||
|
||||
PoolVersion.stubs(:sqs_service).returns(mock_sqs_service.new)
|
||||
end
|
||||
|
||||
def start_pool_archive_transaction
|
||||
PoolVersion.connection.begin_transaction joinable: false
|
||||
end
|
||||
|
||||
def rollback_pool_archive_transaction
|
||||
PoolVersion.connection.rollback_transaction
|
||||
def merge?(prev, json)
|
||||
prev && (prev.updater_id == json["updater_id"]) && (prev.updated_at >= 1.hour.ago)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,54 +1,42 @@
|
||||
module PostArchiveTestHelper
|
||||
def setup
|
||||
super
|
||||
def mock_post_version_service!
|
||||
setup do
|
||||
PostVersion.stubs(:sqs_service).returns(MockPostSqsService.new)
|
||||
PostVersion.establish_connection(PostVersion.database_url)
|
||||
PostVersion.connection.begin_transaction joinable: false
|
||||
end
|
||||
|
||||
mock_post_archive_service!
|
||||
start_post_archive_transaction
|
||||
teardown do
|
||||
PostVersion.connection.rollback_transaction
|
||||
end
|
||||
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 + PostVersion.where(post_id: json["post_id"]).count
|
||||
prev = PostVersion.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
|
||||
json["parent_changed"] = (prev.nil? || json.key?("parent_id") && prev.parent_id != json["parent_id"])
|
||||
json["source_changed"] = (prev.nil? || json.key?("source") && prev.source != json["source"])
|
||||
json["rating_changed"] = (prev.nil? || json.key?("rating") && prev.rating != json["rating"])
|
||||
if merge?(prev, json)
|
||||
prev.update_columns(json)
|
||||
else
|
||||
PostVersion.create(json)
|
||||
end
|
||||
class MockPostSqsService
|
||||
def send_message(msg, *options)
|
||||
_, json = msg.split(/\n/)
|
||||
json = JSON.parse(json)
|
||||
json.delete("created_at")
|
||||
json["version"] = 1 + PostVersion.where(post_id: json["post_id"]).count
|
||||
prev = PostVersion.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
|
||||
|
||||
def merge?(prev, json)
|
||||
prev && (prev.updater_id == json["updater_id"]) && (prev.updated_at >= 1.hour.ago)
|
||||
json["parent_changed"] = (prev.nil? || json.key?("parent_id") && prev.parent_id != json["parent_id"])
|
||||
json["source_changed"] = (prev.nil? || json.key?("source") && prev.source != json["source"])
|
||||
json["rating_changed"] = (prev.nil? || json.key?("rating") && prev.rating != json["rating"])
|
||||
if merge?(prev, json)
|
||||
prev.update_columns(json)
|
||||
else
|
||||
# XXX change this to `create!` and fix tests that don't set current user.
|
||||
PostVersion.create(json)
|
||||
end
|
||||
end
|
||||
|
||||
PostVersion.stubs(:sqs_service).returns(mock_sqs_service.new)
|
||||
end
|
||||
|
||||
def start_post_archive_transaction
|
||||
PostVersion.connection.begin_transaction joinable: false
|
||||
end
|
||||
|
||||
def rollback_post_archive_transaction
|
||||
PostVersion.connection.rollback_transaction
|
||||
def merge?(prev, json)
|
||||
prev && (prev.updater_id == json["updater_id"]) && (prev.updated_at >= 1.hour.ago)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -8,14 +8,9 @@ class PoolTest < ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
CurrentUser.ip_addr = "127.0.0.1"
|
||||
|
||||
mock_pool_archive_service!
|
||||
PoolVersion.sqs_service.stubs(:merge?).returns(false)
|
||||
start_pool_archive_transaction
|
||||
end
|
||||
|
||||
teardown do
|
||||
rollback_pool_archive_transaction
|
||||
CurrentUser.user = nil
|
||||
CurrentUser.ip_addr = nil
|
||||
end
|
||||
|
||||
@@ -23,7 +23,6 @@ class PostTest < ActiveSupport::TestCase
|
||||
end
|
||||
CurrentUser.user = @user
|
||||
CurrentUser.ip_addr = "127.0.0.1"
|
||||
mock_pool_archive_service!
|
||||
end
|
||||
|
||||
def teardown
|
||||
@@ -838,15 +837,6 @@ class PostTest < ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
context "for a pool" do
|
||||
setup do
|
||||
mock_pool_archive_service!
|
||||
start_pool_archive_transaction
|
||||
end
|
||||
|
||||
teardown do
|
||||
rollback_pool_archive_transaction
|
||||
end
|
||||
|
||||
context "on creation" do
|
||||
setup do
|
||||
@pool = FactoryBot.create(:pool)
|
||||
@@ -1863,10 +1853,6 @@ class PostTest < ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
context "Searching:" do
|
||||
setup do
|
||||
mock_pool_archive_service!
|
||||
end
|
||||
|
||||
should "return posts for the age:<1minute tag" do
|
||||
post = FactoryBot.create(:post)
|
||||
assert_tag_match([post], "age:<1minute")
|
||||
|
||||
Reference in New Issue
Block a user