diff --git a/plugins/mezuro/controllers/myprofile/mezuro_plugin_reading_controller.rb b/plugins/mezuro/controllers/myprofile/mezuro_plugin_reading_controller.rb index d8325ae..02c3253 100644 --- a/plugins/mezuro/controllers/myprofile/mezuro_plugin_reading_controller.rb +++ b/plugins/mezuro/controllers/myprofile/mezuro_plugin_reading_controller.rb @@ -12,10 +12,9 @@ class MezuroPluginReadingController < MezuroPluginMyprofileController def create reading_group_content = profile.articles.find(params[:id]) - reading = Kalibro::Reading.new( params[:reading] ) - reading.save(reading_group_content.reading_group_id) - - if( reading.errors.empty? ) + reading = Kalibro::Reading.new params[:reading] + + if( reading.save(reading_group_content.reading_group_id) ) redirect_to "/#{profile.identifier}/#{reading_group_content.name.downcase.gsub(/\s/, '-').gsub(/[^0-9A-Za-z\-]/, '')}" else redirect_to_error_page reading.errors[0].message @@ -28,43 +27,23 @@ class MezuroPluginReadingController < MezuroPluginMyprofileController @data_profile = reading_group_content.profile.identifier @reading_group_content_id = reading_group_content.id - @reading_types = Kalibro::Reading.reading_types - - configurations = Kalibro::Configuration.all - configurations = [] if (configurations.nil?) - @configuration_select = configurations.map do |configuration| - [configuration.name,configuration.id] - end - - @reading = reading_group_content.repositories.select{ |reading| reading.id.to_s == params[:reading_id] }.first + @reading = Kalibro::Reading.find params[:reading_id] end def update reading_group_content = profile.articles.find(params[:id]) - - reading = Kalibro::Reading.new( params[:reading] ) - reading.save(reading_group_content.reading_group_id) + reading = Kalibro::Reading.new params[:reading] - if( reading.errors.empty? ) - reading.process + if( reading.save(reading_group_content.reading_group_id) ) redirect_to "/profile/#{profile.identifier}/plugin/mezuro/reading/show/#{reading_group_content.id}?reading_id=#{reading.id}" else redirect_to_error_page reading.errors[0].message end end - def show - reading_group_content = profile.articles.find(params[:id]) - @reading_group_name = reading_group_content.name - @reading = reading_group_content.repositories.select{ |reading| reading.id.to_s == params[:reading_id] }.first - @configuration_name = Kalibro::Configuration.configuration_of(@reading.id).name - @data_profile = reading_group_content.profile.identifier - @data_content = reading_group_content.id - end - def destroy reading_group_content = profile.articles.find(params[:id]) - reading = reading_group_content.repositories.select{ |reading| reading.id.to_s == params[:reading_id] }.first + reading = Kalibro::Reading.find params[:reading_id] reading.destroy if( reading.errors.empty? ) redirect_to "/#{profile.identifier}/#{reading_group_content.name.downcase.gsub(/\s/, '-')}" diff --git a/plugins/mezuro/lib/kalibro/reading.rb b/plugins/mezuro/lib/kalibro/reading.rb index a183445..ab7fe0d 100644 --- a/plugins/mezuro/lib/kalibro/reading.rb +++ b/plugins/mezuro/lib/kalibro/reading.rb @@ -7,7 +7,10 @@ class Kalibro::Reading < Kalibro::Model end def self.readings_of( group_id ) - request(:readings_of, {:group_id => group_id})[:reading].to_a.map { |reading| new reading } + response = request(:readings_of, {:group_id => group_id})[:reading] + response = [] if response.nil? + response = [response] if response.is_a?(Hash) + response.map { |reading| new reading } end def self.reading_of( range_id ) diff --git a/plugins/mezuro/test/functional/myprofile/mezuro_plugin_reading_controller_test.rb b/plugins/mezuro/test/functional/myprofile/mezuro_plugin_reading_controller_test.rb new file mode 100644 index 0000000..ecc0288 --- /dev/null +++ b/plugins/mezuro/test/functional/myprofile/mezuro_plugin_reading_controller_test.rb @@ -0,0 +1,95 @@ +require 'test_helper' + +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/reading_fixtures" +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/reading_group_content_fixtures" + +class MezuroPluginReadingControllerTest < ActionController::TestCase + + def setup + @controller = MezuroPluginReadingController.new + @request = ActionController::TestRequest.new + @response = ActionController::TestResponse.new + @profile = fast_create(Community) + + @reading = ReadingFixtures.reading + @created_reading = ReadingFixtures.created_reading + @reading_hash = ReadingFixtures.hash + @content = MezuroPlugin::ReadingGroupContent.new(:profile => @profile, :name => name) + @content.expects(:send_reading_group_to_service).returns(nil) + @content.stubs(:solr_save) + @content.save + end + + should 'set variables to create a new reading' do + get :new, :profile => @profile.identifier, :id => @content.id + + assert_equal @content.id, assigns(:reading_group_content_id) + assert_equal @content.name, assigns(:reading_group_name) + assert_equal @content.profile.identifier, assigns(:data_profile) + end + + should 'create a reading' do + Kalibro::Reading.expects(:new).with(@reading_hash.to_s).returns(@created_reading) + @created_reading.expects(:save).with(@content.reading_group_id).returns(true) + get :create, :profile => @profile.identifier, :id => @content.id, :reading => @reading_hash + assert @created_reading.errors.empty? + assert_response :redirect + end + + should 'put an Exception in reading when an error occurs in create action' do + @created_reading.errors = [Exception.new] + Kalibro::Reading.expects(:new).with(@reading_hash.to_s).returns(@created_reading) + @created_reading.expects(:save).with(@content.reading_group_id).returns(false) + get :create, :profile => @profile.identifier, :id => @content.id, :reading => @reading_hash + assert !@created_reading.errors.empty? + assert_response :redirect + end + + should 'set variables to edit a reading' do + Kalibro::Reading.expects(:find).with(@reading.id.to_s).returns(@reading) + + get :edit, :profile => @profile.identifier, :id => @content.id, :reading_id => @reading.id + + assert_equal @content.id, assigns(:reading_group_content_id) + assert_equal @content.name, assigns(:reading_group_name) + assert_equal @content.profile.identifier, assigns(:data_profile) + assert_equal @reading, assigns(:reading) + end + + should 'update a reading' do + Kalibro::Reading.expects(:new).with(@reading_hash.to_s).returns(@reading) + @reading.expects(:save).with(@content.reading_group_id).returns(true) + get :update, :profile => @profile.identifier, :id => @content.id, :reading => @reading_hash + assert @reading.errors.empty? + assert_response :redirect + end + + should 'put an Exception in reading when an error occurs in update action' do + @reading.errors = [Exception.new] + Kalibro::Reading.expects(:new).with(@reading_hash.to_s).returns(@reading) + @reading.expects(:save).with(@content.reading_group_id).returns(false) + get :update, :profile => @profile.identifier, :id => @content.id, :reading => @reading_hash + assert_response :redirect + end + + should 'destroy a reading' do + @reading.expects(:destroy) + Kalibro::Reading.expects(:find).with(@reading.id.to_s).returns(@reading) + + get :destroy, :profile => @profile.identifier, :id => @content.id, :reading_id => @reading.id + + assert @reading.errors.empty? + assert_response :redirect + end + + should 'put an Exception in reading when an error occurs in destroy action' do + @reading.errors = [Exception.new] + @reading.expects(:destroy) + Kalibro::Reading.expects(:find).with(@reading.id.to_s).returns(@reading) + + get :destroy, :profile => @profile.identifier, :id => @content.id, :reading_id => @reading.id + + assert !@reading.errors.empty? + assert_response :redirect + end +end diff --git a/plugins/mezuro/views/cms/mezuro_plugin/_reading_group_content.html.erb b/plugins/mezuro/views/cms/mezuro_plugin/_reading_group_content.html.erb index 427b03f..d7f9ce6 100644 --- a/plugins/mezuro/views/cms/mezuro_plugin/_reading_group_content.html.erb +++ b/plugins/mezuro/views/cms/mezuro_plugin/_reading_group_content.html.erb @@ -8,7 +8,7 @@ <%= hidden_field_tag 'reading_group_content[profile_id]', profile.id %> <%= hidden_field_tag 'id', @article.id %> -<%= hidden_field_tag 'reading_group_id', reading_group.id %> +<%= hidden_field_tag 'reading_group_id', (reading_group.id unless reading_group.nil?) %> <%= required_fields_message %> diff --git a/plugins/mezuro/views/mezuro_plugin_reading/edit.html.erb b/plugins/mezuro/views/mezuro_plugin_reading/edit.html.erb new file mode 100644 index 0000000..509d874 --- /dev/null +++ b/plugins/mezuro/views/mezuro_plugin_reading/edit.html.erb @@ -0,0 +1,21 @@ + + +

<%= link_to( @reading_group_name, homepage_url(@data_profile, @reading_group_name.downcase.gsub(/[^0-9A-Za-z\-]/, '')) ) %>

+ +<% form_for :reading, :url => {:action =>"create", :controller => "mezuro_plugin_reading"}, :method => :get do |f| %> + <%= hidden_field_tag :id, @reading_group_content_id %> + + <%= f.hidden_field :id %> + <%= required labelled_form_field _('label:'), f.text_field(:label) %> + + <%= required labelled_form_field _('grade:'), + f.text_field(:grade) %> + + <%= required labelled_form_field _('color:'), + colorpicker_field(:reading, :color) %>Click in the field to change Color + +

+ <%= f.submit "Add" %> +

+ +<% end %> -- libgit2 0.21.2