webdav.rb 0.2.1

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.
@@ -0,0 +1,254 @@
1
+ # test/webdav_test.rb
2
+
3
+ require_relative './helper'
4
+
5
+ describe WebDAV do
6
+ let(:base_uri){'https://dav.example.com/files/'}
7
+ let(:username){'user'}
8
+ let(:password){'pass'}
9
+
10
+ let(:dav) do
11
+ WebDAV.new(base_uri, username: username, password: password)
12
+ end
13
+
14
+ let(:ok_response) do
15
+ MockResponse.new(
16
+ code: '200',
17
+ message: 'OK',
18
+ body: 'Hello'
19
+ )
20
+ end
21
+
22
+ let(:created_response) do
23
+ MockResponse.new(
24
+ code: '201',
25
+ message: 'Created',
26
+ body: ''
27
+ )
28
+ end
29
+
30
+ let(:no_content_response) do
31
+ MockResponse.new(
32
+ code: '204',
33
+ message: 'No Content',
34
+ body: ''
35
+ )
36
+ end
37
+
38
+ let(:multistatus_response) do
39
+ MockResponse.new(
40
+ code: '207',
41
+ message: 'Multi-Status',
42
+ body: <<~XML,
43
+ <?xml version="1.0" encoding="UTF-8"?>
44
+ <d:multistatus xmlns:d="DAV:">
45
+ <d:response>
46
+ <d:href>/files/doc.txt</d:href>
47
+ <d:propstat>
48
+ <d:prop>
49
+ <d:displayname>doc.txt</d:displayname>
50
+ </d:prop>
51
+ <d:status>HTTP/1.1 200 OK</d:status>
52
+ </d:propstat>
53
+ </d:response>
54
+ </d:multistatus>
55
+ XML
56
+ )
57
+ end
58
+
59
+ let(:not_found_response) do
60
+ MockResponse.new(
61
+ code: '404',
62
+ message: 'Not Found',
63
+ body: 'Not Found'
64
+ )
65
+ end
66
+
67
+ # Properties
68
+
69
+ describe "#propfind" do
70
+ it "returns a MultiStatus response" do
71
+ dav.stub(:request, multistatus_response) do
72
+ result = dav.propfind('/')
73
+ _(result).must_be_kind_of WebDAV::MultiStatus
74
+ _(result.resources.length).must_equal 1
75
+ end
76
+ end
77
+ end
78
+
79
+ describe "#proppatch" do
80
+ it "returns a MultiStatus response" do
81
+ dav.stub(:request, multistatus_response) do
82
+ result = dav.proppatch('/doc.txt', body: '<d:propertyupdate/>')
83
+ _(result).must_be_kind_of WebDAV::MultiStatus
84
+ end
85
+ end
86
+ end
87
+
88
+ # Reports
89
+
90
+ describe "#report" do
91
+ it "returns a MultiStatus response" do
92
+ dav.stub(:request, multistatus_response) do
93
+ result = dav.report('/calendars/', body: '<c:calendar-query/>')
94
+ _(result).must_be_kind_of WebDAV::MultiStatus
95
+ end
96
+ end
97
+ end
98
+
99
+ # Collections
100
+
101
+ describe "#mkcol" do
102
+ it "returns a Response" do
103
+ dav.stub(:request, created_response) do
104
+ result = dav.mkcol('/new_folder/')
105
+ _(result).must_be_kind_of WebDAV::Response
106
+ _(result.code).must_equal 201
107
+ end
108
+ end
109
+ end
110
+
111
+ # Namespace
112
+
113
+ describe "#copy" do
114
+ it "returns a Response" do
115
+ dav.stub(:request, created_response) do
116
+ result = dav.copy('/doc.txt', to: '/archive/doc.txt')
117
+ _(result).must_be_kind_of WebDAV::Response
118
+ end
119
+ end
120
+ end
121
+
122
+ describe "#move" do
123
+ it "returns a Response" do
124
+ dav.stub(:request, created_response) do
125
+ result = dav.move('/draft.txt', to: '/final.txt')
126
+ _(result).must_be_kind_of WebDAV::Response
127
+ end
128
+ end
129
+ end
130
+
131
+ # Locking
132
+
133
+ describe "#lock" do
134
+ it "returns a Response" do
135
+ dav.stub(:request, ok_response) do
136
+ result = dav.lock('/doc.txt', body: '<d:lockinfo/>')
137
+ _(result).must_be_kind_of WebDAV::Response
138
+ end
139
+ end
140
+ end
141
+
142
+ describe "#unlock" do
143
+ it "returns a Response" do
144
+ dav.stub(:request, no_content_response) do
145
+ result = dav.unlock('/doc.txt', token: 'urn:uuid:abc123')
146
+ _(result).must_be_kind_of WebDAV::Response
147
+ _(result.code).must_equal 204
148
+ end
149
+ end
150
+ end
151
+
152
+ # Standard HTTP
153
+
154
+ describe "#get" do
155
+ it "returns a Response with the body" do
156
+ dav.stub(:request, ok_response) do
157
+ result = dav.get('/doc.txt')
158
+ _(result).must_be_kind_of WebDAV::Response
159
+ _(result.body).must_equal 'Hello'
160
+ end
161
+ end
162
+ end
163
+
164
+ describe "#head" do
165
+ it "returns a Response" do
166
+ dav.stub(:request, ok_response) do
167
+ result = dav.head('/doc.txt')
168
+ _(result).must_be_kind_of WebDAV::Response
169
+ end
170
+ end
171
+ end
172
+
173
+ describe "#post" do
174
+ it "returns a Response" do
175
+ dav.stub(:request, ok_response) do
176
+ result = dav.post('/endpoint', body: '<data/>')
177
+ _(result).must_be_kind_of WebDAV::Response
178
+ end
179
+ end
180
+ end
181
+
182
+ describe "#put" do
183
+ it "returns a Response" do
184
+ dav.stub(:request, created_response) do
185
+ result = dav.put('/doc.txt', body: 'New content', content_type: 'text/plain')
186
+ _(result).must_be_kind_of WebDAV::Response
187
+ _(result.code).must_equal 201
188
+ end
189
+ end
190
+ end
191
+
192
+ describe "#patch" do
193
+ it "returns a Response" do
194
+ dav.stub(:request, ok_response) do
195
+ result = dav.patch('/doc.txt', body: '<patch/>')
196
+ _(result).must_be_kind_of WebDAV::Response
197
+ end
198
+ end
199
+ end
200
+
201
+ describe "#delete" do
202
+ it "returns a Response" do
203
+ dav.stub(:request, no_content_response) do
204
+ result = dav.delete('/doc.txt')
205
+ _(result).must_be_kind_of WebDAV::Response
206
+ _(result.code).must_equal 204
207
+ end
208
+ end
209
+ end
210
+
211
+ describe "#options" do
212
+ it "returns a Response" do
213
+ dav.stub(:request, ok_response) do
214
+ result = dav.options('/')
215
+ _(result).must_be_kind_of WebDAV::Response
216
+ end
217
+ end
218
+ end
219
+
220
+ describe "#trace" do
221
+ it "returns a Response" do
222
+ dav.stub(:request, ok_response) do
223
+ result = dav.trace('/')
224
+ _(result).must_be_kind_of WebDAV::Response
225
+ end
226
+ end
227
+ end
228
+
229
+ # Error handling
230
+
231
+ describe "error responses" do
232
+ it "raises WebDAV::Error for 404" do
233
+ dav.stub(:request, not_found_response) do
234
+ assert_raises(WebDAV::Error) do
235
+ dav.get('/missing.txt')
236
+ end
237
+ end
238
+ end
239
+
240
+ it "includes the status code in the error" do
241
+ dav.stub(:request, not_found_response) do
242
+ error = assert_raises(WebDAV::Error){dav.get('/missing.txt')}
243
+ _(error.code).must_equal 404
244
+ end
245
+ end
246
+
247
+ it "includes the message in the error" do
248
+ dav.stub(:request, not_found_response) do
249
+ error = assert_raises(WebDAV::Error){dav.get('/missing.txt')}
250
+ _(error.message).must_equal 'Not Found'
251
+ end
252
+ end
253
+ end
254
+ end
data/webdav.rb.gemspec ADDED
@@ -0,0 +1,49 @@
1
+ require_relative './lib/WebDAV/VERSION'
2
+
3
+ class Gem::Specification
4
+ def dependencies=(gems)
5
+ gems.each{|gem| add_dependency(*gem)}
6
+ end
7
+
8
+ def development_dependencies=(gems)
9
+ gems.each{|gem| add_development_dependency(*gem)}
10
+ end
11
+ end
12
+
13
+ Gem::Specification.new do |spec|
14
+ spec.name = 'webdav.rb'
15
+ spec.version = WebDAV::VERSION
16
+
17
+ spec.summary = "A Ruby WebDAV client library."
18
+ spec.description = "A Ruby WebDAV client library."
19
+
20
+ spec.author = 'thoran'
21
+ spec.email = 'code@thoran.com'
22
+ spec.homepage = 'https://github.com/thoran/webdav'
23
+ spec.license = 'MIT'
24
+
25
+ spec.required_ruby_version = '>= 3.2'
26
+ spec.require_paths = ['lib']
27
+
28
+ spec.files = [
29
+ Dir['lib/**/*.rb'],
30
+ Dir['test/**/*.rb'],
31
+ 'CHANGELOG',
32
+ 'Gemfile',
33
+ 'LICENSE',
34
+ 'Rakefile',
35
+ 'README.md',
36
+ 'webdav.rb.gemspec',
37
+ ].flatten
38
+
39
+ spec.dependencies = [
40
+ ['http.rb', '~> 1.0'],
41
+ ['rexml']
42
+ ]
43
+
44
+ spec.development_dependencies = [
45
+ ['minitest', '~> 6.0'],
46
+ ['minitest-mock'],
47
+ ['rake']
48
+ ]
49
+ end
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: webdav.rb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
5
+ platform: ruby
6
+ authors:
7
+ - thoran
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: http.rb
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '1.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '1.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: rexml
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: minitest
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '6.0'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '6.0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: minitest-mock
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: rake
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ description: A Ruby WebDAV client library.
83
+ email: code@thoran.com
84
+ executables: []
85
+ extensions: []
86
+ extra_rdoc_files: []
87
+ files:
88
+ - CHANGELOG
89
+ - Gemfile
90
+ - LICENSE
91
+ - README.md
92
+ - Rakefile
93
+ - lib/Net/HTTP/Report.rb
94
+ - lib/String/to_const.rb
95
+ - lib/Thoran/Array/AllButFirst/all_but_first.rb
96
+ - lib/Thoran/Array/FirstX/firstX.rb
97
+ - lib/Thoran/String/ToConst/to_const.rb
98
+ - lib/WebDAV/Error.rb
99
+ - lib/WebDAV/MultiStatus.rb
100
+ - lib/WebDAV/Response.rb
101
+ - lib/WebDAV/VERSION.rb
102
+ - lib/webdav.rb
103
+ - test/Net/HTTP/Report_test.rb
104
+ - test/WebDAV/Error_test.rb
105
+ - test/WebDAV/MultiStatus_test.rb
106
+ - test/WebDAV/Response_test.rb
107
+ - test/helper.rb
108
+ - test/webdav_test.rb
109
+ - webdav.rb.gemspec
110
+ homepage: https://github.com/thoran/webdav
111
+ licenses:
112
+ - MIT
113
+ metadata: {}
114
+ rdoc_options: []
115
+ require_paths:
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '3.2'
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ requirements: []
128
+ rubygems_version: 4.0.18
129
+ specification_version: 4
130
+ summary: A Ruby WebDAV client library.
131
+ test_files: []