discourse-calendar/spec/lib/discourse_post_event/event_finder_spec.rb

199 lines
5.8 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# frozen_string_literal: true
require "rails_helper"
describe DiscoursePostEvent::EventFinder do
fab!(:current_user) { Fabricate(:user) }
fab!(:user)
subject(:finder) { DiscoursePostEvent::EventFinder }
before do
Jobs.run_immediately!
SiteSetting.discourse_post_event_enabled = true
Group.refresh_automatic_groups!
end
context "when the event is associated to a visible post" do
let(:post1) do
PostCreator.create!(
user,
title: "We should buy a boat",
raw: "The boat market is quite active lately.",
)
end
let!(:event) { Fabricate(:event, post: post1) }
it "returns the event" do
expect(finder.search(current_user)).to match_array([event])
end
end
context "when the event is associated to a visible PM" do
let(:post1) do
PostCreator.create!(
user,
title: "We should buy a boat",
raw: "The boat market is quite active lately.",
archetype: Archetype.private_message,
target_usernames: "#{current_user.username}",
)
end
let!(:event) { Fabricate(:event, post: post1) }
it "returns the event" do
expect(finder.search(current_user)).to match_array([event])
end
end
context "when the event is associated to a not visible PM" do
let(:another_user) { Fabricate(:user) }
let(:post1) do
PostCreator.create!(
user,
title: "We should buy a boat",
raw: "The boat market is quite active lately.",
archetype: Archetype.private_message,
target_usernames: "#{another_user.username}",
)
end
let!(:event) { Fabricate(:event, post: post1) }
it "doesnt return the event" do
expect(finder.search(current_user)).to match_array([])
end
end
context "when events are filtered" do
describe "by post_id" do
let(:post1) do
PostCreator.create!(
user,
title: "We should buy a boat",
raw: "The boat market is quite active lately.",
)
end
let(:post2) do
PostCreator.create!(
user,
title: "We should buy another boat",
raw: "The boat market is very active lately.",
)
end
let!(:event1) { Fabricate(:event, post: post1) }
let!(:event2) { Fabricate(:event, post: post2) }
it "returns only the specified event" do
expect(finder.search(current_user, { post_id: post2.id })).to match_array([event2])
end
end
describe "by expiration status" do
let!(:old_event) do
Fabricate(
:event,
name: "old_event",
original_starts_at: 2.hours.ago,
original_ends_at: 1.hour.ago,
)
end
let!(:future_event) do
Fabricate(
:event,
name: "future_event",
original_starts_at: 1.hour.from_now,
original_ends_at: 2.hours.from_now,
)
end
let!(:current_event) do
Fabricate(
:event,
name: "current_event",
original_starts_at: 5.minutes.ago,
original_ends_at: 5.minutes.from_now,
)
end
let!(:older_event) do
Fabricate(
:event,
name: "older_event",
original_starts_at: 4.hours.ago,
original_ends_at: 3.hour.ago,
)
end
it "returns correct events" do
expect(finder.search(current_user, { include_expired: false })).to eq(
[current_event, future_event],
)
expect(finder.search(current_user, { include_expired: true })).to eq(
[older_event, old_event, current_event, future_event],
)
end
context "when a past event has been edited to be in the future" do
let!(:event_date) do
Fabricate(
:event_date,
event: future_event,
starts_at: 2.hours.ago,
ends_at: 1.hour.ago,
finished_at: 1.hour.ago,
)
end
it "returns correct events" do
expect(finder.search(current_user, { include_expired: false })).to eq(
[current_event, future_event],
)
expect(finder.search(current_user, { include_expired: true })).to eq(
[older_event, old_event, current_event, future_event],
)
end
end
context "when a future event has been edited to be in the past" do
let!(:event_date) do
Fabricate(
:event_date,
event: old_event,
starts_at: 1.hour.from_now,
ends_at: 2.hours.from_now,
finished_at: 1.hour.ago,
)
end
it "returns correct events" do
expect(finder.search(current_user, { include_expired: false })).to eq(
[current_event, future_event],
)
expect(finder.search(current_user, { include_expired: true })).to eq(
[older_event, current_event, future_event, old_event],
)
end
end
end
describe "with a limit parameter provided" do
let!(:event1) { Fabricate(:event) }
let!(:event2) { Fabricate(:event) }
let!(:event3) { Fabricate(:event) }
it "returns the correct number of events" do
expect(finder.search(current_user, { limit: 2 })).to match_array([event1, event2])
end
end
describe "with a before parameter provided" do
let!(:event1) { Fabricate(:event, original_starts_at: 2.minutes.from_now) }
let!(:event2) { Fabricate(:event, original_starts_at: 1.minute.from_now) }
let!(:event3) { Fabricate(:event, original_starts_at: 2.hours.ago) }
it "returns the events started before the provided value" do
expect(finder.search(current_user, { before: event2.starts_at.to_s })).to match_array(
[event3],
)
end
end
end
end