tracks/test/models/recurring_todos/recurring_todos_builder_test.rb
2014-03-31 09:43:39 +02:00

155 lines
No EOL
5.5 KiB
Ruby

require_relative '../../test_helper'
module RecurringTodos
class RecurringTodosBuilderTest < ActiveSupport::TestCase
fixtures :users
def setup
@admin = users(:admin_user)
end
def test_create_builder_needs_selector
assert_raise(RuntimeError){ builder = RecurringTodosBuilder.new(@admin, {}) }
end
def test_create_builder_needs_valid_selector
assert_raise(RuntimeError){ builder = RecurringTodosBuilder.new(@admin, { 'recurring_period' => 'wrong_value'}) }
end
def test_create_builder_uses_selector
builder = RecurringTodosBuilder.new(@admin, {'recurring_period' => "daily", 'daily_selector' => 'daily_every_work_day'}).builder
assert builder.is_a?(DailyRecurringTodosBuilder)
builder = RecurringTodosBuilder.new(@admin, {'recurring_period' => "weekly"}).builder
assert builder.is_a?(WeeklyRecurringTodosBuilder)
builder = RecurringTodosBuilder.new(@admin, {'recurring_period' => "monthly", 'monthly_selector' => 'monthly_every_x_day'}).builder
assert builder.is_a?(MonthlyRecurringTodosBuilder)
builder = RecurringTodosBuilder.new(@admin, {'recurring_period' => "yearly", 'yearly_selector' => 'yearly_every_x_day'}).builder
assert builder.is_a?(YearlyRecurringTodosBuilder)
end
def test_dates_are_parsed
builder = RecurringTodosBuilder.new(@admin, {
'recurring_period' => "daily",
'daily_selector' => 'daily_every_work_day',
'start_from' => "01/01/01",
'end_date' => '05/05/05'
})
assert builder.attributes[:start_from].is_a?(ActiveSupport::TimeWithZone), "Dates should be parsed to ActiveSupport::TimeWithZone class"
assert builder.attributes[:end_date ].is_a?(ActiveSupport::TimeWithZone), "Dates should be parsed to ActiveSupport::TimeWithZone class"
end
def test_exisisting_project_is_used
# test by project_name
builder = RecurringTodosBuilder.new(@admin, {
'recurring_period' => "daily",
'project_name' => @admin.projects.first.name,
'daily_selector' => 'daily_every_work_day'})
assert_equal @admin.projects.first, builder.project
# test by project_id
builder = RecurringTodosBuilder.new(@admin, {
'recurring_period' => "daily",
'daily_selector' => 'daily_every_work_day',
'project_id' => @admin.projects.first.id})
assert_equal @admin.projects.first, builder.project
end
def test_not_exisisting_project_is_created
builder = RecurringTodosBuilder.new(@admin, {
'recurring_period' => "daily",
'project_name' => "my new project",
'daily_selector' => 'daily_every_work_day',
'recurring_target' => 'due_date'})
assert_equal "my new project", builder.project.name, "project should exist"
assert !builder.project.persisted?, "new project should not be persisted before save"
builder.save
assert builder.project.persisted?, "new project should be persisted after save"
end
def test_exisisting_context_is_used
builder = RecurringTodosBuilder.new(@admin, {
'recurring_period' => "daily",
'context_name' => @admin.contexts.first.name,
'daily_selector' => 'daily_every_work_day'})
assert_equal @admin.contexts.first, builder.context
builder = RecurringTodosBuilder.new(@admin, {
'recurring_period' => "daily",
'daily_selector' => 'daily_every_work_day',
'context_id' => @admin.contexts.first.id})
assert_equal @admin.contexts.first, builder.context
end
def test_not_exisisting_context_is_created
builder = RecurringTodosBuilder.new(@admin, {
'recurring_period' => "daily",
'context_name' => "my new context",
'daily_selector' => 'daily_every_work_day',
'recurring_target' => 'due_date'})
assert_equal "my new context", builder.context.name, "context should exist"
assert !builder.context.persisted?, "new context should not be persisted before save"
builder.save
assert builder.context.persisted?, "new context should be persisted after save"
end
def test_project_is_optional
attributes = {
'recurring_period' => "daily",
'description' => "test",
'context_name' => "my new context",
'daily_selector' => 'daily_every_work_day',
'recurring_target' => 'show_from_date',
'show_always' => true,
'start_from' => '01/01/01',
'ends_on' => 'no_end_date'}
builder = RecurringTodosBuilder.new(@admin, attributes)
assert_nil builder.project, "project should not exist"
builder.save
assert_nil builder.saved_recurring_todo.project
end
def test_builder_can_update_description
attributes = {
'recurring_period' => "daily",
'description' => "test",
'context_name' => "my new context",
'daily_selector' => 'daily_every_work_day',
'recurring_target' => 'show_from_date',
'show_always' => true,
'start_from' => '01/01/01',
'ends_on' => 'no_end_date'}
builder = RecurringTodosBuilder.new(@admin, attributes)
builder.save
rt = builder.saved_recurring_todo
assert_equal "test", rt.description
attributes['description'] = 'updated'
updater = RecurringTodosBuilder.new(@admin, attributes)
updater.update(rt)
rt.reload
assert_equal rt.id, builder.saved_recurring_todo.id
assert_equal "updated", rt.description
end
end
end