Commit 9caca45fd8ece2d0e27abd667ac6beacfac55e0c

Authored by Daniel Alves + Diego Araújo + Guilherme Rojas
Committed by Paulo Meireles
1 parent 09f2a25b

[Mezuro] New validations for readings.

plugins/mezuro/controllers/myprofile/mezuro_plugin_reading_controller.rb
@@ -4,6 +4,10 @@ class MezuroPluginReadingController < MezuroPluginMyprofileController @@ -4,6 +4,10 @@ class MezuroPluginReadingController < MezuroPluginMyprofileController
4 4
5 def new 5 def new
6 @reading_group_content = profile.articles.find(params[:id]) 6 @reading_group_content = profile.articles.find(params[:id])
  7 +
  8 + readings = Kalibro::Reading.readings_of @reading_group_content.reading_group_id
  9 + @parser="|*|"
  10 + @labels_and_grades = readings.map {|reading| "#{reading.label}#{@parser}#{reading.grade}#{@parser}"}
7 end 11 end
8 12
9 def save 13 def save
@@ -20,6 +24,15 @@ class MezuroPluginReadingController < MezuroPluginMyprofileController @@ -20,6 +24,15 @@ class MezuroPluginReadingController < MezuroPluginMyprofileController
20 def edit 24 def edit
21 @reading_group_content = profile.articles.find(params[:id]) 25 @reading_group_content = profile.articles.find(params[:id])
22 @reading = Kalibro::Reading.find params[:reading_id] 26 @reading = Kalibro::Reading.find params[:reading_id]
  27 +
  28 + readings = Kalibro::Reading.readings_of @reading_group_content.reading_group_id
  29 + readings = readings.select {|reading| (reading.id != @reading.id)}
  30 + @parser="|*|"
  31 + @labels_and_grades = readings.map do |reading|
  32 + if(reading.id != @reading.id)
  33 + "#{reading.label}#{@parser}#{reading.grade}#{@parser}"
  34 + end
  35 + end
23 end 36 end
24 37
25 def destroy 38 def destroy
@@ -32,5 +45,4 @@ class MezuroPluginReadingController < MezuroPluginMyprofileController @@ -32,5 +45,4 @@ class MezuroPluginReadingController < MezuroPluginMyprofileController
32 redirect_to_error_page reading.errors[0].message 45 redirect_to_error_page reading.errors[0].message
33 end 46 end
34 end 47 end
35 -  
36 end 48 end
plugins/mezuro/public/javascripts/validations.js
@@ -24,10 +24,30 @@ function validate_new_reading() { @@ -24,10 +24,30 @@ function validate_new_reading() {
24 var name = jQuery('#reading_label').val(); 24 var name = jQuery('#reading_label').val();
25 var grade = jQuery('#reading_grade').val(); 25 var grade = jQuery('#reading_grade').val();
26 var color = jQuery('#reading_color').val(); 26 var color = jQuery('#reading_color').val();
  27 +
27 if (is_null(name) || is_null(grade) || is_null(color)){ 28 if (is_null(name) || is_null(grade) || is_null(color)){
28 alert("Please fill all fields marked with (*)."); 29 alert("Please fill all fields marked with (*).");
29 return false; 30 return false;
30 } 31 }
  32 +
  33 + var parser = jQuery('#labels_and_grades').attr('data-parser');
  34 + var labels_and_grades = jQuery('#labels_and_grades').attr('data-list').split(parser);
  35 + for (var id = 0; id < labels_and_grades.length; id = id + 2) {
  36 + if (labels_and_grades[id] == name) {
  37 + alert("This label already exists! Please, choose another one.");
  38 + return false;
  39 + }
  40 +
  41 + if (labels_and_grades[id+1] == grade || labels_and_grades[id+1] == grade + ".0") {
  42 + alert("This grade already exists! Please, choose another one.");
  43 + return false;
  44 + }
  45 + }
  46 +
  47 + if (!color.match(/^[a-fA-F0-9]{6}$/)) {
  48 + alert("This is not a valid color.");
  49 + return false;
  50 + }
31 return true; 51 return true;
32 } 52 }
33 53
plugins/mezuro/test/functional/myprofile/mezuro_plugin_reading_controller_test.rb
@@ -21,7 +21,11 @@ class MezuroPluginReadingControllerTest &lt; ActionController::TestCase @@ -21,7 +21,11 @@ class MezuroPluginReadingControllerTest &lt; ActionController::TestCase
21 end 21 end
22 22
23 should 'set variables to create a new reading' do 23 should 'set variables to create a new reading' do
  24 + parser = "|*|"
  25 + Kalibro::Reading.expects(:readings_of).with(@content.reading_group_id).returns([@reading])
24 get :new, :profile => @profile.identifier, :id => @content.id 26 get :new, :profile => @profile.identifier, :id => @content.id
  27 + assert_equal parser, assigns(:parser)
  28 + assert_equal ["#{@reading.label}#{parser}#{@reading.grade}#{parser}"], assigns(:labels_and_grades)
25 assert_equal @content.id, assigns(:reading_group_content).id 29 assert_equal @content.id, assigns(:reading_group_content).id
26 assert_response :success 30 assert_response :success
27 end 31 end
@@ -44,10 +48,16 @@ class MezuroPluginReadingControllerTest &lt; ActionController::TestCase @@ -44,10 +48,16 @@ class MezuroPluginReadingControllerTest &lt; ActionController::TestCase
44 end 48 end
45 49
46 should 'set variables to edit a reading' do 50 should 'set variables to edit a reading' do
  51 + parser = "|*|"
  52 + another_reading = ReadingFixtures.reading
  53 + another_reading.id = 10
  54 + Kalibro::Reading.expects(:readings_of).with(@content.reading_group_id).returns([@reading, another_reading])
47 Kalibro::Reading.expects(:find).with(@reading.id.to_s).returns(@reading) 55 Kalibro::Reading.expects(:find).with(@reading.id.to_s).returns(@reading)
48 get :edit, :profile => @profile.identifier, :id => @content.id, :reading_id => @reading.id 56 get :edit, :profile => @profile.identifier, :id => @content.id, :reading_id => @reading.id
49 assert_equal @content.id, assigns(:reading_group_content).id 57 assert_equal @content.id, assigns(:reading_group_content).id
50 assert_equal @reading, assigns(:reading) 58 assert_equal @reading, assigns(:reading)
  59 + assert_equal parser, assigns(:parser)
  60 + assert_equal ["#{another_reading.label}#{parser}#{another_reading.grade}#{parser}"], assigns(:labels_and_grades)
51 assert_response :success 61 assert_response :success
52 end 62 end
53 63
plugins/mezuro/views/mezuro_plugin_reading/_form.html.erb
@@ -8,4 +8,6 @@ @@ -8,4 +8,6 @@
8 <%= required labelled_form_field _('Color:'), 8 <%= required labelled_form_field _('Color:'),
9 colorpicker_field(:reading, :color) %>Click in the field to change Color 9 colorpicker_field(:reading, :color) %>Click in the field to change Color
10 10
  11 +<div id="labels_and_grades" data-list="<%= @labels_and_grades %>" data-parser="<%= @parser %>"/>
  12 +
11 <p><%= f.submit "Save" %></p> 13 <p><%= f.submit "Save" %></p>