houdini/spec/lib/slug_copy_naming_algorithm_spec.rb

86 lines
2.7 KiB
Ruby

# frozen_string_literal: true
# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
require 'rails_helper'
describe SlugCopyNamingAlgorithm do
describe '.create_copy_name' do
before(:all) do
Timecop.freeze(2020, 5, 4)
end
after(:all) do
Timecop.return
end
def set_name(name)
@name = name
end
let(:short_slug) { 'slug_name' }
let(:short_slug_copy_today) { 'slug_name_copy_00' }
let(:short_slug_copy_today_plus_1) { 'slug_name_copy_01' }
let(:copy_base) { 'slug_name_copy' }
let(:nonprofit) { force_create(:nm_justice) }
describe 'events' do
let(:event) { force_create(:event, slug: @name, nonprofit: nonprofit) }
let(:event2) { force_create(:event, slug: @name2, nonprofit: nonprofit) }
let(:events_at_max_copies) do
(0..30).collect do |i|
force_create(:event, slug: "#{@copy_base}_#{format('%02d', i)}", nonprofit: nonprofit)
end
end
let(:algo) { SlugCopyNamingAlgorithm.new(Event, nonprofit.id) }
describe 'event slugs' do
it 'not a copy' do
@name = short_slug
event
expect(algo.create_copy_name(@name)).to eq short_slug_copy_today
end
it 'one copy exists' do
@name = short_slug
@name2 = short_slug_copy_today
event
event2
expect(algo.create_copy_name(@name)).to eq short_slug_copy_today_plus_1
expect(algo.create_copy_name(@name2)).to eq short_slug_copy_today_plus_1
end
it 'has 30 as max copies' do
expect(algo.max_copies).to eq 30
end
end
end
describe 'campaigns' do
let(:campaign) { force_create(:campaign, slug: @name, nonprofit: nonprofit) }
let(:campaign2) { force_create(:campaign, slug: @name2, nonprofit: nonprofit) }
let(:campaigns_at_max_copies) do
(0..30).collect do |i|
force_create(:campaign, slug: "#{@copy_base}_#{format('%02d', i)}", nonprofit: nonprofit)
end
end
let(:algo) { SlugCopyNamingAlgorithm.new(Campaign, nonprofit.id) }
describe 'campaign slugs' do
it 'not a copy' do
@name = short_slug
campaign
expect(algo.create_copy_name(@name)).to eq short_slug_copy_today
end
it 'one copy exists' do
@name = short_slug
@name2 = short_slug_copy_today
campaign
campaign2
expect(algo.create_copy_name(@name)).to eq short_slug_copy_today_plus_1
expect(algo.create_copy_name(@name2)).to eq short_slug_copy_today_plus_1
end
it 'has 30 as max copies' do
expect(algo.max_copies).to eq 30
end
end
end
end
end