1
0

Select date with at least one target undefined...

...in: test_create_duplicated_targets_should_fail
Add assert messages for clarification
This commit is contained in:
cryptogopher 2021-04-26 02:19:49 +02:00
parent 2fcc1e2ed1
commit 788dbc67c1

View File

@ -35,7 +35,7 @@ class TargetsTest < BodyTrackingSystemTestCase
AND exposures.view_type = 'Goal' \ AND exposures.view_type = 'Goal' \
AND exposures.view_id = #{Project.first.goals.binding.id}") AND exposures.view_id = #{Project.first.goals.binding.id}")
.where(exposures: {view: nil}).sample .where(exposures: {view: nil}).sample
assert quantity assert quantity, "All quantities have already been exposed for goal"
visit goal_targets_path(goal) visit goal_targets_path(goal)
assert_no_selector 'table#targets thead th', text: quantity.name assert_no_selector 'table#targets thead th', text: quantity.name
@ -211,12 +211,19 @@ class TargetsTest < BodyTrackingSystemTestCase
end end
def test_create_duplicated_targets_should_fail def test_create_duplicated_targets_should_fail
date = Date.current + rand(-10..10).days goal = @project.goals.binding
quantity_count = @project.quantities.except_targets.count
unusable_dates = goal.targets.group(:effective_from).count
.select { |date, count| count == quantity_count }.keys
date = ([*-10..10].map!{ |offset| Date.current + offset } - unusable_dates).sample
assert date, "Date with at least one target undefined does not exist in given period"
quantity = @project.quantities.except_targets quantity = @project.quantities.except_targets
.joins("LEFT OUTER JOIN targets ON targets.quantity_id = quantities.id \ .joins("LEFT OUTER JOIN targets ON targets.quantity_id = quantities.id \
AND targets.effective_from = #{date}") AND targets.effective_from = #{date}")
.where(targets: {id: nil}).sample .where(targets: {id: nil}).sample
assert quantity
msg = t('activerecord.errors.models.target.attributes.base.duplicated_record') msg = t('activerecord.errors.models.target.attributes.base.duplicated_record')
visit goal_targets_path(@project.goals.binding) visit goal_targets_path(@project.goals.binding)
@ -300,8 +307,8 @@ class TargetsTest < BodyTrackingSystemTestCase
goal = @project.goals.binding goal = @project.goals.binding
quantity_count = @project.quantities.except_targets.count quantity_count = @project.quantities.except_targets.count
target_date, * = goal.targets.group(:effective_from, :goal_id).count target_date = goal.targets.group(:effective_from).count
.reject { |key, count| count == quantity_count }.keys.sample .reject { |date, count| count == quantity_count }.keys.sample
assert target_date, "All dates have all possible targets defined" assert target_date, "All dates have all possible targets defined"
target = goal.targets.where(effective_from: target_date).sample target = goal.targets.where(effective_from: target_date).sample
@ -357,7 +364,7 @@ class TargetsTest < BodyTrackingSystemTestCase
# TODO: extend with item + scope # TODO: extend with item + scope
date, goal_id = Target.joins(:goal).group(:effective_from, :goal_id).count date, goal_id = Target.joins(:goal).group(:effective_from, :goal_id).count
.select { |key, count| count > 1 }.keys.sample .select { |key, count| count > 1 }.keys.sample
assert date assert date, "No date with more than 1 target defined"
goal = Goal.find(goal_id) goal = Goal.find(goal_id)
target1, target2 = goal.targets.where(effective_from: date).sample(2) target1, target2 = goal.targets.where(effective_from: date).sample(2)
quantity1, quantity2 = target1.quantity.name, target2.quantity.name quantity1, quantity2 = target1.quantity.name, target2.quantity.name