Newer
Older
dmpopidor / test / unit / plan_test.rb
@Marta Ribeiro Marta Ribeiro on 3 Jun 2016 2 KB DMPonline4 - RAILS 4.0 (#4)
require 'test_helper'

class PlanTest < ActiveSupport::TestCase

  def setup
    @plan = Plan.new.tap do |p|
      p.project = Project.new
    end
  end

  def settings(extras = {})
    {
      margin:    (@margin || { top: 10, bottom: 10, left: 10, right: 10 }),
      font_face: (@font_face || Settings::Dmptemplate::VALID_FONT_FACES.first),
      font_size: (@font_size || 11)
    }.merge(extras)
  end

  # settings

  test "no explicit settings should be Settings::Dmptemplate::DEFAULT_SETTINGS" do
    assert(!@plan.settings(:export).value?)
    assert_equal(Settings::Dmptemplate::DEFAULT_SETTINGS[:formatting], @plan.settings(:export).formatting)
  end

  test "no explicit settings with template settings should use template settings" do
    template = dmptemplates(:ahrc_template)
    template.settings(:export).update_attributes(formatting: settings)

    @plan.project.dmptemplate = template

    assert(!@plan.super_settings(:export).value?)
    assert(template.settings(:export).value?)

    assert_equal(settings, template.settings(:export).formatting)
    assert_equal(settings, @plan.settings(:export).formatting)
  end

  test "explicit settings with template settings should use plan settings" do
    template_settings = settings
    plan_settings = settings(font_size: 14)

    template = dmptemplates(:ahrc_template)
    template.settings(:export).update_attributes(formatting: template_settings)

    @plan.project.dmptemplate = template
    @plan.super_settings(:export).formatting = plan_settings
    @plan.save!
    @plan.reload

    assert(@plan.super_settings(:export).value?)
    assert(@plan.settings(:export).value?)
    assert(template.settings(:export).value?)

    assert_not_equal(plan_settings, template_settings)
    assert_equal(template_settings, template.settings(:export).formatting)
    assert_equal(plan_settings, @plan.settings(:export).formatting)
  end

  test "explicit settings should not affect other plans with same template" do
    template_settings = settings
    plan_settings = settings(font_size: 14)

    template = dmptemplates(:ahrc_template)
    template.settings(:export).update_attributes(formatting: template_settings)

    @plan.project.dmptemplate = template
    @plan.super_settings(:export).formatting = plan_settings
    @plan.save!
    @plan.reload

    other_plan = Plan.new.tap do |plan|
      plan.project = Project.new.tap {|p| p.dmptemplate = template }
    end

    other_plan.save!
    other_plan.reload

    assert(@plan.super_settings(:export).value?)
    assert(@plan.settings(:export).value?)
    assert(template.settings(:export).value?)

    assert_not_equal(plan_settings, other_plan.settings(:export).formatting)
    assert_equal(template_settings, other_plan.settings(:export).formatting)
  end

end