odeon_uk 3.0.6 → 4.0.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.
- checksums.yaml +4 -4
- data/.travis.yml +5 -3
- data/CHANGELOG.md +14 -0
- data/{LICENSE.txt → COMM-LICENSE} +0 -0
- data/LICENSE +617 -0
- data/README.md +58 -29
- data/Rakefile +7 -21
- data/lib/odeon_uk.rb +5 -14
- data/lib/odeon_uk/cinema.rb +123 -75
- data/lib/odeon_uk/{api/response.rb → internal/api_response.rb} +3 -3
- data/lib/odeon_uk/internal/parser/api/film_lookup.rb +34 -0
- data/lib/odeon_uk/internal/parser/api/performance_day.rb +92 -0
- data/lib/odeon_uk/internal/title_sanitizer.rb +34 -39
- data/lib/odeon_uk/performance.rb +87 -0
- data/lib/odeon_uk/version.rb +2 -2
- data/odeon_uk.gemspec +19 -21
- data/rake/fixture_creator.rb +5 -57
- data/test/fixtures/api/all_cinemas.plist +0 -0
- data/test/fixtures/api/app_init.plist +0 -0
- data/test/fixtures/api/film_times/71-14876.plist +0 -0
- data/test/fixtures/api/film_times/71-15408.plist +0 -0
- data/test/fixtures/api/film_times/71-15684.plist +0 -0
- data/test/fixtures/api/film_times/71-15866.plist +0 -0
- data/test/fixtures/api/film_times/71-15868.plist +0 -0
- data/test/fixtures/api/film_times/71-15961.plist +0 -0
- data/test/fixtures/api/film_times/71-15963.plist +0 -0
- data/test/fixtures/api/film_times/71-15965.plist +0 -0
- data/test/fixtures/api/film_times/71-15967.plist +0 -0
- data/test/fixtures/api/film_times/71-15969.plist +0 -0
- data/test/fixtures/api/film_times/71-15977.plist +0 -0
- data/test/fixtures/api/film_times/71-15980.plist +0 -0
- data/test/fixtures/api/film_times/71-16037.plist +0 -0
- data/test/fixtures/api/film_times/71-16136.plist +0 -0
- data/test/fixtures/api/film_times/71-16142.plist +0 -0
- data/test/fixtures/api/film_times/71-16143.plist +0 -0
- data/test/fixtures/api/film_times/71-16187.plist +0 -0
- data/test/fixtures/api/film_times/71-16369.plist +0 -0
- data/test/fixtures/api/film_times/71-16370.plist +0 -0
- data/test/fixtures/api/film_times/71-16374.plist +0 -0
- data/test/fixtures/api/film_times/71-16386.plist +0 -0
- data/test/fixtures/api/film_times/71-16387.plist +0 -0
- data/test/fixtures/api/film_times/71-16388.plist +0 -0
- data/test/fixtures/api/film_times/71-16438.plist +0 -0
- data/test/fixtures/api/film_times/71-16454.plist +0 -0
- data/test/fixtures/api/film_times/71-16457.plist +0 -0
- data/test/fixtures/api/film_times/71-16477.plist +0 -0
- data/test/fixtures/api/film_times/71-16478.plist +0 -0
- data/test/fixtures/api/film_times/71-16480.plist +0 -0
- data/test/fixtures/api/film_times/71-16482.plist +0 -0
- data/test/fixtures/api/film_times/71-16489.plist +0 -0
- data/test/lib/odeon_uk/cinema_test.rb +154 -373
- data/test/lib/odeon_uk/{api/response_test.rb → internal/api_response_test.rb} +7 -4
- data/test/lib/odeon_uk/performance_test.rb +149 -0
- data/test/lib/odeon_uk/version_test.rb +3 -5
- data/test/support/api_fixtures_helper.rb +9 -3
- data/test/support/fake_api_response.rb +17 -0
- data/test/test_helper.rb +9 -3
- metadata +89 -145
- data/.rdoc_options +0 -16
- data/lib/odeon_uk/api/cinema.rb +0 -67
- data/lib/odeon_uk/api/screenings.rb +0 -103
- data/lib/odeon_uk/configuration.rb +0 -21
- data/lib/odeon_uk/html/cinema.rb +0 -101
- data/lib/odeon_uk/html/parser/film_with_screenings.rb +0 -160
- data/lib/odeon_uk/html/screenings.rb +0 -38
- data/lib/odeon_uk/html/website.rb +0 -38
- data/lib/odeon_uk/screening.rb +0 -71
- data/test/fixtures/api/film_times/71-100747.plist +0 -0
- data/test/fixtures/api/film_times/71-100750.plist +0 -0
- data/test/fixtures/api/film_times/71-100790.plist +0 -0
- data/test/fixtures/api/film_times/71-14646.plist +0 -0
- data/test/fixtures/api/film_times/71-14725.plist +0 -0
- data/test/fixtures/api/film_times/71-15086.plist +0 -0
- data/test/fixtures/api/film_times/71-15096.plist +0 -0
- data/test/fixtures/api/film_times/71-15122.plist +0 -0
- data/test/fixtures/api/film_times/71-15130.plist +0 -0
- data/test/fixtures/api/film_times/71-15141.plist +0 -0
- data/test/fixtures/api/film_times/71-15142.plist +0 -0
- data/test/fixtures/api/film_times/71-15143.plist +0 -0
- data/test/fixtures/api/film_times/71-15144.plist +0 -0
- data/test/fixtures/api/film_times/71-15145.plist +0 -0
- data/test/fixtures/api/film_times/71-15170.plist +0 -0
- data/test/fixtures/api/film_times/71-15172.plist +0 -0
- data/test/fixtures/api/film_times/71-15177.plist +0 -0
- data/test/fixtures/api/film_times/71-15179.plist +0 -0
- data/test/fixtures/api/film_times/71-15182.plist +0 -0
- data/test/fixtures/api/film_times/71-15286.plist +0 -0
- data/test/fixtures/api/film_times/71-15360.plist +0 -0
- data/test/fixtures/api/film_times/71-15586.plist +0 -0
- data/test/fixtures/api/film_times/71-15700.plist +0 -0
- data/test/fixtures/api/film_times/71-15718.plist +0 -0
- data/test/fixtures/api/film_times/71-15768.plist +0 -0
- data/test/fixtures/api/film_times/71-15788.plist +0 -0
- data/test/fixtures/api/film_times/71-15793.plist +0 -0
- data/test/fixtures/api/film_times/71-15794.plist +0 -0
- data/test/fixtures/api/film_times/71-15795.plist +0 -0
- data/test/fixtures/api/film_times/71-15796.plist +0 -0
- data/test/fixtures/api/film_times/71-15799.plist +0 -0
- data/test/fixtures/api/film_times/71-15802.plist +0 -0
- data/test/fixtures/api/film_times/71-15814.plist +0 -0
- data/test/fixtures/api/film_times/71-15817.plist +0 -0
- data/test/fixtures/api/film_times/71-15840.plist +0 -0
- data/test/fixtures/html/cinema/105.html +0 -2622
- data/test/fixtures/html/cinema/211.html +0 -3241
- data/test/fixtures/html/cinema/71.html +0 -3448
- data/test/fixtures/html/showtimes/11-imax.html +0 -170
- data/test/fixtures/html/showtimes/171-d-box.html +0 -203
- data/test/fixtures/html/showtimes/71-0.html +0 -59
- data/test/fixtures/html/showtimes/71.html +0 -2395
- data/test/fixtures/html/sitemap.html +0 -1303
- data/test/lib/odeon_uk/api/cinema_test.rb +0 -165
- data/test/lib/odeon_uk/api/screenings_test.rb +0 -58
- data/test/lib/odeon_uk/configuration_test.rb +0 -29
- data/test/lib/odeon_uk/html/cinema_test.rb +0 -149
- data/test/lib/odeon_uk/html/parser/film_with_screenings_test.rb +0 -97
- data/test/lib/odeon_uk/html/screenings_test.rb +0 -44
- data/test/lib/odeon_uk/html/website_test.rb +0 -67
- data/test/lib/odeon_uk/screening_test.rb +0 -92
- data/test/support/website_fixtures_helper.rb +0 -30
@@ -1,165 +0,0 @@
|
|
1
|
-
require_relative '../../../test_helper'
|
2
|
-
|
3
|
-
describe OdeonUk::Api::Cinema do
|
4
|
-
include ApiFixturesHelper
|
5
|
-
|
6
|
-
let(:described_class) { OdeonUk::Api::Cinema }
|
7
|
-
|
8
|
-
let(:response) { Minitest::Mock.new }
|
9
|
-
|
10
|
-
before do
|
11
|
-
WebMock.disable_net_connect!
|
12
|
-
end
|
13
|
-
|
14
|
-
describe '.ids' do
|
15
|
-
subject { described_class.ids }
|
16
|
-
|
17
|
-
before do
|
18
|
-
response.expect(:all_cinemas, parse(all_cinemas_plist))
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'returns an Array of integers' do
|
22
|
-
OdeonUk::Api::Response.stub :new, response do
|
23
|
-
subject.must_be_instance_of(Array)
|
24
|
-
subject.each do |value|
|
25
|
-
value.must_be_instance_of(Fixnum)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'returns the correctly sized array' do
|
31
|
-
OdeonUk::Api::Response.stub :new, response do
|
32
|
-
subject.size.must_equal 115
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe '.new(id)' do
|
38
|
-
subject { described_class.new(id) }
|
39
|
-
|
40
|
-
describe 'Brighton' do
|
41
|
-
let(:id) { 71 }
|
42
|
-
|
43
|
-
it 'returns a cinema' do
|
44
|
-
subject.must_be_instance_of(described_class)
|
45
|
-
subject.id.must_equal(id)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe '#name' do
|
51
|
-
subject { described_class.new(id).name }
|
52
|
-
|
53
|
-
before { response.expect(:all_cinemas, parse(all_cinemas_plist)) }
|
54
|
-
|
55
|
-
describe 'Brighton' do
|
56
|
-
let(:id) { 71 }
|
57
|
-
|
58
|
-
it 'returns cinema name' do
|
59
|
-
OdeonUk::Api::Response.stub :new, response do
|
60
|
-
subject.must_equal 'Brighton'
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe 'Leicester Square' do
|
66
|
-
let(:id) { 105 }
|
67
|
-
|
68
|
-
it 'returns cinema name' do
|
69
|
-
OdeonUk::Api::Response.stub :new, response do
|
70
|
-
subject.must_equal 'London - Leicester Square'
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
describe '#locality' do
|
77
|
-
subject { described_class.new(id).locality }
|
78
|
-
|
79
|
-
before { response.expect(:all_cinemas, parse(all_cinemas_plist)) }
|
80
|
-
|
81
|
-
describe 'Short Address (Brighton)' do
|
82
|
-
let(:id) { 71 }
|
83
|
-
|
84
|
-
before { response.expect(:all_cinemas, parse(all_cinemas_plist)) }
|
85
|
-
|
86
|
-
it 'returns town name' do
|
87
|
-
OdeonUk::Api::Response.stub :new, response do
|
88
|
-
subject.must_equal 'Brighton'
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe '#postal_code' do
|
95
|
-
subject { described_class.new(id).postal_code }
|
96
|
-
|
97
|
-
describe 'short address' do
|
98
|
-
let(:id) { 71 }
|
99
|
-
|
100
|
-
before { response.expect(:all_cinemas, parse(all_cinemas_plist)) }
|
101
|
-
|
102
|
-
it 'returns the postcode' do
|
103
|
-
OdeonUk::Api::Response.stub :new, response do
|
104
|
-
subject.must_equal 'BN1 2RE'
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
describe 'short address (London)' do
|
110
|
-
let(:id) { 211 }
|
111
|
-
|
112
|
-
before { response.expect(:all_cinemas, parse(all_cinemas_plist)) }
|
113
|
-
|
114
|
-
it 'returns the postcode' do
|
115
|
-
OdeonUk::Api::Response.stub :new, response do
|
116
|
-
subject.must_equal 'SE1 8XR'
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
describe 'short address (extra London Postcode)' do
|
122
|
-
let(:id) { 105 }
|
123
|
-
|
124
|
-
before { response.expect(:all_cinemas, parse(all_cinemas_plist)) }
|
125
|
-
|
126
|
-
it 'returns the postcode' do
|
127
|
-
OdeonUk::Api::Response.stub :new, response do
|
128
|
-
subject.must_equal 'WC2H 7LQ'
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
describe '#street_address' do
|
135
|
-
subject { described_class.new(id).street_address }
|
136
|
-
|
137
|
-
describe 'short address' do
|
138
|
-
let(:id) { 71 }
|
139
|
-
|
140
|
-
before { response.expect(:all_cinemas, parse(all_cinemas_plist)) }
|
141
|
-
|
142
|
-
it 'returns first line of address' do
|
143
|
-
OdeonUk::Api::Response.stub :new, response do
|
144
|
-
subject.must_equal 'Kingswest'
|
145
|
-
end
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
describe '#url' do
|
151
|
-
subject { described_class.new(id).url }
|
152
|
-
|
153
|
-
describe 'short address' do
|
154
|
-
let(:id) { 71 }
|
155
|
-
|
156
|
-
before { response.expect(:all_cinemas, parse(all_cinemas_plist)) }
|
157
|
-
|
158
|
-
it 'returns first line of address' do
|
159
|
-
OdeonUk::Api::Response.stub :new, response do
|
160
|
-
subject.must_equal 'http://www.odeon.co.uk/cinemas/brighton/71/'
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
require_relative '../../../test_helper'
|
2
|
-
|
3
|
-
describe OdeonUk::Api::Screenings do
|
4
|
-
include ApiFixturesHelper
|
5
|
-
|
6
|
-
let(:described_class) { OdeonUk::Api::Screenings }
|
7
|
-
|
8
|
-
before { WebMock.disable_net_connect! }
|
9
|
-
|
10
|
-
describe '.at(cinema_id)' do
|
11
|
-
subject { described_class.at(71) }
|
12
|
-
|
13
|
-
before do
|
14
|
-
stub_post('app-init', nil, app_init_plist)
|
15
|
-
film_times_plists(71).each do |name|
|
16
|
-
film_id = name.match(/(\d+)\.plist/)[1]
|
17
|
-
stub_post('film-times',
|
18
|
-
{ s: '71', m: film_id },
|
19
|
-
film_times_plist(71, film_id))
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'returns an array of screening attributes as hashes' do
|
24
|
-
subject.must_be_instance_of(Array)
|
25
|
-
subject.each do |screening|
|
26
|
-
screening.must_be_instance_of(Hash)
|
27
|
-
screening.keys.must_include(:film_name)
|
28
|
-
|
29
|
-
screening.keys.must_include(:time)
|
30
|
-
screening[:time].must_be_instance_of(Time)
|
31
|
-
|
32
|
-
screening.keys.must_include(:variant)
|
33
|
-
screening[:variant].must_be_instance_of(Array)
|
34
|
-
|
35
|
-
screening.keys.must_include(:dimension)
|
36
|
-
screening[:dimension].must_match(/[23]d/)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'returns at least some non-empty variants' do
|
41
|
-
variants = subject.map { |screening| screening[:variant] }
|
42
|
-
variants.select { |v| !v.empty? }.count.must_be :>, 0
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'returns valid variant types' do
|
46
|
-
variants = subject.map { |screening| screening[:variant] }
|
47
|
-
variants.each do |v|
|
48
|
-
if v.length > 0
|
49
|
-
v.each { |e| %w(arts kids imax baby senior).must_include(e) }
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'returns correct number of screenings' do
|
55
|
-
subject.count.must_equal 159
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require_relative '../../test_helper'
|
2
|
-
|
3
|
-
describe OdeonUk do
|
4
|
-
describe '.configuration' do
|
5
|
-
describe '.method' do
|
6
|
-
it 'sets default value' do
|
7
|
-
OdeonUk.configuration.method.must_equal(:html)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
describe '.configure' do
|
13
|
-
before do
|
14
|
-
OdeonUk.configure do |config|
|
15
|
-
config.method = :api
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
after do
|
20
|
-
OdeonUk.configure do |config|
|
21
|
-
config.method = :html
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'sets the small words for the gem to downcase' do
|
26
|
-
OdeonUk.configuration.method.must_equal(:api)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,149 +0,0 @@
|
|
1
|
-
require_relative '../../../test_helper'
|
2
|
-
|
3
|
-
describe OdeonUk::Html::Cinema do
|
4
|
-
include WebsiteFixturesHelper
|
5
|
-
|
6
|
-
let(:described_class) { OdeonUk::Html::Cinema }
|
7
|
-
|
8
|
-
let(:website) { Minitest::Mock.new }
|
9
|
-
|
10
|
-
before do
|
11
|
-
WebMock.disable_net_connect!
|
12
|
-
end
|
13
|
-
|
14
|
-
describe '.ids' do
|
15
|
-
subject { described_class.ids }
|
16
|
-
|
17
|
-
before do
|
18
|
-
website.expect(:sitemap, sitemap_html)
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'returns an Array of OdeonUk::Html::Cinemas' do
|
22
|
-
OdeonUk::Html::Website.stub :new, website do
|
23
|
-
subject.must_be_instance_of(Array)
|
24
|
-
subject.each do |value|
|
25
|
-
value.must_be_instance_of(Fixnum)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'returns the correctly sized array' do
|
31
|
-
OdeonUk::Html::Website.stub :new, website do
|
32
|
-
subject.size.must_equal 115
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe '.new(id)' do
|
38
|
-
subject { described_class.new(id) }
|
39
|
-
|
40
|
-
describe 'Brighton' do
|
41
|
-
let(:id) { 71 }
|
42
|
-
|
43
|
-
it 'returns a cinema' do
|
44
|
-
subject.must_be_instance_of(described_class)
|
45
|
-
subject.id.must_equal(id)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe '#name' do
|
51
|
-
subject { described_class.new(id).name }
|
52
|
-
|
53
|
-
before { website.expect(:sitemap, sitemap_html) }
|
54
|
-
|
55
|
-
describe 'Brighton' do
|
56
|
-
let(:id) { 71 }
|
57
|
-
|
58
|
-
it 'returns cinema name' do
|
59
|
-
OdeonUk::Html::Website.stub :new, website do
|
60
|
-
subject.must_equal 'Brighton'
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe 'Leicester Square' do
|
66
|
-
let(:id) { 105 }
|
67
|
-
|
68
|
-
it 'returns cinema name' do
|
69
|
-
OdeonUk::Html::Website.stub :new, website do
|
70
|
-
subject.must_equal 'London - Leicester Square'
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
describe '#locality' do
|
77
|
-
subject { described_class.new(id).locality }
|
78
|
-
|
79
|
-
before { website.expect(:sitemap, sitemap_html) }
|
80
|
-
|
81
|
-
describe 'Short Address (Brighton)' do
|
82
|
-
let(:id) { 71 }
|
83
|
-
|
84
|
-
before { website.expect(:cinema, cinema_html(71), [71]) }
|
85
|
-
|
86
|
-
it 'returns town name' do
|
87
|
-
OdeonUk::Html::Website.stub :new, website do
|
88
|
-
subject.must_equal 'Brighton'
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe '#postal_code' do
|
95
|
-
subject { described_class.new(id).postal_code }
|
96
|
-
|
97
|
-
describe 'short address' do
|
98
|
-
let(:id) { 71 }
|
99
|
-
|
100
|
-
before { website.expect(:cinema, cinema_html(71), [71]) }
|
101
|
-
|
102
|
-
it 'returns the postcode' do
|
103
|
-
OdeonUk::Html::Website.stub :new, website do
|
104
|
-
subject.must_equal 'BN1 2RE'
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
describe 'short address (London)' do
|
110
|
-
let(:id) { 211 }
|
111
|
-
|
112
|
-
before { website.expect(:cinema, cinema_html(211), [211]) }
|
113
|
-
|
114
|
-
it 'returns the postcode' do
|
115
|
-
OdeonUk::Html::Website.stub :new, website do
|
116
|
-
subject.must_equal 'SE1 8XR'
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
describe 'short address (extra London Postcode)' do
|
122
|
-
let(:id) { 105 }
|
123
|
-
|
124
|
-
before { website.expect(:cinema, cinema_html(105), [105]) }
|
125
|
-
|
126
|
-
it 'returns the postcode' do
|
127
|
-
OdeonUk::Html::Website.stub :new, website do
|
128
|
-
subject.must_equal 'WC2H 7LQ'
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
describe '#street_address' do
|
135
|
-
subject { described_class.new(id).street_address }
|
136
|
-
|
137
|
-
describe 'short address' do
|
138
|
-
let(:id) { 71 }
|
139
|
-
|
140
|
-
before { website.expect(:cinema, cinema_html(71), [71]) }
|
141
|
-
|
142
|
-
it 'returns first line of address' do
|
143
|
-
OdeonUk::Html::Website.stub :new, website do
|
144
|
-
subject.must_equal 'Kingswest'
|
145
|
-
end
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|
@@ -1,97 +0,0 @@
|
|
1
|
-
require_relative '../../../../test_helper'
|
2
|
-
|
3
|
-
describe OdeonUk::Html::Parser::FilmWithScreenings do
|
4
|
-
include WebsiteFixturesHelper
|
5
|
-
|
6
|
-
let(:described_class) { OdeonUk::Html::Parser::FilmWithScreenings }
|
7
|
-
|
8
|
-
describe '#film_name' do
|
9
|
-
subject { described_class.new(film_html).film_name }
|
10
|
-
|
11
|
-
describe 'passed film html' do
|
12
|
-
let(:film_html) { showtimes_html('71-0') }
|
13
|
-
|
14
|
-
it 'returns film name' do
|
15
|
-
subject.must_equal 'Home'
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe '#to_a' do
|
21
|
-
subject { described_class.new(film_html).to_a }
|
22
|
-
|
23
|
-
describe 'passed film html' do
|
24
|
-
let(:film_html) { showtimes_html('71-0') }
|
25
|
-
|
26
|
-
it 'returns an array of hashes of screening attributes' do
|
27
|
-
subject.must_be_instance_of Array
|
28
|
-
subject.each do |hash|
|
29
|
-
hash[:booking_url].must_match 'https://www.odeon.co.uk/'
|
30
|
-
hash[:dimension].must_match(/[23]d/)
|
31
|
-
hash[:film_name].must_be_instance_of String
|
32
|
-
hash[:time].must_be_instance_of Time
|
33
|
-
hash[:time].zone.must_equal 'UTC'
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'returns the same film title' do
|
38
|
-
first_title = subject[0][:film_name]
|
39
|
-
subject.each do |hash|
|
40
|
-
hash[:film_name].must_equal first_title
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'returns at least 1' do
|
45
|
-
subject.count.must_be :>=, 1
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe 'passed imax film html' do
|
50
|
-
let(:film_html) { showtimes_html('11-imax') }
|
51
|
-
|
52
|
-
it 'returns an array of hashes of screening attributes' do
|
53
|
-
subject.must_be_instance_of Array
|
54
|
-
subject.each do |hash|
|
55
|
-
hash[:booking_url].must_match 'https://www.odeon.co.uk/'
|
56
|
-
hash[:dimension].must_match(/[23]d/)
|
57
|
-
hash[:film_name].must_be_instance_of String
|
58
|
-
hash[:time].must_be_instance_of Time
|
59
|
-
hash[:time].zone.must_equal 'UTC'
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'contains imax in the variant' do
|
64
|
-
variants = subject.map { |hash| hash[:variant] }
|
65
|
-
variants.must_include('imax')
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'returns at least 1' do
|
69
|
-
subject.count.must_be :>=, 1
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe 'passed d-box film html' do
|
74
|
-
let(:film_html) { showtimes_html('171-d-box') }
|
75
|
-
|
76
|
-
it 'returns an array of hashes of screening attributes' do
|
77
|
-
subject.must_be_instance_of Array
|
78
|
-
subject.each do |hash|
|
79
|
-
hash[:booking_url].must_match 'https://www.odeon.co.uk/'
|
80
|
-
hash[:dimension].must_match(/[23]d/)
|
81
|
-
hash[:film_name].must_be_instance_of String
|
82
|
-
hash[:time].must_be_instance_of Time
|
83
|
-
hash[:time].zone.must_equal 'UTC'
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
it 'contains d-box in the variant' do
|
88
|
-
variants = subject.map { |hash| hash[:variant] }
|
89
|
-
variants.must_include('d-box')
|
90
|
-
end
|
91
|
-
|
92
|
-
it 'returns at least 1' do
|
93
|
-
subject.count.must_be :>=, 1
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|