diff --git a/app/models/card/statuses.rb b/app/models/card/statuses.rb
index 636d9127d..73d3f122a 100644
--- a/app/models/card/statuses.rb
+++ b/app/models/card/statuses.rb
@@ -4,6 +4,8 @@ module Card::Statuses
included do
enum :status, %w[ creating drafted published ].index_by(&:itself)
+ after_create -> { track_event :published }, if: :published?
+
scope :published_or_drafted_by, ->(user) { where(status: :published).or(where(status: :drafted, creator: user)) }
end
diff --git a/app/views/events/index.html.erb b/app/views/events/index.html.erb
index 6d1521d45..9859f6533 100644
--- a/app/views/events/index.html.erb
+++ b/app/views/events/index.html.erb
@@ -36,5 +36,5 @@
<%= render "events/day", day_timeline: @day_timeline %>
- <%= event_next_page_link(@day_timeline.next_day) %>
+<%= event_next_page_link(@day_timeline.next_day) %>
diff --git a/db/seeds.rb b/db/seeds.rb
index 1a38c8310..f299e949f 100644
--- a/db/seeds.rb
+++ b/db/seeds.rb
@@ -1,5 +1,8 @@
raise "Seeding is just for development" unless Rails.env.development?
+require "active_support/testing/time_helpers"
+include ActiveSupport::Testing::TimeHelpers
+
# Seed DSL
def seed_account(name)
print " #{name}…"
diff --git a/db/seeds/honcho.rb b/db/seeds/honcho.rb
index 0276a2a8a..70cbf958d 100644
--- a/db/seeds/honcho.rb
+++ b/db/seeds/honcho.rb
@@ -50,19 +50,29 @@ collections = [
"Documentation"
]
+time_range = (60 .. 30.days.in_minutes)
+
collections.each_with_index do |collection_name, index|
create_collection(collection_name, access_to: authors.sample(3)).tap do |collection|
# Create 20 unique cards for each collection
card_titles.each do |title|
- create_card(title,
- description: "#{title} for #{collection_name} phase #{index + 1}.",
- collection: collection
- ).tap do |card|
+ travel(-rand(time_range).minutes) do
+ card = create_card title,
+ description: "#{title} for #{collection_name} phase #{index + 1}.",
+ collection: collection,
+ creator: authors.sample
+
# Randomly assign to 1-2 authors
+ travel rand(0..20).minutes
card.toggle_assignment(authors.sample)
- card.toggle_assignment(authors.sample) if rand > 0.5
+
+ if rand > 0.5
+ travel rand(0..20).minutes
+ card.toggle_assignment(authors.sample)
+ end
# Randomly set card state
+ travel rand(0..20).minutes
case rand(3)
when 0
card.engage
diff --git a/test/models/card/statuses_test.rb b/test/models/card/statuses_test.rb
index 4f0c54312..5a3e2cb8b 100644
--- a/test/models/card/statuses_test.rb
+++ b/test/models/card/statuses_test.rb
@@ -25,6 +25,33 @@ class Card::StatusesTest < ActiveSupport::TestCase
assert_includes Card.published_or_drafted_by(users(:jz)), card
end
+ test "an event is created when a card is created in the published state" do
+ Current.session = sessions(:david)
+
+ assert_no_difference(-> { Event.count }) do
+ collections(:writebook).cards.create! creator: users(:kevin), title: "Draft Card"
+ end
+
+ assert_difference(-> { Event.count } => +1) do
+ @card = collections(:writebook).cards.create! creator: users(:kevin), title: "Published Card", status: :published
+ end
+
+ assert_equal @card, Event.last.eventable
+ assert_equal "card_published", Event.last.action
+ end
+
+ test "an event is created when a card is published" do
+ Current.session = sessions(:david)
+
+ card = collections(:writebook).cards.create! creator: users(:kevin), title: "Published Card"
+ assert_difference(-> { Event.count } => +1) do
+ card.publish
+ end
+
+ assert_equal card, Event.last.eventable
+ assert_equal "card_published", Event.last.action
+ end
+
test "can_recover_abandoned_creation?" do
card = collections(:writebook).cards.create! creator: users(:kevin)
unsaved_card = collections(:writebook).cards.new creator: users(:kevin)