Skip to content
This repository was archived by the owner on Oct 22, 2020. It is now read-only.

Commit 6a82eb5

Browse files
committed
Improve test coverage
1 parent 225d61c commit 6a82eb5

File tree

1 file changed

+130
-0
lines changed

1 file changed

+130
-0
lines changed

spec/wordpress/shell_upload_spec.rb

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,134 @@
1414
expect(subject.get_option('payload_name_length')).to_not be_nil
1515
end
1616
end
17+
18+
describe '#expected_upload_response_code' do
19+
it 'returns 200' do
20+
expect(subject.expected_upload_response_code).to eq 200
21+
end
22+
end
23+
24+
describe '#before_upload' do
25+
it 'returns true' do
26+
expect(subject.before_upload).to be true
27+
end
28+
end
29+
30+
describe '#possible_payload_upload_locations' do
31+
it 'returns nil' do
32+
expect(subject.possible_payload_upload_locations).to be_nil
33+
end
34+
end
35+
36+
describe '#uploaded_payload_location' do
37+
it 'returns nil' do
38+
expect(subject.uploaded_payload_location).to be_nil
39+
end
40+
end
41+
42+
describe '#payload_body_builder' do
43+
it 'returns nil' do
44+
expect(subject.payload_body_builder).to be_nil
45+
end
46+
end
47+
48+
describe '#uploader_url' do
49+
it 'returns nil' do
50+
expect(subject.uploader_url).to be_nil
51+
end
52+
end
53+
54+
describe '#upload_request_params' do
55+
it 'returns nil' do
56+
expect(subject.upload_request_params).to be_nil
57+
end
58+
end
59+
60+
describe '#payload_name_extension' do
61+
it 'returns "php"' do
62+
expect(subject.payload_name_extension).to eq 'php'
63+
end
64+
end
65+
66+
describe '#validate_upload_result' do
67+
it 'returns true' do
68+
expect(subject.validate_upload_result).to be true
69+
end
70+
end
71+
72+
describe '#timestamp_range_adjustment_value' do
73+
it 'returns 10' do
74+
expect(subject.timestamp_range_adjustment_value).to eq 10
75+
end
76+
end
77+
78+
describe '#run' do
79+
let(:before_upload) { true }
80+
let(:payload_body_builder) { Wpxf::Utility::BodyBuilder.new }
81+
let(:upload_payload) { true }
82+
let(:possible_payload_upload_locations) { [] }
83+
84+
before(:each) do
85+
allow(subject).to receive(:before_upload).and_return(before_upload)
86+
allow(subject).to receive(:payload_body_builder).and_return(payload_body_builder)
87+
allow(subject).to receive(:upload_payload).and_return(upload_payload)
88+
allow(subject).to receive(:possible_payload_upload_locations).and_return(possible_payload_upload_locations)
89+
subject.set_option_value('check_wordpress_and_online', false)
90+
end
91+
92+
it 'generates a random payload name' do
93+
subject.run
94+
expect(subject.payload_name).to_not be_nil
95+
end
96+
97+
it 'will execute all possible upload locations until one returns a code != 404' do
98+
loc1_executed = false
99+
loc2_executed = false
100+
loc3_executed = false
101+
102+
allow(subject).to receive(:validate_and_prepare_upload_locations).and_return(['loc1', 'loc2', 'loc3'])
103+
allow(subject).to receive(:execute_payload) do |url|
104+
res = Wpxf::Net::HttpResponse.new(nil)
105+
res.code = 404
106+
107+
if url == 'loc1'
108+
loc1_executed = true
109+
elsif url == 'loc2'
110+
loc2_executed = true
111+
res.code = 200
112+
elsif url == 'loc3'
113+
loc3_executed = true
114+
end
115+
116+
res
117+
end
118+
119+
subject.run
120+
expect(loc1_executed).to be true
121+
expect(loc2_executed).to be true
122+
expect(loc3_executed).to be false
123+
end
124+
125+
context 'when the pre-upload operations fail' do
126+
let(:before_upload) { false }
127+
128+
it 'returns false' do
129+
expect(subject.run).to be false
130+
end
131+
end
132+
133+
context 'when no body builder is created' do
134+
let(:payload_body_builder) { nil }
135+
136+
it 'returns false' do
137+
expect(subject.run).to be false
138+
end
139+
end
140+
141+
context 'if no errors occur' do
142+
it 'returns true' do
143+
expect(subject.run).to be true
144+
end
145+
end
146+
end
17147
end

0 commit comments

Comments
 (0)