diff --git a/app/controllers/maps_controller.rb b/app/controllers/maps_controller.rb
index 91af5ce2265bc20b955b78477a4d526b21f523f8..077350ab2c0d85a0f0fcf846a4e71248fa5350e8 100644
--- a/app/controllers/maps_controller.rb
+++ b/app/controllers/maps_controller.rb
@@ -5,9 +5,7 @@ class MapsController < ApplicationController
   def index
     respond_to do |format|
       format.html
-      format.json do
-        render json: Event.moderated.future.geo.map { |event| event.to_json }
-      end
+      format.json { render json: Event.moderated.future.geo }
     end
   end
 end
diff --git a/app/models/event.rb b/app/models/event.rb
index 224ee69c1bafc94b9c958d33d5f24538b711a603..20ad105db1057d3068112d739341d541889b19ad 100644
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -69,17 +69,15 @@ class Event < ActiveRecord::Base
     end
   end
 
-  def to_json
+  def as_json(_options = {})
     { type: 'Feature', properties: {
       name: title,
       popupContent: "<a href=\"/#{self.class.name.downcase.pluralize}/#{id}\"" \
         + ">#{city}: #{title}</a>"
-    },
-      geometry: {
-        type: 'Point',
-        coordinates: [longitude, latitude]
-      }
-    }
+    }, geometry: {
+      type: 'Point',
+      coordinates: [longitude, latitude]
+    } }
   end
 
   def full_address
diff --git a/app/models/note.rb b/app/models/note.rb
index f0d582864616225f97034de3a2dc4b05c732f41e..f91a38b953a33ea1afd069c89509fc2efef09737 100644
--- a/app/models/note.rb
+++ b/app/models/note.rb
@@ -3,6 +3,8 @@ class Note < ActiveRecord::Base
   belongs_to :event
   belongs_to :author, class_name: User
 
+  validates :contents, presence: true
+
   # Setup the magic time stamp so it uses the "date" column
   def timestamp_attributes_for_create
     super << :date
diff --git a/app/models/user.rb b/app/models/user.rb
index 418efe8f340722dbfac511173246da123962539e..5b474232228d0c25e4db4c257478a3a41b7a6eab 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -10,6 +10,8 @@ class User < ActiveRecord::Base
 
   has_many :notes
 
+  validates :login, presence: true
+
   def encrypted_password=(pass)
     self[:password] = pass
   end
diff --git a/test/controllers/events_controller_test.rb b/test/controllers/events_controller_test.rb
index 87894651179e2a049caa699b02be3cf83dd06af5..b885e5566efde6a641b732960cdf700fb33678ab 100644
--- a/test/controllers/events_controller_test.rb
+++ b/test/controllers/events_controller_test.rb
@@ -57,6 +57,18 @@ class EventsControllerTest < ActionController::TestCase
     assert_redirected_to root_url
   end
 
+  test 'should not create event' do
+    assert_no_difference 'Event.count' do
+      post :create, event: {
+        title: @event.title,
+        city: @event.city,
+        region: @event.related_region
+      }
+
+      assert_not_empty assigns(:event).errors.messages
+    end
+  end
+
   test 'should show event' do
     get :show, id: @event
     assert_response :success
@@ -93,6 +105,14 @@ class EventsControllerTest < ActionController::TestCase
     assert_redirected_to :root
   end
 
+  test 'should not update event' do
+    patch :update, id: @event, secret: 'MyString', event: {
+      title: nil
+    }
+
+    assert_not_empty assigns(:event).errors.messages
+  end
+
   test 'should get cancel page' do
     get :cancel, id: @event, secret: 'MyString'
     assert_response :success
diff --git a/test/controllers/moderations_controller_test.rb b/test/controllers/moderations_controller_test.rb
index 97debb2c8f06b7f3968986b0093d3bfc4f96e92c..ecc6d78418f79d26bd850ef48d40765266fad151 100644
--- a/test/controllers/moderations_controller_test.rb
+++ b/test/controllers/moderations_controller_test.rb
@@ -11,6 +11,12 @@ class ModerationsControllerTest < ActionController::TestCase
     sign_in users(:one)
   end
 
+  test 'should get index' do
+    get :index
+    assert_response :success
+    assert_not_nil assigns(:events)
+  end
+
   test 'should preview event' do
     patch :preview, id: @moderation, event: {
       title: 'hello world',
@@ -26,6 +32,13 @@ class ModerationsControllerTest < ActionController::TestCase
     assert_redirected_to moderations_path
   end
 
+  test 'should not edit event' do
+    put :update, id: @moderation, event: {
+      title: nil
+    }
+    assert_not_empty assigns(:moderation).errors
+  end
+
   test 'should accept event' do
     @moderation = events :proposed
 
@@ -50,21 +63,23 @@ class ModerationsControllerTest < ActionController::TestCase
       start_time: @moderation.start_time,
       end_time: @moderation.end_time,
       description: @moderation.description,
-      city: @moderation.city,
-      region: @moderation.related_region,
-      locality: @moderation.locality,
       url: @moderation.url,
       contact: @moderation.contact,
-      moderated: @moderation.moderated,
-      secret: @moderation.secret,
-      submission_time: @moderation.submission_time,
-      submitter: @moderation.submitter,
-      tags: @moderation.tags }
+      tags: @moderation.tags
+    }
 
     assert_empty assigns(:moderation).errors
     assert_redirected_to moderations_path
   end
 
+  test 'should not update event' do
+    patch :update, id: @moderation, secret: 'MyString', event: {
+      title: nil
+    }
+
+    assert_not_empty assigns(:moderation).errors
+  end
+
   test 'should reject event' do
     assert_difference 'Event.count', -1 do
       delete :destroy, id: @moderation
@@ -74,4 +89,14 @@ class ModerationsControllerTest < ActionController::TestCase
 
     assert_redirected_to moderations_path
   end
+
+  test 'should reject event with a reason' do
+    assert_difference 'Event.count', -1 do
+      delete :destroy, id: @moderation, reason: 'r_4'
+    end
+
+    assert_empty assigns(:moderation).errors
+
+    assert_redirected_to moderations_path
+  end
 end
diff --git a/test/controllers/notes_controller_test.rb b/test/controllers/notes_controller_test.rb
index 24e824b2eb27b9f052a11c4cf83b68ed4b74c63f..98938349cf133fe6eafa25f41ece35a8806e68ca 100644
--- a/test/controllers/notes_controller_test.rb
+++ b/test/controllers/notes_controller_test.rb
@@ -18,12 +18,30 @@ class NotesControllerTest < ActionController::TestCase
   test 'should create note' do
     assert_difference('Note.count') do
       post :create, moderation_id: @note.event.id, note: {
-        author: @note.author,
-        contents: @note.contents,
-        date: @note.date
+        contents: @note.contents
       }
     end
 
     assert_redirected_to moderations_path
   end
+
+  test 'should send mail' do
+    assert_difference('Note.count') do
+      post :create, moderation_id: @note.event.id, envoiParMail: 'oui', note: {
+        contents: @note.contents
+      }
+    end
+
+    assert ActionMailer::Base.deliveries.present?
+
+    assert_redirected_to moderations_path
+  end
+
+  test 'should not create note' do
+    assert_no_difference('Note.count') do
+      post :create, moderation_id: @note.event.id, note: {
+        nothing: 'almost'
+      }
+    end
+  end
 end
diff --git a/test/controllers/users_controller_test.rb b/test/controllers/users_controller_test.rb
index 9c1918ae7ba5cd7a6b025483f1f71ee90bbf7dc5..a8f0060c3e54619b21e40f19741381c649f96e51 100644
--- a/test/controllers/users_controller_test.rb
+++ b/test/controllers/users_controller_test.rb
@@ -35,6 +35,14 @@ class UsersControllerTest < ActionController::TestCase
     assert_redirected_to user_path(assigns(:user))
   end
 
+  test 'should not create user' do
+    assert_no_difference('User.count') do
+      post :create, user: {
+        login: nil
+      }
+    end
+  end
+
   test 'should show user' do
     get :show, id: @user
     assert_response :success
@@ -55,6 +63,14 @@ class UsersControllerTest < ActionController::TestCase
     assert_redirected_to user_path(assigns(:user))
   end
 
+  test 'should not update user' do
+    patch :update, id: @user, user: {
+      login: nil
+    }
+
+    assert_not_empty assigns(:user).errors
+  end
+
   test 'should destroy user' do
     assert_difference('User.count', -1) do
       delete :destroy, id: @user
diff --git a/test/models/event_test.rb b/test/models/event_test.rb
index d1160a98ffd72c13dc5ab4f70b255c24080aab65..f5df7e8cb062ccacfbfbd357046ff0d1809be7f4 100644
--- a/test/models/event_test.rb
+++ b/test/models/event_test.rb
@@ -113,10 +113,10 @@ class EventTest < ActiveSupport::TestCase
   end
 
   test 'json transform' do
-    assert_not_nil @event.to_json
+    assert_not_nil @event.as_json
 
-    assert_equal 'Feature', @event.to_json[:type]
-    assert_equal 'Point', @event.to_json[:geometry][:type]
+    assert_equal 'Feature', @event.as_json[:type]
+    assert_equal 'Point', @event.as_json[:geometry][:type]
   end
 
   test 'full address' do