biblesearch-api 1.0.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,85 @@
1
+ require 'spec_helper'
2
+ require 'biblesearch-api'
3
+
4
+ describe BibleSearch do
5
+ before do
6
+ VCR.insert_cassette %{endpoint-#{File.basename(__FILE__, '.rb')}-#{__name__}}
7
+ @biblesearch = BibleSearch.new('DUMMY_API_KEY')
8
+ end
9
+
10
+ after do
11
+ VCR.eject_cassette
12
+ end
13
+
14
+ describe %{#passages} do
15
+ describe %{when returning no passages} do
16
+ before do
17
+ @passages = @biblesearch.passages('Batman 1:1-16', :version => 'KJV')
18
+ end
19
+ it %{has a collection} do
20
+ @passages.collection.must_be_instance_of Array
21
+ end
22
+
23
+ it %{should contain no passages} do
24
+ @passages.collection.length.must_equal 0
25
+ end
26
+ end
27
+
28
+ describe %{when returning a single passage} do
29
+ before do
30
+ @passages = @biblesearch.passages('John 3:16', :version => 'KJV')
31
+ end
32
+ it %{has a collection} do
33
+ @passages.collection.must_be_instance_of Array
34
+ end
35
+
36
+ it %{should contain a single passage} do
37
+ @passages.collection.size.must_equal 1
38
+ @passages.collection.first.tap do |passage|
39
+ passage.must_respond_to :display
40
+ passage.must_respond_to :version
41
+ passage.must_respond_to :version_abbreviation
42
+ passage.must_respond_to :path
43
+ passage.must_respond_to :start_verse_id
44
+ passage.must_respond_to :end_verse_id
45
+ passage.must_respond_to :text
46
+ passage.must_respond_to :copyright
47
+ end
48
+ end
49
+ end
50
+
51
+ describe %{when returning multiple passages} do
52
+ before do
53
+ @passages = @biblesearch.passages('')
54
+ end
55
+ it %{has a collection} do
56
+ @passages.collection.must_be_instance_of Array
57
+ end
58
+ it %{should contain passages} do
59
+ @passages.collection.each do |passage|
60
+ passage.must_respond_to :display
61
+ passage.must_respond_to :version
62
+ passage.must_respond_to :version_abbreviation
63
+ passage.must_respond_to :path
64
+ passage.must_respond_to :start_verse_id
65
+ passage.must_respond_to :end_verse_id
66
+ passage.must_respond_to :text
67
+ passage.must_respond_to :copyright
68
+ end
69
+ end
70
+ end
71
+
72
+ describe %{when passing a list of bible version ids} do
73
+ before do
74
+ @versions = ['KJV', 'CEV']
75
+ @passages = @biblesearch.passages('John 3:16', :versions => @versions)
76
+ end
77
+
78
+ it %{should provide the passage for each version specified} do
79
+ @passages.collection.each do |passage|
80
+ @versions.must_include passage.version
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+ require 'biblesearch-api'
3
+
4
+ describe BibleSearch do
5
+ before do
6
+ VCR.insert_cassette %{endpoint-#{File.basename(__FILE__, '.rb')}-#{__name__}}
7
+ @biblesearch = BibleSearch.new('DUMMY_API_KEY')
8
+ end
9
+
10
+ after do
11
+ VCR.eject_cassette
12
+ end
13
+
14
+ describe %{#search} do
15
+ it %{has a Hashie::Mash value} do
16
+ @biblesearch.search('john 3:16').value.must_be_instance_of Hashie::Mash
17
+ @biblesearch.search('Mahershalalhashbaz').value.must_be_instance_of Hashie::Mash
18
+ end
19
+
20
+ describe %{when doing a passage search} do
21
+ it %{returns passages} do
22
+ result = @biblesearch.search('john 3:16').value
23
+ result.type.must_equal 'passages'
24
+ result.must_respond_to(:passages)
25
+ end
26
+ end
27
+
28
+ describe %{when doing a keyword search} do
29
+ it %{returns verses} do
30
+ result = @biblesearch.search('Mahershalalhashbaz').value
31
+ result.type.must_equal 'verses'
32
+ result.must_respond_to(:verses)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,152 @@
1
+ require 'spec_helper'
2
+ require 'biblesearch-api'
3
+
4
+ describe BibleSearch do
5
+ before do
6
+ VCR.insert_cassette %{endpoint-#{File.basename(__FILE__, '.rb')}-#{__name__}}
7
+ @biblesearch = BibleSearch.new('DUMMY_API_KEY')
8
+ end
9
+
10
+ after do
11
+ VCR.eject_cassette
12
+ end
13
+
14
+ describe %{#verses} do
15
+ describe %{when returning no verses} do
16
+ before do
17
+ @verses = @biblesearch.verses('KJV:Batman.1', '1', '16')
18
+ end
19
+
20
+ it %{has a collection} do
21
+ @verses.collection.must_be_instance_of Array
22
+ end
23
+
24
+ it %{should contain no verses} do
25
+ @verses.collection.size.must_equal 0
26
+ end
27
+ end
28
+
29
+ describe %{when returning one verse} do
30
+ before do
31
+ @verses = @biblesearch.verses('KJV:John.3', '16', '16')
32
+ end
33
+
34
+ it %{has a collection} do
35
+ @verses.collection.must_be_instance_of Array
36
+ end
37
+
38
+ it %{should contain one verse} do
39
+ @verses.collection.length.must_equal 1
40
+ @verses.collection.each do |verse|
41
+ verse.must_respond_to(:auditid)
42
+ verse.must_respond_to(:copyright)
43
+ verse.must_respond_to(:id)
44
+ verse.must_respond_to(:label)
45
+ verse.must_respond_to(:lastverse)
46
+ verse.must_respond_to(:next)
47
+ verse.must_respond_to(:osis_end)
48
+ verse.must_respond_to(:parent)
49
+ verse.must_respond_to(:previous)
50
+ verse.must_respond_to(:reference)
51
+ verse.must_respond_to(:text)
52
+ verse.must_respond_to(:verse)
53
+ end
54
+ end
55
+ end
56
+
57
+ describe %{when returning multiple verses} do
58
+ before do
59
+ @start_verse = 16
60
+ @end_verse = 17
61
+ @verses = @biblesearch.verses('KJV:John.3', @start_verse, @end_verse)
62
+ end
63
+
64
+ it %{has a collection} do
65
+ @verses.collection.must_be_instance_of Array
66
+ end
67
+
68
+ it %{should contain the proper number of verses} do
69
+ @verses.collection.length.must_equal(1 + @end_verse - @start_verse)
70
+ @verses.collection.each do |verse|
71
+ verse.must_respond_to(:auditid)
72
+ verse.must_respond_to(:copyright)
73
+ verse.must_respond_to(:id)
74
+ verse.must_respond_to(:label)
75
+ verse.must_respond_to(:lastverse)
76
+ verse.must_respond_to(:next)
77
+ verse.must_respond_to(:osis_end)
78
+ verse.must_respond_to(:parent)
79
+ verse.must_respond_to(:previous)
80
+ verse.must_respond_to(:reference)
81
+ verse.must_respond_to(:text)
82
+ verse.must_respond_to(:verse)
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+ describe %{#verse} do
89
+ describe %{given verse signature} do
90
+ describe %{as a string} do
91
+ it %{raises an argument error for bad input} do
92
+ bad_verse_string = lambda { @biblesearch.verse('SupDawg') }
93
+ bad_verse_string.must_raise ArgumentError
94
+ (bad_verse_string.call rescue $!).message.must_equal 'Verse signature must be in the form "VERSION_ID:BOOK_ID.CHAPTER_NUMBER.VERSE_NUMBER"'
95
+ end
96
+ end
97
+
98
+ describe %{as a hash} do
99
+ before do
100
+ @options = {
101
+ :version_id => 'GNT',
102
+ :book_id => 'Acts',
103
+ :chapter => '8',
104
+ :verse => '34'
105
+ }
106
+ end
107
+ describe %{if any pieces are missing} do
108
+ it %{raises an argument error} do
109
+ @options.keys.each do |key|
110
+ options = @options
111
+ options.delete(key)
112
+ bad_verse_hash = lambda { @biblesearch.verse(options) }
113
+ bad_verse_hash.must_raise ArgumentError
114
+ (bad_verse_hash.call rescue $!).message.must_equal 'Verse signature hash must include :version_id, :book_id, :chapter, and :verse'
115
+ end
116
+ end
117
+ end
118
+
119
+ describe %{with a complete hash} do
120
+ it %{returns the same thing as the equivalent string sig} do
121
+ @biblesearch.verse(@options).value.must_equal @biblesearch.verse('GNT:Acts.8.34').value
122
+ end
123
+ end
124
+ end
125
+ end
126
+
127
+ describe %{when requesting a valid verse} do
128
+ it %{has a verse value} do
129
+ result = @biblesearch.verse('GNT:Acts.8.34').value
130
+ result.must_be_instance_of Hashie::Mash
131
+ result.must_respond_to(:auditid)
132
+ result.must_respond_to(:copyright)
133
+ result.must_respond_to(:id)
134
+ result.must_respond_to(:label)
135
+ result.must_respond_to(:lastverse)
136
+ result.must_respond_to(:next)
137
+ result.must_respond_to(:osis_end)
138
+ result.must_respond_to(:parent)
139
+ result.must_respond_to(:previous)
140
+ result.must_respond_to(:reference)
141
+ result.must_respond_to(:text)
142
+ result.must_respond_to(:verse)
143
+ end
144
+ end
145
+
146
+ describe %{when requesting an invalid verse} do
147
+ it %{has a nil value} do
148
+ @biblesearch.verse('KJV:Batman.1.1').value.must_be_nil
149
+ end
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,91 @@
1
+ require 'spec_helper'
2
+ require 'biblesearch-api'
3
+
4
+ describe BibleSearch do
5
+ before do
6
+ VCR.insert_cassette %{endpoint-#{File.basename(__FILE__, '.rb')}-#{__name__}}
7
+ @biblesearch = BibleSearch.new('DUMMY_API_KEY')
8
+ end
9
+
10
+ after do
11
+ VCR.eject_cassette
12
+ end
13
+
14
+ describe %{#versions} do
15
+ before do
16
+ @versions = @biblesearch.versions
17
+ end
18
+
19
+ it %{has a collection} do
20
+ @versions.collection.must_be_instance_of Array
21
+ end
22
+
23
+ it %{should contain versions} do
24
+ @versions.collection.length.must_be :>, 0
25
+ @versions.collection.each do |version|
26
+ version.must_respond_to(:id)
27
+ version.must_respond_to(:name)
28
+ version.must_respond_to(:lang)
29
+ version.must_respond_to(:lang_code)
30
+ version.must_respond_to(:lang_name_eng)
31
+ version.must_respond_to(:abbreviation)
32
+ version.must_respond_to(:copyright)
33
+ version.must_respond_to(:contact_url)
34
+ version.must_respond_to(:info)
35
+ end
36
+ end
37
+
38
+ describe %{when I provide a language} do
39
+ describe %{that has representative versions on the remote end} do
40
+ before do
41
+ @spanish_versions = @biblesearch.versions(:language => 'spa')
42
+ end
43
+ it 'should return only those representative versions' do
44
+ @spanish_versions.collection.each do |version|
45
+ version.lang.must_equal 'spa'
46
+ end
47
+ end
48
+ end
49
+
50
+ describe %{that has no representative versions on the remote end} do
51
+ before do
52
+ @klingon_versions = @biblesearch.versions(:language => 'klingon')
53
+ end
54
+ it %{has a collection} do
55
+ @klingon_versions.collection.must_be_instance_of Array
56
+ end
57
+ it %{should be empty} do
58
+ @klingon_versions.collection.length.must_equal 0
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ describe %{#version} do
65
+ it %{requires a version id} do
66
+ lambda { @biblesearch.version }.must_raise ArgumentError
67
+ end
68
+
69
+ describe %{with a valid version id} do
70
+ it %{has a version value} do
71
+ result = @biblesearch.version('GNT').value
72
+ result.must_be_instance_of Hashie::Mash
73
+ result.must_respond_to(:id)
74
+ result.must_respond_to(:name)
75
+ result.must_respond_to(:lang)
76
+ result.must_respond_to(:lang_code)
77
+ result.must_respond_to(:lang_name_eng)
78
+ result.must_respond_to(:abbreviation)
79
+ result.must_respond_to(:copyright)
80
+ result.must_respond_to(:contact_url)
81
+ result.must_respond_to(:info)
82
+ end
83
+ end
84
+
85
+ describe %{with an invalid version id} do
86
+ it %{has a nil value} do
87
+ @biblesearch.version('JIMBOB').value.must_be_nil
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1 @@
1
+ puts %{#{RUBY_VERSION}: #{__FILE__}}
@@ -0,0 +1,137 @@
1
+ require 'spec_helper'
2
+ require 'biblesearch-api'
3
+
4
+ describe BibleSearch do
5
+ before do
6
+ VCR.insert_cassette %{#{File.basename(__FILE__, '.rb')}-#{__name__}}
7
+ @biblesearch = BibleSearch.new('DUMMY_API_KEY')
8
+ end
9
+
10
+ after do
11
+ VCR.eject_cassette
12
+ end
13
+
14
+ describe %{.new} do
15
+ it %{requires an API key as its first argument} do
16
+ lambda {BibleSearch.new}.must_raise ArgumentError
17
+ rigamaroe = BibleSearch.new('rigamaroe')
18
+ rigamaroe.api_key.must_equal 'rigamaroe'
19
+ end
20
+ it %{accepts a base_uri as its second argument} do
21
+ whatever = BibleSearch.new('whatever', 'lookatmybible.com')
22
+ whatever.wont_be_nil
23
+ whatever.class.base_uri.must_equal 'http://lookatmybible.com'
24
+ end
25
+ end
26
+
27
+ describe %{#get_mash} do
28
+ before do
29
+ @api_result = @biblesearch.instance_eval('get_mash("/versions.js")')
30
+ end
31
+
32
+ it %{has metadata} do
33
+ @api_result.must_respond_to(:meta)
34
+ @api_result.meta.must_be_instance_of Hashie::Mash
35
+ end
36
+
37
+ it %{has a http response code in the metadata} do
38
+ @api_result.meta.http_code.wont_be_nil
39
+ @api_result.meta.http_code.must_be_kind_of Integer
40
+ end
41
+
42
+ it %{has a response} do
43
+ @api_result.must_respond_to(:response)
44
+ end
45
+
46
+ describe %{in the sunny day scenario} do
47
+ it %{has fums in the metadata} do
48
+ @api_result.meta.must_respond_to(:fums)
49
+ @api_result.meta.fums.wont_be_nil
50
+ end
51
+
52
+ it %{has a real response} do
53
+ @api_result.response.wont_be_nil
54
+ @api_result.must_be_instance_of Hashie::Mash
55
+ end
56
+ end
57
+
58
+ describe %{when something goes wrong} do
59
+ before do
60
+ @api_result = @biblesearch.instance_eval('get_mash("/my-pokemons.js")')
61
+ end
62
+
63
+ it %{has a http response code other than 200} do
64
+ @api_result.meta.http_code.wont_equal 200
65
+ end
66
+
67
+ it %{has a message in the metadata} do
68
+ @api_result.meta.message.wont_be_nil
69
+ end
70
+
71
+ it %{has a nil response} do
72
+ @api_result.response.must_be_nil
73
+ end
74
+ end
75
+ end
76
+
77
+ describe %{#pluralize_result} do
78
+ describe %{returns an array} do
79
+ it %{containing the contents of a passed array} do
80
+ result = [1, 2, 3, 4]
81
+ @biblesearch.instance_eval(%{pluralize_result([#{result.join(', ')}])}).must_equal result
82
+ end
83
+
84
+ it %{containing the singular value passed} do
85
+ result = 1
86
+ @biblesearch.instance_eval(%{pluralize_result(#{result})}).must_equal [result]
87
+ end
88
+ end
89
+ end
90
+
91
+ describe %{#fumsify} do
92
+ describe %{given a good API Result} do
93
+ before do
94
+ @api_result = @biblesearch.send(:get_mash, '/versions.js')
95
+ end
96
+
97
+ describe %{and a plural value} do
98
+ it %{returns a mash with a collection and a fums} do
99
+ fumsified = @biblesearch.send(:fumsify, @api_result, [])
100
+ fumsified.must_be_instance_of Hashie::Mash
101
+ fumsified.fums.wont_be_nil
102
+ fumsified.collection.must_be_kind_of(Array)
103
+ end
104
+ end
105
+
106
+ describe %{and a singular value} do
107
+ it %{returns a mash with a value and a fums} do
108
+ [1, 'a', Hashie::Mash.new({:foo => 'bar'})].each do |value|
109
+ fumsified = @biblesearch.send(:fumsify, @api_result, value)
110
+ fumsified.must_be_instance_of Hashie::Mash
111
+ fumsified.fums.wont_be_nil
112
+ fumsified.value.must_equal value
113
+ end
114
+ end
115
+ end
116
+ end
117
+
118
+ describe %{given a negative API Result} do
119
+ before do
120
+ @api_result = @biblesearch.send(:get_mash, '/my-pokemons.js')
121
+ end
122
+
123
+ it %{has a nil fums (same singular and plural behavior as good)} do
124
+ collection = [1, 2, 3, 4]
125
+ value = 1
126
+ fumsified_plural = @biblesearch.send(:fumsify, @api_result, collection)
127
+ fumsified_singular = @biblesearch.send(:fumsify, @api_result, value)
128
+
129
+ fumsified_plural.fums.must_be_nil
130
+ fumsified_plural.collection.must_equal collection
131
+
132
+ fumsified_singular.fums.must_be_nil
133
+ fumsified_singular.value.must_equal value
134
+ end
135
+ end
136
+ end
137
+ end