mongoid_monkey 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,1086 +0,0 @@
1
- require "spec_helper"
2
-
3
- if defined?(Moped)
4
-
5
- describe Moped::Database do
6
-
7
- describe "#collection_names" do
8
-
9
- let(:session) do
10
- Moped::Session.new([ "127.0.0.1:27017" ], database: $database_name)
11
- end
12
-
13
- let(:database) do
14
- described_class.new(session, $database_name)
15
- end
16
-
17
- let(:collection_names) do
18
- database.collection_names
19
- end
20
-
21
- before do
22
- session.drop
23
- names.map do |name|
24
- session.command(create: name)
25
- end
26
- end
27
-
28
- context "when name doesn't include system" do
29
-
30
- let(:names) do
31
- %w[ users comments ]
32
- end
33
-
34
- it "returns the name of all non system collections" do
35
- expect(collection_names.sort).to eq([ "comments", "users" ])
36
- end
37
- end
38
-
39
- context "when name includes system not at the beginning" do
40
-
41
- let(:names) do
42
- %w[ users comments_system_fu ]
43
- end
44
-
45
- it "returns the name of all non system collections" do
46
- expect(collection_names.sort).to eq([ "comments_system_fu", "users" ])
47
- end
48
- end
49
-
50
- context "when name includes system at the beginning" do
51
-
52
- let(:names) do
53
- %w[ users system_comments_fu ]
54
- end
55
-
56
- it "returns the name of all non system collections" do
57
- expect(collection_names.sort).to eq([ "system_comments_fu", "users" ])
58
- end
59
- end
60
- end
61
- end
62
-
63
- describe Moped::Indexes do
64
-
65
- let(:session) do
66
- Moped::Session.new %w[127.0.0.1:27017], database: $database_name
67
- end
68
-
69
- let(:indexes) do
70
- session[:users].indexes
71
- end
72
-
73
- before do
74
- begin
75
- indexes.drop
76
- rescue Exception
77
- end
78
- end
79
-
80
- describe "#create" do
81
-
82
- context "when called without extra options" do
83
-
84
- it "creates an index with no options" do
85
- indexes.create name: 1
86
- indexes[name: 1].should_not eq nil
87
- keys = []
88
- indexes.each do |idx|
89
- keys << idx['key']
90
- end
91
- keys.should eq([{"_id" => 1}, {"name" => 1}])
92
- end
93
- end
94
-
95
- context "when called with extra options" do
96
-
97
- it "creates an index with the extra options" do
98
- indexes.create({name: 1}, {unique: true})
99
- index = indexes[name: 1]
100
- index["unique"].should eq true
101
- end
102
- end
103
-
104
- context "when there is existent data" do
105
-
106
- before do
107
- 3.times { session[:users].insert(name: 'John') }
108
- end
109
-
110
- it "raises an error" do
111
- expect {
112
- indexes.create({name: 1}, {unique: true})
113
- }.to raise_error(Moped::Errors::OperationFailure)
114
- end
115
- end
116
- end
117
-
118
- describe "#drop" do
119
-
120
- context "when provided a key" do
121
- before { session.drop }
122
-
123
- it "drops the index" do
124
- indexes.create(name: 1)["numIndexesAfter"].should eq 2
125
- indexes.drop(name: 1).should eq true
126
- indexes.create({name: 1}, {unique: true})["numIndexesAfter"].should eq 2
127
- indexes.drop(name: 1).should eq true
128
- end
129
- end
130
-
131
- context "when not provided a key" do
132
-
133
- it "drops all indexes" do
134
- indexes.create name: 1
135
- indexes.create age: 1
136
- indexes.drop
137
- indexes[name: 1].should eq nil
138
- indexes[age: 1].should eq nil
139
- end
140
- end
141
- end
142
- end
143
-
144
- class Person
145
- include Mongoid::Document
146
-
147
- index age: 1
148
- index addresses: 1
149
- index dob: 1
150
- index name: 1
151
- index title: 1
152
- index({ ssn: 1 }, { unique: true })
153
- end
154
-
155
- if defined?(Mongoid::Indexes)
156
-
157
- describe Mongoid::Indexes do
158
-
159
- describe ".included" do
160
-
161
- let(:klass) do
162
- Class.new do
163
- include Mongoid::Indexes
164
- end
165
- end
166
-
167
- it "adds an index_options accessor" do
168
- klass.should respond_to(:index_options)
169
- end
170
-
171
- it "defaults index_options to empty hash" do
172
- klass.index_options.should eq({})
173
- end
174
- end
175
-
176
- describe ".remove_indexes" do
177
-
178
- context "when no database specific options exist" do
179
-
180
- let(:klass) do
181
- Person
182
- end
183
-
184
- let(:collection) do
185
- klass.collection
186
- end
187
-
188
- before do
189
- klass.create_indexes
190
- klass.remove_indexes
191
- end
192
-
193
- it "removes the indexes" do
194
- collection.indexes.reject{ |doc| doc["name"] == "_id_" }.should be_empty
195
- end
196
- end
197
-
198
- context "when database specific options exist" do
199
-
200
- let(:klass) do
201
- Class.new do
202
- include Mongoid::Document
203
- store_in collection: "test_db_remove"
204
- index({ test: 1 }, { database: "mia_2" })
205
- index({ name: 1 }, { background: true })
206
- end
207
- end
208
-
209
- before do
210
- klass.create_indexes
211
- klass.remove_indexes
212
- end
213
-
214
- let(:indexes) do
215
- klass.with(database: "mia_2").collection.indexes
216
- end
217
-
218
- it "creates the indexes" do
219
- indexes.reject{ |doc| doc["name"] == "_id_" }.should be_empty
220
- end
221
- end
222
- end
223
-
224
- describe ".create_indexes" do
225
-
226
- context "when no database options are specified" do
227
-
228
- let(:klass) do
229
- Class.new do
230
- include Mongoid::Document
231
- store_in collection: "test_class"
232
- index({ _type: 1 }, { unique: false, background: true })
233
- end
234
- end
235
-
236
- before do
237
- klass.create_indexes
238
- end
239
-
240
- it "creates the indexes" do
241
- klass.collection.indexes[_type: 1].should_not be_nil
242
- end
243
- end
244
-
245
- context "when database options are specified" do
246
-
247
- let(:klass) do
248
- Class.new do
249
- include Mongoid::Document
250
- store_in collection: "test_db_indexes"
251
- index({ _type: 1 }, { database: "mia_1" })
252
- end
253
- end
254
-
255
- before do
256
- klass.create_indexes
257
- end
258
-
259
- let(:indexes) do
260
- klass.with(database: "mia_1").collection.indexes
261
- end
262
-
263
- it "creates the indexes" do
264
- indexes[_type: 1].should_not be_nil
265
- end
266
- end
267
- end
268
-
269
- describe ".add_indexes" do
270
-
271
- context "when indexes have not been added" do
272
-
273
- let(:klass) do
274
- Class.new do
275
- include Mongoid::Document
276
- def self.hereditary?
277
- true
278
- end
279
- end
280
- end
281
-
282
- before do
283
- klass.add_indexes
284
- end
285
-
286
- it "adds the _type index" do
287
- klass.index_options[_type: 1].should eq(
288
- { unique: false, background: true }
289
- )
290
- end
291
- end
292
- end
293
-
294
- describe ".index" do
295
-
296
- let(:klass) do
297
- Class.new do
298
- include Mongoid::Document
299
- field :a, as: :authentication_token
300
- end
301
- end
302
-
303
- context "when indexing a field that is aliased" do
304
-
305
- before do
306
- klass.index({ authentication_token: 1 }, { unique: true })
307
- end
308
-
309
- let(:options) do
310
- klass.index_options[a: 1]
311
- end
312
-
313
- it "sets the index with unique options" do
314
- options.should eq(unique: true)
315
- end
316
- end
317
-
318
- context "when providing unique options" do
319
-
320
- before do
321
- klass.index({ name: 1 }, { unique: true })
322
- end
323
-
324
- let(:options) do
325
- klass.index_options[name: 1]
326
- end
327
-
328
- it "sets the index with unique options" do
329
- options.should eq(unique: true)
330
- end
331
- end
332
-
333
- context "when providing a drop_dups option" do
334
-
335
- before do
336
- klass.index({ name: 1 }, { drop_dups: true })
337
- end
338
-
339
- let(:options) do
340
- klass.index_options[name: 1]
341
- end
342
-
343
- it "sets the index with dropDups options" do
344
- options.should eq(dropDups: true)
345
- end
346
- end
347
-
348
- context "when providing a sparse option" do
349
-
350
- before do
351
- klass.index({ name: 1 }, { sparse: true })
352
- end
353
-
354
- let(:options) do
355
- klass.index_options[name: 1]
356
- end
357
-
358
- it "sets the index with sparse options" do
359
- options.should eq(sparse: true)
360
- end
361
- end
362
-
363
- context "when providing a name option" do
364
-
365
- before do
366
- klass.index({ name: 1 }, { name: "index_name" })
367
- end
368
-
369
- let(:options) do
370
- klass.index_options[name: 1]
371
- end
372
-
373
- it "sets the index with name options" do
374
- options.should eq(name: "index_name")
375
- end
376
- end
377
-
378
- context "when providing database options" do
379
-
380
- before do
381
- klass.index({ name: 1 }, { database: "mongoid_index_alt" })
382
- end
383
-
384
- let(:options) do
385
- klass.index_options[name: 1]
386
- end
387
-
388
- it "sets the index with background options" do
389
- options.should eq(database: "mongoid_index_alt")
390
- end
391
- end
392
-
393
- context "when providing a background option" do
394
-
395
- before do
396
- klass.index({ name: 1 }, { background: true })
397
- end
398
-
399
- let(:options) do
400
- klass.index_options[name: 1]
401
- end
402
-
403
- it "sets the index with background options" do
404
- options.should eq(background: true)
405
- end
406
- end
407
-
408
- context "when providing a compound index" do
409
-
410
- before do
411
- klass.index({ name: 1, title: -1 })
412
- end
413
-
414
- let(:options) do
415
- klass.index_options[name: 1, title: -1]
416
- end
417
-
418
- it "sets the compound key index" do
419
- options.should be_empty
420
- end
421
- end
422
-
423
- context "when providing a geospacial index" do
424
-
425
- before do
426
- klass.index({ location: "2d" }, { min: -200, max: 200, bits: 32 })
427
- end
428
-
429
- let(:options) do
430
- klass.index_options[location: "2d"]
431
- end
432
-
433
- it "sets the geospacial index" do
434
- options.should eq({ min: -200, max: 200, bits: 32 })
435
- end
436
- end
437
-
438
- context "when providing a geo haystack index" do
439
-
440
- before do
441
- klass.index({ location: "geoHaystack" }, { min: -200, max: 200, bucket_size: 0.5 })
442
- end
443
-
444
- let(:options) do
445
- klass.index_options[location: "geoHaystack"]
446
- end
447
-
448
- it "sets the geo haystack index" do
449
- options.should eq({ min: -200, max: 200, bucketSize: 0.5 })
450
- end
451
- end
452
-
453
- context "when providing a Spherical Geospatial index" do
454
-
455
- before do
456
- klass.index({ location: "2dsphere" })
457
- end
458
-
459
- let(:options) do
460
- klass.index_options[location: "2dsphere"]
461
- end
462
-
463
- it "sets the spherical geospatial index" do
464
- options.should be_empty
465
- end
466
- end
467
-
468
- context "when providing a hashed index" do
469
-
470
- before do
471
- klass.index({ a: "hashed" })
472
- end
473
-
474
- let(:options) do
475
- klass.index_options[a: "hashed"]
476
- end
477
-
478
- it "sets the hashed index" do
479
- options.should be_empty
480
- end
481
- end
482
-
483
- context "when providing a text index" do
484
-
485
- before do
486
- klass.index({ content: "text" })
487
- end
488
-
489
- let(:options) do
490
- klass.index_options[content: "text"]
491
- end
492
-
493
- it "sets the text index" do
494
- options.should be_empty
495
- end
496
- end
497
-
498
- context "when providing a compound text index" do
499
-
500
- before do
501
- klass.index({ content: "text", title: "text" }, { weights: { content: 1, title: 2 } })
502
- end
503
-
504
- let(:options) do
505
- klass.index_options[content: "text", title: "text"]
506
- end
507
-
508
- it "sets the compound text index" do
509
- options.should eq(weights: { content: 1, title: 2 })
510
- end
511
- end
512
-
513
- context "when providing an expire_after_seconds option" do
514
-
515
- before do
516
- klass.index({ name: 1 }, { expire_after_seconds: 3600 })
517
- end
518
-
519
- let(:options) do
520
- klass.index_options[name: 1]
521
- end
522
-
523
- it "sets the index with sparse options" do
524
- options.should eq(expireAfterSeconds: 3600)
525
- end
526
- end
527
-
528
- context "when providing an invalid option" do
529
-
530
- it "raises an error" do
531
- expect {
532
- klass.index({ name: 1 }, { invalid: true })
533
- }.to raise_error(Mongoid::Errors::InvalidIndex)
534
- end
535
- end
536
-
537
- context "when providing an invalid spec" do
538
-
539
- context "when the spec is not a hash" do
540
-
541
- it "raises an error" do
542
- expect {
543
- klass.index(:name)
544
- }.to raise_error(Mongoid::Errors::InvalidIndex)
545
- end
546
- end
547
-
548
- context "when the spec key is invalid" do
549
-
550
- it "raises an error" do
551
- expect {
552
- klass.index({ name: "something" })
553
- }.to raise_error(Mongoid::Errors::InvalidIndex)
554
- end
555
- end
556
- end
557
- end
558
- end
559
- end
560
-
561
- if defined?(Mongoid::Indexable)
562
-
563
- describe Mongoid::Indexable do
564
-
565
- describe ".included" do
566
-
567
- let(:klass) do
568
- Class.new do
569
- include Mongoid::Indexable
570
- end
571
- end
572
-
573
- it "adds an index_specifications accessor" do
574
- expect(klass).to respond_to(:index_specifications)
575
- end
576
-
577
- it "defaults index_specifications to empty array" do
578
- expect(klass.index_specifications).to be_empty
579
- end
580
- end
581
-
582
- describe ".remove_indexes" do
583
-
584
- context "when no database specific options exist" do
585
-
586
- let(:klass) do
587
- Person
588
- end
589
-
590
- let(:collection) do
591
- klass.collection
592
- end
593
-
594
- before do
595
- klass.create_indexes
596
- klass.remove_indexes
597
- end
598
-
599
- it "removes the indexes" do
600
- expect(collection.indexes.reject{ |doc| doc["name"] == "_id_" }).to be_empty
601
- end
602
- end
603
-
604
- context "when database specific options exist" do
605
-
606
- let(:klass) do
607
- Class.new do
608
- include Mongoid::Document
609
- store_in collection: "test_db_remove"
610
- index({ test: 1 }, { database: "mia_2" })
611
- index({ name: 1 }, { background: true })
612
- end
613
- end
614
-
615
- before do
616
- klass.create_indexes
617
- klass.remove_indexes
618
- end
619
-
620
- let(:indexes) do
621
- klass.with(database: "mia_2").collection.indexes
622
- end
623
-
624
- it "creates the indexes" do
625
- expect(indexes.reject{ |doc| doc["name"] == "_id_" }).to be_empty
626
- end
627
- end
628
- end
629
-
630
- describe ".create_indexes" do
631
-
632
- context "when no database options are specified" do
633
-
634
- let(:klass) do
635
- Class.new do
636
- include Mongoid::Document
637
- store_in collection: "test_class"
638
- index({ _type: 1 }, unique: false, background: true)
639
- end
640
- end
641
-
642
- before do
643
- klass.create_indexes
644
- end
645
-
646
- it "creates the indexes" do
647
- expect(klass.collection.indexes[_type: 1]).to_not be_nil
648
- end
649
- end
650
-
651
- context "when database options are specified" do
652
-
653
- let(:klass) do
654
- Class.new do
655
- include Mongoid::Document
656
- store_in collection: "test_db_indexes"
657
- index({ _type: 1 }, { database: "mia_1" })
658
- end
659
- end
660
-
661
- before do
662
- klass.create_indexes
663
- end
664
-
665
- let(:indexes) do
666
- klass.with(database: "mia_1").collection.indexes
667
- end
668
-
669
- it "creates the indexes" do
670
- expect(indexes[_type: 1]).to_not be_nil
671
- end
672
- end
673
- end
674
-
675
- describe ".add_indexes" do
676
-
677
- context "when indexes have not been added" do
678
-
679
- let(:klass) do
680
- Class.new do
681
- include Mongoid::Document
682
- def self.hereditary?
683
- true
684
- end
685
- end
686
- end
687
-
688
- before do
689
- klass.add_indexes
690
- end
691
-
692
- let(:spec) do
693
- klass.index_specification(_type: 1)
694
- end
695
-
696
- it "adds the _type index" do
697
- expect(spec.options).to eq(unique: false, background: true)
698
- end
699
- end
700
- end
701
-
702
- describe ".index" do
703
-
704
- let(:klass) do
705
- Class.new do
706
- include Mongoid::Document
707
- field :a, as: :authentication_token
708
- end
709
- end
710
-
711
- context "when indexing a field that is aliased" do
712
-
713
- before do
714
- klass.index({ authentication_token: 1 }, unique: true)
715
- end
716
-
717
- let(:options) do
718
- klass.index_specification(a: 1).options
719
- end
720
-
721
- it "sets the index with unique options" do
722
- expect(options).to eq(unique: true)
723
- end
724
- end
725
-
726
- context "when providing unique options" do
727
-
728
- before do
729
- klass.index({ name: 1 }, unique: true)
730
- end
731
-
732
- let(:options) do
733
- klass.index_specification(name: 1).options
734
- end
735
-
736
- it "sets the index with unique options" do
737
- expect(options).to eq(unique: true)
738
- end
739
- end
740
-
741
- context "when providing a drop_dups option" do
742
-
743
- before do
744
- klass.index({ name: 1 }, drop_dups: true)
745
- end
746
-
747
- let(:options) do
748
- klass.index_specification(name: 1).options
749
- end
750
-
751
- it "sets the index with dropDups options" do
752
- expect(options).to eq(dropDups: true)
753
- end
754
- end
755
-
756
- context "when providing a sparse option" do
757
-
758
- before do
759
- klass.index({ name: 1 }, sparse: true)
760
- end
761
-
762
- let(:options) do
763
- klass.index_specification(name: 1).options
764
- end
765
-
766
- it "sets the index with sparse options" do
767
- expect(options).to eq(sparse: true)
768
- end
769
- end
770
-
771
- context "when providing a name option" do
772
-
773
- before do
774
- klass.index({ name: 1 }, name: "index_name")
775
- end
776
-
777
- let(:options) do
778
- klass.index_specification(name: 1).options
779
- end
780
-
781
- it "sets the index with name options" do
782
- expect(options).to eq(name: "index_name")
783
- end
784
- end
785
-
786
- context "when providing database options" do
787
-
788
- before do
789
- klass.index({ name: 1 }, database: "mongoid_index_alt")
790
- end
791
-
792
- let(:options) do
793
- klass.index_specification(name: 1).options
794
- end
795
-
796
- it "sets the index with background options" do
797
- expect(options).to eq(database: "mongoid_index_alt")
798
- end
799
- end
800
-
801
- context "when providing a background option" do
802
-
803
- before do
804
- klass.index({ name: 1 }, background: true)
805
- end
806
-
807
- let(:options) do
808
- klass.index_specification(name: 1).options
809
- end
810
-
811
- it "sets the index with background options" do
812
- expect(options).to eq(background: true)
813
- end
814
- end
815
-
816
- context "when providing a compound index" do
817
-
818
- before do
819
- klass.index({ name: 1, title: -1 })
820
- end
821
-
822
- let(:options) do
823
- klass.index_specification(name: 1, title: -1).options
824
- end
825
-
826
- it "sets the compound key index" do
827
- expect(options).to be_empty
828
- end
829
- end
830
-
831
- context "when providing multiple inverse compound indexes" do
832
-
833
- before do
834
- klass.index({ name: 1, title: -1 })
835
- klass.index({ title: -1, name: 1 })
836
- end
837
-
838
- let(:first_spec) do
839
- klass.index_specification(name: 1, title: -1)
840
- end
841
-
842
- let(:second_spec) do
843
- klass.index_specification(title: -1, name: 1)
844
- end
845
-
846
- it "does not overwrite the index options" do
847
- expect(first_spec).to_not eq(second_spec)
848
- end
849
- end
850
-
851
- context "when providing multiple compound indexes with different order" do
852
-
853
- before do
854
- klass.index({ name: 1, title: -1 })
855
- klass.index({ name: 1, title: 1 })
856
- end
857
-
858
- let(:first_spec) do
859
- klass.index_specification(name: 1, title: -1)
860
- end
861
-
862
- let(:second_spec) do
863
- klass.index_specification(name: 1, title: 1)
864
- end
865
-
866
- it "does not overwrite the index options" do
867
- expect(first_spec).to_not eq(second_spec)
868
- end
869
- end
870
-
871
- context "when providing a geospacial index" do
872
-
873
- before do
874
- klass.index({ location: "2d" }, { min: -200, max: 200, bits: 32 })
875
- end
876
-
877
- let(:options) do
878
- klass.index_specification(location: "2d").options
879
- end
880
-
881
- it "sets the geospacial index" do
882
- expect(options).to eq({ min: -200, max: 200, bits: 32 })
883
- end
884
- end
885
-
886
- context "when providing a geo haystack index" do
887
-
888
- before do
889
- klass.index({ location: "geoHaystack" }, { min: -200, max: 200, bucket_size: 0.5 })
890
- end
891
-
892
- let(:options) do
893
- klass.index_specification(location: "geoHaystack").options
894
- end
895
-
896
- it "sets the geo haystack index" do
897
- expect(options).to eq({ min: -200, max: 200, bucketSize: 0.5 })
898
- end
899
- end
900
-
901
- context "when providing a Spherical Geospatial index" do
902
-
903
- before do
904
- klass.index({ location: "2dsphere" })
905
- end
906
-
907
- let(:options) do
908
- klass.index_specification(location: "2dsphere").options
909
- end
910
-
911
- it "sets the spherical geospatial index" do
912
- expect(options).to be_empty
913
- end
914
- end
915
-
916
- context "when providing a text index" do
917
-
918
- context "when the index is a single field" do
919
-
920
- before do
921
- klass.index({ description: "text" })
922
- end
923
-
924
- let(:options) do
925
- klass.index_specification(description: "text").options
926
- end
927
-
928
- it "allows the set of the text index" do
929
- expect(options).to be_empty
930
- end
931
- end
932
-
933
- context "when the index is multiple fields" do
934
-
935
- before do
936
- klass.index({ description: "text", name: "text" })
937
- end
938
-
939
- let(:options) do
940
- klass.index_specification(description: "text", name: "text").options
941
- end
942
-
943
- it "allows the set of the text index" do
944
- expect(options).to be_empty
945
- end
946
- end
947
-
948
- context "when the index is all string fields" do
949
-
950
- before do
951
- klass.index({ "$**" => "text" })
952
- end
953
-
954
- let(:options) do
955
- klass.index_specification(:"$**" => "text").options
956
- end
957
-
958
- it "allows the set of the text index" do
959
- expect(options).to be_empty
960
- end
961
- end
962
-
963
- context "when providing a default language" do
964
-
965
- before do
966
- klass.index({ description: "text" }, default_language: "english")
967
- end
968
-
969
- let(:options) do
970
- klass.index_specification(description: "text").options
971
- end
972
-
973
- it "allows the set of the text index" do
974
- expect(options).to eq(default_language: "english")
975
- end
976
- end
977
-
978
- context "when providing a name" do
979
-
980
- before do
981
- klass.index({ description: "text" }, name: "text_index")
982
- end
983
-
984
- let(:options) do
985
- klass.index_specification(description: "text").options
986
- end
987
-
988
- it "allows the set of the text index" do
989
- expect(options).to eq(name: "text_index")
990
- end
991
- end
992
- end
993
-
994
- context "when providing a hashed index" do
995
-
996
- before do
997
- klass.index({ a: "hashed" })
998
- end
999
-
1000
- let(:options) do
1001
- klass.index_specification(a: "hashed").options
1002
- end
1003
-
1004
- it "sets the hashed index" do
1005
- expect(options).to be_empty
1006
- end
1007
- end
1008
-
1009
- context "when providing a text index" do
1010
-
1011
- before do
1012
- klass.index({ content: "text" })
1013
- end
1014
-
1015
- let(:options) do
1016
- klass.index_specification(content: "text").options
1017
- end
1018
-
1019
- it "sets the text index" do
1020
- expect(options).to be_empty
1021
- end
1022
- end
1023
-
1024
- context "when providing a compound text index" do
1025
-
1026
- before do
1027
- klass.index({ content: "text", title: "text" }, { weights: { content: 1, title: 2 } })
1028
- end
1029
-
1030
- let(:options) do
1031
- klass.index_specification(content: "text", title: "text").options
1032
- end
1033
-
1034
- it "sets the compound text index" do
1035
- expect(options).to eq(weights: { content: 1, title: 2 })
1036
- end
1037
- end
1038
-
1039
- context "when providing an expire_after_seconds option" do
1040
-
1041
- before do
1042
- klass.index({ name: 1 }, { expire_after_seconds: 3600 })
1043
- end
1044
-
1045
- let(:options) do
1046
- klass.index_specification(name: 1).options
1047
- end
1048
-
1049
- it "sets the index with sparse options" do
1050
- expect(options).to eq(expireAfterSeconds: 3600)
1051
- end
1052
- end
1053
-
1054
- context "when providing an invalid option" do
1055
-
1056
- it "raises an error" do
1057
- expect {
1058
- klass.index({ name: 1 }, { invalid: true })
1059
- }.to raise_error(Mongoid::Errors::InvalidIndex)
1060
- end
1061
- end
1062
-
1063
- context "when providing an invalid spec" do
1064
-
1065
- context "when the spec is not a hash" do
1066
-
1067
- it "raises an error" do
1068
- expect {
1069
- klass.index(:name)
1070
- }.to raise_error(Mongoid::Errors::InvalidIndex)
1071
- end
1072
- end
1073
-
1074
- context "when the spec key is invalid" do
1075
-
1076
- it "raises an error" do
1077
- expect {
1078
- klass.index({ name: "something" })
1079
- }.to raise_error(Mongoid::Errors::InvalidIndex)
1080
- end
1081
- end
1082
- end
1083
- end
1084
- end
1085
- end
1086
- end