Commit 91464727

mo <mo.khan@gmail.com>
2017-09-08 02:26:55
connect login-form to session model validation.
1 parent 1ca9d86
Changed files (3)
app
assets
javascripts
views
views
spec
javascripts
app/assets/javascripts/views/sessions/login_form.js.coffee
@@ -8,30 +8,26 @@ class CakeSide.Views.LoginForm extends CakeSide.AutoView
     'keyup #session_password': 'onKeyUp'
     'submit form': 'onSubmit'
 
-  render: ->
-    @hideErrors()
-    @$('input[type=submit]').prop('disabled', !@isValid())
-    _.each _.keys(@errors), (key) =>
-      @showError(@field(key), @errors[key])
-
-  isValid: ->
-    _.keys(@errors).length == 0
-
-  validate: ->
-    @errors = {}
-    if _.isEmpty(@field("username").val())
-      @errors['username'] = "Email is required"
+  initialize: () ->
+    @model = new CakeSide.Models.Session()
 
-    if _.isEmpty(@field("password").val())
-      @errors['password'] = "Password is required"
+  render: ->
+    @renderErrors(@model.validationError)
 
   onKeyUp: (event) ->
-    @validate()
+    @model.set('username', @field('username').val())
+    @model.set('password', @field('password').val())
+    @$('input[type=submit]').prop('disabled', !@model.isValid())
     @render()
 
   onSubmit: (event) ->
-    @validate()
-    if !@isValid()
+    if !@model.isValid()
+      @$('input[type=submit]').prop('disabled', true)
       event.preventDefault()
       event.stopPropagation()
     @render()
+
+  renderErrors: (errors) ->
+    @hideErrors()
+    _.each _.keys(errors), (key) =>
+      @showError(@field(key), errors[key])
app/views/sessions/new.html.erb
@@ -25,7 +25,7 @@
 
   <div class="col">
     <div data-autoview="login-form">
-      <%= form_for(@session, url: sessions_path(@session), html: { class: "form-horizontal needs-validation" }) do |f| %>
+      <%= form_for(@session, url: sessions_path(@session), html: { class: "form-horizontal needs-validation", novalidate: :novalidate }) do |f| %>
         <legend>Got an account? Login!</legend>
         <div class="form-group">
           <%= email_field_tag 'session[username]', '', placeholder: 'Email', class: "form-control", required: :required %>
spec/javascripts/views/sessions/login_form_spec.js.coffee
@@ -28,14 +28,14 @@ describe "CakeSide.Views.LoginForm", ->
     subject.$('form').submit()
 
     expect(subject.$('input[type=submit]').prop('disabled')).toEqual(true)
-    expect(subject.field('username').siblings('.invalid-feedback').html()).toEqual("Email is required")
+    expect(subject.field('username').siblings('.invalid-feedback').html()).toEqual("Email can't be blank")
 
   it "disables the submit button when the password is missing", ->
     subject.field('username').val('user@email.com')
     subject.$('form').submit()
 
     expect(subject.$('input[type=submit]').prop('disabled')).toEqual(true)
-    expect(subject.field("password").siblings('.invalid-feedback').html()).toEqual("Password is required")
+    expect(subject.field("password").siblings('.invalid-feedback').html()).toEqual("Password can't be blank")
 
   it "enables the submit button when all required fields are specified", ->
     subject.field('username').val('user@email.com').change()