dradis-mediawiki 3.6.0

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 (90) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +2 -0
  3. data/CHANGELOG.md +3 -0
  4. data/CONTRIBUTING.md +3 -0
  5. data/Gemfile +23 -0
  6. data/LICENSE +339 -0
  7. data/README.md +32 -0
  8. data/Rakefile +1 -0
  9. data/dradis-mediawiki.gemspec +31 -0
  10. data/lib/dradis/plugins/mediawiki/engine.rb +18 -0
  11. data/lib/dradis/plugins/mediawiki/filters.rb +65 -0
  12. data/lib/dradis/plugins/mediawiki/gem_version.rb +21 -0
  13. data/lib/dradis/plugins/mediawiki/version.rb +9 -0
  14. data/lib/dradis/plugins/mediawiki.rb +10 -0
  15. data/lib/dradis-mediawiki.rb +1 -0
  16. data/lib/tasks/thorfile.rb +17 -0
  17. data/spec/spec_helper.rb +22 -0
  18. data/spec/wiki_import_spec.rb +18 -0
  19. data/test/vendor/mocha-0.9.5/COPYING +3 -0
  20. data/test/vendor/mocha-0.9.5/MIT-LICENSE +7 -0
  21. data/test/vendor/mocha-0.9.5/README +37 -0
  22. data/test/vendor/mocha-0.9.5/README.dradis +4 -0
  23. data/test/vendor/mocha-0.9.5/RELEASE +269 -0
  24. data/test/vendor/mocha-0.9.5/Rakefile +207 -0
  25. data/test/vendor/mocha-0.9.5/lib/mocha/any_instance_method.rb +55 -0
  26. data/test/vendor/mocha-0.9.5/lib/mocha/argument_iterator.rb +21 -0
  27. data/test/vendor/mocha-0.9.5/lib/mocha/backtrace_filter.rb +17 -0
  28. data/test/vendor/mocha-0.9.5/lib/mocha/cardinality.rb +95 -0
  29. data/test/vendor/mocha-0.9.5/lib/mocha/central.rb +27 -0
  30. data/test/vendor/mocha-0.9.5/lib/mocha/change_state_side_effect.rb +19 -0
  31. data/test/vendor/mocha-0.9.5/lib/mocha/class_method.rb +87 -0
  32. data/test/vendor/mocha-0.9.5/lib/mocha/configuration.rb +60 -0
  33. data/test/vendor/mocha-0.9.5/lib/mocha/deprecation.rb +22 -0
  34. data/test/vendor/mocha-0.9.5/lib/mocha/exception_raiser.rb +17 -0
  35. data/test/vendor/mocha-0.9.5/lib/mocha/expectation.rb +476 -0
  36. data/test/vendor/mocha-0.9.5/lib/mocha/expectation_error.rb +15 -0
  37. data/test/vendor/mocha-0.9.5/lib/mocha/expectation_list.rb +50 -0
  38. data/test/vendor/mocha-0.9.5/lib/mocha/in_state_ordering_constraint.rb +19 -0
  39. data/test/vendor/mocha-0.9.5/lib/mocha/inspect.rb +67 -0
  40. data/test/vendor/mocha-0.9.5/lib/mocha/instance_method.rb +16 -0
  41. data/test/vendor/mocha-0.9.5/lib/mocha/is_a.rb +9 -0
  42. data/test/vendor/mocha-0.9.5/lib/mocha/logger.rb +15 -0
  43. data/test/vendor/mocha-0.9.5/lib/mocha/metaclass.rb +13 -0
  44. data/test/vendor/mocha-0.9.5/lib/mocha/method_matcher.rb +21 -0
  45. data/test/vendor/mocha-0.9.5/lib/mocha/mini_test_adapter.rb +50 -0
  46. data/test/vendor/mocha-0.9.5/lib/mocha/mock.rb +200 -0
  47. data/test/vendor/mocha-0.9.5/lib/mocha/mockery.rb +181 -0
  48. data/test/vendor/mocha-0.9.5/lib/mocha/module_method.rb +16 -0
  49. data/test/vendor/mocha-0.9.5/lib/mocha/multiple_yields.rb +20 -0
  50. data/test/vendor/mocha-0.9.5/lib/mocha/names.rb +53 -0
  51. data/test/vendor/mocha-0.9.5/lib/mocha/no_yields.rb +11 -0
  52. data/test/vendor/mocha-0.9.5/lib/mocha/object.rb +187 -0
  53. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/all_of.rb +42 -0
  54. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/any_of.rb +47 -0
  55. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/any_parameters.rb +40 -0
  56. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/anything.rb +33 -0
  57. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/base.rb +15 -0
  58. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/equals.rb +42 -0
  59. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/has_entries.rb +45 -0
  60. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/has_entry.rb +56 -0
  61. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/has_key.rb +42 -0
  62. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/has_value.rb +42 -0
  63. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/includes.rb +40 -0
  64. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/instance_of.rb +42 -0
  65. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/is_a.rb +42 -0
  66. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/kind_of.rb +42 -0
  67. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/not.rb +42 -0
  68. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/object.rb +15 -0
  69. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/optionally.rb +55 -0
  70. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/regexp_matches.rb +43 -0
  71. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/responds_with.rb +43 -0
  72. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/yaml_equivalent.rb +43 -0
  73. data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers.rb +27 -0
  74. data/test/vendor/mocha-0.9.5/lib/mocha/parameters_matcher.rb +37 -0
  75. data/test/vendor/mocha-0.9.5/lib/mocha/pretty_parameters.rb +28 -0
  76. data/test/vendor/mocha-0.9.5/lib/mocha/return_values.rb +31 -0
  77. data/test/vendor/mocha-0.9.5/lib/mocha/sequence.rb +42 -0
  78. data/test/vendor/mocha-0.9.5/lib/mocha/single_return_value.rb +17 -0
  79. data/test/vendor/mocha-0.9.5/lib/mocha/single_yield.rb +18 -0
  80. data/test/vendor/mocha-0.9.5/lib/mocha/standalone.rb +166 -0
  81. data/test/vendor/mocha-0.9.5/lib/mocha/state_machine.rb +91 -0
  82. data/test/vendor/mocha-0.9.5/lib/mocha/stubbing_error.rb +16 -0
  83. data/test/vendor/mocha-0.9.5/lib/mocha/test_case_adapter.rb +103 -0
  84. data/test/vendor/mocha-0.9.5/lib/mocha/unexpected_invocation.rb +18 -0
  85. data/test/vendor/mocha-0.9.5/lib/mocha/yield_parameters.rb +31 -0
  86. data/test/vendor/mocha-0.9.5/lib/mocha.rb +49 -0
  87. data/test/vendor/mocha-0.9.5/lib/mocha_standalone.rb +2 -0
  88. data/test/vendor/mocha-0.9.5/lib/stubba.rb +4 -0
  89. data/test/wiki_import_test.rb +106 -0
  90. metadata +248 -0
@@ -0,0 +1,166 @@
1
+ require 'mocha/parameter_matchers'
2
+ require 'mocha/mockery'
3
+ require 'mocha/sequence'
4
+
5
+ module Mocha # :nodoc:
6
+
7
+ # Methods added to Test::Unit::TestCase or equivalent.
8
+ module Standalone
9
+
10
+ include ParameterMatchers
11
+
12
+ # :call-seq: mock(name, &block) -> mock object
13
+ # mock(expected_methods = {}, &block) -> mock object
14
+ # mock(name, expected_methods = {}, &block) -> mock object
15
+ #
16
+ # Creates a mock object.
17
+ #
18
+ # +name+ is a +String+ identifier for the mock object.
19
+ #
20
+ # +expected_methods+ is a +Hash+ with expected method name symbols as keys and corresponding return values as values.
21
+ #
22
+ # Note that (contrary to expectations set up by #stub) these expectations <b>must</b> be fulfilled during the test.
23
+ # def test_product
24
+ # product = mock('ipod_product', :manufacturer => 'ipod', :price => 100)
25
+ # assert_equal 'ipod', product.manufacturer
26
+ # assert_equal 100, product.price
27
+ # # an error will be raised unless both Product#manufacturer and Product#price have been called
28
+ # end
29
+ #
30
+ # +block+ is an optional block to be evaluated against the mock object instance, giving an alernative way to set up expectations & stubs.
31
+ # def test_product
32
+ # product = mock('ipod_product') do
33
+ # expects(:manufacturer).returns('ipod')
34
+ # expects(:price).returns(100)
35
+ # end
36
+ # assert_equal 'ipod', product.manufacturer
37
+ # assert_equal 100, product.price
38
+ # # an error will be raised unless both Product#manufacturer and Product#price have been called
39
+ # end
40
+ def mock(*arguments, &block)
41
+ name = arguments.shift if arguments.first.is_a?(String)
42
+ expectations = arguments.shift || {}
43
+ mock = name ? Mockery.instance.named_mock(name, &block) : Mockery.instance.unnamed_mock(&block)
44
+ mock.expects(expectations)
45
+ mock
46
+ end
47
+
48
+ # :call-seq: stub(name, &block) -> mock object
49
+ # stub(stubbed_methods = {}, &block) -> mock object
50
+ # stub(name, stubbed_methods = {}, &block) -> mock object
51
+ #
52
+ # Creates a mock object.
53
+ #
54
+ # +name+ is a +String+ identifier for the mock object.
55
+ #
56
+ # +stubbed_methods+ is a +Hash+ with stubbed method name symbols as keys and corresponding return values as values.
57
+ # Note that (contrary to expectations set up by #mock) these expectations <b>need not</b> be fulfilled during the test.
58
+ # def test_product
59
+ # product = stub('ipod_product', :manufacturer => 'ipod', :price => 100)
60
+ # assert_equal 'ipod', product.manufacturer
61
+ # assert_equal 100, product.price
62
+ # # an error will not be raised even if Product#manufacturer and Product#price have not been called
63
+ # end
64
+ #
65
+ # +block+ is an optional block to be evaluated against the mock object instance, giving an alernative way to set up expectations & stubs.
66
+ # def test_product
67
+ # product = stub('ipod_product') do
68
+ # stubs(:manufacturer).returns('ipod')
69
+ # stubs(:price).returns(100)
70
+ # end
71
+ # assert_equal 'ipod', product.manufacturer
72
+ # assert_equal 100, product.price
73
+ # # an error will not be raised even if Product#manufacturer and Product#price have not been called
74
+ # end
75
+ def stub(*arguments, &block)
76
+ name = arguments.shift if arguments.first.is_a?(String)
77
+ expectations = arguments.shift || {}
78
+ stub = name ? Mockery.instance.named_mock(name, &block) : Mockery.instance.unnamed_mock(&block)
79
+ stub.stubs(expectations)
80
+ stub
81
+ end
82
+
83
+ # :call-seq: stub_everything(name, &block) -> mock object
84
+ # stub_everything(stubbed_methods = {}, &block) -> mock object
85
+ # stub_everything(name, stubbed_methods = {}, &block) -> mock object
86
+ #
87
+ # Creates a mock object that accepts calls to any method.
88
+ #
89
+ # By default it will return +nil+ for any method call.
90
+ #
91
+ # +block+ is a block to be evaluated against the mock object instance, giving an alernative way to set up expectations & stubs.
92
+ #
93
+ # +name+ and +stubbed_methods+ work in the same way as for #stub.
94
+ # def test_product
95
+ # product = stub_everything('ipod_product', :price => 100)
96
+ # assert_nil product.manufacturer
97
+ # assert_nil product.any_old_method
98
+ # assert_equal 100, product.price
99
+ # end
100
+ def stub_everything(*arguments, &block)
101
+ name = arguments.shift if arguments.first.is_a?(String)
102
+ expectations = arguments.shift || {}
103
+ stub = name ? Mockery.instance.named_mock(name, &block) : Mockery.instance.unnamed_mock(&block)
104
+ stub.stub_everything
105
+ stub.stubs(expectations)
106
+ stub
107
+ end
108
+
109
+ # :call-seq: sequence(name) -> sequence
110
+ #
111
+ # Returns a new sequence that is used to constrain the order in which expectations can occur.
112
+ #
113
+ # Specify that an expected invocation must occur in within a named +sequence+ by using Expectation#in_sequence.
114
+ #
115
+ # See also Expectation#in_sequence.
116
+ # breakfast = sequence('breakfast')
117
+ #
118
+ # egg = mock('egg')
119
+ # egg.expects(:crack).in_sequence(breakfast)
120
+ # egg.expects(:fry).in_sequence(breakfast)
121
+ # egg.expects(:eat).in_sequence(breakfast)
122
+ def sequence(name)
123
+ Sequence.new(name)
124
+ end
125
+
126
+ # :call-seq: states(name) -> state_machine
127
+ #
128
+ # Returns a new +state_machine+ that is used to constrain the order in which expectations can occur.
129
+ #
130
+ # Specify the initial +state+ of the +state_machine+ by using StateMachine#starts_as.
131
+ #
132
+ # Specify that an expected invocation should change the +state+ of the +state_machine+ by using Expectation#then.
133
+ #
134
+ # Specify that an expected invocation should be constrained to occur within a particular +state+ by using Expectation#when.
135
+ #
136
+ # A test can contain multiple +state_machines+.
137
+ #
138
+ # See also Expectation#then, Expectation#when and StateMachine.
139
+ # power = states('power').starts_as('off')
140
+ #
141
+ # radio = mock('radio')
142
+ # radio.expects(:switch_on).then(power.is('on'))
143
+ # radio.expects(:select_channel).with('BBC Radio 4').when(power.is('on'))
144
+ # radio.expects(:adjust_volume).with(+5).when(power.is('on'))
145
+ # radio.expects(:select_channel).with('BBC World Service').when(power.is('on'))
146
+ # radio.expects(:adjust_volume).with(-5).when(power.is('on'))
147
+ # radio.expects(:switch_off).then(power.is('off'))
148
+ def states(name)
149
+ Mockery.instance.new_state_machine(name)
150
+ end
151
+
152
+ def mocha_setup # :nodoc:
153
+ end
154
+
155
+ def mocha_verify(assertion_counter = nil) # :nodoc:
156
+ Mockery.instance.verify(assertion_counter)
157
+ end
158
+
159
+ def mocha_teardown # :nodoc:
160
+ Mockery.instance.teardown
161
+ Mockery.reset_instance
162
+ end
163
+
164
+ end
165
+
166
+ end
@@ -0,0 +1,91 @@
1
+ module Mocha # :nodoc:
2
+
3
+ # A state machine that is used to constrain the order of invocations.
4
+ # An invocation can be constrained to occur when a state is, or is_not, active.
5
+ class StateMachine
6
+
7
+ class State # :nodoc:
8
+
9
+ def initialize(state_machine, state)
10
+ @state_machine, @state = state_machine, state
11
+ end
12
+
13
+ def activate
14
+ @state_machine.current_state = @state
15
+ end
16
+
17
+ def active?
18
+ @state_machine.current_state == @state
19
+ end
20
+
21
+ def mocha_inspect
22
+ "#{@state_machine.name} is #{@state.mocha_inspect}"
23
+ end
24
+
25
+ end
26
+
27
+ class StatePredicate # :nodoc:
28
+
29
+ def initialize(state_machine, state)
30
+ @state_machine, @state = state_machine, state
31
+ end
32
+
33
+ def active?
34
+ @state_machine.current_state != @state
35
+ end
36
+
37
+ def mocha_inspect
38
+ "#{@state_machine.name} is not #{@state.mocha_inspect}"
39
+ end
40
+
41
+ end
42
+
43
+ attr_reader :name # :nodoc:
44
+
45
+ attr_accessor :current_state # :nodoc:
46
+
47
+ def initialize(name) # :nodoc:
48
+ @name = name
49
+ @current_state = nil
50
+ end
51
+
52
+ # :call-seq: starts_as(initial_state) -> state_machine
53
+ #
54
+ # Put the +state_machine+ into the +initial_state+.
55
+ def starts_as(initial_state)
56
+ become(initial_state)
57
+ self
58
+ end
59
+
60
+ # :call-seq: become(next_state)
61
+ #
62
+ # Put the +state_machine+ into the +next_state+.
63
+ def become(next_state)
64
+ @current_state = next_state
65
+ end
66
+
67
+ # :call-seq: is(state)
68
+ #
69
+ # Determines whether the +state_machine+ is in the specified +state+.
70
+ def is(state)
71
+ State.new(self, state)
72
+ end
73
+
74
+ # :call-seq: is_not(state)
75
+ #
76
+ # Determines whether the +state_machine+ is not in the specified +state+.
77
+ def is_not(state)
78
+ StatePredicate.new(self, state)
79
+ end
80
+
81
+ def mocha_inspect # :nodoc:
82
+ if @current_state
83
+ "#{@name} is #{@current_state.mocha_inspect}"
84
+ else
85
+ "#{@name} has no current state"
86
+ end
87
+ end
88
+
89
+ end
90
+
91
+ end
@@ -0,0 +1,16 @@
1
+ require 'mocha/backtrace_filter'
2
+
3
+ module Mocha # :nodoc:
4
+
5
+ # Exception raised when an action prevented by Configuration#prevent is attempted.
6
+ class StubbingError < StandardError
7
+
8
+ def initialize(message = nil, backtrace = []) # :nodoc:
9
+ super(message)
10
+ filter = BacktraceFilter.new
11
+ set_backtrace(filter.filtered(backtrace))
12
+ end
13
+
14
+ end
15
+
16
+ end
@@ -0,0 +1,103 @@
1
+ require 'mocha/expectation_error'
2
+
3
+ module Mocha
4
+
5
+ module TestCaseAdapter
6
+
7
+ class AssertionCounter
8
+
9
+ def initialize(test_result)
10
+ @test_result = test_result
11
+ end
12
+
13
+ def increment
14
+ @test_result.add_assertion
15
+ end
16
+
17
+ end
18
+
19
+ def self.included(base)
20
+ if RUBY_VERSION < '1.8.6'
21
+ base.class_eval do
22
+
23
+ alias_method :run_before_mocha_test_case_adapter, :run
24
+
25
+ def run(result)
26
+ assertion_counter = AssertionCounter.new(result)
27
+ yield(Test::Unit::TestCase::STARTED, name)
28
+ @_result = result
29
+ begin
30
+ begin
31
+ setup
32
+ __send__(@method_name)
33
+ mocha_verify(assertion_counter)
34
+ rescue Mocha::ExpectationError => e
35
+ add_failure(e.message, e.backtrace)
36
+ rescue Test::Unit::AssertionFailedError => e
37
+ add_failure(e.message, e.backtrace)
38
+ rescue StandardError, ScriptError
39
+ add_error($!)
40
+ ensure
41
+ begin
42
+ teardown
43
+ rescue Test::Unit::AssertionFailedError => e
44
+ add_failure(e.message, e.backtrace)
45
+ rescue StandardError, ScriptError
46
+ add_error($!)
47
+ end
48
+ end
49
+ ensure
50
+ mocha_teardown
51
+ end
52
+ result.add_run
53
+ yield(Test::Unit::TestCase::FINISHED, name)
54
+ end
55
+
56
+ end
57
+ else
58
+ base.class_eval do
59
+
60
+ alias_method :run_before_mocha_test_case_adapter, :run
61
+
62
+ def run(result)
63
+ assertion_counter = AssertionCounter.new(result)
64
+ yield(Test::Unit::TestCase::STARTED, name)
65
+ @_result = result
66
+ begin
67
+ begin
68
+ setup
69
+ __send__(@method_name)
70
+ mocha_verify(assertion_counter)
71
+ rescue Mocha::ExpectationError => e
72
+ add_failure(e.message, e.backtrace)
73
+ rescue Test::Unit::AssertionFailedError => e
74
+ add_failure(e.message, e.backtrace)
75
+ rescue Exception
76
+ raise if Test::Unit::TestCase::PASSTHROUGH_EXCEPTIONS.include? $!.class
77
+ add_error($!)
78
+ ensure
79
+ begin
80
+ teardown
81
+ rescue Test::Unit::AssertionFailedError => e
82
+ add_failure(e.message, e.backtrace)
83
+ rescue Exception
84
+ raise if Test::Unit::TestCase::PASSTHROUGH_EXCEPTIONS.include? $!.class
85
+ add_error($!)
86
+ end
87
+ end
88
+ ensure
89
+ mocha_teardown
90
+ end
91
+ result.add_run
92
+ yield(Test::Unit::TestCase::FINISHED, name)
93
+ end
94
+
95
+ end
96
+
97
+ end
98
+
99
+ end
100
+
101
+ end
102
+
103
+ end
@@ -0,0 +1,18 @@
1
+ module Mocha # :nodoc:
2
+
3
+ class UnexpectedInvocation
4
+
5
+ def initialize(mock, symbol, *arguments)
6
+ @mock = mock
7
+ @method_matcher = MethodMatcher.new(symbol)
8
+ @parameters_matcher = ParametersMatcher.new(arguments)
9
+ end
10
+
11
+ def to_s
12
+ method_signature = "#{@mock.mocha_inspect}.#{@method_matcher.mocha_inspect}#{@parameters_matcher.mocha_inspect}"
13
+ "unexpected invocation: #{method_signature}\n"
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -0,0 +1,31 @@
1
+ require 'mocha/no_yields'
2
+ require 'mocha/single_yield'
3
+ require 'mocha/multiple_yields'
4
+
5
+ module Mocha # :nodoc:
6
+
7
+ class YieldParameters # :nodoc:
8
+
9
+ def initialize
10
+ @parameter_groups = []
11
+ end
12
+
13
+ def next_invocation
14
+ case @parameter_groups.length
15
+ when 0 then NoYields.new
16
+ when 1 then @parameter_groups.first
17
+ else @parameter_groups.shift
18
+ end
19
+ end
20
+
21
+ def add(*parameters)
22
+ @parameter_groups << SingleYield.new(*parameters)
23
+ end
24
+
25
+ def multiple_add(*parameter_groups)
26
+ @parameter_groups << MultipleYields.new(*parameter_groups)
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -0,0 +1,49 @@
1
+ require 'mocha_standalone'
2
+ require 'mocha/configuration'
3
+
4
+ if RUBY_VERSION < '1.9'
5
+ begin
6
+ require 'rubygems'
7
+ begin
8
+ gem 'minitest', '>=1.3'
9
+ require 'minitest/unit'
10
+ rescue Gem::LoadError
11
+ # Compatible version of MiniTest gem not available
12
+ end
13
+ rescue LoadError
14
+ # RubyGems not available
15
+ end
16
+ else
17
+ begin
18
+ require 'minitest/unit'
19
+ rescue LoadError
20
+ # MiniTest not available
21
+ end
22
+ end
23
+
24
+ if defined?(MiniTest)
25
+ require 'mocha/mini_test_adapter'
26
+
27
+ module MiniTest
28
+ class Unit
29
+ class TestCase
30
+ include Mocha::Standalone
31
+ include Mocha::MiniTestCaseAdapter
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ require 'mocha/test_case_adapter'
38
+ require 'test/unit/testcase'
39
+
40
+ unless Test::Unit::TestCase.ancestors.include?(Mocha::Standalone)
41
+ module Test
42
+ module Unit
43
+ class TestCase
44
+ include Mocha::Standalone
45
+ include Mocha::TestCaseAdapter
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,2 @@
1
+ require 'mocha/standalone'
2
+ require 'mocha/object'
@@ -0,0 +1,4 @@
1
+ # for backwards compatibility
2
+ require 'mocha'
3
+ require 'mocha/deprecation'
4
+ Mocha::Deprecation.warning "require 'stubba' is no longer needed and stubba.rb will soon be removed"
@@ -0,0 +1,106 @@
1
+ require 'test/unit'
2
+
3
+ # require Rails testing framework
4
+ require File.dirname(__FILE__) + '/../../../../test/test_helper'
5
+
6
+ $:.unshift File.dirname(__FILE__) + '/../lib'
7
+ require File.dirname(__FILE__) + '/../init'
8
+
9
+ # We need mocha (http://mocha.rubyforge.org/) to stub out Net::HTTP in the test
10
+ # otherwise people testing this library would need to install a MediaWiki on
11
+ # their own!
12
+ $:.unshift File.dirname(__FILE__) + '/vendor/mocha-0.9.5/lib'
13
+ require 'mocha'
14
+
15
+ # This class contains test cases for the WikiMedia import plugin
16
+ class WikiImportTest < Test::Unit::TestCase
17
+ # Reference strings for assertions
18
+ WIKI_PAGE=<<EOW#nodoc
19
+ =Title=
20
+ Directory Listings
21
+
22
+ =Impact=
23
+ Low
24
+
25
+ =Probability=
26
+ Low
27
+
28
+ =Description=
29
+ Some directories on the server were configured with directory listing enabled.
30
+
31
+ This may leak information about the website by revealing files that it uses
32
+ without requiring the application context in which they are accessed.
33
+
34
+ =Recommendation=
35
+
36
+ Disable directory listings if possible.
37
+ EOW
38
+ DRADIS_NOTE=<<EON#nodoc
39
+ #[Title]#
40
+ Directory Listings
41
+
42
+ #[Impact]#
43
+ Low
44
+
45
+ #[Probability]#
46
+ Low
47
+
48
+ #[Description]#
49
+ Some directories on the server were configured with directory listing enabled.
50
+
51
+ This may leak information about the website by revealing files that it uses
52
+ without requiring the application context in which they are accessed.
53
+
54
+ #[Recommendation]#
55
+
56
+ Disable directory listings if possible.
57
+ EON
58
+
59
+ WIKI_API_RESPONSE=<<EOX
60
+ <?xml version="1.0"?><api><query><pages><page pageid="2" ns="0" title="Directory Listings"><revisions><rev>=Title=
61
+ Directory Listings
62
+
63
+ =Impact=
64
+ Low
65
+
66
+ =Probability=
67
+ Low
68
+
69
+ =Description=
70
+ Some directories on the server were configured with directory listing enabled.
71
+
72
+ This may leak information about the website by revealing files that it uses
73
+ without requiring the application context in which they are accessed.
74
+
75
+ =Recommendation=
76
+
77
+ Disable directory listings if possible.
78
+ </rev></revisions></page></pages></query></api>
79
+ EOX
80
+
81
+
82
+ # At some point in the import process we need to translate from
83
+ # wiki-formatted text into our standard format for notes (see
84
+ # Note#fields).
85
+ def test_wiki_to_dradis_fields
86
+ assert_equal( DRADIS_NOTE, WikiImport::fields_from_wikitext(WIKI_PAGE) )
87
+ end
88
+
89
+ # Connect to a remote wiki, search for a specific string and parse the output
90
+ # into the format expected by the framework.
91
+ def test_pull_from_wiki
92
+ params = { :query => 'directory' }
93
+
94
+ # mocha stubs for Net::HTTP. WIKI_API_RESPONSE contains a fictional
95
+ # response by a MediaWiki server. This will be parsed by the filter to
96
+ # produce a dradis-formated note
97
+ response = mock
98
+ response.expects(:body).returns(WIKI_API_RESPONSE)
99
+ http = mock
100
+ http.expects(:get).returns(response)
101
+ Net::HTTP.stubs(:start).yields( http )
102
+
103
+ expected = [ {:title => 'Directory Listings', :description => DRADIS_NOTE} ]
104
+ assert_equal( expected, WikiImport::Filters::FullTextSearch.run(params) )
105
+ end
106
+ end