initialized kettu on gitorious
[kettu:kettu.git] / spec / validator_spec.js
1 describe 'Validator'
2   before_each
3     validator = new Validator()
4   end
5   
6   it 'should have no errors on a valid object'
7     torrent = {'name': 'coffee', 'totalSize': 160, 'status': 8, 'rateUpload': 20}
8     validator.schema = {
9       'presence_of': ['name', 'status'],
10       'numericality_of': ['totalSize', {'field': 'rateUpload', 'max': 20}],
11       'inclusion_of': {'field': 'status', 'in': [1, 2, 4, 8, 16]}
12     }
13     validator.validate(torrent)
14     validator.errors.should.be_empty
15   end
16   
17   it 'should validate the presence of a single field'
18     torrent = {}
19     validator.schema = {
20       'presence_of': 'name'
21     }
22     validator.validate(torrent)
23     validator.errors[0]['field'].should.eql('name')
24     validator.errors[0]['message'].should.eql('should not be empty')
25   end
26   
27   it 'should validate the presence of multiple fields'
28     torrent = {}
29     validator.schema = {
30       'presence_of': ['name', 'status']
31     }
32     validator.validate(torrent)
33     validator.errors[0]['field'].should.eql('name')
34     validator.errors[1]['field'].should.eql('status')
35   end
36   
37   it 'should validate the numericality of a field'
38     torrent = {'totalSize': 'abc'}
39     validator.schema = {
40       'numericality_of': 'totalSize'
41     }
42     validator.validate(torrent)
43     validator.errors[0]['field'].should.eql('totalSize')
44     validator.errors[0]['message'].should.eql('is not a valid number')
45   end
46   
47   it 'should validate the max value of a numeric field'
48     torrent = {'totalSize': 100}
49     validator.schema = {
50       'numericality_of': {'field': 'totalSize', 'max': 99}
51     }
52     validator.validate(torrent)
53     validator.errors[0]['field'].should.eql('totalSize')
54     validator.errors[0]['message'].should.eql('is not a valid number')    
55   end
56   
57   it 'should validate the numericality of multiple fields'
58     torrent = {'totalSize': 'abc', 'status': 'def'}
59     validator.schema = {
60       'numericality_of': ['totalSize', 'status']
61     }
62     validator.validate(torrent)
63     validator.errors[0]['field'].should.eql('totalSize')
64     validator.errors[1]['field'].should.eql('status')
65   end
66   
67   it 'should validate the numericality of a missing field and throw an error'
68     torrent = {}
69     validator.schema = {
70       'numericality_of': 'totalSize'
71     }
72     validator.validate(torrent)
73     validator.errors[0]['field'].should.eql('totalSize')
74     validator.errors[0]['message'].should.eql('is not a valid number')    
75   end
76
77   it 'should validate the numericality of null and throw an error'
78     torrent = {'totalSize': null}
79     validator.schema = {
80       'numericality_of': 'totalSize'
81     }
82     validator.validate(torrent)
83     validator.errors[0]['field'].should.eql('totalSize')
84     validator.errors[0]['message'].should.eql('is not a valid number')    
85   end
86   
87   it 'should validate the inclusion of a field'
88     torrent = {'encryption': 'strong'}
89     validator.schema = {
90       'inclusion_of': {'field': 'encryption', 'in': ['required', 'preferred', 'tolerated']}
91     }
92     validator.validate(torrent)
93     validator.errors[0]['field'].should.eql('encryption')
94     validator.errors[0]['message'].should.eql('is not in the list of a valid values')
95   end
96 end