localwiki_client 0.1.0 → 0.2.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 (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
+