rspec-puppet-facts 2.0.5 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,6 +7,10 @@ describe RspecPuppetFacts do
7
7
  'spec/fixtures/metadata.json'
8
8
  end
9
9
 
10
+ describe '.stringify_keys' do
11
+ it { expect(described_class.stringify_keys({ os: { family: 'RedHat' } })).to eq({ 'os' => { 'family' => 'RedHat' } }) }
12
+ end
13
+
10
14
  describe '.facter_version_for_puppet_version' do
11
15
  subject(:facter_version) do
12
16
  described_class.facter_version_for_puppet_version(puppet_version)
@@ -19,7 +23,7 @@ describe RspecPuppetFacts do
19
23
  let(:puppet_version) { Puppet.version }
20
24
 
21
25
  context 'when the component JSON file does not exist' do
22
- before(:each) do
26
+ before do
23
27
  allow(File).to receive(:file?).with(component_json_path).and_return(false)
24
28
  allow(described_class).to receive(:warning)
25
29
  end
@@ -36,7 +40,7 @@ describe RspecPuppetFacts do
36
40
  end
37
41
 
38
42
  context 'when the component JSON file is unreadable' do
39
- before(:each) do
43
+ before do
40
44
  allow(File).to receive(:readable?).with(component_json_path).and_return(false)
41
45
  allow(described_class).to receive(:warning)
42
46
  end
@@ -53,7 +57,7 @@ describe RspecPuppetFacts do
53
57
  end
54
58
 
55
59
  context 'when the component JSON file is unparseable' do
56
- before(:each) do
60
+ before do
57
61
  io = StringIO.new('this is not JSON!')
58
62
  allow(File).to receive(:open).with(component_json_path, anything).and_return(io)
59
63
  allow(described_class).to receive(:warning)
@@ -112,7 +116,7 @@ describe RspecPuppetFacts do
112
116
  context 'when passed a Puppet version lower than any known version' do
113
117
  let(:puppet_version) { '1.0.0' }
114
118
 
115
- before(:each) do
119
+ before do
116
120
  allow(described_class).to receive(:warning)
117
121
  end
118
122
 
@@ -139,7 +143,7 @@ describe RspecPuppetFacts do
139
143
  "operatingsystemrelease" => ['7'],
140
144
  },
141
145
  ],
142
- }
146
+ },
143
147
  )
144
148
  end
145
149
 
@@ -148,11 +152,11 @@ describe RspecPuppetFacts do
148
152
  end
149
153
 
150
154
  context 'set to true' do
151
- before(:each) do
155
+ before do
152
156
  RSpec.configuration.facterdb_string_keys = true
153
157
  end
154
158
 
155
- after(:each) do
159
+ after do
156
160
  RSpec.configuration.facterdb_string_keys = false
157
161
  end
158
162
 
@@ -162,7 +166,7 @@ describe RspecPuppetFacts do
162
166
  end
163
167
 
164
168
  context 'set to false' do
165
- before(:each) do
169
+ before do
166
170
  RSpec.configuration.facterdb_string_keys = false
167
171
  end
168
172
 
@@ -176,7 +180,7 @@ describe RspecPuppetFacts do
176
180
  subject { on_supported_os }
177
181
 
178
182
  context 'Without metadata.json' do
179
- before(:each) do
183
+ before do
180
184
  expect(File).to receive(:file?).with('metadata.json').and_return false
181
185
  end
182
186
 
@@ -185,10 +189,10 @@ describe RspecPuppetFacts do
185
189
 
186
190
  context 'With a metadata.json' do
187
191
  it 'can load the metadata file' do
188
- allow(RspecPuppetFacts).to receive(:metadata_file).and_return(metadata_file)
189
- RspecPuppetFacts.reset
190
- expect(RspecPuppetFacts.metadata).to be_a Hash
191
- expect(RspecPuppetFacts.metadata['name']).to eq 'mcanevet-mymodule'
192
+ allow(described_class).to receive(:metadata_file).and_return(metadata_file)
193
+ described_class.reset
194
+ expect(described_class.metadata).to be_a Hash
195
+ expect(described_class.metadata['name']).to eq 'mcanevet-mymodule'
192
196
  end
193
197
 
194
198
  context 'With a valid metadata.json' do
@@ -197,19 +201,19 @@ describe RspecPuppetFacts do
197
201
  JSON.parse fixture
198
202
  end
199
203
 
200
- before :each do
201
- allow(RspecPuppetFacts).to receive(:metadata).and_return(metadata)
204
+ before do
205
+ allow(described_class).to receive(:metadata).and_return(metadata)
202
206
  end
203
207
 
204
- it 'should return a hash' do
208
+ it 'returns a hash' do
205
209
  is_expected.to be_a Hash
206
210
  end
207
211
 
208
- it 'should have 5 elements' do
212
+ it 'has 5 elements' do
209
213
  expect(subject.size).to eq 5
210
214
  end
211
215
 
212
- it 'should return supported OS' do
216
+ it 'returns supported OS' do
213
217
  expect(subject.keys.sort).to eq %w(
214
218
  debian-7-x86_64
215
219
  debian-8-x86_64
@@ -219,8 +223,8 @@ describe RspecPuppetFacts do
219
223
  )
220
224
  end
221
225
 
222
- it 'should be able to filter the received OS facts' do
223
- allow(RspecPuppetFacts).to receive(:spec_facts_os_filter).and_return('redhat')
226
+ it 'is able to filter the received OS facts' do
227
+ allow(described_class).to receive(:spec_facts_os_filter).and_return('redhat')
224
228
  expect(subject.keys.sort).to eq %w(
225
229
  redhat-5-x86_64
226
230
  redhat-6-x86_64
@@ -230,8 +234,8 @@ describe RspecPuppetFacts do
230
234
  end
231
235
 
232
236
  context 'With a broken metadata.json' do
233
- before :each do
234
- allow(RspecPuppetFacts).to receive(:metadata).and_return(metadata)
237
+ before do
238
+ allow(described_class).to receive(:metadata).and_return(metadata)
235
239
  end
236
240
 
237
241
  context 'With a missing operatingsystem_support section' do
@@ -266,29 +270,29 @@ describe RspecPuppetFacts do
266
270
  "operatingsystemrelease" => [
267
271
  "7",
268
272
  "8",
269
- ]
273
+ ],
270
274
  },
271
275
  {
272
276
  "operatingsystem" => "RedHat",
273
277
  "operatingsystemrelease" => [
274
278
  "5",
275
- "6"
276
- ]
277
- }
278
- ]
279
- }
279
+ "6",
280
+ ],
281
+ },
282
+ ],
283
+ },
280
284
  )
281
285
  }
282
286
 
283
- it 'should return a hash' do
287
+ it 'returns a hash' do
284
288
  is_expected.to be_a Hash
285
289
  end
286
290
 
287
- it 'should have 4 elements' do
291
+ it 'has 4 elements' do
288
292
  expect(subject.size).to eq 4
289
293
  end
290
294
 
291
- it 'should return supported OS' do
295
+ it 'returns supported OS' do
292
296
  expect(subject.keys.sort).to eq %w(
293
297
  debian-7-x86_64
294
298
  debian-8-x86_64
@@ -297,8 +301,8 @@ describe RspecPuppetFacts do
297
301
  )
298
302
  end
299
303
 
300
- it 'should be able to filter the received OS facts' do
301
- allow(RspecPuppetFacts).to receive(:spec_facts_os_filter).and_return('redhat')
304
+ it 'is able to filter the received OS facts' do
305
+ allow(described_class).to receive(:spec_facts_os_filter).and_return('redhat')
302
306
  expect(subject.keys.sort).to eq %w(
303
307
  redhat-5-x86_64
304
308
  redhat-6-x86_64
@@ -312,8 +316,8 @@ describe RspecPuppetFacts do
312
316
  {
313
317
  :supported_os => [
314
318
  { 'operatingsystem' => 'RedHat', 'operatingsystemrelease' => '7' },
315
- ]
316
- }
319
+ ],
320
+ },
317
321
  )
318
322
  end
319
323
 
@@ -344,7 +348,7 @@ describe RspecPuppetFacts do
344
348
  ],
345
349
  },
346
350
  ],
347
- }
351
+ },
348
352
  )
349
353
  }
350
354
 
@@ -352,13 +356,15 @@ describe RspecPuppetFacts do
352
356
  ['ubuntu-12.04-x86_64', 'ubuntu-14.04-x86_64', 'ubuntu-16.04-x86_64']
353
357
  end
354
358
 
355
- it 'should return a hash' do
359
+ it 'returns a hash' do
356
360
  expect(subject.class).to eq Hash
357
361
  end
358
- it 'should have 3 elements' do
362
+
363
+ it 'has 3 elements' do
359
364
  expect(subject.size).to eq(expected_fact_sets.size)
360
365
  end
361
- it 'should return supported OS' do
366
+
367
+ it 'returns supported OS' do
362
368
  expect(subject.keys.sort).to eq(expected_fact_sets)
363
369
  end
364
370
  end
@@ -376,16 +382,19 @@ describe RspecPuppetFacts do
376
382
  },
377
383
  ],
378
384
  :facterversion => '2.4',
379
- }
385
+ },
380
386
  )
381
387
  }
382
- it 'should return a hash' do
388
+
389
+ it 'returns a hash' do
383
390
  expect(subject.class).to eq Hash
384
391
  end
385
- it 'should have 1 elements' do
392
+
393
+ it 'has 1 elements' do
386
394
  expect(subject.size).to eq 1
387
395
  end
388
- it 'should return supported OS' do
396
+
397
+ it 'returns supported OS' do
389
398
  expect(subject.keys.sort).to eq [
390
399
  'freebsd-10-amd64',
391
400
  ]
@@ -405,16 +414,19 @@ describe RspecPuppetFacts do
405
414
  },
406
415
  ],
407
416
  :facterversion => '2.4',
408
- }
417
+ },
409
418
  )
410
419
  }
411
- it 'should return a hash' do
420
+
421
+ it 'returns a hash' do
412
422
  expect(subject.class).to eq Hash
413
423
  end
414
- it 'should have 1 elements' do
424
+
425
+ it 'has 1 elements' do
415
426
  expect(subject.size).to eq 1
416
427
  end
417
- it 'should return supported OS' do
428
+
429
+ it 'returns supported OS' do
418
430
  expect(subject.keys.sort).to eq [
419
431
  'openbsd-5.7-amd64',
420
432
  ]
@@ -433,16 +445,19 @@ describe RspecPuppetFacts do
433
445
  ],
434
446
  },
435
447
  ],
436
- }
448
+ },
437
449
  )
438
450
  }
439
- it 'should return a hash' do
451
+
452
+ it 'returns a hash' do
440
453
  expect(subject.class).to eq Hash
441
454
  end
442
- it 'should have 1 elements' do
455
+
456
+ it 'has 1 elements' do
443
457
  expect(subject.size).to eq 1
444
458
  end
445
- it 'should return supported OS' do
459
+
460
+ it 'returns supported OS' do
446
461
  expect(subject.keys.sort).to eq %w(
447
462
  solaris-11-i86pc
448
463
  )
@@ -457,21 +472,24 @@ describe RspecPuppetFacts do
457
472
  {
458
473
  "operatingsystem" => "AIX",
459
474
  "operatingsystemrelease" => [
460
- "7.1", "7100"
475
+ "7.1", "7100",
461
476
  ],
462
477
  },
463
478
  ],
464
- :facterversion => '3.9'
465
- }
479
+ :facterversion => '3.9',
480
+ },
466
481
  )
467
482
  }
468
- it 'should return a hash' do
483
+
484
+ it 'returns a hash' do
469
485
  expect(subject.class).to eq Hash
470
486
  end
471
- it 'should have 1 elements' do
487
+
488
+ it 'has 1 elements' do
472
489
  expect(subject.size).to eq 1
473
490
  end
474
- it 'should return supported OS' do
491
+
492
+ it 'returns supported OS' do
475
493
  # NOTE: See FACT-1827 for details on the IBM,8284-22A part
476
494
  # That has to match whatever hardware generated the facts file.
477
495
  expect(subject.keys.sort).to eq %w(
@@ -488,10 +506,10 @@ describe RspecPuppetFacts do
488
506
  {
489
507
  'operatingsystem' => 'Windows',
490
508
  'operatingsystemrelease' => release,
491
- }
509
+ },
492
510
  ],
493
511
  :facterversion => facterversion,
494
- }
512
+ },
495
513
  )
496
514
  end
497
515
 
@@ -535,6 +553,7 @@ describe RspecPuppetFacts do
535
553
 
536
554
  it { is_expected.to be_a(Hash) }
537
555
  it { is_expected.to have_attributes(:size => 1) }
556
+
538
557
  it 'munges the operatingsystemmajrelease to 2016' do
539
558
  is_expected.to include('windows-2016-x86_64' => an_instance_of(Hash))
540
559
  end
@@ -549,20 +568,23 @@ describe RspecPuppetFacts do
549
568
  {
550
569
  "operatingsystem" => "SLES",
551
570
  "operatingsystemrelease" => [
552
- "11 SP1"
553
- ]
554
- }
555
- ]
556
- }
571
+ "11 SP1",
572
+ ],
573
+ },
574
+ ],
575
+ },
557
576
  )
558
577
  }
559
- it 'should return a hash' do
578
+
579
+ it 'returns a hash' do
560
580
  expect(subject.class).to eq Hash
561
581
  end
562
- it 'should have 1 elements' do
582
+
583
+ it 'has 1 elements' do
563
584
  expect(subject.size).to eq 1
564
585
  end
565
- it 'should return supported OS' do
586
+
587
+ it 'returns supported OS' do
566
588
  expect(subject.keys.sort).to eq [
567
589
  'sles-11-x86_64',
568
590
  ]
@@ -580,13 +602,13 @@ describe RspecPuppetFacts do
580
602
  "4",
581
603
  ],
582
604
  },
583
- ]
584
- }
605
+ ],
606
+ },
585
607
  )
586
608
  }
587
609
 
588
- it 'should output warning message' do
589
- expect(RspecPuppetFacts).to receive(:warning).with(/No facts were found in the FacterDB/)
610
+ it 'outputs warning message' do
611
+ expect(described_class).to receive(:warning).with(/No facts were found in the FacterDB/)
590
612
  subject
591
613
  end
592
614
  end
@@ -607,17 +629,19 @@ describe RspecPuppetFacts do
607
629
  },
608
630
  ],
609
631
  :facterversion => '2.4',
610
- }
632
+ },
611
633
  )
612
634
  }
613
635
 
614
- it 'should return a hash' do
636
+ it 'returns a hash' do
615
637
  expect(subject.class).to eq Hash
616
638
  end
617
- it 'should have 2 elements' do
639
+
640
+ it 'has 2 elements' do
618
641
  expect(subject.size).to eq 2
619
642
  end
620
- it 'should return supported OS' do
643
+
644
+ it 'returns supported OS' do
621
645
  expect(subject.keys.sort).to include(a_string_matching(/\Aarchlinux-\d+-x86_64/), 'debian-8-x86_64')
622
646
  end
623
647
  end
@@ -630,27 +654,24 @@ describe RspecPuppetFacts do
630
654
  {
631
655
  'operatingsystem' => 'IOS',
632
656
  'operatingsystemrelease' => ['12.2(25)EWA9'],
633
- }
657
+ },
634
658
  ],
635
- }
659
+ },
636
660
  )
637
661
  end
638
662
 
639
- before(:each) do
640
- allow(RspecPuppetFacts).to receive(:warning).with(a_string_matching(/no facts were found/i))
641
- allow(FacterDB).to receive(:get_facts).and_call_original
663
+ before do
664
+ allow(described_class).to receive(:warning).with(a_string_matching(/no facts were found/i))
642
665
  end
643
666
 
644
667
  it 'escapes the parens in the filter' do
645
- filter = [
646
- include(
647
- :operatingsystem => "IOS",
648
- :operatingsystemrelease => "/^12\\.2\\(25\\)EWA9/",
649
- :hardwaremodel => "x86_64",
650
- ),
651
- ]
668
+ filter = {
669
+ :operatingsystem => "IOS",
670
+ :operatingsystemrelease => "/^12\\.2\\(25\\)EWA9/",
671
+ :hardwaremodel => "x86_64",
672
+ }
652
673
 
653
- expect(FacterDB).to receive(:get_facts).with(filter)
674
+ expect(FacterDB).to receive(:get_facts).with(filter).once
654
675
  subject
655
676
  end
656
677
 
@@ -660,58 +681,60 @@ describe RspecPuppetFacts do
660
681
  end
661
682
 
662
683
  context 'With a default Facter version specified in the RSpec configuration' do
663
- before(:each) do
664
- RSpec.configuration.default_facter_version = '3.1.0'
665
- end
666
-
667
- after(:each) do
668
- RSpec.configuration.default_facter_version = Facter.version
669
- end
670
-
671
684
  subject do
672
685
  on_supported_os(
673
686
  supported_os: [
674
- { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] }
675
- ]
687
+ { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] },
688
+ ],
676
689
  )
677
690
  end
678
691
 
692
+ before do
693
+ RSpec.configuration.default_facter_version = '3.1.6'
694
+ end
695
+
696
+ after do
697
+ RSpec.configuration.default_facter_version = Facter.version
698
+ end
699
+
700
+
679
701
  it 'returns facts from the specified default Facter version' do
680
702
  is_expected.to match(
681
703
  'centos-7-x86_64' => include(
682
- :facterversion => /\A3\.1\./
683
- )
704
+ :facterversion => /\A3\.1\./,
705
+ ),
684
706
  )
685
707
  end
686
708
  end
687
709
 
688
710
  context 'With a version that is above the current gem' do
689
- before(:each) do
690
- allow(Facter).to receive(:version).and_return('2.4.5')
691
- end
692
-
693
711
  subject do
694
712
  on_supported_os(
695
713
  supported_os: [
696
- { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] }
714
+ { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] },
697
715
  ],
698
- facterversion: "2.6"
716
+ facterversion: "2.6",
699
717
  )
700
718
  end
701
719
 
702
- it 'returns facts from a facter version matching future and below' do
703
- major, minor = Facter.version.split('.')
720
+ before do
721
+ allow(Facter).to receive(:version).and_return('2.4.5')
722
+ end
723
+
724
+
725
+ it 'returns facts from a facter version matching version and below' do
704
726
  is_expected.to match(
705
727
  'centos-7-x86_64' => include(
706
- :facterversion => /\A#{major}\.[#{minor}#{minor.to_i + 1}]\./
707
- )
728
+ :facterversion => /\A2\.[0-6]\./,
729
+ ),
708
730
  )
709
731
  end
710
732
 
711
733
  context 'With SPEC_FACTS_STRICT set to `yes`' do
712
- before(:each) do
713
- allow(RspecPuppetFacts).to receive(:spec_facts_strict?).and_return(true)
734
+ before do
735
+ allow(described_class).to receive(:spec_facts_strict?).and_return(true)
714
736
  end
737
+
715
738
  it 'errors' do
716
739
  expect { subject }.to raise_error ArgumentError, /No facts were found in the FacterDB.*aborting/
717
740
  end
@@ -722,15 +745,15 @@ describe RspecPuppetFacts do
722
745
  subject do
723
746
  on_supported_os(
724
747
  supported_os: [
725
- { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] }
748
+ { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] },
726
749
  ],
727
- facterversion: '3.1'
750
+ facterversion: '3.1',
728
751
  )
729
752
  end
730
753
 
731
754
  it 'returns facts from a facter version matching 3.1' do
732
755
  is_expected.to match(
733
- 'centos-7-x86_64' => include(:facterversion => '3.1.6')
756
+ 'centos-7-x86_64' => include(:facterversion => '3.1.6'),
734
757
  )
735
758
  end
736
759
  end
@@ -739,15 +762,15 @@ describe RspecPuppetFacts do
739
762
  subject do
740
763
  on_supported_os(
741
764
  supported_os: [
742
- { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] }
765
+ { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] },
743
766
  ],
744
- facterversion: '3.1.2'
767
+ facterversion: '3.1.2',
745
768
  )
746
769
  end
747
770
 
748
771
  it 'returns facts from a facter version matching 3.1' do
749
772
  is_expected.to match(
750
- 'centos-7-x86_64' => include(:facterversion => '3.1.6')
773
+ 'centos-7-x86_64' => include(:facterversion => '3.1.6'),
751
774
  )
752
775
  end
753
776
  end
@@ -756,15 +779,15 @@ describe RspecPuppetFacts do
756
779
  subject do
757
780
  on_supported_os(
758
781
  supported_os: [
759
- { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] }
782
+ { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] },
760
783
  ],
761
- facterversion: '3.3'
784
+ facterversion: '3.3',
762
785
  )
763
786
  end
764
787
 
765
788
  it 'returns facts from a facter version matching 3.3' do
766
789
  is_expected.to match(
767
- 'centos-7-x86_64' => include(:facterversion => '3.3.0')
790
+ 'centos-7-x86_64' => include(:facterversion => '3.3.0'),
768
791
  )
769
792
  end
770
793
  end
@@ -773,15 +796,15 @@ describe RspecPuppetFacts do
773
796
  subject do
774
797
  on_supported_os(
775
798
  supported_os: [
776
- { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] }
799
+ { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] },
777
800
  ],
778
- facterversion: '3.3.2'
801
+ facterversion: '3.3.2',
779
802
  )
780
803
  end
781
804
 
782
805
  it 'returns facts from a facter version matching 3.3' do
783
806
  is_expected.to match(
784
- 'centos-7-x86_64' => include(:facterversion => '3.3.0')
807
+ 'centos-7-x86_64' => include(:facterversion => '3.3.0'),
785
808
  )
786
809
  end
787
810
  end
@@ -790,15 +813,15 @@ describe RspecPuppetFacts do
790
813
  subject do
791
814
  on_supported_os(
792
815
  supported_os: [
793
- { 'operatingsystem' => 'SLES', 'operatingsystemrelease' => ['11'] }
816
+ { 'operatingsystem' => 'SLES', 'operatingsystemrelease' => ['11'] },
794
817
  ],
795
- facterversion: '2.1.0'
818
+ facterversion: '2.1.0',
796
819
  )
797
820
  end
798
821
 
799
822
  it 'splits the operatingsystemrelease fact value to get the major release' do
800
823
  is_expected.to match(
801
- 'sles-11-x86_64' => include(:operatingsystemrelease => '11.3')
824
+ 'sles-11-x86_64' => include(:operatingsystemrelease => '11.3'),
802
825
  )
803
826
  end
804
827
  end
@@ -807,9 +830,9 @@ describe RspecPuppetFacts do
807
830
  let(:method_call) do
808
831
  on_supported_os(
809
832
  supported_os: [
810
- { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] }
833
+ { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] },
811
834
  ],
812
- facterversion: '3'
835
+ facterversion: '3',
813
836
  )
814
837
  end
815
838
 
@@ -824,33 +847,36 @@ describe RspecPuppetFacts do
824
847
  on_supported_os(
825
848
  supported_os: [
826
849
  { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] },
827
- { 'operatingsystem' => 'OpenSuSE', 'operatingsystemrelease' => %w[42] }
850
+ { 'operatingsystem' => 'OpenSuSE', 'operatingsystemrelease' => %w[42] },
828
851
  ],
829
- facterversion: '3.9.5'
852
+ facterversion: '3.9.5',
830
853
  )
831
854
  end
832
855
 
833
- before(:each) do
856
+ before do
834
857
  allow(FacterDB).to receive(:get_facts).and_call_original
835
858
  allow(FacterDB).to receive(:get_facts).with(
836
- a_hash_including(facterversion: "/\\A3\\.9\\./", operatingsystem: 'CentOS')
837
- ).and_return([])
859
+ {:operatingsystem=>"CentOS", :operatingsystemrelease=>"/^7/", :hardwaremodel=>"x86_64"},
860
+ ).and_wrap_original do |m, *args|
861
+ m.call(*args).reject { |facts| facts[:facterversion].start_with?('3.9.') }
862
+ end
838
863
  end
839
864
 
840
865
  it 'returns CentOS facts from a facter version matching 3.8' do
841
866
  is_expected.to include(
842
- 'centos-7-x86_64' => include(:facterversion => '3.8.0')
867
+ 'centos-7-x86_64' => include(:facterversion => '3.8.0'),
843
868
  )
844
869
  end
870
+
845
871
  it 'returns OpenSuSE facts from a facter version matching 3.9' do
846
872
  is_expected.to include(
847
- 'opensuse-42-x86_64' => include(:facterversion => '3.9.2')
873
+ 'opensuse-42-x86_64' => include(:facterversion => '3.9.2'),
848
874
  )
849
875
  end
850
876
  end
851
877
  end
852
878
 
853
- context '#add_custom_fact' do
879
+ describe '#add_custom_fact' do
854
880
  subject {
855
881
  on_supported_os(
856
882
  {
@@ -859,56 +885,81 @@ describe RspecPuppetFacts do
859
885
  "operatingsystem" => "RedHat",
860
886
  "operatingsystemrelease" => [
861
887
  "6",
862
- "7"
863
- ]
864
- }
865
- ]
866
- }
888
+ "7",
889
+ ],
890
+ },
891
+ ],
892
+ },
867
893
  )
868
894
  }
869
895
 
870
- before(:each) do
871
- RspecPuppetFacts.reset
896
+ before do
897
+ described_class.reset
872
898
  end
873
899
 
874
900
  it 'adds a simple fact and value' do
875
901
  add_custom_fact 'root_home', '/root'
876
- expect(subject['redhat-7-x86_64']['root_home']).to eq '/root'
902
+ expect(subject['redhat-7-x86_64'][:root_home]).to eq '/root'
903
+ end
904
+
905
+ it 'merges a fact value into fact when merge_facts passed' do
906
+ add_custom_fact :identity, { 'user' => 'test_user' }, merge_facts: true
907
+ expect(subject['redhat-7-x86_64'][:identity]).to eq(
908
+ {
909
+ "gid"=>0,
910
+ "group"=>"root",
911
+ "privileged"=>true,
912
+ "uid"=>0,
913
+ "user"=>"test_user"
914
+ })
915
+ end
916
+
917
+ it 'overwrites fact' do
918
+ add_custom_fact :identity, { 'user' => 'other_user' }
919
+ expect(subject['redhat-7-x86_64'][:identity]).to eq(
920
+ {
921
+ "user"=>"other_user"
922
+ })
877
923
  end
878
924
 
879
925
  it 'confines a fact to a particular operating system' do
880
926
  add_custom_fact 'root_home', '/root', :confine => 'redhat-7-x86_64'
881
- expect(subject['redhat-7-x86_64']['root_home']).to eq '/root'
882
- expect(subject['redhat-6-x86_64']['root_home']).to be_nil
927
+ expect(subject['redhat-7-x86_64'][:root_home]).to eq '/root'
928
+ expect(subject['redhat-6-x86_64'][:root_home]).to be_nil
883
929
  end
884
930
 
885
931
  it 'excludes a fact from a particular operating system' do
886
932
  add_custom_fact 'root_home', '/root', :exclude => 'redhat-7-x86_64'
887
- expect(subject['redhat-7-x86_64']['root_home']).to be_nil
888
- expect(subject['redhat-6-x86_64']['root_home']).to eq '/root'
933
+ expect(subject['redhat-7-x86_64'][:root_home]).to be_nil
934
+ expect(subject['redhat-6-x86_64'][:root_home]).to eq '/root'
889
935
  end
890
936
 
891
937
  it 'takes a proc as a value' do
892
938
  add_custom_fact 'root_home', ->(_os, _facts) { '/root' }
893
- expect(subject['redhat-7-x86_64']['root_home']).to eq '/root'
939
+ expect(subject['redhat-7-x86_64'][:root_home]).to eq '/root'
940
+ end
941
+
942
+ it 'accepts sym fact key and stores fact key as sym' do
943
+ add_custom_fact :root_home, ->(_os, _facts) { '/root' }
944
+ expect(subject['redhat-7-x86_64'][:root_home]).to eq '/root'
894
945
  end
895
946
  end
896
947
 
897
- context '#misc' do
898
- it 'should have a common facts structure' do
899
- RspecPuppetFacts.reset
948
+ describe '#misc' do
949
+ it 'has a common facts structure' do
950
+ described_class.reset
900
951
  expect(subject.common_facts).to be_a Hash
901
952
  expect(subject.common_facts).not_to be_empty
902
953
  end
903
954
 
904
- it 'should not add "augeasversion" if Augeas is supported' do
955
+ it 'does not add "augeasversion" if Augeas is supported' do
905
956
  allow(described_class).to receive(:augeas?).and_return(false)
906
- RspecPuppetFacts.reset
957
+ described_class.reset
907
958
  expect(subject.common_facts).not_to include(:augeasversion)
908
959
  end
909
960
 
910
- it 'should determine the Augeas version if Augeas is supported' do
911
- module Augeas_stub
961
+ it 'determines the Augeas version if Augeas is supported' do
962
+ module AugeasStub # rubocop:todo Lint/ConstantDefinitionInBlock
912
963
  NO_MODL_AUTOLOAD = true
913
964
  def self.open(*_args)
914
965
  self
@@ -919,19 +970,19 @@ describe RspecPuppetFacts do
919
970
  end
920
971
 
921
972
  allow(described_class).to receive(:augeas?).and_return(true)
922
- stub_const('Augeas', Augeas_stub)
923
- RspecPuppetFacts.reset
973
+ stub_const('Augeas', AugeasStub)
974
+ described_class.reset
924
975
  expect(subject.common_facts[:augeasversion]).to eq 'my_version'
925
976
  end
926
977
 
927
978
  context 'when mcollective is available' do
928
- module MCollective_stub
979
+ module MCollectiveStub # rubocop:todo Lint/ConstantDefinitionInBlock
929
980
  VERSION = 'my_version'
930
981
  end
931
982
 
932
- before(:each) do
983
+ before do
933
984
  allow(described_class).to receive(:mcollective?).and_return(true)
934
- stub_const('MCollective', MCollective_stub)
985
+ stub_const('MCollective', MCollectiveStub)
935
986
  described_class.reset
936
987
  end
937
988
 
@@ -941,7 +992,7 @@ describe RspecPuppetFacts do
941
992
  end
942
993
 
943
994
  context 'when mcollective is not available' do
944
- before(:each) do
995
+ before do
945
996
  allow(described_class).to receive(:mcollective?).and_return(false)
946
997
  described_class.reset
947
998
  end
@@ -952,69 +1003,145 @@ describe RspecPuppetFacts do
952
1003
  end
953
1004
  end
954
1005
 
955
- describe '.facter_version_to_filter' do
1006
+ describe '.facter_version_to_strict_requirement' do
1007
+ subject { described_class.facter_version_to_strict_requirement(version) }
1008
+
1009
+ context 'when passed a version that is a complex requirement' do
1010
+ let(:version) { '~> 2.4' }
1011
+
1012
+ it { is_expected.to be_instance_of(Gem::Requirement) }
1013
+ end
1014
+
1015
+ context 'when passed a version that is major' do
1016
+ let(:version) { '1' }
1017
+
1018
+ it { is_expected.to be_instance_of(Gem::Requirement) }
1019
+ end
1020
+ end
1021
+
1022
+ describe '.facter_version_to_strict_requirement_string' do
1023
+ subject { described_class.facter_version_to_strict_requirement_string(version) }
1024
+
1025
+ context 'when passed a version that is a complex requirement' do
1026
+ let(:version) { '~> 2.4' }
1027
+
1028
+ it { is_expected.to eq('~> 2.4') }
1029
+ end
1030
+
1031
+ context 'when passed a version that is major' do
1032
+ let(:version) { '1' }
1033
+
1034
+ it { is_expected.to eq('~> 1.0') }
1035
+ end
1036
+
1037
+ context 'when passed a version that is major.minor' do
1038
+ let(:version) { '1.2' }
1039
+
1040
+ it { is_expected.to eq('~> 1.2.0') }
1041
+ end
1042
+
1043
+ context 'when passed a version that is major.minor.patch' do
1044
+ let(:version) { '1.2.3' }
1045
+
1046
+ it { is_expected.to eq('~> 1.2.3.0') }
1047
+ end
1048
+ end
1049
+
1050
+ describe '.facter_version_to_loose_requirement' do
1051
+ subject { described_class.facter_version_to_loose_requirement(version) }
1052
+
1053
+ context 'when passed a version that is a complex requirement' do
1054
+ let(:version) { '~> 2.4' }
1055
+
1056
+ it { is_expected.to be_nil }
1057
+ end
1058
+
1059
+ context 'when passed a version that is major' do
1060
+ let(:version) { '1' }
1061
+
1062
+ it { is_expected.to be_instance_of(Gem::Requirement) }
1063
+ end
1064
+ end
1065
+
1066
+ describe '.facter_version_to_loose_requirement_string' do
1067
+ subject { described_class.facter_version_to_loose_requirement_string(version) }
1068
+
1069
+ context 'when passed a version that is a complex requirement (1)' do
1070
+ let(:version) { '~> 2.4' }
1071
+
1072
+ it { is_expected.to be_nil }
1073
+ end
1074
+
1075
+ context 'when passed a version that is a complex requirement (2)' do
1076
+ let(:version) { '>= 3 < 5' }
1077
+
1078
+ it { is_expected.to be_nil }
1079
+ end
1080
+
1081
+ context 'when passed a version that is major (1)' do
1082
+ let(:version) { '1' }
1083
+
1084
+ it { is_expected.to eq('< 2') }
1085
+ end
1086
+
1087
+ context 'when passed a version that is major (2)' do
1088
+ let(:version) { '9' }
1089
+
1090
+ it { is_expected.to eq('< 10') }
1091
+ end
1092
+
1093
+ context 'when passed a version that is major (3)' do
1094
+ let(:version) { '10' }
1095
+
1096
+ it { is_expected.to eq('< 11') }
1097
+ end
1098
+
956
1099
  context 'when passed a version that is major.minor (1)' do
957
- subject { RspecPuppetFacts.facter_version_to_filter('1.2') }
1100
+ let(:version) { '1.2' }
958
1101
 
959
- it 'returns the correct JGrep statement expression' do
960
- is_expected.to eq('/\A1\.2\./')
961
- end
1102
+ it { is_expected.to eq('< 1.3') }
962
1103
  end
963
1104
 
964
1105
  context 'when passed a version that is major.minor (2)' do
965
- subject { RspecPuppetFacts.facter_version_to_filter('10.2') }
1106
+ let(:version) { '10.2' }
966
1107
 
967
- it 'returns the correct JGrep statement expression' do
968
- is_expected.to eq('/\A10\.2\./')
969
- end
1108
+ it { is_expected.to eq('< 10.3') }
970
1109
  end
971
1110
 
972
1111
  context 'when passed a version that is major.minor (3)' do
973
- subject { RspecPuppetFacts.facter_version_to_filter('1.20') }
1112
+ let(:version) { '1.20' }
974
1113
 
975
- it 'returns the correct JGrep statement expression' do
976
- is_expected.to eq('/\A1\.20\./')
977
- end
1114
+ it { is_expected.to eq('< 1.21') }
978
1115
  end
979
1116
 
980
1117
  context 'when passed a version that is major.minor (4)' do
981
- subject { RspecPuppetFacts.facter_version_to_filter('10.20') }
1118
+ let(:version) { '10.20' }
982
1119
 
983
- it 'returns the correct JGrep statement expression' do
984
- is_expected.to eq('/\A10\.20\./')
985
- end
1120
+ it { is_expected.to eq('< 10.21') }
986
1121
  end
987
1122
 
988
1123
  context 'when passed a version that is major.minor.patch (1)' do
989
- subject { RspecPuppetFacts.facter_version_to_filter('1.2.3') }
1124
+ let(:version) { '1.2.3' }
990
1125
 
991
- it 'returns the correct JGrep statement expression' do
992
- is_expected.to eq('/\A1\.2\./')
993
- end
1126
+ it { is_expected.to eq('< 1.3') }
994
1127
  end
995
1128
 
996
1129
  context 'when passed a version that is major.minor.patch (2)' do
997
- subject { RspecPuppetFacts.facter_version_to_filter('10.2.3') }
1130
+ let(:version) { '10.2.3' }
998
1131
 
999
- it 'returns the correct JGrep statement expression' do
1000
- is_expected.to eq('/\A10\.2\./')
1001
- end
1132
+ it { is_expected.to eq('< 10.3') }
1002
1133
  end
1003
1134
 
1004
1135
  context 'when passed a version that is major.minor.patch (3)' do
1005
- subject { RspecPuppetFacts.facter_version_to_filter('1.20.3') }
1136
+ let(:version) { '1.20.3' }
1006
1137
 
1007
- it 'returns the correct JGrep statement expression' do
1008
- is_expected.to eq('/\A1\.20\./')
1009
- end
1138
+ it { is_expected.to eq('< 1.21') }
1010
1139
  end
1011
1140
 
1012
1141
  context 'when passed a version that is major.minor.patch (4)' do
1013
- subject { RspecPuppetFacts.facter_version_to_filter('10.20.3') }
1142
+ let(:version) { '10.20.3' }
1014
1143
 
1015
- it 'returns the correct JGrep statement expression' do
1016
- is_expected.to eq('/\A10\.20\./')
1017
- end
1144
+ it { is_expected.to eq('< 10.21') }
1018
1145
  end
1019
1146
  end
1020
1147
  end