1 | var assert = require('assert')
|
2 | var LongModule = require('../')
|
3 | var mongoose = require('mongoose')
|
4 | var Schema = mongoose.Schema;
|
5 | var Long;
|
6 |
|
7 | describe('Long', function(){
|
8 | before(function(){
|
9 | Long = LongModule(mongoose);
|
10 | })
|
11 |
|
12 | it('is a function', function(){
|
13 | assert.equal('function', typeof Long);
|
14 | })
|
15 |
|
16 | it('extends mongoose.Schema.Types', function(){
|
17 | assert.ok(Schema.Types.Long);
|
18 | assert.equal(Long, Schema.Types.Long);
|
19 | })
|
20 |
|
21 | it('extends mongoose.Types', function(){
|
22 | assert.ok(mongoose.Types.Long);
|
23 | assert.equal(mongoose.mongo.Long, mongoose.Types.Long);
|
24 | })
|
25 |
|
26 | it('can be used in schemas', function(){
|
27 | var s = new Schema({ long: Long });
|
28 | var long = s.path('long')
|
29 | assert.ok(long instanceof mongoose.SchemaType);
|
30 | assert.equal('function', typeof long.get);
|
31 |
|
32 | var s = new Schema({ long: 'long' });
|
33 | var long = s.path('long')
|
34 | assert.ok(long instanceof mongoose.SchemaType);
|
35 | assert.equal('function', typeof long.get);
|
36 | })
|
37 |
|
38 | describe('integration', function(){
|
39 | var db, S, schema, id;
|
40 |
|
41 | before(function(done){
|
42 | db = mongoose.createConnection('mongodb://localhost:27017/mlong');
|
43 | db.once('open', function () {
|
44 | schema = new Schema({ long: Long, name: 'string' });
|
45 | S = db.model('Long', schema);
|
46 | done();
|
47 | });
|
48 | })
|
49 |
|
50 | after(function(done) {
|
51 | db.close(done);
|
52 | });
|
53 |
|
54 | describe('casts', function(){
|
55 | it('numbers', function(){
|
56 | var v = 200000000;
|
57 | var s = new S({ long: v });
|
58 | assert.ok(s.long instanceof mongoose.Types.Long);
|
59 | assert.equal(v, s.long.toNumber());
|
60 |
|
61 | v = new Number(200000000);
|
62 | s = new S({ long: v });
|
63 | assert.ok(s.long instanceof mongoose.Types.Long);
|
64 | assert.equal(+v, s.long.toNumber());
|
65 | })
|
66 |
|
67 | it('strings', function(){
|
68 | var v = '200000000';
|
69 | var s = new S({ long: v});
|
70 | assert.ok(s.long instanceof mongoose.Types.Long);
|
71 | assert.equal(v, s.long.toString());
|
72 | })
|
73 |
|
74 | it('null', function(){
|
75 | var s = new S({ long: null });
|
76 | assert.equal(null, s.long);
|
77 | })
|
78 |
|
79 | it('mongo.Long', function(){
|
80 | var s = new S({ long: new mongoose.Types.Long("90") });
|
81 | assert.ok(s.long instanceof mongoose.Types.Long);
|
82 | assert.equal(90, s.long.toNumber());
|
83 | })
|
84 |
|
85 | it('non-castables produce _saveErrors', function(done){
|
86 | var schema = new Schema({ long: Long }, { strict: 'throw' });
|
87 | var M = db.model('throws', schema);
|
88 | var m = new M({ long: [] });
|
89 | m.save(function (err) {
|
90 | assert.ok(err);
|
91 | assert.equal('ValidationError', err.name);
|
92 | assert.equal(err.errors['long'].name, 'CastError');
|
93 | done();
|
94 | });
|
95 | })
|
96 | })
|
97 |
|
98 | it('can be saved', function(done){
|
99 | var s = new S({ long: 20 });
|
100 | id = s.id;
|
101 | s.save(function (err) {
|
102 | assert.ifError(err);
|
103 | done();
|
104 | })
|
105 | })
|
106 |
|
107 | it('is queryable', function(done){
|
108 | S.findById(id, function (err, doc) {
|
109 | assert.ifError(err);
|
110 | assert.ok(doc.long instanceof mongoose.Types.Long);
|
111 | assert.equal(20, doc.long.toNumber());
|
112 | done();
|
113 | });
|
114 | })
|
115 |
|
116 | it('can be updated', function(done){
|
117 | S.findById(id, function (err, doc) {
|
118 | assert.ifError(err);
|
119 | doc.long = doc.long.add(mongoose.Types.Long.fromString("10"));
|
120 | doc.save(function (err) {
|
121 | assert.ifError(err);
|
122 | S.findById(id, function (err, doc) {
|
123 | assert.ifError(err);
|
124 | assert.equal(30, doc.long.toNumber());
|
125 | done();
|
126 | });
|
127 | })
|
128 | })
|
129 | })
|
130 |
|
131 | it('can be required', function(done){
|
132 | var s = new Schema({ long: { type: Long, required: true }});
|
133 | var M = db.model('required', s);
|
134 | var m = new M;
|
135 | m.save(function (err) {
|
136 | assert.ok(err);
|
137 | m.long = 10;
|
138 | m.validate(function (err) {
|
139 | assert.ifError(err);
|
140 | done();
|
141 | })
|
142 | })
|
143 | })
|
144 |
|
145 | it('works with update', function(done){
|
146 | S.create({ long: 99999 }, function (err, s) {
|
147 | assert.ifError(err);
|
148 | S.updateOne({ long: s.long, _id: s._id }, { name: 'changed' }, { upsert: true }, function (err) {
|
149 | assert.ifError(err);
|
150 |
|
151 | S.findById(s._id, function (err, doc) {
|
152 | assert.ifError(err);
|
153 | assert.equal(99999, doc.long);
|
154 | assert.equal('changed', doc.name);
|
155 | done();
|
156 | })
|
157 | });
|
158 | });
|
159 |
|
160 | })
|
161 | })
|
162 | })
|