73 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| require 'rails_helper'
 | |
| 
 | |
| require_relative '../fabricators/event_fabricator'
 | |
| 
 | |
| describe 'discourse_post_event_recurrence' do
 | |
|   let(:user_1) { Fabricate(:user, admin: true) }
 | |
|   let(:topic_1) { Fabricate(:topic, user: user_1) }
 | |
|   let(:post_1) { Fabricate(:post, topic: topic_1) }
 | |
|   let(:starts_at) { Time.zone.parse('2020-09-10 19:00') }
 | |
|   let(:post_event_1) { Fabricate(:event, post: post_1, starts_at: starts_at, ends_at: starts_at + 1.hour) }
 | |
| 
 | |
|   before do
 | |
|     freeze_time(starts_at)
 | |
| 
 | |
|     SiteSetting.calendar_enabled = true
 | |
|     SiteSetting.discourse_post_event_enabled = true
 | |
|   end
 | |
| 
 | |
|   context 'every_month' do
 | |
|     before do
 | |
|       post_event_1.update!(recurrence: 'every_month')
 | |
|     end
 | |
| 
 | |
|     it 'sets the next month at the same weekday' do
 | |
|       DiscourseEvent.trigger(:discourse_post_event_event_ended, post_event_1)
 | |
| 
 | |
|       expect(post_event_1.starts_at).to eq_time(Time.zone.parse('2020-10-08 19:00'))
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   context 'every_week' do
 | |
|     before do
 | |
|       post_event_1.update!(recurrence: 'every_week')
 | |
|     end
 | |
| 
 | |
|     it 'sets the next week at the same weekday' do
 | |
|       DiscourseEvent.trigger(:discourse_post_event_event_ended, post_event_1)
 | |
| 
 | |
|       expect(post_event_1.starts_at).to eq_time(Time.zone.parse('2020-09-17 19:00'))
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   context 'every_day' do
 | |
|     before do
 | |
|       post_event_1.update!(recurrence: 'every_day')
 | |
|     end
 | |
| 
 | |
|     it 'sets the next day' do
 | |
|       DiscourseEvent.trigger(:discourse_post_event_event_ended, post_event_1)
 | |
| 
 | |
|       expect(post_event_1.starts_at).to eq_time(Time.zone.parse('2020-09-11 19:00'))
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   context 'every_weekday' do
 | |
|     before do
 | |
|       post_event_1.update!(
 | |
|         starts_at: Time.zone.parse('2020-09-11 19:00'),
 | |
|         ends_at: Time.zone.parse('2020-09-11 19:00') + 1.hour,
 | |
|         recurrence: 'every_weekday'
 | |
|       )
 | |
|     end
 | |
| 
 | |
|     it 'sets the next day' do
 | |
|       DiscourseEvent.trigger(:discourse_post_event_event_ended, post_event_1)
 | |
| 
 | |
|       expect(post_event_1.starts_at).to eq_time(Time.zone.parse('2020-09-14 19:00'))
 | |
|     end
 | |
|   end
 | |
| end
 |