bogus 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. data/Gemfile.lock +53 -34
  2. data/Guardfile +3 -1
  3. data/Guardfile.cucumber +2 -0
  4. data/README.md +2 -1
  5. data/bogus.gemspec +1 -0
  6. data/features/.nav +2 -0
  7. data/features/changelog.md +8 -0
  8. data/features/contract_tests/custom_overwritten_class.feature +115 -0
  9. data/features/minitest_support.feature +228 -0
  10. data/lib/bogus.rb +3 -3
  11. data/lib/bogus/contracts/adds_contract_verification.rb +55 -0
  12. data/lib/bogus/{adds_recording.rb → contracts/adds_recording.rb} +2 -3
  13. data/lib/bogus/{contract_not_fulfilled.rb → contracts/contract_not_fulfilled.rb} +0 -0
  14. data/lib/bogus/{interactions_repository.rb → contracts/interactions_repository.rb} +0 -0
  15. data/lib/bogus/{proxy_class.rb → contracts/proxy_class.rb} +0 -0
  16. data/lib/bogus/{recording_proxy.rb → contracts/recording_proxy.rb} +0 -0
  17. data/lib/bogus/{records_double_interactions.rb → contracts/records_double_interactions.rb} +0 -0
  18. data/lib/bogus/{verifies_contracts.rb → contracts/verifies_contracts.rb} +0 -0
  19. data/lib/bogus/{active_record_accessors.rb → fakes/active_record_accessors.rb} +0 -0
  20. data/lib/bogus/fakes/base_class_identifier.rb +39 -0
  21. data/lib/bogus/{class_methods.rb → fakes/class_methods.rb} +0 -0
  22. data/lib/bogus/{constructor_methods.rb → fakes/constructor_methods.rb} +0 -0
  23. data/lib/bogus/{converts_name_to_class.rb → fakes/converts_name_to_class.rb} +0 -0
  24. data/lib/bogus/{copies_classes.rb → fakes/copies_classes.rb} +8 -0
  25. data/lib/bogus/{copies_methods.rb → fakes/copies_methods.rb} +0 -0
  26. data/lib/bogus/{creates_fakes.rb → fakes/creates_fakes.rb} +0 -0
  27. data/lib/bogus/{creates_fakes_with_stubbed_methods.rb → fakes/creates_fakes_with_stubbed_methods.rb} +0 -0
  28. data/lib/bogus/{fake.rb → fakes/fake.rb} +4 -12
  29. data/lib/bogus/{fake_registry.rb → fakes/fake_registry.rb} +0 -0
  30. data/lib/bogus/{fakes_classes.rb → fakes/fakes_classes.rb} +0 -0
  31. data/lib/bogus/{instance_methods.rb → fakes/instance_methods.rb} +0 -0
  32. data/lib/bogus/{makes_ducks.rb → fakes/makes_ducks.rb} +0 -0
  33. data/lib/bogus/{makes_substitute_methods.rb → fakes/makes_substitute_methods.rb} +0 -0
  34. data/lib/bogus/{makes_subtypes.rb → fakes/makes_subtypes.rb} +0 -0
  35. data/lib/bogus/{method_stringifier.rb → fakes/method_stringifier.rb} +0 -0
  36. data/lib/bogus/{overwriten_classes.rb → fakes/overwriten_classes.rb} +0 -0
  37. data/lib/bogus/{overwrites_classes.rb → fakes/overwrites_classes.rb} +0 -0
  38. data/lib/bogus/{registers_created_fakes.rb → fakes/registers_created_fakes.rb} +0 -0
  39. data/lib/bogus/{resets_overwritten_classes.rb → fakes/resets_overwritten_classes.rb} +0 -0
  40. data/lib/bogus/{responds_to_everything.rb → fakes/responds_to_everything.rb} +0 -0
  41. data/lib/bogus/injector.rb +4 -0
  42. data/lib/bogus/minitest.rb +10 -7
  43. data/lib/bogus/minitest/spec.rb +7 -0
  44. data/lib/bogus/minitest/syntax.rb +27 -0
  45. data/lib/bogus/public_methods.rb +4 -0
  46. data/lib/bogus/{rspec_adapter.rb → rspec/adapter.rb} +0 -0
  47. data/lib/bogus/rspec/extensions.rb +21 -0
  48. data/lib/bogus/rspec/syntax.rb +20 -0
  49. data/lib/bogus/{any_args.rb → stubbing/any_args.rb} +0 -0
  50. data/lib/bogus/{anything.rb → stubbing/anything.rb} +0 -0
  51. data/lib/bogus/{default_value.rb → stubbing/default_value.rb} +0 -0
  52. data/lib/bogus/{double.rb → stubbing/double.rb} +0 -0
  53. data/lib/bogus/{ensures_all_interactions_satisfied.rb → stubbing/ensures_all_interactions_satisfied.rb} +0 -0
  54. data/lib/bogus/{has_overwritten_methods.rb → stubbing/has_overwritten_methods.rb} +0 -0
  55. data/lib/bogus/{have_received_matcher.rb → stubbing/have_received_matcher.rb} +0 -0
  56. data/lib/bogus/{interaction.rb → stubbing/interaction.rb} +0 -0
  57. data/lib/bogus/{interaction_presenter.rb → stubbing/interaction_presenter.rb} +0 -0
  58. data/lib/bogus/{multi_stubber.rb → stubbing/multi_stubber.rb} +0 -0
  59. data/lib/bogus/{not_all_expectations_satisfied.rb → stubbing/not_all_expectations_satisfied.rb} +0 -0
  60. data/lib/bogus/{overwrites_methods.rb → stubbing/overwrites_methods.rb} +0 -0
  61. data/lib/bogus/{record_interactions.rb → stubbing/record_interactions.rb} +0 -0
  62. data/lib/bogus/{resets_stubbed_methods.rb → stubbing/resets_stubbed_methods.rb} +0 -0
  63. data/lib/bogus/{same_class.rb → stubbing/same_class.rb} +0 -0
  64. data/lib/bogus/{shadow.rb → stubbing/shadow.rb} +0 -0
  65. data/lib/bogus/{tracks_existence_of_test_doubles.rb → stubbing/tracks_existence_of_test_doubles.rb} +0 -0
  66. data/lib/bogus/{undefined_return_value.rb → stubbing/undefined_return_value.rb} +4 -0
  67. data/lib/bogus/{verifies_stub_definition.rb → stubbing/verifies_stub_definition.rb} +0 -0
  68. data/lib/bogus/version.rb +1 -1
  69. data/license.md +9 -0
  70. data/spec/bogus/contracts/adds_contract_verification_spec.rb +154 -0
  71. data/spec/bogus/contracts/adds_recording_spec.rb +43 -0
  72. data/spec/bogus/{interactions_repository_spec.rb → contracts/interactions_repository_spec.rb} +0 -0
  73. data/spec/bogus/{proxy_class_spec.rb → contracts/proxy_class_spec.rb} +0 -0
  74. data/spec/bogus/{records_double_interactions_spec.rb → contracts/records_double_interactions_spec.rb} +0 -0
  75. data/spec/bogus/{verifies_contracts_spec.rb → contracts/verifies_contracts_spec.rb} +0 -0
  76. data/spec/bogus/fakes/base_class_identifier_spec.rb +67 -0
  77. data/spec/bogus/{class_methods_spec.rb → fakes/class_methods_spec.rb} +0 -0
  78. data/spec/bogus/{converts_name_to_class_spec.rb → fakes/converts_name_to_class_spec.rb} +1 -1
  79. data/spec/bogus/{copies_classes_spec.rb → fakes/copies_classes_spec.rb} +3 -7
  80. data/spec/bogus/{creates_fakes_spec.rb → fakes/creates_fakes_spec.rb} +1 -1
  81. data/spec/bogus/{creates_fakes_with_stubbed_methods_spec.rb → fakes/creates_fakes_with_stubbed_methods_spec.rb} +0 -0
  82. data/spec/bogus/{fake_ar_attributes_spec.rb → fakes/fake_ar_attributes_spec.rb} +0 -0
  83. data/spec/bogus/{fake_configuration_spec.rb → fakes/fake_configuration_spec.rb} +0 -0
  84. data/spec/bogus/{fake_registry_spec.rb → fakes/fake_registry_spec.rb} +0 -0
  85. data/spec/bogus/fakes/fake_spec.rb +8 -0
  86. data/spec/bogus/{fakes_classes_spec.rb → fakes/fakes_classes_spec.rb} +0 -0
  87. data/spec/bogus/{faking_factories_spec.rb → fakes/faking_factories_spec.rb} +0 -0
  88. data/spec/bogus/{frozen_fakes_spec.rb → fakes/frozen_fakes_spec.rb} +0 -0
  89. data/spec/bogus/{instance_methods_spec.rb → fakes/instance_methods_spec.rb} +0 -0
  90. data/spec/bogus/{makes_ducks_spec.rb → fakes/makes_ducks_spec.rb} +0 -0
  91. data/spec/bogus/{makes_substitute_methods_spec.rb → fakes/makes_substitute_methods_spec.rb} +0 -0
  92. data/spec/bogus/{method_copiers_spec.rb → fakes/method_copiers_spec.rb} +0 -0
  93. data/spec/bogus/{overwriten_classes_spec.rb → fakes/overwriten_classes_spec.rb} +0 -0
  94. data/spec/bogus/{overwrites_classes_spec.rb → fakes/overwrites_classes_spec.rb} +0 -0
  95. data/spec/bogus/{registers_created_fakes_spec.rb → fakes/registers_created_fakes_spec.rb} +0 -0
  96. data/spec/bogus/{resets_overwritten_classes_spec.rb → fakes/resets_overwritten_classes_spec.rb} +0 -0
  97. data/spec/bogus/mocking_dsl_spec.rb +2 -2
  98. data/spec/bogus/{anything_spec.rb → stubbing/anything_spec.rb} +0 -0
  99. data/spec/bogus/{double_spec.rb → stubbing/double_spec.rb} +0 -0
  100. data/spec/bogus/{ensures_all_interactions_satisfied_spec.rb → stubbing/ensures_all_interactions_satisfied_spec.rb} +0 -0
  101. data/spec/bogus/{have_received_matcher_spec.rb → stubbing/have_received_matcher_spec.rb} +0 -0
  102. data/spec/bogus/{interaction_spec.rb → stubbing/interaction_spec.rb} +0 -0
  103. data/spec/bogus/{multi_stubber_spec.rb → stubbing/multi_stubber_spec.rb} +0 -0
  104. data/spec/bogus/{overwrites_methods_spec.rb → stubbing/overwrites_methods_spec.rb} +0 -0
  105. data/spec/bogus/{record_interactions_spec.rb → stubbing/record_interactions_spec.rb} +0 -0
  106. data/spec/bogus/{resets_stubbed_methods_spec.rb → stubbing/resets_stubbed_methods_spec.rb} +0 -0
  107. data/spec/bogus/{shadow_spec.rb → stubbing/shadow_spec.rb} +0 -0
  108. data/spec/bogus/{tracks_existence_of_test_doubles_spec.rb → stubbing/tracks_existence_of_test_doubles_spec.rb} +0 -0
  109. data/spec/bogus/stubbing/undefined_return_value_spec.rb +18 -0
  110. data/spec/bogus/{verifies_stub_definition_spec.rb → stubbing/verifies_stub_definition_spec.rb} +0 -0
  111. metadata +176 -160
  112. data/features/minitest/minitest_support.feature +0 -119
  113. data/lib/bogus/rspec_extensions.rb +0 -31
  114. data/spec/bogus/adds_recording_spec.rb +0 -77
@@ -1,119 +0,0 @@
1
- Feature: minitest support
2
-
3
- minitest is supported by Bogus both with the classic assert-style syntax and the minitest/spec expectation syntax.
4
-
5
- Background:
6
- Given a file named "foo.rb" with:
7
- """ruby
8
- class Library
9
- def self.books
10
- end
11
-
12
- def checkout(book)
13
- end
14
-
15
- def return_book(book)
16
- end
17
- end
18
-
19
- class BookIndex
20
- def self.by_author(author)
21
- Library.books.select{|book| book[:author] == author}
22
- end
23
- end
24
-
25
- class Student
26
- def initialize(library)
27
- @library = library
28
- end
29
-
30
- def study(*book_titles)
31
- book_titles.each do |book_title|
32
- @library.checkout(book_title)
33
- end
34
- end
35
- end
36
- """
37
-
38
- Scenario: Auto-verification of unsatisfied mocks
39
- Then minitest file "foo_test.rb" with the following content should fail:
40
- """ruby
41
- require 'minitest/autorun'
42
- require 'bogus/minitest'
43
- require_relative 'foo'
44
-
45
- class StudentTest < MiniTest::Unit::TestCase
46
- def test_library_checkouts
47
- library = fake(:library)
48
- student = Student.new(library)
49
- mock(library).checkout("Moby Dick")
50
- mock(library).checkout("Sherlock Holmes")
51
-
52
- student.study("Moby Dick")
53
- end
54
- end
55
- """
56
-
57
- Scenario: Spying on method calls with assert syntax
58
- Then minitest file "foo_test.rb" with the following content should pass:
59
- """ruby
60
- require 'minitest/autorun'
61
- require 'bogus/minitest'
62
- require_relative 'foo'
63
-
64
- class StudentTest < MiniTest::Unit::TestCase
65
- def setup
66
- @library = fake(:library)
67
- end
68
-
69
- def test_library_checkouts
70
- student = Student.new(@library)
71
-
72
- student.study("Moby Dick", "Sherlock Holmes")
73
-
74
- assert_received @library, :checkout, ["Moby Dick"]
75
- assert_received @library, :checkout, ["Sherlock Holmes"]
76
- refute_received @library, :return_book, ["Moby Dick"]
77
- end
78
- end
79
- """
80
-
81
- Scenario: Spying on method calls with expectation syntax
82
- Then minitest file "foo_spec.rb" with the following content should pass:
83
- """ruby
84
- require 'minitest/autorun'
85
- require 'bogus/minitest/spec'
86
- require_relative 'foo'
87
-
88
- describe Student do
89
- describe "#study" do
90
- fake(:library)
91
-
92
- it "studies using books from library" do
93
- student = Student.new(library)
94
-
95
- student.study("Moby Dick", "Sherlock Holmes")
96
-
97
- library.must_have_received :checkout, ["Moby Dick"]
98
- library.must_have_received :checkout, ["Sherlock Holmes"]
99
- library.wont_have_received :return_book, ["Moby Dick"]
100
- end
101
- end
102
- end
103
- """
104
-
105
- Scenario: Describe-level class faking
106
- Then minitest file "foo_spec.rb" with the following content should pass:
107
- """ruby
108
- require 'minitest/autorun'
109
- require 'bogus/minitest/spec'
110
- require_relative 'foo'
111
-
112
- describe BookIndex do
113
- fake_class(Library, books: [])
114
-
115
- it "returns books written by author" do
116
- BookIndex.by_author("Mark Twain").must_equal []
117
- end
118
- end
119
- """
@@ -1,31 +0,0 @@
1
- module Bogus
2
- module RSpecExtensions
3
- def fake(name, opts = {}, &block)
4
- let(name) { fake(name, opts, &block) }
5
- end
6
-
7
- def fake_class(name, opts = {})
8
- before do
9
- fake_class(name, opts)
10
- end
11
- end
12
-
13
- def verify_contract(name)
14
- old_described_class = described_class
15
-
16
- before do
17
- new_class = Bogus.record_calls_for(name, described_class)
18
- example.metadata[:example_group][:described_class] = new_class
19
- end
20
-
21
- after do
22
- example.metadata[:example_group][:described_class] = old_described_class
23
- end
24
-
25
- RSpec.configure do |config|
26
- config.after(:suite) { Bogus.verify_contract!(name) }
27
- end
28
- end
29
- end
30
- end
31
-
@@ -1,77 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Bogus::AddsRecording do
4
- module SampleModule
5
- class Library
6
- end
7
-
8
- class OtherClass
9
- end
10
- end
11
-
12
- let(:converts_name_to_class) { stub }
13
- let(:create_proxy_class) { stub }
14
- let(:overwrites_classes) { stub }
15
- let(:overwritten_classes) { stub }
16
-
17
- let(:adds_recording) { isolate(Bogus::AddsRecording) }
18
-
19
- before do
20
- stub(converts_name_to_class).convert { SampleModule::Library }
21
- stub(create_proxy_class).call { Object }
22
- stub(overwrites_classes).overwrite
23
- stub(overwritten_classes).add
24
- end
25
-
26
- context "without class argument" do
27
- before do
28
- adds_recording.add(:library)
29
- end
30
-
31
- it "converts the fake name to class" do
32
- converts_name_to_class.should have_received.convert(:library)
33
- end
34
-
35
- it "creates the proxy" do
36
- create_proxy_class.should have_received.call(:library, SampleModule::Library)
37
- end
38
-
39
- it "swaps the classes" do
40
- overwrites_classes.should have_received.overwrite('SampleModule::Library', Object)
41
- end
42
-
43
- it "records the overwritten class, so that it can be later restored" do
44
- overwritten_classes.should have_received.add("SampleModule::Library", SampleModule::Library)
45
- end
46
-
47
- it "returns the proxy class" do
48
- adds_recording.add(:library).should == Object
49
- end
50
- end
51
-
52
- context "with class argument" do
53
- before do
54
- adds_recording.add(:library, SampleModule::OtherClass)
55
- end
56
-
57
- it "uses the passed class" do
58
- converts_name_to_class.should_not have_received.convert(:library)
59
- end
60
-
61
- it "creates the proxy" do
62
- create_proxy_class.should have_received.call(:library, SampleModule::OtherClass)
63
- end
64
-
65
- it "swaps the classes" do
66
- overwrites_classes.should have_received.overwrite('SampleModule::OtherClass', Object)
67
- end
68
-
69
- it "records the overwritten class, so that it can be later restored" do
70
- overwritten_classes.should have_received.add("SampleModule::OtherClass", SampleModule::OtherClass)
71
- end
72
-
73
- it "returns the proxy class" do
74
- adds_recording.add(:library, SampleModule::OtherClass).should == Object
75
- end
76
- end
77
- end