cineworld_uk 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +17 -0
  3. data/.travis.yml +4 -0
  4. data/CHANGELOG.md +9 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +59 -0
  8. data/Rakefile +15 -0
  9. data/cineworld_uk.gemspec +29 -0
  10. data/lib/cineworld_uk.rb +15 -0
  11. data/lib/cineworld_uk/cinema.rb +218 -0
  12. data/lib/cineworld_uk/film.rb +47 -0
  13. data/lib/cineworld_uk/internal/film_with_screenings_parser.rb +128 -0
  14. data/lib/cineworld_uk/screening.rb +33 -0
  15. data/lib/cineworld_uk/version.rb +6 -0
  16. data/test/fixtures/cinemas.html +420 -0
  17. data/test/fixtures/cinemas/brighton.html +8 -0
  18. data/test/fixtures/cinemas/bristol.html +1206 -0
  19. data/test/fixtures/cinemas/bury-st-edmunds.html +1211 -0
  20. data/test/fixtures/cinemas/chelsea.html +1030 -0
  21. data/test/fixtures/cinemas/the-o2-grenwich.html +1191 -0
  22. data/test/fixtures/whatson/brighton.html +7906 -0
  23. data/test/fixtures/whatson/brighton/autism-friendly-cloudy-2.html +79 -0
  24. data/test/fixtures/whatson/brighton/geethanjali-malayalam.html +71 -0
  25. data/test/fixtures/whatson/brighton/gravity.html +2129 -0
  26. data/test/fixtures/whatson/brighton/take-2-thursday-about-time.html +89 -0
  27. data/test/fixtures/whatson/glasgow-imax-at-gsc-cinema.html +3160 -0
  28. data/test/fixtures/whatson/glasgow-imax-at-gsc/the-hunger-games-catching-fire.html +498 -0
  29. data/test/fixtures/whatson/the-o2-greenwich.html +6854 -0
  30. data/test/fixtures/whatson/the-o2-greenwich/gravity.html +784 -0
  31. data/test/fixtures/whatson/wandsworth.html +13729 -0
  32. data/test/fixtures/whatson/wandsworth/arrambam-tamil.html +126 -0
  33. data/test/fixtures/whatson/wandsworth/bolshoi-ballet-live-lost-illusions.html +80 -0
  34. data/test/fixtures/whatson/wandsworth/frankenstein-nt-50th.html +82 -0
  35. data/test/fixtures/whatson/wandsworth/met-opera-falstaff.html +74 -0
  36. data/test/fixtures/whatson/wandsworth/nt-live-war-horse.html +80 -0
  37. data/test/fixtures/whatson/wandsworth/royal-ballet-live-the-sleeping-beauty.html +79 -0
  38. data/test/fixtures/whatson/wandsworth/royal-opera-live-parsifal-weird-date.html +79 -0
  39. data/test/fixtures/whatson/wandsworth/rsc-live-richard-ii-encore.html +80 -0
  40. data/test/fixtures/whatson/wandsworth/west-end-theatre-series-private-lives.html +80 -0
  41. data/test/lib/cineworld_uk/cinema_test.rb +466 -0
  42. data/test/lib/cineworld_uk/film_test.rb +95 -0
  43. data/test/lib/cineworld_uk/internal/film_with_screenings_parser_test.rb +200 -0
  44. data/test/lib/cineworld_uk/screening_test.rb +31 -0
  45. data/test/lib/cineworld_uk/version_test.rb +9 -0
  46. data/test/test_helper.rb +6 -0
  47. metadata +219 -0
@@ -0,0 +1,79 @@
1
+ <div class="row">
2
+ <div class="span2">
3
+ <div class="poster">
4
+ <a href="/whatson/6380?cinema=65&amp;date=all">
5
+ <div class="image">
6
+ <img src="/cw/assets/images/whatson/film.placeholder.poster.jpg" data-original="/assets/media/films/6380_poster_large.jpg" width="140" alt="Poster for Film Royal Opera Live: Parsifal - Wednesday 18 Dec 2013" />
7
+ </div>
8
+ </a>
9
+ </div>
10
+ </div>
11
+
12
+ <div class="span7">
13
+ <h1>
14
+ <a href="/whatson/6380?cinema=65&amp;date=all">Royal Opera Live: Parsifal - Wednesday 18 Dec 2013</a>
15
+ </h1>
16
+
17
+ <div class="inline-children">
18
+ <h3>Release date:</h3>
19
+ <p>18th December 2013</p>
20
+ </div>
21
+
22
+ <div class="inline-children">
23
+ <h3>Running time:</h3>
24
+ <p>330 mins</p>
25
+ </div>
26
+
27
+ <h3>Synopsis:</h3>
28
+ <p>
29
+ An exciting new production of Wagner's last great masterpiece from the team behind the acclaimed 'Minotaur'.
30
+ </p>
31
+
32
+ <h3>Available screening types</h3>
33
+
34
+ <ul class="unstyled">
35
+ <li class="icon-service-twod"></li>
36
+
37
+ </ul>
38
+
39
+ <a class="action primary" title="Find out more about Royal Opera Live: Parsifal - Wednesday 18 Dec 2013" href="/whatson/6380?cinema=65&amp;date=all">Find out more</a>
40
+
41
+ </div>
42
+ </div>
43
+
44
+ <br />
45
+ <p>
46
+ <strong>
47
+ Select a showtime and book to save 10% on your tickets with
48
+ <span class="icon-logo-mycineworld ">mycineworld</span>
49
+ </strong>
50
+ </p>
51
+
52
+ <div class="schedule row">
53
+ <div class="span9">
54
+ <div class="date row">
55
+ <div class="span2">
56
+ <h3>Wednesday 18th Dec</h3>
57
+ </div>
58
+
59
+ <div class="span7">
60
+ <ol class="performances">
61
+ <li>
62
+ <a class="tooltip performance action" title="16:50" href="/booking?cinema=65&amp;filmEdi=445749&amp;date=20131218&amp;time=16:50" rel="nofollow">16:50</a>
63
+ <div class="tooltip-box performance">
64
+ <h2>Available screening types:</h2>
65
+
66
+ <hr class="thin" />
67
+
68
+ <ul class="unstyled">
69
+ <li class="icon-service-twod">2D</li>
70
+ </ul>
71
+ </div>
72
+ </li>
73
+ </ol>
74
+ </div>
75
+ </div>
76
+
77
+ <a class="action secondary light" href="/whatson/6380?cinema=65&amp;date=all">View all dates</a>
78
+ </div>
79
+ </div>
@@ -0,0 +1,80 @@
1
+ <div class="row">
2
+ <div class="span2">
3
+ <div class="poster">
4
+ <a href="/whatson/6395?cinema=65&amp;date=all">
5
+ <div class="image">
6
+ <img src="/cw/assets/images/whatson/film.placeholder.poster.jpg" data-original="/assets/media/films/6395_poster_large.jpg" width="140" alt="Poster for Film RSC Live: Richard II (Encore Performance)" />
7
+ </div>
8
+ </a>
9
+ </div>
10
+ </div>
11
+
12
+ <div class="span7">
13
+ <h1>
14
+ <a href="/whatson/6395?cinema=65&amp;date=all">RSC Live: Richard II (Encore Performance)</a>
15
+ <a class="classification gb-12a tooltip" href="/classification" title="No-one younger than 12 may see a '12A' film in a cinema unless accompanied by an adult. Responsibility for allowing under-12s to view lies with the accompanying or supervising adult." data-classification="12A" data-territory="GB">(12A)</a>
16
+ </h1>
17
+
18
+ <div class="inline-children">
19
+ <h3>Release date:</h3>
20
+ <p>19th November 2013</p>
21
+ </div>
22
+
23
+ <div class="inline-children">
24
+ <h3>Running time:</h3>
25
+ <p>180 mins</p>
26
+ </div>
27
+
28
+ <h3>Synopsis:</h3>
29
+ <p>
30
+ David Tennant stars in the historic first ever live cinema broadcast from the Royal Shakespeare Company's stage.
31
+ </p>
32
+
33
+ <h3>Available screening types</h3>
34
+
35
+ <ul class="unstyled">
36
+ <li class="icon-service-twod"></li>
37
+
38
+ </ul>
39
+
40
+ <a class="action primary" title="Find out more about RSC Live: Richard II (Encore Performance)" href="/whatson/6395?cinema=65&amp;date=all">Find out more</a>
41
+
42
+ </div>
43
+ </div>
44
+
45
+ <br />
46
+ <p>
47
+ <strong>
48
+ Select a showtime and book to save 10% on your tickets with
49
+ <span class="icon-logo-mycineworld ">mycineworld</span>
50
+ </strong>
51
+ </p>
52
+
53
+ <div class="schedule row">
54
+ <div class="span9">
55
+ <div class="date row">
56
+ <div class="span2">
57
+ <h3>Tuesday 19th Nov</h3>
58
+ </div>
59
+
60
+ <div class="span7">
61
+ <ol class="performances">
62
+ <li>
63
+ <a class="tooltip performance action" title="19:00" href="/booking?cinema=65&amp;filmEdi=445743&amp;date=20131119&amp;time=19:00" rel="nofollow">19:00</a>
64
+ <div class="tooltip-box performance">
65
+ <h2>Available screening types:</h2>
66
+
67
+ <hr class="thin" />
68
+
69
+ <ul class="unstyled">
70
+ <li class="icon-service-twod">2D</li>
71
+ </ul>
72
+ </div>
73
+ </li>
74
+ </ol>
75
+ </div>
76
+ </div>
77
+
78
+ <a class="action secondary light" href="/whatson/6395?cinema=65&amp;date=all">View all dates</a>
79
+ </div>
80
+ </div>
@@ -0,0 +1,80 @@
1
+ <div class="row">
2
+ <div class="span2">
3
+ <div class="poster">
4
+ <a href="/whatson/6916?cinema=65&amp;date=all">
5
+ <div class="image">
6
+ <img src="/cw/assets/images/whatson/film.placeholder.poster.jpg" data-original="/assets/media/films/6916_poster_large.jpg" width="140" alt="Poster for Film West End Theatre Series: Noel Coward's Private Lives" />
7
+ </div>
8
+ </a>
9
+ </div>
10
+ </div>
11
+
12
+ <div class="span7">
13
+ <h1>
14
+ <a href="/whatson/6916?cinema=65&amp;date=all">West End Theatre Series: Noel Coward's Private Lives</a>
15
+ <a class="classification gb-12a tooltip" href="/classification" title="No-one younger than 12 may see a '12A' film in a cinema unless accompanied by an adult. Responsibility for allowing under-12s to view lies with the accompanying or supervising adult." data-classification="12A" data-territory="GB">(12A)</a>
16
+ </h1>
17
+
18
+ <div class="inline-children">
19
+ <h3>Release date:</h3>
20
+ <p>6th February 2014</p>
21
+ </div>
22
+
23
+ <div class="inline-children">
24
+ <h3>Running time:</h3>
25
+ <p>113 mins</p>
26
+ </div>
27
+
28
+ <h3>Synopsis:</h3>
29
+ <p>
30
+ Toby Stephens and Anna Chancellor star in the hit West End production of Noel Coward's comic masterpiece.
31
+ </p>
32
+
33
+ <h3>Available screening types</h3>
34
+
35
+ <ul class="unstyled">
36
+ <li class="icon-service-twod"></li>
37
+
38
+ </ul>
39
+
40
+ <a class="action primary" title="Find out more about West End Theatre Series: Noel Coward's Private Lives" href="/whatson/6916?cinema=65&amp;date=all">Find out more</a>
41
+
42
+ </div>
43
+ </div>
44
+
45
+ <br />
46
+ <p>
47
+ <strong>
48
+ Select a showtime and book to save 10% on your tickets with
49
+ <span class="icon-logo-mycineworld ">mycineworld</span>
50
+ </strong>
51
+ </p>
52
+
53
+ <div class="schedule row">
54
+ <div class="span9">
55
+ <div class="date row">
56
+ <div class="span2">
57
+ <h3>Thursday 6th Feb</h3>
58
+ </div>
59
+
60
+ <div class="span7">
61
+ <ol class="performances">
62
+ <li>
63
+ <a class="tooltip performance action" title="19:30" href="/booking?cinema=65&amp;filmEdi=445941&amp;date=20140206&amp;time=19:30" rel="nofollow">19:30</a>
64
+ <div class="tooltip-box performance">
65
+ <h2>Available screening types:</h2>
66
+
67
+ <hr class="thin" />
68
+
69
+ <ul class="unstyled">
70
+ <li class="icon-service-twod">2D</li>
71
+ </ul>
72
+ </div>
73
+ </li>
74
+ </ol>
75
+ </div>
76
+ </div>
77
+
78
+ <a class="action secondary light" href="/whatson/6916?cinema=65&amp;date=all">View all dates</a>
79
+ </div>
80
+ </div>
@@ -0,0 +1,466 @@
1
+ require_relative '../../test_helper'
2
+
3
+ describe CineworldUk::Cinema do
4
+
5
+ before { WebMock.disable_net_connect! }
6
+
7
+ describe '.all' do
8
+ subject { CineworldUk::Cinema.all }
9
+
10
+ before do
11
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas.html') )
12
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas').to_return( status: 200, body: body, headers: {} )
13
+ end
14
+
15
+ it 'returns an Array of CineworldUK::Cinemas' do
16
+ subject.must_be_instance_of(Array)
17
+ subject.each do |value|
18
+ value.must_be_instance_of(CineworldUk::Cinema)
19
+ end
20
+ end
21
+
22
+ it 'returns the correctly sized array' do
23
+ subject.size.must_equal 81
24
+ end
25
+ end
26
+
27
+ describe '.find(id)' do
28
+ subject { CineworldUk::Cinema.find(id) }
29
+
30
+ before do
31
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas.html') )
32
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas').to_return( status: 200, body: body, headers: {} )
33
+ end
34
+
35
+ describe 'Brighton' do
36
+ let(:id) { 3 }
37
+
38
+ it 'returns a cinema' do
39
+ subject.must_be_instance_of(CineworldUk::Cinema)
40
+
41
+ subject.id.must_equal 3
42
+ subject.brand.must_equal 'Cineworld'
43
+ subject.name.must_equal 'Brighton'
44
+ end
45
+ end
46
+ end
47
+
48
+ describe '.new id, name, url' do
49
+ it 'stores id, name, slug and url' do
50
+ cinema = CineworldUk::Cinema.new '3', 'Brighton'
51
+ cinema.id.must_equal 3
52
+ cinema.brand.must_equal 'Cineworld'
53
+ cinema.name.must_equal 'Brighton'
54
+ cinema.slug.must_equal 'brighton'
55
+ cinema.url.must_equal 'http://www.cineworld.co.uk/cinemas/3/information'
56
+ end
57
+
58
+ it 'removes "London - " name prefix' do
59
+ cinema = CineworldUk::Cinema.new 79, 'London - The O2, Greenwich'
60
+ cinema.id.must_equal 79
61
+ cinema.name.must_equal 'The O2, Greenwich'
62
+ cinema.slug.must_equal 'the-o2-greenwich'
63
+ end
64
+ end
65
+
66
+ describe '#adr' do
67
+ subject { cinema.adr }
68
+
69
+ describe '(brighton)' do
70
+ let(:cinema) { CineworldUk::Cinema.new('3', 'Brighton') }
71
+
72
+ before do
73
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'brighton.html') )
74
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/3/information').to_return( status: 200, body: body, headers: {} )
75
+ end
76
+
77
+ it 'returns the address hash' do
78
+ subject.must_equal({
79
+ street_address: 'Brighton Marina',
80
+ extended_address: nil,
81
+ locality: 'Brighton',
82
+ region: 'East Sussex',
83
+ postal_code: 'BN2 5UF',
84
+ country: 'United Kingdom'
85
+ })
86
+ end
87
+ end
88
+
89
+ describe '(bristol)' do
90
+ let(:cinema) { CineworldUk::Cinema.new('4', 'Bristol') }
91
+
92
+ before do
93
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'bristol.html') )
94
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/4/information').to_return( status: 200, body: body, headers: {} )
95
+ end
96
+
97
+ it 'returns the address hash' do
98
+ subject.must_equal({
99
+ street_address: 'Hengrove Leisure Park',
100
+ extended_address: 'Hengrove Way',
101
+ locality: 'Bristol',
102
+ region: nil,
103
+ postal_code: 'BS14 0HR',
104
+ country: 'United Kingdom'
105
+ })
106
+ end
107
+ end
108
+
109
+ describe '(bury st edmunds)' do
110
+ let(:cinema) { CineworldUk::Cinema.new('6', 'Bury St. Edmunds') }
111
+
112
+ before do
113
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'bury-st-edmunds.html') )
114
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/6/information').to_return( status: 200, body: body, headers: {} )
115
+ end
116
+
117
+ it 'returns the address hash' do
118
+ subject.must_equal({
119
+ street_address: 'Parkway',
120
+ extended_address: nil,
121
+ locality: 'Bury St. Edmunds',
122
+ region: nil,
123
+ postal_code: 'IP33 3BA',
124
+ country: 'United Kingdom'
125
+ })
126
+ end
127
+ end
128
+
129
+ describe '(london chelsea)' do
130
+ let(:cinema) { CineworldUk::Cinema.new('10', 'London - Chelsea') }
131
+
132
+ before do
133
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'chelsea.html') )
134
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/10/information').to_return( status: 200, body: body, headers: {} )
135
+ end
136
+
137
+ it 'returns the address hash' do
138
+ subject.must_equal({
139
+ street_address: '279 Kings Road',
140
+ extended_address: 'Chelsea',
141
+ locality: 'London',
142
+ region: nil,
143
+ postal_code: 'SW3 5EW',
144
+ country: 'United Kingdom'
145
+ })
146
+ end
147
+ end
148
+
149
+ describe '(london o2)' do
150
+ let(:cinema) { CineworldUk::Cinema.new('79', 'The O2, Grenwich') }
151
+
152
+ before do
153
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'the-o2-grenwich.html') )
154
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/79/information').to_return( status: 200, body: body, headers: {} )
155
+ end
156
+
157
+ it 'returns the address hash' do
158
+ subject.must_equal({
159
+ street_address: 'The O2',
160
+ extended_address: 'Peninsula Square',
161
+ locality: 'London',
162
+ region: nil,
163
+ postal_code: 'SE10 0DX',
164
+ country: 'United Kingdom'
165
+ })
166
+ end
167
+ end
168
+ end
169
+
170
+ describe '#extended_address' do
171
+ subject { cinema.extended_address }
172
+
173
+ describe '(brighton)' do
174
+ let(:cinema) { CineworldUk::Cinema.new('3', 'Brighton') }
175
+
176
+ before do
177
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'brighton.html') )
178
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/3/information').to_return( status: 200, body: body, headers: {} )
179
+ end
180
+
181
+ it 'returns nil' do
182
+ subject.must_be_nil
183
+ end
184
+ end
185
+
186
+ describe '(bristol)' do
187
+ let(:cinema) { CineworldUk::Cinema.new('4', 'Bristol') }
188
+
189
+ before do
190
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'bristol.html') )
191
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/4/information').to_return( status: 200, body: body, headers: {} )
192
+ end
193
+
194
+ it 'returns the second line' do
195
+ subject.must_equal 'Hengrove Way'
196
+ end
197
+ end
198
+
199
+ describe '(bury st edmunds)' do
200
+ let(:cinema) { CineworldUk::Cinema.new('6', 'Bury St. Edmunds') }
201
+
202
+ before do
203
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'bury-st-edmunds.html') )
204
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/6/information').to_return( status: 200, body: body, headers: {} )
205
+ end
206
+
207
+ it 'returns the town/city' do
208
+ subject.must_be_nil
209
+ end
210
+ end
211
+
212
+ describe '(london chelsea)' do
213
+ let(:cinema) { CineworldUk::Cinema.new('10', 'London - Chelsea') }
214
+
215
+ before do
216
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'chelsea.html') )
217
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/10/information').to_return( status: 200, body: body, headers: {} )
218
+ end
219
+
220
+ it 'returns the second line' do
221
+ subject.must_equal 'Chelsea'
222
+ end
223
+ end
224
+
225
+ describe '(london o2)' do
226
+ let(:cinema) { CineworldUk::Cinema.new('79', 'The O2, Grenwich') }
227
+
228
+ before do
229
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'the-o2-grenwich.html') )
230
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/79/information').to_return( status: 200, body: body, headers: {} )
231
+ end
232
+
233
+ it 'returns the second line' do
234
+ subject.must_equal 'Peninsula Square'
235
+ end
236
+ end
237
+ end
238
+
239
+ describe '#films' do
240
+ let(:cinema) { CineworldUk::Cinema.new('3', 'Brighton') }
241
+ subject { cinema.films }
242
+
243
+ before do
244
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'whatson', 'brighton.html') )
245
+ stub_request(:get, 'http://www.cineworld.co.uk/whatson?cinema=3').to_return( status: 200, body: body, headers: {} )
246
+ end
247
+
248
+ it 'returns an array of films' do
249
+ subject.must_be_instance_of(Array)
250
+ subject.each do |item|
251
+ item.must_be_instance_of(CineworldUk::Film)
252
+ end
253
+ end
254
+
255
+ it 'returns correct number of films' do
256
+ subject.count.must_equal 24
257
+ end
258
+
259
+ it 'returns uniquely named films' do
260
+ subject.each_with_index do |item, index|
261
+ subject.each_with_index do |jtem, i|
262
+ if index != i
263
+ item.name.wont_equal jtem.name
264
+ item.wont_equal jtem
265
+ end
266
+ end
267
+ end
268
+ end
269
+
270
+ it 'returns film objects with correct names' do
271
+ subject.first.name.must_equal 'Gravity'
272
+ subject.last.name.must_equal 'Don Jon'
273
+ end
274
+ end
275
+
276
+ describe '#locality' do
277
+ subject { cinema.locality }
278
+
279
+ describe '(brighton)' do
280
+ let(:cinema) { CineworldUk::Cinema.new('3', 'Brighton') }
281
+
282
+ before do
283
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'brighton.html') )
284
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/3/information').to_return( status: 200, body: body, headers: {} )
285
+ end
286
+
287
+ it 'returns the town/city' do
288
+ subject.must_equal 'Brighton'
289
+ end
290
+ end
291
+
292
+ describe '(bristol)' do
293
+ let(:cinema) { CineworldUk::Cinema.new('4', 'Bristol') }
294
+
295
+ before do
296
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'bristol.html') )
297
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/4/information').to_return( status: 200, body: body, headers: {} )
298
+ end
299
+
300
+ it 'returns the town/city' do
301
+ subject.must_equal 'Bristol'
302
+ end
303
+ end
304
+
305
+ describe '(bury st edmunds)' do
306
+ let(:cinema) { CineworldUk::Cinema.new('6', 'Bury St. Edmunds') }
307
+
308
+ before do
309
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'bury-st-edmunds.html') )
310
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/6/information').to_return( status: 200, body: body, headers: {} )
311
+ end
312
+
313
+ it 'returns the town/city' do
314
+ subject.must_equal 'Bury St. Edmunds'
315
+ end
316
+ end
317
+
318
+ describe '(london chelsea)' do
319
+ let(:cinema) { CineworldUk::Cinema.new('10', 'London - Chelsea') }
320
+
321
+ before do
322
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'chelsea.html') )
323
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/10/information').to_return( status: 200, body: body, headers: {} )
324
+ end
325
+
326
+ it 'returns the town/city' do
327
+ subject.must_equal 'London'
328
+ end
329
+ end
330
+
331
+ describe '(london o2)' do
332
+ let(:cinema) { CineworldUk::Cinema.new('79', 'The O2, Grenwich') }
333
+
334
+ before do
335
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'the-o2-grenwich.html') )
336
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/79/information').to_return( status: 200, body: body, headers: {} )
337
+ end
338
+
339
+ it 'returns the town/city' do
340
+ subject.must_equal 'London'
341
+ end
342
+ end
343
+ end
344
+
345
+ describe '#postal_code' do
346
+ subject { cinema.postal_code }
347
+
348
+ describe '(brighton)' do
349
+ let(:cinema) { CineworldUk::Cinema.new('3', 'Brighton') }
350
+
351
+ before do
352
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'brighton.html') )
353
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/3/information').to_return( status: 200, body: body, headers: {} )
354
+ end
355
+
356
+ it 'returns the post code' do
357
+ subject.must_equal 'BN2 5UF'
358
+ end
359
+ end
360
+ end
361
+
362
+ describe '#region' do
363
+ subject { cinema.region }
364
+
365
+ describe '(brighton)' do
366
+ let(:cinema) { CineworldUk::Cinema.new('3', 'Brighton') }
367
+
368
+ before do
369
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'brighton.html') )
370
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/3/information').to_return( status: 200, body: body, headers: {} )
371
+ end
372
+
373
+ it 'returns the county' do
374
+ subject.must_equal 'East Sussex'
375
+ end
376
+ end
377
+
378
+ describe '(bristol)' do
379
+ let(:cinema) { CineworldUk::Cinema.new('4', 'Bristol') }
380
+
381
+ before do
382
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'bristol.html') )
383
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/4/information').to_return( status: 200, body: body, headers: {} )
384
+ end
385
+
386
+ it 'returns nil' do
387
+ subject.must_be_nil
388
+ end
389
+ end
390
+
391
+ describe '(bury st edmunds)' do
392
+ let(:cinema) { CineworldUk::Cinema.new('6', 'Bury St. Edmunds') }
393
+
394
+ before do
395
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'bury-st-edmunds.html') )
396
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/6/information').to_return( status: 200, body: body, headers: {} )
397
+ end
398
+
399
+ it 'returns nil' do
400
+ subject.must_be_nil
401
+ end
402
+ end
403
+
404
+ describe '(london o2)' do
405
+ let(:cinema) { CineworldUk::Cinema.new('79', 'The O2, Grenwich') }
406
+
407
+ before do
408
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'the-o2-grenwich.html') )
409
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/79/information').to_return( status: 200, body: body, headers: {} )
410
+ end
411
+
412
+ it 'returns nil' do
413
+ subject.must_be_nil
414
+ end
415
+ end
416
+
417
+ end
418
+
419
+ describe '#screenings' do
420
+ let(:cinema) { CineworldUk::Cinema.new('3', 'Brighton') }
421
+ subject { cinema.screenings }
422
+
423
+ before do
424
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'whatson', 'brighton.html') )
425
+ stub_request(:get, 'http://www.cineworld.co.uk/whatson?cinema=3').to_return( status: 200, body: body, headers: {} )
426
+ end
427
+
428
+ it 'returns an array of screenings' do
429
+ subject.must_be_instance_of(Array)
430
+ subject.each do |item|
431
+ item.must_be_instance_of(CineworldUk::Screening)
432
+ end
433
+ end
434
+
435
+ it 'returns screening objects with correct film names' do
436
+ subject.first.film_name.must_equal 'Gravity'
437
+ subject.last.film_name.must_equal 'Don Jon'
438
+ end
439
+
440
+ it 'returns screening objects with correct cinema name' do
441
+ subject.each { |screening| screening.cinema_name.must_equal 'Brighton' }
442
+ end
443
+
444
+ it 'returns screening objects with correct UTC times' do
445
+ subject.first.when.must_equal Time.utc(2013, 11, 13, 12, 0, 0)
446
+ subject.last.when.must_equal Time.utc(2013, 11, 21, 21, 30, 0)
447
+ end
448
+ end
449
+
450
+ describe '#street_address' do
451
+ subject { cinema.street_address }
452
+
453
+ describe '(brighton)' do
454
+ let(:cinema) { CineworldUk::Cinema.new('3', 'Brighton') }
455
+
456
+ before do
457
+ body = File.read( File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'cinemas', 'brighton.html') )
458
+ stub_request(:get, 'http://www.cineworld.co.uk/cinemas/3/information').to_return( status: 200, body: body, headers: {} )
459
+ end
460
+
461
+ it 'returns the street address' do
462
+ subject.must_equal 'Brighton Marina'
463
+ end
464
+ end
465
+ end
466
+ end