odeon_uk 1.1.5 → 2.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 +1 -1
- data/CHANGELOG.md +8 -1
- data/README.md +1 -0
- data/Rakefile +13 -9
- data/lib/odeon_uk/cinema.rb +14 -42
- data/lib/odeon_uk/film.rb +23 -5
- data/lib/odeon_uk/internal/film_with_screenings_parser.rb +133 -46
- data/lib/odeon_uk/internal/showtimes_page.rb +36 -0
- data/lib/odeon_uk/internal/title_sanitizer.rb +49 -0
- data/lib/odeon_uk/internal/website.rb +36 -0
- data/lib/odeon_uk/screening.rb +56 -22
- data/lib/odeon_uk/version.rb +2 -2
- data/lib/odeon_uk.rb +4 -2
- data/odeon_uk.gemspec +0 -1
- data/test/fixture_updater.rb +72 -0
- data/test/fixtures/{odeon-bfi-imax.html → cinema/bfi_imax.html} +988 -1130
- data/test/fixtures/{odeon-brighton.html → cinema/brighton.html} +1035 -761
- data/test/fixtures/{odeon-london-leicester-square.html → cinema/leicester_square.html} +470 -766
- data/test/fixtures/showtimes/brighton/film_first.html +92 -0
- data/test/fixtures/showtimes/brighton/film_last.html +100 -0
- data/test/fixtures/showtimes/brighton.html +2071 -0
- data/test/fixtures/showtimes/liverpool_one/film_first_dbox.html +188 -0
- data/test/fixtures/showtimes/manchester/film_first_imax.html +182 -0
- data/test/fixtures/{odeon-sitemap.html → sitemap.html} +572 -444
- data/test/lib/odeon_uk/cinema_test.rb +129 -231
- data/test/lib/odeon_uk/film_test.rb +50 -3
- data/test/lib/odeon_uk/internal/film_with_screenings_parser_test.rb +79 -123
- data/test/lib/odeon_uk/internal/showtimes_page_test.rb +51 -0
- data/test/lib/odeon_uk/internal/title_sanitizer_test.rb +105 -0
- data/test/lib/odeon_uk/internal/website_test.rb +59 -0
- data/test/lib/odeon_uk/screening_test.rb +66 -32
- metadata +32 -53
- data/test/fixtures/brighton-showtimes/about-time.html +0 -175
- data/test/fixtures/brighton-showtimes/autism-friendly-planes.html +0 -75
- data/test/fixtures/brighton-showtimes/bolshoi-spartacus-live.html +0 -67
- data/test/fixtures/brighton-showtimes/cinemagic-echo-planet.html +0 -67
- data/test/fixtures/brighton-showtimes/globe-on-screen-twelfth-night.html +0 -67
- data/test/fixtures/brighton-showtimes/met-opera-eugene-onegin.html +0 -67
- data/test/fixtures/brighton-showtimes/national-theatre-live-frankenstein.html +0 -78
- data/test/fixtures/brighton-showtimes/nt-live-war-horse.html +0 -67
- data/test/fixtures/brighton-showtimes/royal-opera-house-turandot.html +0 -66
- data/test/fixtures/brighton-showtimes/rsc-richard-ii.html +0 -67
- data/test/fixtures/brighton-showtimes/star-trek-into-darkness-2d.html +0 -83
- data/test/fixtures/brighton-showtimes/ukjff-from-cable-street-to-brick-lane.html +0 -67
- data/test/fixtures/manchester-showtimes/thor-the-dark-world.html +0 -300
- data/test/fixtures/odeon-brighton-showtimes.html +0 -1238
@@ -1,171 +1,127 @@
|
|
1
1
|
require_relative '../../../test_helper'
|
2
2
|
|
3
3
|
describe OdeonUk::Internal::FilmWithScreeningsParser do
|
4
|
+
let(:described_class) { OdeonUk::Internal::FilmWithScreeningsParser }
|
4
5
|
|
5
6
|
describe '#film_name' do
|
6
|
-
subject {
|
7
|
+
subject { described_class.new(film_html).film_name }
|
7
8
|
|
8
|
-
describe 'passed
|
9
|
-
let(:film_html) { read_film_html('
|
9
|
+
describe 'passed first film html' do
|
10
|
+
let(:film_html) { read_film_html('brighton/film_first') }
|
10
11
|
|
11
|
-
it 'returns
|
12
|
-
subject.must_equal
|
12
|
+
it 'returns film name' do
|
13
|
+
subject.must_equal 'A Most Wanted Man'
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
16
|
-
describe 'passed
|
17
|
-
let(:film_html) { read_film_html('
|
17
|
+
describe 'passed last film html' do
|
18
|
+
let(:film_html) { read_film_html('brighton/film_last') }
|
18
19
|
|
19
|
-
it 'returns
|
20
|
-
subject.must_equal
|
20
|
+
it 'returns film name' do
|
21
|
+
subject.must_equal 'The Riot Club'
|
21
22
|
end
|
22
23
|
end
|
24
|
+
end
|
23
25
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
it 'returns the film name' do
|
28
|
-
subject.must_equal('Planes')
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe 'passed valid film html with ROH live screening' do
|
33
|
-
let(:film_html) { read_film_html('royal-opera-house-turandot') }
|
34
|
-
|
35
|
-
it 'returns the film name' do
|
36
|
-
subject.must_equal('Royal Opera House: Turandot 2013')
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe 'passed valid film html with Met Opera screening' do
|
41
|
-
let(:film_html) { read_film_html('met-opera-eugene-onegin') }
|
42
|
-
|
43
|
-
it 'returns the film name' do
|
44
|
-
subject.must_equal('Met Opera: Eugene Onegin 2013')
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe 'passed valid film html with Met Opera screening' do
|
49
|
-
let(:film_html) { read_film_html('cinemagic-echo-planet') }
|
50
|
-
|
51
|
-
it 'returns the film name' do
|
52
|
-
subject.must_equal('Echo Planet')
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
describe 'passed valid film html with UK Jewish Film Festival' do
|
57
|
-
let(:film_html) { read_film_html('ukjff-from-cable-street-to-brick-lane') }
|
58
|
-
|
59
|
-
it 'returns the film name' do
|
60
|
-
subject.must_equal('From Cable Street To Brick Lane')
|
61
|
-
end
|
62
|
-
end
|
26
|
+
describe '#to_a' do
|
27
|
+
subject { described_class.new(film_html).to_a }
|
63
28
|
|
64
|
-
describe 'passed
|
65
|
-
let(:film_html) { read_film_html('
|
29
|
+
describe 'passed first film html' do
|
30
|
+
let(:film_html) { read_film_html('brighton/film_first') }
|
66
31
|
|
67
|
-
it 'returns
|
68
|
-
subject.
|
32
|
+
it 'returns an array of hashes of screening attributes' do
|
33
|
+
subject.must_be_instance_of Array
|
34
|
+
subject.each do |hash|
|
35
|
+
hash[:booking_url].must_match 'https://www.odeon.co.uk/'
|
36
|
+
hash[:dimension].must_match(/[23]d/)
|
37
|
+
hash[:film_name].must_be_instance_of String
|
38
|
+
hash[:time].must_be_instance_of Time
|
39
|
+
hash[:time].zone.must_equal 'UTC'
|
40
|
+
end
|
69
41
|
end
|
70
|
-
end
|
71
42
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
43
|
+
it 'returns the same film title' do
|
44
|
+
first_title = subject[0][:film_name]
|
45
|
+
subject.each do |hash|
|
46
|
+
hash[:film_name].must_equal first_title
|
47
|
+
end
|
77
48
|
end
|
78
|
-
end
|
79
|
-
|
80
|
-
describe 'passed valid film html with Bolshoi Ballet' do
|
81
|
-
let(:film_html) { read_film_html('bolshoi-spartacus-live') }
|
82
49
|
|
83
|
-
it 'returns the
|
84
|
-
subject.must_equal
|
50
|
+
it 'returns the correct number of screenings' do
|
51
|
+
subject.count.must_equal 10
|
85
52
|
end
|
86
53
|
end
|
87
54
|
|
88
|
-
describe 'passed
|
89
|
-
let(:film_html) { read_film_html('
|
90
|
-
|
91
|
-
it 'returns
|
92
|
-
subject.
|
55
|
+
describe 'passed last film html' do
|
56
|
+
let(:film_html) { read_film_html('brighton/film_last') }
|
57
|
+
|
58
|
+
it 'returns an array of hashes of screening attributes' do
|
59
|
+
subject.must_be_instance_of Array
|
60
|
+
subject.each do |hash|
|
61
|
+
hash[:booking_url].must_match 'https://www.odeon.co.uk/'
|
62
|
+
hash[:dimension].must_match(/[23]d/)
|
63
|
+
hash[:film_name].must_be_instance_of String
|
64
|
+
hash[:time].must_be_instance_of Time
|
65
|
+
hash[:time].zone.must_equal 'UTC'
|
66
|
+
end
|
93
67
|
end
|
94
|
-
end
|
95
68
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
it 'returns the film name' do
|
100
|
-
subject.must_equal('Royal Shakespeare Company: Richard II')
|
69
|
+
it 'returns at least 1' do
|
70
|
+
subject.count.must_be :>=, 1
|
101
71
|
end
|
102
72
|
end
|
103
|
-
end
|
104
73
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
value.each do |element|
|
117
|
-
element[0].must_be_instance_of Time
|
118
|
-
element[0].zone.must_equal 'UTC'
|
119
|
-
element[1].must_be_instance_of String
|
120
|
-
element[1].must_match 'http://www.odeon.co.uk/'
|
121
|
-
end
|
74
|
+
describe 'passed imax film html' do
|
75
|
+
let(:film_html) { read_film_html('manchester/film_first_imax') }
|
76
|
+
|
77
|
+
it 'returns an array of hashes of screening attributes' do
|
78
|
+
subject.must_be_instance_of Array
|
79
|
+
subject.each do |hash|
|
80
|
+
hash[:booking_url].must_match 'https://www.odeon.co.uk/'
|
81
|
+
hash[:dimension].must_match(/[23]d/)
|
82
|
+
hash[:film_name].must_be_instance_of String
|
83
|
+
hash[:time].must_be_instance_of Time
|
84
|
+
hash[:time].zone.must_equal 'UTC'
|
122
85
|
end
|
123
86
|
end
|
124
87
|
|
125
|
-
it '
|
126
|
-
subject[
|
88
|
+
it 'contains imax in the variant' do
|
89
|
+
variants = subject.map { |hash| hash[:variant] }
|
90
|
+
variants.must_include('imax')
|
127
91
|
end
|
128
92
|
|
129
|
-
it 'returns
|
130
|
-
|
131
|
-
# the actual show time is 20:30 from the fixture
|
132
|
-
subject['2D'].last[0].must_equal Time.utc(2013, 9, 19, 19, 30, 0)
|
93
|
+
it 'returns at least 1' do
|
94
|
+
subject.count.must_be :>=, 1
|
133
95
|
end
|
134
96
|
end
|
135
97
|
|
136
|
-
describe 'passed
|
137
|
-
let(:film_html) { read_film_html('
|
138
|
-
|
139
|
-
it 'returns an
|
140
|
-
subject.must_be_instance_of
|
141
|
-
subject.
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
element[1].must_be_instance_of String
|
148
|
-
element[1].must_match 'http://www.odeon.co.uk/'
|
149
|
-
end
|
98
|
+
describe 'passed d-box film html' do
|
99
|
+
let(:film_html) { read_film_html('liverpool_one/film_first_dbox') }
|
100
|
+
|
101
|
+
it 'returns an array of hashes of screening attributes' do
|
102
|
+
subject.must_be_instance_of Array
|
103
|
+
subject.each do |hash|
|
104
|
+
hash[:booking_url].must_match 'https://www.odeon.co.uk/'
|
105
|
+
hash[:dimension].must_match(/[23]d/)
|
106
|
+
hash[:film_name].must_be_instance_of String
|
107
|
+
hash[:time].must_be_instance_of Time
|
108
|
+
hash[:time].zone.must_equal 'UTC'
|
150
109
|
end
|
151
110
|
end
|
152
111
|
|
153
|
-
it '
|
154
|
-
subject[
|
155
|
-
|
156
|
-
subject['IMAX 3D'].count.must_equal 37
|
112
|
+
it 'contains d-box in the variant' do
|
113
|
+
variants = subject.map { |hash| hash[:variant] }
|
114
|
+
variants.must_include('d-box')
|
157
115
|
end
|
158
116
|
|
159
|
-
it 'returns
|
160
|
-
|
161
|
-
# the actual show time is 00:01 from the fixture
|
162
|
-
subject['2D'].last[0].must_equal Time.utc(2013, 10, 30, 0, 1, 0)
|
117
|
+
it 'returns at least 1' do
|
118
|
+
subject.count.must_be :>=, 1
|
163
119
|
end
|
164
120
|
end
|
165
121
|
end
|
166
122
|
|
167
|
-
def read_film_html(filename
|
168
|
-
path =
|
123
|
+
def read_film_html(filename)
|
124
|
+
path = '../../../../fixtures/showtimes'
|
169
125
|
File.read(File.expand_path("#{path}/#{filename}.html", __FILE__))
|
170
126
|
end
|
171
127
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require_relative '../../../test_helper'
|
2
|
+
|
3
|
+
describe OdeonUk::Internal::ShowtimesPage do
|
4
|
+
let(:described_class) { OdeonUk::Internal::ShowtimesPage }
|
5
|
+
|
6
|
+
let(:website) { Minitest::Mock.new }
|
7
|
+
|
8
|
+
before { WebMock.disable_net_connect! }
|
9
|
+
|
10
|
+
describe '#to_a' do
|
11
|
+
subject { described_class.new(71).to_a }
|
12
|
+
|
13
|
+
before do
|
14
|
+
website.expect(:showtimes, brighton_showtimes_html, [71])
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'returns an non-zero array of film screenings html fragments' do
|
18
|
+
OdeonUk::Internal::Website.stub :new, website do
|
19
|
+
subject.must_be_instance_of(Array)
|
20
|
+
subject.size.must_be :>, 0
|
21
|
+
|
22
|
+
subject.each do |film_html|
|
23
|
+
film_html.must_be_instance_of(String)
|
24
|
+
film_html.size.must_be :>, 0
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'returns an array with correct content' do
|
30
|
+
OdeonUk::Internal::Website.stub :new, website do
|
31
|
+
subject.each do |html|
|
32
|
+
html.must_include('class="film-detail') # screenings group
|
33
|
+
html.must_include('class="presentation-info') # title
|
34
|
+
html.must_include('class="WEEK') # a performance
|
35
|
+
html.must_include('data-start="') # start time
|
36
|
+
html.must_include('data-end="') # end time
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def read_file(filepath)
|
45
|
+
File.read(File.expand_path(filepath, __FILE__))
|
46
|
+
end
|
47
|
+
|
48
|
+
def brighton_showtimes_html
|
49
|
+
read_file('../../../../fixtures/showtimes/brighton.html')
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require_relative '../../../test_helper'
|
2
|
+
|
3
|
+
describe OdeonUk::Internal::TitleSanitizer do
|
4
|
+
let(:described_class) { OdeonUk::Internal::TitleSanitizer }
|
5
|
+
|
6
|
+
describe '#sanitized' do
|
7
|
+
subject { described_class.new(title).sanitized }
|
8
|
+
|
9
|
+
describe 'with 2d in title' do
|
10
|
+
let(:title) { 'Iron Man 3 2D' }
|
11
|
+
|
12
|
+
it 'removes dimension' do
|
13
|
+
subject.must_equal('Iron Man 3')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'with 3d in title' do
|
18
|
+
let(:title) { 'Iron Man 3 3D' }
|
19
|
+
|
20
|
+
it 'removes dimension' do
|
21
|
+
subject.must_equal('Iron Man 3')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'Austism screening' do
|
26
|
+
let(:title) { 'Autism Friendly Screening - Planes' }
|
27
|
+
|
28
|
+
it 'removes prefix' do
|
29
|
+
subject.must_equal('Planes')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'Bolshoi screeening' do
|
34
|
+
let(:title) { 'Bolshoi - Spartacus (Live)' }
|
35
|
+
|
36
|
+
it 'removes prefix' do
|
37
|
+
subject.must_equal('Bolshoi: Spartacus')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe 'Cinemagic screeening' do
|
42
|
+
let(:title) { 'Cinemagic 2013 - Echo Planet' }
|
43
|
+
|
44
|
+
it 'removes prefix' do
|
45
|
+
subject.must_equal('Echo Planet')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe 'Globe on Screen screeening' do
|
50
|
+
let(:title) { 'Globe On Screen: Twelfth Night' }
|
51
|
+
|
52
|
+
it 'removes prefix' do
|
53
|
+
subject.must_equal('Globe: Twelfth Night')
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe 'Met Opera screeening' do
|
58
|
+
let(:title) { 'Met Opera - Eugene Onegin 2013' }
|
59
|
+
|
60
|
+
it 'removes prefix' do
|
61
|
+
subject.must_equal('Met Opera: Eugene Onegin 2013')
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe 'NT Live screeening' do
|
66
|
+
let(:title) { 'NT Live - War Horse' }
|
67
|
+
|
68
|
+
it 'removes prefix' do
|
69
|
+
subject.must_equal('National Theatre: War Horse')
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe 'National Theatre screeening' do
|
74
|
+
let(:title) { 'National Theatre Live - Frankenstein (Encore Screening)' }
|
75
|
+
|
76
|
+
it 'removes prefix' do
|
77
|
+
subject.must_equal('National Theatre: Frankenstein')
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe 'ROH screeening' do
|
82
|
+
let(:title) { 'Autism Friendly Screening - Planes' }
|
83
|
+
|
84
|
+
it 'removes prefix' do
|
85
|
+
subject.must_equal('Planes')
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe 'RSC screeening' do
|
90
|
+
let(:title) { 'Richard II - RSC Live 2013' }
|
91
|
+
|
92
|
+
it 'removes prefix' do
|
93
|
+
subject.must_equal('Royal Shakespeare Company: Richard II')
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe 'UK Jewish FF screeening' do
|
98
|
+
let(:title) { 'UKJFF - From Cable Street To Brick Lane' }
|
99
|
+
|
100
|
+
it 'removes prefix' do
|
101
|
+
subject.must_equal('From Cable Street To Brick Lane')
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require_relative '../../../test_helper'
|
2
|
+
|
3
|
+
describe OdeonUk::Internal::Website do
|
4
|
+
let(:described_class) { OdeonUk::Internal::Website }
|
5
|
+
|
6
|
+
describe '#cinema(id)' do
|
7
|
+
subject { described_class.new.cinema(71) }
|
8
|
+
|
9
|
+
before { stub_get('cinemas/odeon/71/', brighton_cinema_html) }
|
10
|
+
|
11
|
+
it 'returns a string' do
|
12
|
+
subject.class.must_equal String
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#sitemap' do
|
17
|
+
subject { described_class.new.sitemap }
|
18
|
+
|
19
|
+
before { stub_get('sitemap/', sitemap_html) }
|
20
|
+
|
21
|
+
it 'returns a string' do
|
22
|
+
subject.class.must_equal String
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#showtimes(id)' do
|
27
|
+
subject { described_class.new.showtimes(71) }
|
28
|
+
|
29
|
+
before { stub_get('showtimes/week/71/?siteId=71', brighton_showtimes_html) }
|
30
|
+
|
31
|
+
it 'returns a string' do
|
32
|
+
subject.class.must_equal String
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def brighton_cinema_html
|
39
|
+
read_file('../../../../fixtures/cinema/brighton.html')
|
40
|
+
end
|
41
|
+
|
42
|
+
def brighton_showtimes_html
|
43
|
+
read_file('../../../../fixtures/showtimes/brighton.html')
|
44
|
+
end
|
45
|
+
|
46
|
+
def read_file(filepath)
|
47
|
+
File.read(File.expand_path(filepath, __FILE__))
|
48
|
+
end
|
49
|
+
|
50
|
+
def sitemap_html
|
51
|
+
read_file('../../../../fixtures/sitemap.html')
|
52
|
+
end
|
53
|
+
|
54
|
+
def stub_get(site_path, response_body)
|
55
|
+
url = "http://www.odeon.co.uk/#{site_path}"
|
56
|
+
response = { status: 200, body: response_body, headers: {} }
|
57
|
+
stub_request(:get, url).to_return(response)
|
58
|
+
end
|
59
|
+
end
|
@@ -1,53 +1,87 @@
|
|
1
1
|
require_relative '../../test_helper'
|
2
2
|
|
3
3
|
describe OdeonUk::Screening do
|
4
|
+
let(:described_class) { OdeonUk::Screening }
|
5
|
+
|
6
|
+
let(:website) { Minitest::Mock.new }
|
4
7
|
|
5
8
|
before { WebMock.disable_net_connect! }
|
6
9
|
|
7
|
-
describe '
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
screening.booking_url.must_equal nil
|
14
|
-
screening.variant.must_equal nil
|
10
|
+
describe '.at(cinema_id)' do
|
11
|
+
subject { described_class.at(71) }
|
12
|
+
|
13
|
+
before do
|
14
|
+
website.expect(:showtimes, brighton_showtimes_html, [71])
|
15
|
+
website.expect(:sitemap, sitemap_html)
|
15
16
|
end
|
16
17
|
|
17
|
-
it '
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
it 'returns an array of screenings' do
|
19
|
+
OdeonUk::Internal::Website.stub :new, website do
|
20
|
+
subject.must_be_instance_of(Array)
|
21
|
+
subject.each do |screening|
|
22
|
+
screening.must_be_instance_of(described_class)
|
23
|
+
end
|
24
|
+
end
|
24
25
|
end
|
25
26
|
|
26
|
-
it '
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
screening.when.must_equal Time.utc(2013, 9, 12, 11, 0)
|
31
|
-
screening.when.must_equal Time.utc(2013, 9, 12, 11, 0)
|
32
|
-
screening.booking_url.must_equal 'http://booking_url'
|
33
|
-
screening.variant.must_equal nil
|
27
|
+
it 'returns correct number of screenings' do
|
28
|
+
OdeonUk::Internal::Website.stub :new, website do
|
29
|
+
subject.count.must_equal 214
|
30
|
+
end
|
34
31
|
end
|
35
32
|
end
|
36
33
|
|
37
|
-
describe '#
|
38
|
-
subject {
|
39
|
-
|
34
|
+
describe '#showing_on' do
|
35
|
+
subject { described_class.new(options).showing_on }
|
36
|
+
|
37
|
+
let(:options) do
|
38
|
+
{
|
39
|
+
film_name: 'Guardians of the Galaxy',
|
40
|
+
cinema_id: 71,
|
41
|
+
cinema_name: 'Odeon Brighton',
|
42
|
+
time: Time.utc(2014, 9, 12, 11, 0),
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should return date of screening' do
|
40
47
|
subject.must_be_instance_of(Date)
|
41
|
-
subject.must_equal Date.new(
|
48
|
+
subject.must_equal Date.new(2014, 9, 12)
|
42
49
|
end
|
43
50
|
end
|
44
51
|
|
45
|
-
describe '#
|
46
|
-
subject {
|
47
|
-
|
52
|
+
describe '#variant' do
|
53
|
+
subject { described_class.new(options).variant }
|
54
|
+
|
55
|
+
let(:options) do
|
56
|
+
{
|
57
|
+
film_name: 'Guardians of the Galaxy',
|
58
|
+
cinema_id: 71,
|
59
|
+
cinema_name: 'Odeon Brighton',
|
60
|
+
time: Time.utc(2014, 9, 12, 11, 0),
|
61
|
+
variant: ['Kids', 'BABY']
|
62
|
+
}
|
63
|
+
end
|
48
64
|
|
49
|
-
it '
|
50
|
-
subject.
|
65
|
+
it 'is an alphabetically ordered array of lower-cased strings' do
|
66
|
+
subject.must_be_instance_of Array
|
67
|
+
subject.each do |tag|
|
68
|
+
tag.must_be_instance_of String
|
69
|
+
end
|
70
|
+
subject.must_equal %w(baby kids)
|
51
71
|
end
|
52
72
|
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def brighton_showtimes_html
|
77
|
+
read_file('../../../fixtures/showtimes/brighton.html')
|
78
|
+
end
|
79
|
+
|
80
|
+
def read_file(filepath)
|
81
|
+
File.read(File.expand_path(filepath, __FILE__))
|
82
|
+
end
|
83
|
+
|
84
|
+
def sitemap_html
|
85
|
+
read_file('../../../fixtures/sitemap.html')
|
86
|
+
end
|
53
87
|
end
|