localwiki_client 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.travis.yml +2 -1
  4. data/History.txt +11 -0
  5. data/README.md +33 -0
  6. data/Rakefile +19 -2
  7. data/integration/helper.rb +9 -0
  8. data/{spec/integration → integration}/live_saltlake_wiki_spec.rb +2 -2
  9. data/integration/live_test_wiki_spec.rb +47 -0
  10. data/lib/localwiki/client.rb +131 -38
  11. data/lib/localwiki/version.rb +1 -1
  12. data/localwiki_client.gemspec +6 -2
  13. data/spec/basic_crud_spec.rb +67 -0
  14. data/spec/basic_spec.rb +34 -0
  15. data/spec/fetch_version_spec.rb +43 -0
  16. data/spec/fixtures/cassettes/basic.yml +91 -0
  17. data/spec/fixtures/cassettes/basic_crud.yml +90 -0
  18. data/spec/fixtures/cassettes/basic_crud_delete_fail.yml +42 -0
  19. data/spec/fixtures/cassettes/basic_crud_delete_success.yml +42 -0
  20. data/spec/fixtures/cassettes/basic_crud_read_fail.yml +52 -0
  21. data/spec/fixtures/cassettes/basic_crud_read_success.yml +40 -0
  22. data/spec/fixtures/cassettes/basic_crud_update_success.yml +42 -0
  23. data/spec/fixtures/cassettes/basic_fetch_version_success.yml +130 -0
  24. data/spec/fixtures/cassettes/basic_page_by_name_spaces.yml +41 -0
  25. data/spec/fixtures/cassettes/basic_unique_authors_success.yml +130 -0
  26. data/spec/fixtures/cassettes/fetch.yml +46 -0
  27. data/spec/fixtures/cassettes/localwiki_client.yml +366 -0
  28. data/spec/fixtures/cassettes/slug.yml +46 -0
  29. data/spec/helper.rb +15 -3
  30. data/spec/localwiki_client_spec.rb +31 -25
  31. data/spec/slug_spec.rb +26 -0
  32. metadata +100 -61
  33. data/localwiki_client-0.0.4.gem +0 -0
  34. data/spec/data/page_fetch.json +0 -9
  35. data/spec/data/site_fetch.json +0 -10
  36. data/spec/data/site_list.json +0 -18
  37. data/spec/data/user_list.json +0 -49
  38. data/spec/page_spec.rb +0 -41
  39. data/spec/site_spec.rb +0 -48
  40. data/spec/user_spec.rb +0 -41
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 57676e3cee0822abe0c07ab173531579f1cccb21
4
+ data.tar.gz: c7b7b0370f9372cca7b2149e0374737a04fca115
5
+ SHA512:
6
+ metadata.gz: 9a420a1750d4d72858603feff2eeb7656e27649526b5138eeffb8d933fc685e5de239515df86f2cbaed82e46c1b760c0d28b18122d1816f27d34f1218fcc0a9c
7
+ data.tar.gz: 254a56caf270b691b689ea326f8d3000ebe211aedfece5b411646f9609997ccc06c9caefe0b03d1ecbe80c322cdac7a17b1f189c16288c918138fadc4d407bd9
data/.gitignore CHANGED
@@ -1,2 +1,4 @@
1
+ .yardoc
2
+ doc/
1
3
  .idea
2
4
  Gemfile.lock
data/.travis.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
+ - 2.0.0
4
5
  - jruby-19mode # JRuby in 1.9 mode
5
- - rbx-19mode
6
+ - rbx-19mode
data/History.txt CHANGED
@@ -1,3 +1,14 @@
1
+ === 0.2.0 / 2013-03-16
2
+
3
+ * Implemented CRUD methods
4
+ * Implemented #fetch_version
5
+ * Switched to VCR test library
6
+
7
+ === 0.1.0 / 2013-02-23
8
+
9
+ * Switched to Faraday
10
+ * Reorganized code
11
+
1
12
  === 0.0.4 / 2013-01-05
2
13
 
3
14
  * Fixed gem homepage
data/README.md CHANGED
@@ -20,14 +20,34 @@ Usage
20
20
  ## Example
21
21
 
22
22
  require 'localwiki_client'
23
+
24
+ # read access
23
25
  wiki = LocalwikiClient.new 'seattlewiki.net'
24
26
  wiki.site_name
25
27
  => SeattleWiki
26
28
  wiki.count('user')
27
29
  => 47
28
30
 
31
+ # write access
32
+ wiki = LocalwikiClient.new 'seattlewiki.net', 'myusername', 'myapikey'
33
+ page_json = {name: 'Current Events', content: 'Coming Soon!'}.to_json
34
+ response = wiki.create('page', page_json)
35
+ response.status
36
+ => 201
37
+
38
+ Features / Problems
39
+ -------------------
40
+
41
+ * #create, #read (#fetch), #update, #delete provide basic CRUD functionality
42
+ * #list fetches all (or with a limit) of a specific type of resource
43
+ * #fetch_version retrieves version history for a resource
44
+ * a few helper methods exist, more to come
45
+ * #count, #page_by_name, #unique_authors
46
+
47
+
29
48
  Compatibility
30
49
  -------------
50
+ * 2.0.0
31
51
  * 1.9.3
32
52
  * jruby-19mode
33
53
  * rbx-19mode
@@ -36,8 +56,21 @@ Contributing
36
56
  ------------
37
57
 
38
58
  To get your improvements included, please fork and submit a pull request.
59
+
39
60
  Bugs and/or failing tests are very appreciated.
40
61
 
62
+ Contributors
63
+ ------------
64
+ Seth Vincent
65
+
66
+ Brandon Faloona
67
+
68
+ Helen Canzler
69
+
70
+ Jerry Frost
71
+
72
+ Matt Adkins
73
+
41
74
  LICENSE
42
75
  -------
43
76
 
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'rake'
2
2
  require 'rspec/core'
3
3
  require 'rspec/core/rake_task'
4
+ require 'yard'
4
5
 
5
6
  desc 'Default: run unit test specs'
6
7
  task :default => :spec
@@ -19,7 +20,7 @@ task :test => [:spec]
19
20
 
20
21
  desc "Run integration tests"
21
22
  RSpec::Core::RakeTask.new(:integration) do |t|
22
- t.pattern = "spec/integration/*_spec.rb"
23
+ t.pattern = "integration/*_spec.rb"
23
24
  t.rspec_opts = ['-f d']
24
25
  end
25
26
 
@@ -31,4 +32,20 @@ end
31
32
  desc "Detailed Flog report! (*nix only)"
32
33
  task :flog_detail do
33
34
  system('find lib -name \*.rb | xargs flog -d')
34
- end
35
+ end
36
+
37
+ desc "Generate YARD documentation for files in ['lib/**/*.rb']"
38
+ YARD::Rake::YardocTask.new(:yard)
39
+
40
+ desc "Delete VCR fixtures and logs"
41
+ task :vcr_purge do
42
+ files = Dir[File.expand_path("../spec/fixtures/cassettes/*", __FILE__)].map do |file|
43
+ file if File.file?(file)
44
+ end
45
+ files.each { |file| File.delete(file) }
46
+ end
47
+
48
+ desc "Sanitize VCR fixtures (remove Apikey values)"
49
+ task :vcr_sanitize do
50
+ system(%{ruby -pi -e "gsub(/- ApiKey .+:.+/, '- ApiKey testuser:key')" spec/fixtures/cassettes/*.yml})
51
+ end
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
2
+ require 'localwiki_client'
3
+
4
+ def test_env_vars_set?
5
+ return true if ENV['localwiki_client_user'] && ENV['localwiki_client_apikey']
6
+ puts "\nTo add or modify tests in the spec folder you need to do two things:"
7
+ puts "\tContact sethvincent@gmail.com to request a username and apikey on the test server."
8
+ puts "\tSet these two environment variables:\n\t\texport localwiki_client_user=USERNAME\n\t\texport localwiki_client_apikey=APIKEY"
9
+ end
@@ -1,5 +1,4 @@
1
- $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
2
- require 'localwiki_client'
1
+ require File.expand_path("../helper", __FILE__)
3
2
 
4
3
  describe 'LIVE saltlakewiki.org' do
5
4
 
@@ -18,3 +17,4 @@ describe 'LIVE saltlakewiki.org' do
18
17
  end
19
18
 
20
19
  end
20
+
@@ -0,0 +1,47 @@
1
+ require File.expand_path("../helper", __FILE__)
2
+
3
+ if test_env_vars_set?
4
+
5
+ describe 'LIVE testwiki instance' do
6
+
7
+ before(:all) {
8
+ @wiki = Localwiki::Client.new 'ec2-54-234-151-52.compute-1.amazonaws.com',
9
+ ENV['localwiki_client_user'],
10
+ ENV['localwiki_client_apikey']
11
+ }
12
+
13
+ context "CRUD methods" do
14
+
15
+ before(:all) do
16
+ require 'securerandom'
17
+ @pagename = "TestPage#{SecureRandom.uuid}"
18
+ end
19
+
20
+ it "#create('page', json) response.status is 201" do
21
+ json = {name: @pagename, content: '<p>Created!</p>'}.to_json
22
+ response = @wiki.create('page', json)
23
+ response.status.should eq 201
24
+ end
25
+
26
+ it "#read('page', 'TestPage<uuid>') response.status is 200" do
27
+ response = @wiki.read('page', @pagename)
28
+ response["content"].should match(/Created!/)
29
+ end
30
+
31
+ it "#update('page', 'TestPage<uuid>', json) response.status is 204" do
32
+ json = {content: '<p>Updated!</p>'}.to_json
33
+ response = @wiki.update('page', @pagename, json)
34
+ response.status.should eq 204
35
+ @wiki.read('page', @pagename)["content"].should match(/Updated!/)
36
+ end
37
+
38
+ it "#delete('page', 'TestPage<uuid>') response.status is 204" do
39
+ response = @wiki.delete('page', @pagename)
40
+ response.status.should eq 204
41
+ @wiki.read('page', @pagename).status.should eq 404
42
+ end
43
+
44
+ end
45
+
46
+ end
47
+ end
@@ -1,5 +1,5 @@
1
1
  require 'faraday'
2
- require 'json/pure'
2
+ require 'json'
3
3
 
4
4
  module Localwiki
5
5
 
@@ -8,41 +8,54 @@ module Localwiki
8
8
  #
9
9
  class Client
10
10
 
11
- attr_accessor :hostname # hostname of the server we'd like to point at
12
- attr_reader :site_name # site resource - display name of wiki
13
- attr_reader :time_zone # site resource - time zone of server, e.g. 'America/Chicago'
14
- attr_reader :language_code # site resource - language code of the server, e.g. 'en-us'
11
+ # hostname of the server we'd like to point at
12
+ attr_accessor :hostname
13
+
14
+ # site resource - display name of wiki
15
+ attr_reader :site_name
16
+
17
+ # site resource - time zone of server, example: 'America/Chicago'
18
+ attr_reader :time_zone
19
+
20
+ # site resource - language code of the server, example: 'en-us'
21
+ attr_reader :language_code
15
22
 
16
23
  ##
17
24
  # Create a LocalWikiClient instance
18
25
  #
19
- # LocalwikiClient.new 'seattlewiki.net'
26
+ # @example LocalwikiClient.new 'seattlewiki.net'
20
27
  #
21
- def initialize hostname
28
+ def initialize hostname, user=nil, apikey=nil
22
29
  @hostname = hostname
30
+ @user = user
31
+ @apikey = apikey
23
32
  create_connection
24
33
  collect_site_details
25
34
  end
26
35
 
27
36
  ##
28
37
  # Request total count of given resource
29
- #
38
+ # @param resource are "site", "page", "user", "file", "map", "tag", "page_tag"
39
+ # @return [Fixnum] resource count
40
+ # @example wiki.count('user')
30
41
  def count(resource)
31
42
  list(resource.to_s,1)["meta"]["total_count"]
32
43
  end
33
44
 
34
45
  ##
35
46
  # fetch a page by name ("The Page Name" or "The_Page_Name" or "the page name")
36
- #
47
+ # @param name "The Page Name" or "The_Page_Name" or "the page name"
48
+ # @return [Hash] the parsed JSON object from the response body, otherwise the whole http response object
37
49
  def page_by_name(name)
38
50
  fetch(:page,"#{name.gsub!(/\s/, '_')}")
39
51
  end
40
52
 
41
53
  ##
42
54
  # list of a specific type of resource
43
- # resource are "site", "page", "user", "file", "map", "tag", "page_tag"
44
- # limit is an integer
45
- # params is a hash of query string params
55
+ # @param resource are "site", "page", "user", "file", "map", "tag", "page_tag"
56
+ # @param limit is an integer
57
+ # @param params is a hash of query string params
58
+ # @return [Hash] the parsed JSON object from the response body, otherwise the whole http response object
46
59
  def list(resource,limit=0,params={})
47
60
  uri = '/api/' + resource.to_s
48
61
  params.merge!({limit: limit.to_s})
@@ -51,42 +64,79 @@ module Localwiki
51
64
 
52
65
  ##
53
66
  # fetch a specific resource
54
- # resources are "site", "page", "user", "file", "map", "tag", "page_tag"
55
- # identifier is id, pagename, slug, etc.
56
- # params is a hash of query string params
67
+ # @param resource are "site", "page", "user", "file", "map", "tag", "page_tag"
68
+ # @param identifier is id, pagename, slug, etc.
69
+ # @param params is a hash of query string params
70
+ # @example wiki.update('page', '<page tag>')
71
+ # @return [Hash] the parsed JSON object from the response body, otherwise the whole http response object
57
72
  def fetch(resource,identifier,params={})
58
- uri = '/api/' + resource.to_s + '/' + identifier
73
+ uri = '/api/' + resource.to_s + '/' + slugify(identifier)
74
+ http_get(uri,params)
75
+ end
76
+ alias_method :read, :fetch
77
+
78
+ ##
79
+ # fetch version information for a resource
80
+ # @param resource are "site", "page", "user", "file", "map", "tag", "page_tag"
81
+ # @param identifier is id, pagename, slug, etc.
82
+ # @param params is a hash of query string params
83
+ # @example wiki.fetch_version('page', 'First Page')
84
+ # @return [Hash] the parsed JSON object from the response body, otherwise the whole http response object
85
+ def fetch_version(resource,identifier,params={})
86
+ uri = '/api/' + resource.to_s + '_version?name=' + identifier
59
87
  http_get(uri,params)
60
88
  end
61
89
 
90
+ ##
91
+ # number of unique authors that have modified a resource
92
+ # @param resource are "site", "page", "user", "file", "map", "tag", "page_tag"
93
+ # @param identifier is id, pagename, slug, etc.
94
+ # @param params is a hash of query string params
95
+ # @example wiki.unique_authors('page', 'First Page')
96
+ # @return [Fixnum]
97
+ def unique_authors(resource,identifier,params={})
98
+ json = fetch_version(resource,identifier,params)
99
+ json['objects'].map {|entry| entry['history_user']}.uniq.length
100
+ end
101
+
62
102
  ##
63
103
  # create a specific resource
64
- # resources are "site", "page", "user", "file", "map", "tag", "page_tag"
65
- def create(resource,identifier,json)
66
- raise 'Not Yet Implemented'
104
+ # @param resource are "site", "page", "user", "file", "map", "tag", "page_tag"
105
+ # @param json is a json object
106
+ # @example wiki.create('page', <json object containing the page tag>)
107
+ # @return [HTTPResponse] the http response object
108
+ def create(resource, json)
109
+ uri = '/api/' + resource.to_s + '/'
110
+ http_post(uri, json)
67
111
  end
68
112
 
69
113
  ##
70
114
  # update a specific resource
71
- # resources are "site", "page", "user", "file", "map", "tag", "page_tag"
72
- # identifier is id, pagename, slug, etc.
115
+ # @param resource are "site", "page", "user", "file", "map", "tag", "page_tag"
116
+ # @param identifier is id, pagename, slug, etc.
117
+ # @param json is a json object
118
+ # @example wiki.update('page', '<page tag>', <json object>)
119
+ # @return [HTTPResponse] the http response object
73
120
  def update(resource,identifier,json)
74
- raise 'Not Yet Implemented'
121
+ uri = '/api/' + resource.to_s + '/' + slugify(identifier)
122
+ http_put(uri, json)
75
123
  end
76
124
 
77
125
  ##
78
126
  # delete a specific resource
79
- # resources are "site", "page", "user", "file", "map", "tag", "page_tag"
80
- # identifier is id, pagename, slug, etc.
127
+ # @param resource are "site", "page", "user", "file", "map", "tag", "page_tag"
128
+ # @param identifier is id, pagename, slug, etc.
129
+ # @example wiki.delete('page', '<page tag>')
130
+ # @return [HTTPResponse] the http response object
81
131
  def delete(resource,identifier)
82
- raise 'Not Yet Implemented'
132
+ uri = '/api/' + resource.to_s + '/' + slugify(identifier)
133
+ http_delete(uri)
83
134
  end
84
135
 
85
136
  private
86
137
 
87
138
  ##
88
139
  # Get site resource and set instance variables
89
- #
90
140
  def collect_site_details
91
141
  site = fetch('site','1')
92
142
  @site_name = site['name']
@@ -96,32 +146,75 @@ module Localwiki
96
146
 
97
147
  ##
98
148
  # create Faraday::Connection instance and set @site
99
- #
100
149
  def create_connection
101
150
  @site = Faraday.new :url => @hostname
102
151
  end
103
-
152
+
104
153
  ##
105
154
  # http get request
106
- # url is formatted as http://[@hostname]/[thing(s)-you-want]?[params]
107
- #
155
+ # @param uri /api/<resource>/<resource identifier>
156
+ # @param params is a hash of query string params
157
+ # @return [Hash] the parsed JSON object, otherwise the http response object
108
158
  def http_get(uri,params={})
109
159
  params.merge!({format: 'json'})
110
160
  full_url = 'http://' + @hostname + uri.to_s
111
161
  response = @site.get full_url, params
112
- JSON.parse(response.body)
162
+ JSON.parse(response.body) rescue response
113
163
  end
114
-
115
- def http_post()
116
- raise 'Not Yet Implemented'
164
+
165
+ ##
166
+ # http post request
167
+ # @param uri /api/<resource>/
168
+ # @param json is a json object
169
+ # @return [HTTPResponse] the http response object
170
+ def http_post(uri, json)
171
+ full_url = 'http://' + @hostname + uri.to_s
172
+
173
+ @site.post do |req|
174
+ req.url full_url
175
+ req.headers['Content-Type'] = 'application/json'
176
+ req.headers['Authorization'] = "ApiKey #{@user}:#{@apikey}"
177
+ req.body = json
178
+ end
179
+ end
180
+
181
+ ##
182
+ # http put request
183
+ # @param uri /api/<resource>/<resource identifier>
184
+ # @param json is a json object
185
+ # @return [HTTPResponse] the http response object
186
+ def http_put(uri, json)
187
+ full_url = 'http://' + @hostname + uri.to_s
188
+
189
+ @site.put do |req|
190
+ req.url full_url
191
+ req.headers['Content-Type'] = 'application/json'
192
+ req.headers['Authorization'] = "ApiKey #{@user}:#{@apikey}"
193
+ req.body = json
194
+ end
117
195
  end
118
196
 
119
- def http_put()
120
- raise 'Not Yet Implemented'
197
+ ##
198
+ # http delete request
199
+ # @param uri /api/<resource>/<resource identifier>
200
+ # @return [HTTPResponse] the http response object
201
+ def http_delete(uri)
202
+ full_url = 'http://' + @hostname + uri.to_s
203
+
204
+ @site.delete do |req|
205
+ req.url full_url
206
+ req.headers['Content-Type'] = 'application/json'
207
+ req.headers['Authorization'] = "ApiKey #{@user}:#{@apikey}"
208
+ end
121
209
  end
122
210
 
123
- def http_delete()
124
- raise 'Not Yet Implemented'
211
+ ##
212
+ # create human readable identifier that is used to create clean urls
213
+ # @param string
214
+ # @example slugify('My Page') == 'My_Page'
215
+ # @return [String]
216
+ def slugify(string)
217
+ string.to_s.strip.gsub(' ', "_")
125
218
  end
126
219
 
127
220
  end
@@ -1,5 +1,5 @@
1
1
  module Localwiki
2
2
 
3
- VERSION = '0.1.0'
3
+ VERSION = '0.2.0'
4
4
 
5
5
  end
@@ -14,11 +14,15 @@ Gem::Specification.new do |s|
14
14
  s.required_ruby_version = '>= 1.9.2'
15
15
 
16
16
  s.add_dependency('faraday')
17
- s.add_dependency('json')
17
+ s.add_dependency('json_pure')
18
18
 
19
19
  s.add_development_dependency('rake')
20
20
  s.add_development_dependency('rspec', '>= 2.9.0')
21
- s.add_development_dependency('rspec-mocks', '>= 2.9.0')
21
+ s.add_development_dependency('vcr')
22
+ s.add_development_dependency('webmock', '>= 1.8.0', '< 1.10')
23
+ s.add_development_dependency('yard')
24
+ s.add_development_dependency('kramdown')
25
+
22
26
  s.add_development_dependency('rb-fsevent')
23
27
 
24
28
  unless ENV['TRAVIS'] == 'true'
@@ -0,0 +1,67 @@
1
+ require File.expand_path("../helper", __FILE__)
2
+
3
+ describe 'LocalwikiClient' do
4
+
5
+ before(:all) do
6
+ VCR.insert_cassette 'basic_crud', :record => :new_episodes
7
+ @wiki = Localwiki::Client.new 'ec2-54-234-151-52.compute-1.amazonaws.com',
8
+ ENV['localwiki_client_user'],
9
+ ENV['localwiki_client_apikey']
10
+ require 'securerandom'
11
+ @pagename = "TestPage#{SecureRandom.uuid}"
12
+ @path_matcher = lambda do |request_1, request_2|
13
+ URI(request_1.uri).path.match(/TestPage/) && URI(request_2.uri).path.match(/TestPage/)
14
+ end
15
+ end
16
+
17
+ after(:all) do
18
+ VCR.eject_cassette
19
+ end
20
+
21
+ context "CRUD method" do
22
+
23
+ it "#create('page', json) response.status is 201" do
24
+ response = @wiki.create('page', {name: @pagename, content: '<p>Created!</p>'}.to_json)
25
+ response.status.should eq 201
26
+ end
27
+
28
+ it "#read('page', pagename) response.status should match(/Created!/)" do
29
+ VCR.use_cassette 'basic_crud_read_success', :match_requests_on => [:method, @path_matcher] do
30
+ response = @wiki.read('page', @pagename)
31
+ response["content"].should match(/Created!/)
32
+ end
33
+ end
34
+
35
+ it "#update('page', pagename, json) response.status is 204" do
36
+ VCR.use_cassette 'basic_crud_update_success', :match_requests_on => [:method, @path_matcher] do
37
+ response = @wiki.update('page', @pagename, {content: '<foo>'}.to_json)
38
+ response.status.should eq 204
39
+ end
40
+ end
41
+
42
+ it "#delete('page', pagename) response.status is 204" do
43
+ VCR.use_cassette 'basic_crud_delete_success', :match_requests_on => [:method, @path_matcher] do
44
+ response = @wiki.delete('page', @pagename)
45
+ response.status.should eq 204
46
+ end
47
+ end
48
+
49
+ context "when page does not exist" do
50
+
51
+ it "#read returns response.status of 404" do
52
+ VCR.use_cassette 'basic_crud_read_fail', :match_requests_on => [:method, @path_matcher] do
53
+ response = @wiki.read('page', @pagename)
54
+ response.status.should eq 404
55
+ end
56
+ end
57
+
58
+ it "#delete returns response.status of 404" do
59
+ VCR.use_cassette 'basic_crud_delete_fail', :match_requests_on => [:method, @path_matcher] do
60
+ response = @wiki.delete('page', @pagename)
61
+ response.status.should eq 404
62
+ end
63
+ end
64
+
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,34 @@
1
+ require File.expand_path("../helper", __FILE__)
2
+
3
+ describe 'LocalwikiClient' do
4
+
5
+ context "#create and #page_by_name" do
6
+
7
+ before(:all) do
8
+ VCR.insert_cassette 'basic', :record => :new_episodes
9
+ @wiki = Localwiki::Client.new 'ec2-54-234-151-52.compute-1.amazonaws.com',
10
+ ENV['localwiki_client_user'],
11
+ ENV['localwiki_client_apikey']
12
+ end
13
+
14
+ after(:all) do
15
+ VCR.eject_cassette
16
+ end
17
+
18
+ it "handle spaces" do
19
+ require 'securerandom'
20
+ base_name = "Test Page"
21
+ page_name = "#{base_name}#{SecureRandom.uuid}"
22
+ path_matcher = lambda do |request_1, request_2|
23
+ URI(request_1.uri).path.match(/Test/) && URI(request_2.uri).path.match(/Test/)
24
+ end
25
+ @wiki.create('page', {name: page_name, content: '<p>Created page with spaces!</p>'}.to_json)
26
+ VCR.use_cassette 'basic_page_by_name_spaces', :match_requests_on => [:method, path_matcher] do
27
+ response = @wiki.page_by_name(page_name)
28
+ response["content"].should match(/Created page with spaces!/)
29
+ end
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,43 @@
1
+ require File.expand_path("../helper", __FILE__)
2
+
3
+ describe 'LocalwikiClient' do
4
+
5
+ before(:all) do
6
+ VCR.insert_cassette 'fetch', :record => :new_episodes
7
+ @wiki = Localwiki::Client.new 'ec2-54-234-151-52.compute-1.amazonaws.com',
8
+ ENV['localwiki_client_user'],
9
+ ENV['localwiki_client_apikey']
10
+ require 'securerandom'
11
+ end
12
+
13
+ after(:all) do
14
+ VCR.eject_cassette
15
+ end
16
+
17
+ context "#fetch_version" do
18
+
19
+ it "returns json that includes all edits" do
20
+ pagename = "TestPage#{SecureRandom.uuid}"
21
+ VCR.use_cassette 'basic_fetch_version_success', :match_requests_on => [:method] do
22
+ @wiki.create('page', {name: pagename, content: '<p>Created!</p>'}.to_json)
23
+ @wiki.update('page', pagename, {content: '<p>foo</p>'}.to_json)
24
+ response = @wiki.fetch_version('page', pagename)
25
+ response['meta']['total_count'].should eq 2
26
+ end
27
+ end
28
+ end
29
+
30
+ context "#unique_authors" do
31
+
32
+ it "returns the number of authors" do
33
+ pagename = "TestPage#{SecureRandom.uuid}"
34
+ VCR.use_cassette 'basic_unique_authors_success', :match_requests_on => [:method] do
35
+ @wiki.create('page', {name: pagename, content: '<p>Created!</p>'}.to_json)
36
+ @wiki.update('page', pagename, {content: '<p>foo</p>'}.to_json)
37
+ @wiki.unique_authors('page', pagename).should eq 1
38
+ end
39
+ end
40
+
41
+ end
42
+ end
43
+