djatoka 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,97 @@
1
+ require 'helper'
2
+
3
+ class TestDjatokaCommon < Test::Unit::TestCase
4
+
5
+ context 'A Djatoka Resolver' do
6
+ with_a_resolver do
7
+ setup do
8
+ @region = Djatoka::Region.new(@resolver, @identifier)
9
+ end
10
+ should 'create a query for a 75x75 version of the image' do
11
+ assert_equal '0,874,106,106', @region.smallbox.query.region
12
+ assert_equal '75', @region.smallbox.query.scale
13
+ end
14
+
15
+ should 'return a String for a smallbox URL' do
16
+ assert @region.smallbox_url.is_a? String
17
+ assert @region.smallbox_url.include? 'http://african.lanl.gov'
18
+ assert @region.smallbox_url.include? 'svc.region=0%2C874%2C106%2C106'
19
+ end
20
+
21
+ should 'return a uri for a small square version of the image' do
22
+ assert_equal '0,874,106,106', @region.smallbox.uri.query_values['svc.region']
23
+ end
24
+
25
+ should 'create a query for a square version of the image' do
26
+ assert_equal '0,874,3372,3372', @region.square.query.region
27
+ assert_equal nil, @region.square.query.scale
28
+ end
29
+ should 'create a query for a left justified version of the image' do
30
+ assert_equal '0,0,3372,3372', @region.top_left_square.query.region
31
+ end
32
+ should 'create a query for a right justified version of the image' do
33
+ assert_equal '0,1748,3372,3372', @region.bottom_right_square.query.region
34
+ end
35
+ should 'return a uri for a square version of the image' do
36
+ assert_equal '0,874,3372,3372', @region.square_uri.query_values['svc.region']
37
+ assert_equal nil, @region.square_uri.query_values['svc.scale']
38
+ end
39
+ should 'return a url for a square version of the image' do
40
+ assert @region.square_url.is_a? String
41
+ assert @region.square_url.include? 'http://african.lanl.gov'
42
+ assert @region.square_url.include? 'svc.region=0%2C874%2C3372%2C3372'
43
+ end
44
+ should 'create a query for a square version of the image at a good level' do
45
+ @region.scale('555')
46
+ assert_equal '0,874,843,843', @region.square.query.region
47
+ assert_equal '555', @region.square.query.scale
48
+ assert_equal '4', @region.square.query.level
49
+ end
50
+
51
+ should 'pick the best level' do
52
+ metadata = Djatoka::Metadata.new(@resolver, @identifier).perform
53
+ @region.scale('200')
54
+ best_level = @region.pick_best_level(metadata)
55
+ assert_equal 2, best_level
56
+ end
57
+
58
+ context 'an image which is higher than it is wider' do
59
+ setup do
60
+ @region = Djatoka::Region.new(@resolver, 'info:lanl-repo/ds/b820f537-26a1-4af8-b86a-e7a4cac6187a')
61
+ end
62
+ should 'crop appropriately into a centered square' do
63
+ assert_equal '513,0,4093,4093', @region.square.query.region
64
+ end
65
+ should 'crop appropriately into a top justified square' do
66
+ assert_equal '0,0,4093,4093', @region.top_left_square.query.region
67
+ end
68
+ should 'crop appropriately into bottom justified square' do
69
+ assert_equal '1027,0,4093,4093', @region.bottom_right_square.query.region
70
+ end
71
+ end
72
+
73
+ context 'an image where the dwt_levels do not match the djatoka levels' do
74
+ setup do
75
+ @region2 = Djatoka::Region.new(@resolver, 'ua023_015-006-bx0003-014-075')
76
+ end
77
+ should 'be able to scale properly' do
78
+ @region2.scale('300').square
79
+ assert @region2.url
80
+ end
81
+ end
82
+
83
+ context 'an request for a non-existent image' do
84
+ setup do
85
+ @no_region = Djatoka::Region.new(@resolver, 'asdf')
86
+ end
87
+ should 'not raise when no metadata and trying to create a square at scale' do
88
+ @no_region.scale(300).square
89
+ assert @no_region.url
90
+ end
91
+ end
92
+
93
+ end
94
+
95
+ end
96
+ end
97
+
@@ -0,0 +1,29 @@
1
+ require 'helper'
2
+
3
+ class TestDjatoka < Test::Unit::TestCase
4
+ should 'allow Djatoka.use_curb to be set' do
5
+ Djatoka.use_curb=true
6
+ assert Djatoka.use_curb?
7
+ set_testing_curb
8
+ end
9
+
10
+ with_a_resolver do
11
+ should 'be able to set Djatoka.resolver to a Djatoka::Resolver' do
12
+ Djatoka.resolver = @resolver
13
+ assert Djatoka.resolver.is_a? Djatoka::Resolver
14
+ end
15
+
16
+ should 'be able to set Djatoka.resolver to a URL and get a Djatoka::Resolver' do
17
+ Djatoka.resolver = 'http://african.lanl.gov/adore-djatoka/resolver'
18
+ assert Djatoka.resolver.is_a? Djatoka::Resolver
19
+ assert_equal 'http://african.lanl.gov/adore-djatoka/resolver', Djatoka.resolver.url
20
+ end
21
+
22
+ should_eventually 'not be able to set a Djatoka.resolver to a bad string' do
23
+ Djatoka.resolver = 'asdf'
24
+ assert Djatoka.resolver.nil?
25
+ end
26
+ end
27
+
28
+ end
29
+
@@ -0,0 +1,103 @@
1
+ require 'helper'
2
+
3
+ class TestDjatokaMetadata < Test::Unit::TestCase
4
+ with_a_resolver do
5
+ context 'a metadata object' do
6
+ setup do
7
+ @metadata_obj = @resolver.metadata(@identifier)
8
+ @metadata = @metadata_obj.perform
9
+ end
10
+
11
+ should 'create a metadata object' do
12
+ assert @metadata.is_a? Djatoka::Metadata
13
+ end
14
+
15
+ should "create a metadata URL for an identifier" do
16
+ assert @metadata.url.include? 'http://african.lanl.gov/adore-djatoka/resolver?'
17
+ assert @metadata.url.include? 'url_ver=Z39.88-2004'
18
+ assert @metadata.url.include? 'svc_id=info%3Alanl-repo%2Fsvc%2FgetMetadata'
19
+ assert @metadata.url.include? 'rft_id=info%3Alanl-repo%2Fds%2F5aa182c2-c092-4596-af6e-e95d2e263de3'
20
+ end
21
+
22
+ should 'create a metadata uri for an identifier' do
23
+ uri = @metadata.uri
24
+ assert_equal 'african.lanl.gov', uri.host
25
+ end
26
+
27
+ should "return imagefile metadata for an identifier" do
28
+ assert_equal '/lanl/data/loc/cc5fc4f7-e50a-455f-b3ce-a6a8b54824e6/WEJLNXSBWO7LPLC7Z6DITFX7A45XR3GS.jp2',
29
+ @metadata.imagefile
30
+ end
31
+
32
+ should 'return an identifier for a good request' do
33
+ assert_equal @identifier,
34
+ @metadata.identifier
35
+ end
36
+
37
+ should 'return a height for a good request' do
38
+ assert_equal '3372', @metadata.height
39
+ end
40
+
41
+ should 'return a width for a good request' do
42
+ assert_equal '5120', @metadata.width
43
+ end
44
+
45
+ should 'return an OK status for a good request' do
46
+ metadata = @metadata.status
47
+ end
48
+
49
+ should 'return a nil for a bad request' do
50
+ metadata = @resolver.metadata('asdf')
51
+ assert_equal nil, metadata.status
52
+ end
53
+ end #context metadata response
54
+
55
+ context 'using net::http' do
56
+ should 'return a height for a good request' do
57
+ Djatoka.use_curb=false
58
+ assert_equal '3372', Djatoka::Metadata.new(@resolver, @identifier).perform.height
59
+ set_testing_curb
60
+ end
61
+ end
62
+
63
+ context 'determining all the levels for a particular metadata response' do
64
+ setup do
65
+ @metadata_obj = @resolver.metadata(@identifier)
66
+ @metadata = @metadata_obj.perform
67
+ @levels = @metadata.all_levels
68
+ end
69
+ should 'create the number of metadata levels as djatoka provides' do
70
+ assert_equal 7, @levels.length
71
+ end
72
+ should 'return height and width for all levels' do
73
+ expected_levels = { "0"=>{"height"=>53, "width"=>80},
74
+ "1"=>{"height"=>106, "width"=>160},
75
+ "2"=>{"height"=>211, "width"=>320},
76
+ "3"=>{"height"=>422, "width"=>640},
77
+ "4"=>{"height"=>843, "width"=>1280},
78
+ "5"=>{"height"=>1686, "width"=>2560},
79
+ "6"=>{"height"=>3372, "width"=>5120}}
80
+ assert_equal expected_levels, @levels
81
+ end
82
+ should 'know which is the max level' do
83
+ assert_equal "6", @metadata.max_level
84
+ end
85
+
86
+ should 'return appropriate height and width for all levels when levels and dwt_levels do not match' do
87
+ levels = {"0"=>{"height"=>58, "width"=>37},
88
+ "1"=>{"height"=>115, "width"=>74},
89
+ "2"=>{"height"=>229, "width"=>148},
90
+ "3"=>{"height"=>458, "width"=>296},
91
+ "4"=>{"height"=>915, "width"=>592}}
92
+ metadata = @resolver.metadata('ua023_015-006-bx0003-014-075').perform
93
+ returned_levels = metadata.all_levels
94
+ assert_equal levels, returned_levels
95
+
96
+ end
97
+
98
+ end # levels
99
+
100
+ end #with_a_resolver
101
+
102
+ end
103
+
@@ -0,0 +1,151 @@
1
+ require 'helper'
2
+
3
+ class TestDjatokaMetadata < Test::Unit::TestCase
4
+ with_a_resolver do
5
+ context 'creates image URLs for a region' do
6
+ setup do
7
+ @region = Djatoka::Region.new(@resolver, @identifier)
8
+ end
9
+
10
+ should 'create good region parameters' do
11
+ good_params = {'rft_id'=>"info:lanl-repo/ds/5aa182c2-c092-4596-af6e-e95d2e263de3",
12
+ "svc_val_fmt"=>"info:ofi/fmt:kev:mtx:jpeg2000",
13
+ "svc_id"=>"info:lanl-repo/svc/getRegion",
14
+ 'url_ver'=>"Z39.88-2004"}
15
+ assert_equal good_params, @region.region_params
16
+ end
17
+
18
+ context 'create a new region if given a string as a resolver' do
19
+ should 'create a resolver object' do
20
+ region = Djatoka::Region.new('http://african.lanl.gov/adore-djatoka/resolver', @identifier)
21
+ assert region.resolver.is_a? Djatoka::Resolver
22
+ assert_equal 'http://african.lanl.gov/adore-djatoka/resolver', region.resolver.to_s
23
+ assert_equal 'african.lanl.gov', region.resolver.host
24
+ end
25
+ end
26
+
27
+ context 'create a default region uri' do
28
+ setup do
29
+ @region_uri = @region.uri
30
+ @query_values = @region.uri.query_values
31
+ end
32
+ should 'create a default region uri' do
33
+ assert_equal @identifier, @query_values['rft_id']
34
+ assert_equal nil, @query_values['svc.scale']
35
+ end
36
+ should 'output a region url' do
37
+ assert @region.url.is_a? String
38
+ assert @region.url.include? 'http://african.lanl.gov'
39
+ end
40
+ end
41
+
42
+ context 'add query parameters' do
43
+ should 'accept a scale as a String' do
44
+ scale_region = @region.scale('96')
45
+ assert_equal '96', scale_region.query.scale
46
+ end
47
+ should 'accept a scale as a single Integer' do
48
+ assert_equal '96', @region.scale(96).query.scale
49
+ end
50
+ should 'accept a scale as a Float' do
51
+ assert_equal '0.5', @region.scale(0.5).query.scale
52
+ end
53
+ should 'accept a scale as an Array of 2' do
54
+ assert_equal '1024,768', @region.scale([1024,768]).query.scale
55
+ assert_equal '10,60', @region.scale(['10', '60']).query.scale
56
+ end
57
+
58
+ should 'accept a level as a String' do
59
+ level_region = @region.level('2')
60
+ assert_equal '2', level_region.query.level
61
+ end
62
+ should 'accept a level as an Integer' do
63
+ assert_equal '3', @region.level(3).query.level
64
+ end
65
+
66
+ should 'accept a rotate as a String' do
67
+ assert_equal '180', @region.rotate('180').query.rotate
68
+ end
69
+ should 'accept a rotate as an Integer' do
70
+ assert_equal '180', @region.rotate(180).query.rotate
71
+ end
72
+
73
+ should 'accept a region as a String' do
74
+ assert_equal '0,0,256,256', @region.region('0,0,256,256').query.region
75
+ end
76
+ should 'accept a region as an Array of Strings' do
77
+ assert_equal '0,0,256,256', @region.region(['0','0','256','256']).query.region
78
+ end
79
+ should 'accept a region as an Array of Integers and/or Floats' do
80
+ assert_equal '0.1,0.1,5,5', @region.region([0.1, 0.1, 5, 5]).query.region
81
+ end
82
+
83
+ should 'accept a format as a String' do
84
+ assert_equal 'image/png', @region.format('image/png').query.format
85
+ end
86
+ should 'accept a clayer as a String' do
87
+ assert_equal '0', @region.clayer('0').query.clayer
88
+ end
89
+ end
90
+
91
+ context 'add empty or null query parameters' do
92
+ should 'have no value in the uri' do
93
+ assert_equal nil, @region.level(nil).uri.query_values['svc.level']
94
+ end
95
+ end
96
+
97
+ context 'create a query uri with svc values' do
98
+ should 'have a svc.scale paramter' do
99
+ assert_equal '96', @region.scale('96').uri.query_values['svc.scale']
100
+ end
101
+ context 'and method chaining' do
102
+ setup do
103
+ @region2 = @region.dup.scale('96').level('3')
104
+ @region2_query_values = @region2.uri.query_values
105
+ end
106
+ should 'have svc.scale and svc.level parameters after method chaining' do
107
+ assert_equal '96', @region2_query_values['svc.scale']
108
+ assert_equal '3', @region2_query_values['svc.level']
109
+ end
110
+ should 'have default values after method chaining svc values' do
111
+ assert_equal 'info:lanl-repo/svc/getRegion', @region2_query_values['svc_id']
112
+ end
113
+ end
114
+ end #context create a query uri with svc values
115
+
116
+ context 'create a new region and pass in query parameters' do
117
+ should 'accept param keys as symbols' do
118
+ params = {:level=> 3, :rotate=>180, :region => '0,0,500,500',
119
+ :scale => 75, :format => 'image/png'
120
+ }
121
+ region = Djatoka::Region.new(@resolver,@identifier,params)
122
+ assert_equal '3', region.query.level
123
+ assert_equal '180', region.query.rotate
124
+ assert_equal '0,0,500,500', region.query.region
125
+ assert_equal '75', region.query.scale
126
+ assert_equal 'image/png', region.query.format
127
+ end
128
+ should 'accept param keys as strings' do
129
+ params = {'level'=> 3, 'rotate'=> 180, 'region' => '0,0,500,500',
130
+ 'scale' => 75, 'format' => 'image/png'
131
+ }
132
+ region = Djatoka::Region.new(@resolver,@identifier,params)
133
+ assert_equal '3', region.query.level
134
+ assert_equal '180', region.query.rotate
135
+ assert_equal '0,0,500,500', region.query.region
136
+ assert_equal '75', region.query.scale
137
+ assert_equal 'image/png', region.query.format
138
+ end
139
+ should 'not choke on params it responds to but are not instance methods' do
140
+ region = Djatoka::Region.new(@resolver,@identifier,{:class => 'djatoka_image'})
141
+ assert region.is_a? Djatoka::Region
142
+ assert_equal nil, region.uri.query_values['svc.class']
143
+ end
144
+ end
145
+
146
+ end #context
147
+
148
+ end #with_a_resolver
149
+
150
+ end
151
+
@@ -0,0 +1,101 @@
1
+ require 'helper'
2
+
3
+ class TestDjatokaResolver < Test::Unit::TestCase
4
+ with_a_resolver do
5
+ context 'A Djatoka Resolver' do
6
+
7
+ should 'hold a good host from a base_url' do
8
+ assert_equal 'african.lanl.gov', @resolver.host
9
+ end
10
+
11
+ should 'hold a good path from a base_url' do
12
+ assert_equal '/adore-djatoka/resolver', @resolver.path
13
+ end
14
+
15
+ should 'create a ping url' do
16
+ assert_equal 'http://african.lanl.gov/adore-djatoka/resolver?url_ver=Z39.88-2004&svc_id=info%3Alanl-repo%2Fsvc%2Fping&rft_id=info%3Alanl-repo%2Fds%2F5aa182c2-c092-4596-af6e-e95d2e263de3',
17
+ @resolver.ping_url(@identifier)
18
+ end
19
+
20
+ context 'a ping request' do
21
+ setup do
22
+ @ping_response = @resolver.ping(@identifier)
23
+ end
24
+
25
+ should 'return an OK status for a good request' do
26
+ assert_equal 'OK', @ping_response['status']
27
+ end
28
+
29
+ should 'return the identifier for a good request' do
30
+ assert_equal @identifier, @ping_response['identifier']
31
+ end
32
+
33
+ should 'return a nil for a bad request' do
34
+ ping_response = @resolver.ping('asdf')
35
+ assert_equal nil, ping_response
36
+ end
37
+ end
38
+
39
+ context 'a ping request using net::http' do
40
+ setup do
41
+ Djatoka.use_curb=false
42
+ end
43
+ should 'return an OK status for a good request' do
44
+ assert_equal 'OK', @resolver.ping(@identifier).status
45
+ Djatoka.use_curb=true
46
+ end
47
+ should 'return a nil for a bad request' do
48
+ ping_response = @resolver.ping('asdf')
49
+ assert_equal nil, ping_response
50
+ Djatoka.use_curb=true
51
+ end
52
+ end
53
+
54
+ should 'create a region from a resolver' do
55
+ assert @resolver.region(@identifier).is_a? Djatoka::Region
56
+ end
57
+ should 'create a region uri from a resolver' do
58
+ assert @resolver.region_uri(@identifier).is_a? Addressable::URI
59
+ end
60
+
61
+ end #context a Djatoka::Resolver
62
+
63
+ context 'a resolver with a port number' do
64
+ setup do
65
+ @resolver_port = Djatoka::Resolver.new('http://example.com:8080/adore-djatoka/resolver')
66
+ end
67
+ should 'hold good uri data' do
68
+ assert_equal('http', @resolver_port.scheme)
69
+ assert_equal 'example.com', @resolver_port.host
70
+ assert_equal 8080, @resolver_port.port
71
+ assert_equal '/adore-djatoka/resolver', @resolver_port.path
72
+ end
73
+ should 'create a good metadata uri' do
74
+ metadata_url = Djatoka::Metadata.new(@resolver_port, 'asdf').uri
75
+ assert_equal 8080, metadata_url.port
76
+ end
77
+ should 'create a metadata url' do
78
+ metadata_url = @resolver_port.metadata_url(@identifier)
79
+ assert metadata_url.is_a? String
80
+ assert metadata_url.include?('getMetadata')
81
+ end
82
+ should 'create a good url' do
83
+ assert_equal 'http://example.com:8080/adore-djatoka/resolver', @resolver_port.url
84
+ end
85
+ end #context: resolver with a port number
86
+
87
+ context 'a resolver with an https scheme' do
88
+ setup do
89
+ @resolver_https = Djatoka::Resolver.new('https://example.com:8080/adore-djatoka/resolver')
90
+ end
91
+ should 'hold good uri data' do
92
+ assert_equal 'example.com', @resolver_https.host
93
+ assert_equal 8080, @resolver_https.port
94
+ assert_equal '/adore-djatoka/resolver', @resolver_https.path
95
+ assert_equal('https', @resolver_https.scheme)
96
+ end
97
+ end
98
+
99
+ end #with_a_resolver
100
+ end
101
+