<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
                    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <script src="../../dist/jquery/jquery-1.4.2.min.js"></script>
  <script src="../../src/o_O.js"></script>
  <script src="../../src/modules/o_O.model.js"></script>
  <script src="../../src/modules/o_O.validations.js"></script>
  <script src="../../src/drivers/jquery/adapters/o_O.dom.js"></script>
  <script src="../../src/drivers/jquery/modules/o_O.controller.js"></script>
  <script src="../../src/drivers/jquery/modules/o_O.support.js"></script>
  <script src="/tests.js"></script>
  <script src="run_all.js"></script>

  <link rel="stylesheet" href="qunit.css" type="text/css" media="screen" />
<script type="text/javascript" src="qunit.js"></script>

  <script>
  
  o_O.model.adapter = o_O.dom;
  
  o_O('Review', function(that){
    that.validates_presence_of('title');
    that.validates_presence_of('content');
    that.validates_length_of('title', {min: 5, max: 15});
    that.validates(function(review){
      if(review.score != 99 && review.test === true)
      {
        review.errors.push({message: 'Score should be 99'})
      }
    })
    that.methods.title_numbered = function(){
      return '1. ' + this.title;
    }
    return that;
  });

  $(document).ready(function(){
    
    module("Models");
    
    
    asyncTest('a valid, successful model', 2, function(){
      var myReview = Review.initialize({title: "Biscuit", content: "Some Content"});
      myReview.save({
        loading: function(){
          ok('should call the loading callback before success')
        },
        success: function(){
          ok('should call the success callback')
          start();
        }
      });
    });
    
    asyncTest('an invalid review',1, function(){
      var myReview = Review.initialize();
      myReview.save({
        success:function(){
          ok('should not call the success callback');
        },
        invalid: function(){
          ok('should call the invalid callback');
          start();
        },
        loading: function(){
          ok('should not call the loading callback');
        }
      });
    });
    
    asyncTest('updating a review', 2, function(){
          var myReview = Review.initialize({title: "Biscuit", content: "Some Content"});
          myReview.update_attributes({title: 'No! is it', content: 'Dublin'}, {
            success: function(){
              ok('should call the success callback');
              start();
            },
            invalid: function(){
              ok('should not cal the invalid callback');
            },
            loading: function(){
              ok('should call the loading callback');
            }
          });
        })

        asyncTest('updating an invalid review', 1, function(){
              var myReview = Review.initialize();
              myReview.update_attributes({}, {
                success: function(){
                  ok('should call the success callback');
                },
                invalid: function(){
                  ok('should not cal the invalid callback');
                  start();
                },
                loading: function(){
                  ok('should call the loading callback');
                }
              });
            })

      test('destroying a review', 2, function(){
        var myReview = Review.initialize();
        myReview.destroy({
          loading: function(){
            ok('loading should be run');
          },
          success: function(){
            ok('success should be run');
          }
        })
      })

  });
  </script>
  
</head>
<body>
  <h1 id="qunit-header">Model Tests (with callbacks)</h1>
  <h2 id="qunit-banner"></h2>
  <h2 id="qunit-userAgent"></h2>
  <ol id="qunit-tests"></ol>
</body>
</html>