cineworld_uk 1.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.
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