473703df3d
by including the bucket name as part of the bubble cache key. ref: https://37s.fizzy.37signals.com/buckets/693169850/bubbles/999008709 Co-authored-by: Kevin McConnell <kevin@37signals.com>
148 lines
4.7 KiB
Ruby
148 lines
4.7 KiB
Ruby
require "test_helper"
|
|
|
|
class BubbleTest < ActiveSupport::TestCase
|
|
setup do
|
|
Current.session = sessions(:david)
|
|
end
|
|
|
|
test "capturing messages" do
|
|
assert_difference "bubbles(:logo).messages.comments.count", +1 do
|
|
bubbles(:logo).capture Comment.new(body: "Agreed.")
|
|
end
|
|
|
|
assert_equal "Agreed.", bubbles(:logo).messages.comments.last.messageable.body.to_plain_text.chomp
|
|
end
|
|
|
|
test "boosting" do
|
|
assert_changes -> { bubbles(:logo).activity_score } do
|
|
assert_difference -> { bubbles(:logo).boosts_count }, +1 do
|
|
bubbles(:logo).boost!(bubbles(:logo).boosts_count+ 1)
|
|
end
|
|
end
|
|
end
|
|
|
|
test "assignment states" do
|
|
assert bubbles(:logo).assigned_to?(users(:kevin))
|
|
assert_not bubbles(:logo).assigned_to?(users(:david))
|
|
end
|
|
|
|
test "assignment toggling" do
|
|
assert bubbles(:logo).assigned_to?(users(:kevin))
|
|
|
|
assert_difference({ "bubbles(:logo).assignees.count" => -1, "Event.count" => +1 }) do
|
|
bubbles(:logo).toggle_assignment users(:kevin)
|
|
end
|
|
assert_not bubbles(:logo).assigned_to?(users(:kevin))
|
|
assert_equal "unassigned", Event.last.action
|
|
assert_equal [ users(:kevin) ], Event.last.assignees
|
|
|
|
assert_difference %w[ bubbles(:logo).assignees.count Event.count ], +1 do
|
|
bubbles(:logo).toggle_assignment users(:kevin)
|
|
end
|
|
assert bubbles(:logo).assigned_to?(users(:kevin))
|
|
assert_equal "assigned", Event.last.action
|
|
assert_equal [ users(:kevin) ], Event.last.assignees
|
|
end
|
|
|
|
test "tagged states" do
|
|
assert bubbles(:logo).tagged_with?(tags(:web))
|
|
assert_not bubbles(:logo).tagged_with?(tags(:mobile))
|
|
end
|
|
|
|
test "tag toggling" do
|
|
assert bubbles(:logo).tagged_with?(tags(:web))
|
|
|
|
assert_difference "bubbles(:logo).taggings.count", -1 do
|
|
bubbles(:logo).toggle_tag tags(:web)
|
|
end
|
|
assert_not bubbles(:logo).tagged_with?(tags(:web))
|
|
|
|
assert_difference "bubbles(:logo).taggings.count", +1 do
|
|
bubbles(:logo).toggle_tag tags(:web)
|
|
end
|
|
assert bubbles(:logo).tagged_with?(tags(:web))
|
|
|
|
assert_difference %w[ bubbles(:logo).taggings.count accounts("37s").tags.count ], +1 do
|
|
bubbles(:logo).toggle_tag Tag.new(title: "prioritized")
|
|
end
|
|
assert_equal "prioritized", bubbles(:logo).taggings.last.tag.title
|
|
end
|
|
|
|
test "searchable by title" do
|
|
bubble = buckets(:writebook).bubbles.create! title: "Insufficient haggis", creator: users(:kevin)
|
|
|
|
assert_includes Bubble.search("haggis"), bubble
|
|
end
|
|
|
|
test "ordering by comments" do
|
|
assert_equal bubbles(:logo, :layout, :shipping, :text), Bubble.ordered_by_comments
|
|
end
|
|
|
|
test "ordering by boosts" do
|
|
bubbles(:layout).update! boosts_count: 1_000
|
|
assert_equal bubbles(:layout, :logo, :shipping, :text), Bubble.ordered_by_boosts
|
|
end
|
|
|
|
test "popped" do
|
|
assert_equal [ bubbles(:shipping) ], Bubble.popped
|
|
end
|
|
|
|
test "active" do
|
|
assert_equal bubbles(:logo, :layout, :text), Bubble.active
|
|
end
|
|
|
|
test "unassigned" do
|
|
assert_equal bubbles(:shipping, :text), Bubble.unassigned
|
|
end
|
|
|
|
test "assigned to" do
|
|
assert_equal bubbles(:logo, :layout), Bubble.assigned_to(users(:jz))
|
|
end
|
|
|
|
test "assigned by" do
|
|
assert_equal bubbles(:layout, :logo), Bubble.assigned_by(users(:david))
|
|
end
|
|
|
|
test "in bucket" do
|
|
new_bucket = accounts("37s").buckets.create! name: "New Bucket", creator: users(:david)
|
|
assert_equal bubbles(:logo, :shipping, :layout, :text), Bubble.in_bucket(buckets(:writebook))
|
|
assert_empty Bubble.in_bucket(new_bucket)
|
|
end
|
|
|
|
test "tagged with" do
|
|
assert_equal bubbles(:layout, :text), Bubble.tagged_with(tags(:mobile))
|
|
end
|
|
|
|
test "mentioning" do
|
|
bubble = buckets(:writebook).bubbles.create! title: "Insufficient haggis", creator: users(:kevin)
|
|
bubbles(:logo).capture Comment.new(body: "I hate haggis")
|
|
bubbles(:text).capture Comment.new(body: "I love haggis")
|
|
|
|
assert_equal [ bubble, bubbles(:logo), bubbles(:text) ].sort, Bubble.mentioning("haggis").sort
|
|
end
|
|
|
|
test "cache key includes the bucket name" do
|
|
bubble = bubbles(:logo)
|
|
cache_v1_key = bubble.cache_key
|
|
|
|
bubble.bucket.touch
|
|
assert_equal cache_v1_key, bubble.reload.cache_key, "general bucket touching should not affect the bubble's cache key"
|
|
|
|
bubble.bucket.update! name: "Good ideas"
|
|
assert_not_equal cache_v1_key, bubble.reload.cache_key, "changing the name of the bucket should invalidate the cache"
|
|
end
|
|
|
|
test "cache key includes the tenant name" do
|
|
bubble = bubbles(:logo)
|
|
|
|
assert_includes bubble.cache_key, ApplicationRecord.current_tenant, "cache key must always include the tenant"
|
|
end
|
|
|
|
test "cache key gracefully handles a nil bucket" do
|
|
bubble = bubbles(:logo)
|
|
bubble.update_column :bucket_id, Bucket.last.id + 1
|
|
|
|
assert_nothing_raised { bubble.reload.cache_key }
|
|
end
|
|
end
|