113 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
		
		
			
		
	
	
			113 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| 
								 | 
							
								require 'spec_helper'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								describe Role do 
							 | 
						||
| 
								 | 
							
								  before do
							 | 
						||
| 
								 | 
							
								    @role = Role.create(:key => 'teacher', 
							 | 
						||
| 
								 | 
							
								                        :i18n_variable => {:key => 'teacher', :en => 'Teacher', :zh_tw => 'Teacher in Chinese', :document_class => 'Role'},
							 | 
						||
| 
								 | 
							
								                        :sub_roles => [{:key => 'undergrad', 
							 | 
						||
| 
								 | 
							
								                                        :i18n_variable => {:key => 'yeah', :en => 'Yeah', :zh_tw => 'Yeah', :document_class => 'Role'},
							 | 
						||
| 
								 | 
							
								                                        :attribute_fields => [{:key => 'department'}, 
							 | 
						||
| 
								 | 
							
								                                                              {:key => 'room'}]}, 
							 | 
						||
| 
								 | 
							
								                                       {:key => 'master', 
							 | 
						||
| 
								 | 
							
								                                        :attribute_fields => [{:key => 'department'}]}])
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  describe 'New role' do
							 | 
						||
| 
								 | 
							
								    describe '#Role' do
							 | 
						||
| 
								 | 
							
								      it 'should have :built_in false' do
							 | 
						||
| 
								 | 
							
								        @role.built_in.should be false
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								      it 'should have :disabled false' do
							 | 
						||
| 
								 | 
							
								        @role.disabled.should be false
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								      it 'should have a i18n_variable' do
							 | 
						||
| 
								 | 
							
								        @role.i18n_variable.should be_an_instance_of I18nVariable
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								      it 'should create sub_roles' do
							 | 
						||
| 
								 | 
							
								        @role.should have(2).sub_roles
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								      it 'should create attribute_fields' do
							 | 
						||
| 
								 | 
							
								        @role.sub_roles[1].should have(1).attribute_fields
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								    describe '#SubRole' do
							 | 
						||
| 
								 | 
							
								      it 'should have :built_in false' do
							 | 
						||
| 
								 | 
							
								        @role.sub_roles[0].built_in.should be false
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								      it 'should have :disabled false' do
							 | 
						||
| 
								 | 
							
								        @role.sub_roles[0].disabled.should be false
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								      it 'should have a i18n_variable' do
							 | 
						||
| 
								 | 
							
								        @role.sub_roles[0].i18n_variable.should be_an_instance_of I18nVariable
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								    describe '#AttributeField' do
							 | 
						||
| 
								 | 
							
								      it 'should have :built_in false' do
							 | 
						||
| 
								 | 
							
								        @role.sub_roles[0].attribute_fields[0].built_in.should be false
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								      it 'should have :disabled false' do
							 | 
						||
| 
								 | 
							
								        @role.sub_roles[0].attribute_fields[0].disabled.should be false
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  describe 'Edit role' do
							 | 
						||
| 
								 | 
							
								    describe '#Role' do
							 | 
						||
| 
								 | 
							
								      before do
							 | 
						||
| 
								 | 
							
								        @role.update_attributes({:key => 'student', :i18n_variable => {:en => 'Student'},
							 | 
						||
| 
								 | 
							
								                                  :sub_roles => [{:key => 'new', 
							 | 
						||
| 
								 | 
							
								                                                  :attribute_fields => [{:key => 'bob'}, 
							 | 
						||
| 
								 | 
							
								                                                                        {:key => 'great'}]},
							 | 
						||
| 
								 | 
							
								                                                  {:id => @role.sub_roles[0].id},
							 | 
						||
| 
								 | 
							
								                                                  {:id => @role.sub_roles[1].id}]})
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								      it 'should not be the old :key' do
							 | 
						||
| 
								 | 
							
								        @role.key.should_not == 'teacher'
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								      it 'should be the new :key' do
							 | 
						||
| 
								 | 
							
								        @role.key.should == 'student'
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								      it 'should not be the old :i18n_variable[:en]' do
							 | 
						||
| 
								 | 
							
								        @role.i18n_variable[:en].should_not == 'Teacher'
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								      it 'should be the new :i18n_variable[:en]' do
							 | 
						||
| 
								 | 
							
								        @role.i18n_variable[:en].should == 'Student'
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								      it 'should have one more SubRole' do
							 | 
						||
| 
								 | 
							
								        @role.should have(3).sub_roles
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end  
							 | 
						||
| 
								 | 
							
								  describe 'Destroy' do
							 | 
						||
| 
								 | 
							
								    describe '#AttributeField' do
							 | 
						||
| 
								 | 
							
								      before do
							 | 
						||
| 
								 | 
							
								        @role.update_attributes(:key => 'teacher', 
							 | 
						||
| 
								 | 
							
								                            :i18n_variable => {:key => 'teacher', :en => 'Teacher', :zh_tw => 'Teacher in Chinese', :document_class => 'Role'},
							 | 
						||
| 
								 | 
							
								                            :sub_roles_attributes => {'0' => {:id => @role.sub_roles[0].id,
							 | 
						||
| 
								 | 
							
								                                            :key => 'undergrad', 
							 | 
						||
| 
								 | 
							
								                                            :attribute_fields_attributes => {'0' => {:id => @role.sub_roles[0].attribute_fields[0].id,
							 | 
						||
| 
								 | 
							
								                                                                   :key => 'department'}, 
							 | 
						||
| 
								 | 
							
								                                                                  '1' => {:id => @role.sub_roles[0].attribute_fields[1].id,
							 | 
						||
| 
								 | 
							
								                                                                   :key => 'room', :_destroy => true}}}})
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								      it 'should have only one AttributeField for the first SubRole' do
							 | 
						||
| 
								 | 
							
								        @role.sub_roles[0].should have(1).attribute_fields
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								    end  
							 | 
						||
| 
								 | 
							
								    describe '#I18nVariable' do
							 | 
						||
| 
								 | 
							
								      before do
							 | 
						||
| 
								 | 
							
								        @role.update_attributes(:key => 'teacher', 
							 | 
						||
| 
								 | 
							
								                            :i18n_variable_attributes => {:id => @role.i18n_variable.id, :key => 'teacher', :en => 'Teacher', :zh_tw => 'Teacher in Chinese', :document_class => 'Role', :_destroy => true})
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								      it 'should not have a I18nVariable' do
							 | 
						||
| 
								 | 
							
								        @role.i18n_variable.should_not be_an_instance_of I18nVariable
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								    describe '#Role' do
							 | 
						||
| 
								 | 
							
								      it 'should destroy the I18nVariable' do
							 | 
						||
| 
								 | 
							
								        id = @role.i18n_variable.id
							 | 
						||
| 
								 | 
							
								        @role.destroy
							 | 
						||
| 
								 | 
							
								        lambda {I18nVariable.find(id)}.should raise_error
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								end
							 |