test/test_rule.rb in powertrack-1.2.0 vs test/test_rule.rb in powertrack-1.3.0

- old
+ new

@@ -10,16 +10,24 @@ assert_nil rule.tag assert !rule.long? assert rule.valid? assert_nil rule.error - rule = PowerTrack::Rule.new('pepsi', tag: 'soda', long: true) - assert_equal 'pepsi', rule.value - assert_equal 'soda', rule.tag - assert rule.long? - assert rule.valid? - assert_nil rule.error + long_rule = PowerTrack::Rule.new('pepsi', tag: 'soda', long: true) + assert_equal 'pepsi', long_rule.value + assert_equal 'soda', long_rule.tag + assert long_rule.long? + assert long_rule.valid? + assert_nil long_rule.error + + v2_rule = PowerTrack::Rule.new('dr pepper', tag: 'soda', v2: true) + assert v2_rule.v2? + assert_equal 'dr pepper', v2_rule.value + assert_equal 'soda', v2_rule.tag + assert v2_rule.long? + assert v2_rule.valid? + assert_nil v2_rule.error end def test_too_long_tag long_tag = 'a' * PowerTrack::Rule::MAX_TAG_LENGTH rule = PowerTrack::Rule.new('coke', tag: long_tag, long: false) @@ -32,26 +40,44 @@ assert_match /too long tag/i, rule.error end def test_too_long_value long_val = 'a' * PowerTrack::Rule::MAX_STD_RULE_VALUE_LENGTH + # v1 rule = PowerTrack::Rule.new(long_val) assert rule.valid? + # v2 + v2_rule = PowerTrack::Rule.new(long_val, v2: true) + assert v2_rule.v2? + assert v2_rule.valid? + assert_nil v2_rule.error + long_val = 'c' * PowerTrack::Rule::MAX_LONG_RULE_VALUE_LENGTH + # v1 rule = long_val.to_pwtk_rule(long: false) - assert !rule.valid? assert_match /too long value/i, rule.error assert long_val.to_pwtk_rule.valid? assert long_val.to_pwtk_rule(long: true).valid? + # v2 + assert long_val.to_pwtk_rule(v2: true).valid? + assert long_val.to_pwtk_rule(long: false, v2: true).valid? + very_long_val = 'rrr' * PowerTrack::Rule::MAX_LONG_RULE_VALUE_LENGTH + # v1 rule = very_long_val.to_pwtk_rule assert !rule.valid? assert_match /too long value/i, rule.error + + # v2 + v2_rule = very_long_val.to_pwtk_rule(v2: true) + assert v2_rule.v2? + assert !v2_rule.valid? + assert_match /too long value/i, v2_rule.error end def test_too_many_positive_terms phrase = ([ 'coke' ] * PowerTrack::Rule::MAX_POSITIVE_TERMS).join(' ') rule = PowerTrack::Rule.new(phrase) @@ -62,15 +88,29 @@ long_rule = PowerTrack::Rule.new(phrase, long: true) assert long_rule.long? assert long_rule.valid? assert_nil long_rule.error + # v2 + v2_rule = PowerTrack::Rule.new(phrase, v2: true) + assert v2_rule.v2? + assert v2_rule.long? + assert v2_rule.valid? + assert_nil v2_rule.error + phrase = ([ 'coke' ] * (2 * PowerTrack::Rule::MAX_POSITIVE_TERMS)).join(' ') + # v1 rule = PowerTrack::Rule.new(phrase, long: false) assert !rule.long? assert !rule.valid? assert_match /too many positive terms/i, rule.error + # v2 + v2_rule = PowerTrack::Rule.new(phrase, v2: true) + assert v2_rule.v2? + assert v2_rule.long? + assert v2_rule.valid? + assert_nil v2_rule.error long_rule = PowerTrack::Rule.new(phrase, long: true) assert long_rule.long? assert long_rule.valid? assert_nil long_rule.error @@ -82,10 +122,15 @@ assert_nil long_rule.error long_rule = PowerTrack::Rule.new(phrase + " OR from:michel") assert !rule.valid? assert_match /too many positive terms/i, rule.error + + v2_rule = PowerTrack::Rule.new(phrase + " OR from:michel", v2: true) + assert v2_rule.v2? + assert v2_rule.valid? + assert_nil v2_rule.error end def test_too_many_negative_terms phrase = ([ '-pepsi' ] * PowerTrack::Rule::MAX_POSITIVE_TERMS).join(' ') rule = PowerTrack::Rule.new(phrase) @@ -96,27 +141,88 @@ long_rule = PowerTrack::Rule.new(phrase, long: true) assert long_rule.long? assert long_rule.valid? assert_nil long_rule.error + v2_rule = PowerTrack::Rule.new(phrase, v2: true) + assert v2_rule.v2? + assert v2_rule.long? + assert v2_rule.valid? + assert_nil v2_rule.error + phrase = ([ '-pepsi' ] * (2 * PowerTrack::Rule::MAX_POSITIVE_TERMS)).join(' ') rule = PowerTrack::Rule.new(phrase) assert !rule.long? assert !rule.valid? assert_match /too many negative terms/i, rule.error long_rule = PowerTrack::Rule.new(phrase, long: true) assert long_rule.long? assert long_rule.valid? assert_nil long_rule.error + + v2_rule = PowerTrack::Rule.new(phrase, v2: true) + assert v2_rule.v2? + assert v2_rule.long? + assert v2_rule.valid? + assert_nil v2_rule.error end def test_contains_negated_or phrase = 'coke OR -pepsi' rule = PowerTrack::Rule.new(phrase) assert !rule.long? assert !rule.valid? assert_match /contains negated or/i, rule.error + + v2_rule = PowerTrack::Rule.new(phrase, v2: true) + assert v2_rule.v2? + assert v2_rule.long? + assert !v2_rule.valid? + assert_match /contains negated or/i, v2_rule.error + end + + def test_contains_explicit_and + phrase = 'coke AND pepsi' + rule = PowerTrack::Rule.new(phrase) + assert !rule.long? + assert rule.valid? + assert_nil rule.error + + v2_rule = PowerTrack::Rule.new(phrase, v2: true) + assert v2_rule.v2? + assert v2_rule.long? + assert !v2_rule.valid? + assert_match /contains explicit and/i, v2_rule.error + end + + def test_contains_explicit_not + [ 'coke NOT pepsi', 'NOT (pepsi OR "dr pepper")' ].each do |phrase| + rule = PowerTrack::Rule.new(phrase) + assert !rule.long? + assert rule.valid? + assert_nil rule.error + + v2_rule = PowerTrack::Rule.new(phrase, v2: true) + assert v2_rule.v2? + assert v2_rule.long? + assert !v2_rule.valid? + assert_match /contains explicit not/i, v2_rule.error + end + end + + def test_contains_lowercase_or + phrase = 'coke or pepsi' + rule = PowerTrack::Rule.new(phrase) + assert !rule.long? + assert rule.valid? + assert_nil rule.error + + v2_rule = PowerTrack::Rule.new(phrase, v2: true) + assert v2_rule.v2? + assert v2_rule.long? + assert !v2_rule.valid? + assert_match /contains lowercase or/i, v2_rule.error end def test_to_hash_and_json res = { value: 'coke OR pepsi' } rule = PowerTrack::Rule.new(res[:value])