@@ -544,7 +544,27 class Project < ActiveRecord::Base | |||||
544 | def enabled_module_names |
|
544 | def enabled_module_names | |
545 | enabled_modules.collect(&:name) |
|
545 | enabled_modules.collect(&:name) | |
546 | end |
|
546 | end | |
547 |
|
547 | |||
|
548 | # Enable a specific module | |||
|
549 | # | |||
|
550 | # Examples: | |||
|
551 | # project.enable_module!(:issue_tracking) | |||
|
552 | # project.enable_module!("issue_tracking") | |||
|
553 | def enable_module!(name) | |||
|
554 | enabled_modules << EnabledModule.new(:name => name.to_s) unless module_enabled?(name) | |||
|
555 | end | |||
|
556 | ||||
|
557 | # Disable a module if it exists | |||
|
558 | # | |||
|
559 | # Examples: | |||
|
560 | # project.disable_module!(:issue_tracking) | |||
|
561 | # project.disable_module!("issue_tracking") | |||
|
562 | # project.disable_module!(project.enabled_modules.first) | |||
|
563 | def disable_module!(target) | |||
|
564 | target = enabled_modules.detect{|mod| target.to_s == mod.name} unless enabled_modules.include?(target) | |||
|
565 | target.destroy unless target.blank? | |||
|
566 | end | |||
|
567 | ||||
548 | safe_attributes 'name', |
|
568 | safe_attributes 'name', | |
549 | 'description', |
|
569 | 'description', | |
550 | 'homepage', |
|
570 | 'homepage', |
@@ -597,6 +597,54 class ProjectTest < ActiveSupport::TestCase | |||||
597 | end |
|
597 | end | |
598 | end |
|
598 | end | |
599 |
|
599 | |||
|
600 | context "enabled_modules" do | |||
|
601 | setup do | |||
|
602 | @project = Project.find(1) | |||
|
603 | end | |||
|
604 | ||||
|
605 | should "define module by names and preserve ids" do | |||
|
606 | # Remove one module | |||
|
607 | modules = @project.enabled_modules.slice(0..-2) | |||
|
608 | assert modules.any? | |||
|
609 | assert_difference 'EnabledModule.count', -1 do | |||
|
610 | @project.enabled_module_names = modules.collect(&:name) | |||
|
611 | end | |||
|
612 | @project.reload | |||
|
613 | # Ids should be preserved | |||
|
614 | assert_equal @project.enabled_module_ids.sort, modules.collect(&:id).sort | |||
|
615 | end | |||
|
616 | ||||
|
617 | should "enable a module" do | |||
|
618 | @project.enabled_module_names = [] | |||
|
619 | @project.reload | |||
|
620 | assert_equal [], @project.enabled_module_names | |||
|
621 | #with string | |||
|
622 | @project.enable_module!("issue_tracking") | |||
|
623 | assert_equal ["issue_tracking"], @project.enabled_module_names | |||
|
624 | #with symbol | |||
|
625 | @project.enable_module!(:gantt) | |||
|
626 | assert_equal ["issue_tracking", "gantt"], @project.enabled_module_names | |||
|
627 | #don't add a module twice | |||
|
628 | @project.enable_module!("issue_tracking") | |||
|
629 | assert_equal ["issue_tracking", "gantt"], @project.enabled_module_names | |||
|
630 | end | |||
|
631 | ||||
|
632 | should "disable a module" do | |||
|
633 | #with string | |||
|
634 | assert @project.enabled_module_names.include?("issue_tracking") | |||
|
635 | @project.disable_module!("issue_tracking") | |||
|
636 | assert ! @project.reload.enabled_module_names.include?("issue_tracking") | |||
|
637 | #with symbol | |||
|
638 | assert @project.enabled_module_names.include?("gantt") | |||
|
639 | @project.disable_module!(:gantt) | |||
|
640 | assert ! @project.reload.enabled_module_names.include?("gantt") | |||
|
641 | #with EnabledModule object | |||
|
642 | first_module = @project.enabled_modules.first | |||
|
643 | @project.disable_module!(first_module) | |||
|
644 | assert ! @project.reload.enabled_module_names.include?(first_module.name) | |||
|
645 | end | |||
|
646 | end | |||
|
647 | ||||
600 | def test_enabled_module_names_should_not_recreate_enabled_modules |
|
648 | def test_enabled_module_names_should_not_recreate_enabled_modules | |
601 | project = Project.find(1) |
|
649 | project = Project.find(1) | |
602 | # Remove one module |
|
650 | # Remove one module |
General Comments 0
You need to be logged in to leave comments.
Login now