search: move query parsing code from tag model to post query builder.

This commit is contained in:
evazion
2020-03-06 21:14:50 -06:00
parent 2e0ad42eca
commit 967d398c8e
13 changed files with 583 additions and 598 deletions

View File

@@ -1430,7 +1430,7 @@ class PostTest < ActiveSupport::TestCase
# final should be <aaa>, <bbb>, <ddd>, <eee>
final_post = Post.find(post.id)
assert_equal(%w(aaa bbb ddd eee), Tag.scan_tags(final_post.tag_string).sort)
assert_equal(%w(aaa bbb ddd eee), PostQueryBuilder.scan_query(final_post.tag_string).sort)
end
should "merge any tag changes that were made after loading the initial set of tags part 2" do
@@ -1453,7 +1453,7 @@ class PostTest < ActiveSupport::TestCase
# final should be <aaa>, <bbb>, <ddd>, <eee>
final_post = Post.find(post.id)
assert_equal(%w(aaa bbb ddd eee), Tag.scan_tags(final_post.tag_string).sort)
assert_equal(%w(aaa bbb ddd eee), PostQueryBuilder.scan_query(final_post.tag_string).sort)
end
should "merge any parent, source, and rating changes that were made after loading the initial set" do

View File

@@ -93,37 +93,36 @@ class TagTest < ActiveSupport::TestCase
context "A tag parser" do
should "scan a query" do
assert_equal(%w(aaa bbb), Tag.scan_query("aaa bbb"))
assert_equal(%w(~AAa -BBB* -bbb*), Tag.scan_query("~AAa -BBB* -bbb*"))
assert_equal(%w(aaa bbb), PostQueryBuilder.scan_query("aaa bbb"))
assert_equal(%w(~AAa -BBB* -bbb*), PostQueryBuilder.scan_query("~AAa -BBB* -bbb*"))
end
should "not strip out valid characters when scanning" do
assert_equal(%w(aaa bbb), Tag.scan_tags("aaa bbb"))
assert_equal(%w(favgroup:yondemasu_yo,_azazel-san. pool:ichigo_100%), Tag.scan_tags("favgroup:yondemasu_yo,_azazel-san. pool:ichigo_100%"))
assert_equal(%w(aaa bbb), PostQueryBuilder.scan_query("aaa bbb"))
assert_equal(%w(favgroup:yondemasu_yo,_azazel-san. pool:ichigo_100%), PostQueryBuilder.scan_query("favgroup:yondemasu_yo,_azazel-san. pool:ichigo_100%"))
end
should "cast values" do
assert_equal(2048, Tag.parse_cast("2kb", :filesize))
assert_equal(2097152, Tag.parse_cast("2m", :filesize))
assert_nothing_raised {Tag.parse_cast("2009-01-01", :date)}
assert_nothing_raised {Tag.parse_cast("1234", :integer)}
assert_nothing_raised {Tag.parse_cast("1234.56", :float)}
assert_equal(2048, PostQueryBuilder.parse_cast("2kb", :filesize))
assert_equal(2097152, PostQueryBuilder.parse_cast("2m", :filesize))
assert_nothing_raised {PostQueryBuilder.parse_cast("2009-01-01", :date)}
assert_nothing_raised {PostQueryBuilder.parse_cast("1234", :integer)}
assert_nothing_raised {PostQueryBuilder.parse_cast("1234.56", :float)}
end
should "parse a query" do
tag1 = FactoryBot.create(:tag, :name => "abc")
tag2 = FactoryBot.create(:tag, :name => "acb")
assert_equal(["abc"], Tag.parse_query("md5:abc")[:md5])
assert_equal([:between, 1, 2], Tag.parse_query("id:1..2")[:post_id])
assert_equal([:gte, 1], Tag.parse_query("id:1..")[:post_id])
assert_equal([:lte, 2], Tag.parse_query("id:..2")[:post_id])
assert_equal([:gt, 2], Tag.parse_query("id:>2")[:post_id])
assert_equal([:lt, 3], Tag.parse_query("id:<3")[:post_id])
assert_equal([:lt, 3], Tag.parse_query("ID:<3")[:post_id])
assert_equal(["abc"], PostQueryBuilder.parse_query("md5:abc")[:md5])
assert_equal([:between, 1, 2], PostQueryBuilder.parse_query("id:1..2")[:post_id])
assert_equal([:gte, 1], PostQueryBuilder.parse_query("id:1..")[:post_id])
assert_equal([:lte, 2], PostQueryBuilder.parse_query("id:..2")[:post_id])
assert_equal([:gt, 2], PostQueryBuilder.parse_query("id:>2")[:post_id])
assert_equal([:lt, 3], PostQueryBuilder.parse_query("id:<3")[:post_id])
assert_equal([:lt, 3], PostQueryBuilder.parse_query("ID:<3")[:post_id])
Tag.expects(:normalize_tags_in_query).returns(nil)
assert_equal(["acb"], Tag.parse_query("a*b")[:tags][:include])
assert_equal(["acb"], PostQueryBuilder.parse_query("a*b")[:tags][:include])
end
should "parse single tags correctly" do
@@ -238,7 +237,7 @@ class TagTest < ActiveSupport::TestCase
should_not allow_value("東方").for(:name).on(:create)
should_not allow_value("FAV:blah").for(:name).on(:create)
metatags = Tag::METATAGS + TagCategory.mapping.keys
metatags = PostQueryBuilder::METATAGS + TagCategory.mapping.keys
metatags.each do |metatag|
should_not allow_value("#{metatag}:foo").for(:name).on(:create)
end