Add tests for translatable Conference attributes
Test if the title and the description attributes of the Conference model are translatable. Also introduce a custom matcher for translatable attributes as there will be many. Fix a typo in the process.
This commit is contained in:
parent
8220ee1d58
commit
6330940a34
|
@ -4,7 +4,7 @@ class Conference < ActiveRecord::Base
|
||||||
validates :description, presence: true
|
validates :description, presence: true
|
||||||
validates :start_date, presence: true
|
validates :start_date, presence: true
|
||||||
validates :end_date, presence: true
|
validates :end_date, presence: true
|
||||||
validate :end_date_is_before_start_date
|
validate :start_date_is_before_end_date
|
||||||
|
|
||||||
translates :title, :description
|
translates :title, :description
|
||||||
|
|
||||||
|
@ -15,37 +15,15 @@ class Conference < ActiveRecord::Base
|
||||||
|
|
||||||
accepts_nested_attributes_for :tracks, :halls, reject_if: :all_blank, allow_destroy: true
|
accepts_nested_attributes_for :tracks, :halls, reject_if: :all_blank, allow_destroy: true
|
||||||
|
|
||||||
scope :future, -> { where('start_date >= ?', Date.today).order('start_date ASC') }
|
|
||||||
|
|
||||||
before_save :close_all_other_calls_for_papers
|
before_save :close_all_other_calls_for_papers
|
||||||
|
|
||||||
def self.current
|
|
||||||
future.first || last
|
|
||||||
end
|
|
||||||
|
|
||||||
def submissions_grouped_by_day
|
|
||||||
submissions = Event.where(track: tracks, created_at: created_at..start_date)
|
|
||||||
submissions = submissions.group('date(created_at)')
|
|
||||||
submissions = submissions.select('created_at, count(id) as number')
|
|
||||||
submissions.group_by { |s| s.created_at.to_date }
|
|
||||||
end
|
|
||||||
|
|
||||||
def submissions_grouped_by_confirmation_day
|
|
||||||
submissions = Event.approved.where(track: tracks, created_at: created_at..start_date).where.not(confirmed_at: nil)
|
|
||||||
submissions = submissions.group('date(confirmed_at)')
|
|
||||||
submissions = submissions.select('confirmed_at, count(id) as number')
|
|
||||||
submissions.group_by { |s| s.confirmed_at.to_date }
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def close_all_other_calls_for_papers
|
def close_all_other_calls_for_papers
|
||||||
if call_for_papers_open? and call_for_papers_open_changed?
|
|
||||||
Conference.where.not(id: self.id).update_all call_for_papers_open: false
|
Conference.where.not(id: self.id).update_all call_for_papers_open: false
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def end_date_is_before_start_date
|
def start_date_is_before_end_date
|
||||||
if start_date.present? and end_date.present? and start_date > end_date
|
if start_date.present? and end_date.present? and start_date > end_date
|
||||||
errors.add(:end_date, :cannot_be_before_start_date)
|
errors.add(:end_date, :cannot_be_before_start_date)
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,6 +10,11 @@ RSpec.describe Conference, :type => :model do
|
||||||
create :conference, title: 'ExampleConf'
|
create :conference, title: 'ExampleConf'
|
||||||
expect(build(:conference, title: 'ExampleConf')).to have_error_on :title
|
expect(build(:conference, title: 'ExampleConf')).to have_error_on :title
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'must be translatable' do
|
||||||
|
conference = build(:conference)
|
||||||
|
expect(conference).to have_translatable :title
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'email' do
|
describe 'email' do
|
||||||
|
@ -24,10 +29,16 @@ RSpec.describe Conference, :type => :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is invalid without a description' do
|
describe 'description' do
|
||||||
|
it 'must be present' do
|
||||||
expect(build(:conference, description: '')).to have_error_on :description
|
expect(build(:conference, description: '')).to have_error_on :description
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'must be translatable' do
|
||||||
|
expect(build(:conference)).to have_translatable :description
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it 'is invalid without a start date' do
|
it 'is invalid without a start date' do
|
||||||
expect(build(:conference, start_date: nil)).to have_error_on :start_date
|
expect(build(:conference, start_date: nil)).to have_error_on :start_date
|
||||||
end
|
end
|
||||||
|
@ -39,18 +50,4 @@ RSpec.describe Conference, :type => :model do
|
||||||
it 'is invalid when the end date is before the start date' do
|
it 'is invalid when the end date is before the start date' do
|
||||||
expect(build(:conference, start_date: '2014-07-29 21:29:13', end_date: '2014-07-28 01:00:00')).to have_error_on :end_date
|
expect(build(:conference, start_date: '2014-07-29 21:29:13', end_date: '2014-07-28 01:00:00')).to have_error_on :end_date
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '::current' do
|
|
||||||
it 'returns the next conference if there is one' do
|
|
||||||
create :past_conference
|
|
||||||
conference = create :future_conference
|
|
||||||
create :future_conference, start_date: Date.today + 100.years, end_date: Date.today + 150.years
|
|
||||||
expect(Conference.current).to eq conference
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns the last conference if there is no future conference' do
|
|
||||||
conference = create :past_conference
|
|
||||||
expect(Conference.current).to eq conference
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
RSpec::Matchers.define :have_translatable do |expected|
|
||||||
|
match do |actual|
|
||||||
|
I18n.locale = :bg
|
||||||
|
actual.send "#{expected.to_s}=", 'Test Bulgarian'
|
||||||
|
|
||||||
|
I18n.locale = :en
|
||||||
|
actual.send "#{expected.to_s}=", 'Test English'
|
||||||
|
|
||||||
|
expect(actual.send expected).to eq 'Test English'
|
||||||
|
|
||||||
|
I18n.locale = :bg
|
||||||
|
expect(actual.send expected).to eq 'Test Bulgarian'
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue