1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
require 'spec_helper'
describe Rakismet do
def mock_response(body)
double(:response, :body => body)
end
let(:http) { double(:http, :post => mock_response('akismet response')) }
before do
Rakismet.key = 'dummy-key'
Rakismet.url = 'test.localhost'
Rakismet.host = 'endpoint.localhost'
end
describe "proxy host" do
it "should have proxy host and port as nil by default" do
Rakismet.proxy_host.should be_nil
Rakismet.proxy_port.should be_nil
end
end
describe ".validate_config" do
it "should raise an error if key is not found" do
Rakismet.key = ''
lambda { Rakismet.send(:validate_config) }.should raise_error(Rakismet::Undefined)
end
it "should raise an error if url is not found" do
Rakismet.url = ''
lambda { Rakismet.send(:validate_config) }.should raise_error(Rakismet::Undefined)
end
it "should raise an error if host is not found" do
Rakismet.host = ''
lambda { Rakismet.send(:validate_config) }.should raise_error(Rakismet::Undefined)
end
end
describe ".validate_key" do
before (:each) do
@proxy = mock(Net::HTTP)
Net::HTTP.stub!(:Proxy).and_return(@proxy)
end
it "should use proxy host and port" do
Rakismet.proxy_host = 'proxy_host'
Rakismet.proxy_port = 'proxy_port'
@proxy.stub!(:start).and_return(mock_response('valid'))
Net::HTTP.should_receive(:Proxy).with('proxy_host', 'proxy_port').and_return(@proxy)
Rakismet.validate_key
end
it "should set @@valid_key = true if key is valid" do
@proxy.stub!(:start).and_return(mock_response('valid'))
Rakismet.validate_key
Rakismet.valid_key?.should be_true
end
it "should set @@valid_key = false if key is invalid" do
@proxy.stub!(:start).and_return(mock_response('invalid'))
Rakismet.validate_key
Rakismet.valid_key?.should be_false
end
it "should build url with host" do
host = "api.antispam.typepad.com"
Rakismet.host = host
@proxy.should_receive(:start).with(host).and_yield(http)
Rakismet.validate_key
end
end
describe ".akismet_call" do
before do
@proxy = mock(Net::HTTP)
Net::HTTP.stub!(:Proxy).and_return(@proxy)
@proxy.stub(:start).and_yield(http)
end
it "should use proxy host and port" do
Rakismet.proxy_host = 'proxy_host'
Rakismet.proxy_port = 'proxy_port'
@proxy.stub!(:start).and_return(mock_response('valid'))
Net::HTTP.should_receive(:Proxy).with('proxy_host', 'proxy_port').and_return(@proxy)
Rakismet.send(:akismet_call, 'bogus-function')
end
it "should build url with API key for the correct host" do
host = 'api.antispam.typepad.com'
Rakismet.host = host
@proxy.should_receive(:start).with("#{Rakismet.key}.#{host}")
Rakismet.send(:akismet_call, 'bogus-function')
end
it "should post data to named function" do
http.should_receive(:post).with('/1.1/bogus-function', %r(foo=#{CGI.escape 'escape//this'}), Rakismet.headers)
Rakismet.send(:akismet_call, 'bogus-function', { :foo => 'escape//this' })
end
it "should default to not being in test mode" do
http.should_receive(:post).with(anything, %r(is_test=0), anything)
Rakismet.send(:akismet_call, 'bogus-function')
end
it "should be in test mode when configured" do
Rakismet.test = true
http.should_receive(:post).with(anything, %r(is_test=1), anything)
Rakismet.send(:akismet_call, 'bogus-function')
end
it "should return response.body" do
Rakismet.send(:akismet_call, 'bogus-function').should eql('akismet response')
end
it "should build query string when params are nil" do
lambda {
Rakismet.send(:akismet_call, 'bogus-function', { :nil_param => nil })
}.should_not raise_error(NoMethodError)
end
end
end