cineworld_uk 1.0.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 +64 -0
- data/README.md +2 -1
- data/cineworld_uk.gemspec +3 -3
- data/lib/cineworld_uk/cinema.rb +60 -69
- data/lib/cineworld_uk/film.rb +25 -7
- data/lib/cineworld_uk/internal/film_with_screenings_parser.rb +29 -71
- data/lib/cineworld_uk/internal/name_parser.rb +20 -18
- data/lib/cineworld_uk/internal/screening_parser.rb +132 -0
- data/lib/cineworld_uk/internal/titleize.rb +19 -19
- data/lib/cineworld_uk/internal/website.rb +33 -0
- data/lib/cineworld_uk/internal/whatson_parser.rb +44 -0
- data/lib/cineworld_uk/screening.rb +65 -20
- data/lib/cineworld_uk/version.rb +2 -2
- data/lib/cineworld_uk.rb +4 -0
- data/test/fixture_updater.rb +64 -0
- data/test/fixtures/cinemas.html +134 -41
- data/test/fixtures/{cinemas/bury-st-edmunds.html → information/brighton.html} +488 -437
- data/test/fixtures/{cinemas → information}/bristol.html +463 -410
- data/test/fixtures/whatson/brighton/film_first.html +775 -0
- data/test/fixtures/whatson/brighton/film_last.html +52 -0
- data/test/fixtures/whatson/brighton/film_second.html +645 -0
- data/test/fixtures/whatson/brighton.html +3564 -2690
- data/test/fixtures/whatson/glasgow-imax-at-gsc/film_first.html +140 -0
- data/test/fixtures/whatson/the-o2-greenwich/film_first.html +1242 -0
- data/test/lib/cineworld_uk/cinema_test.rb +104 -301
- data/test/lib/cineworld_uk/film_test.rb +49 -2
- data/test/lib/cineworld_uk/internal/film_with_screenings_parser_test.rb +83 -81
- data/test/lib/cineworld_uk/internal/titleize_test.rb +12 -5
- data/test/lib/cineworld_uk/internal/website_test.rb +57 -0
- data/test/lib/cineworld_uk/internal/whatson_parser_test.rb +58 -0
- data/test/lib/cineworld_uk/screening_test.rb +155 -23
- data/test/lib/cineworld_uk/version_test.rb +1 -1
- data/test/test_helper.rb +3 -1
- metadata +30 -33
- data/test/fixtures/cinemas/brighton.html +0 -8
- data/test/fixtures/cinemas/chelsea.html +0 -1030
- data/test/fixtures/cinemas/glasgow-imax-at-gsc.html +0 -916
- data/test/fixtures/cinemas/the-o2-grenwich.html +0 -1191
- data/test/fixtures/whatson/brighton/gravity.html +0 -2129
- data/test/fixtures/whatson/glasgow-imax-at-gsc/the-hunger-games-catching-fire.html +0 -498
- data/test/fixtures/whatson/glasgow-imax-at-gsc-cinema.html +0 -3160
- data/test/fixtures/whatson/the-o2-greenwich/gravity.html +0 -784
- data/test/fixtures/whatson/the-o2-greenwich/the-hobbit-desolation-of-smaug.html +0 -764
- data/test/fixtures/whatson/the-o2-greenwich.html +0 -6854
- data/test/fixtures/whatson/wandsworth.html +0 -13729
@@ -1,127 +1,129 @@
|
|
1
1
|
require_relative '../../../test_helper'
|
2
2
|
|
3
3
|
describe CineworldUk::Internal::FilmWithScreeningsParser do
|
4
|
+
let(:described_class) { CineworldUk::Internal::FilmWithScreeningsParser }
|
4
5
|
|
5
|
-
describe '#
|
6
|
-
subject {
|
6
|
+
describe '#cinema_id' do
|
7
|
+
subject { described_class.new(film_html).cinema_id }
|
7
8
|
|
8
|
-
describe 'passed
|
9
|
-
let(:film_html) { read_film_html('brighton/
|
9
|
+
describe 'passed film html from top of page' do
|
10
|
+
let(:film_html) { read_film_html('brighton/film_first') }
|
10
11
|
|
11
|
-
it 'returns the
|
12
|
-
subject.must_equal(
|
12
|
+
it 'returns the id' do
|
13
|
+
subject.must_equal(3)
|
13
14
|
end
|
14
15
|
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe '#showings' do
|
18
|
-
subject { CineworldUk::Internal::FilmWithScreeningsParser.new(film_html).showings }
|
19
16
|
|
20
|
-
describe 'passed
|
21
|
-
let(:film_html) { read_film_html('brighton/
|
17
|
+
describe 'passed second html from page' do
|
18
|
+
let(:film_html) { read_film_html('brighton/film_second') }
|
22
19
|
|
23
|
-
it 'returns
|
24
|
-
subject.
|
25
|
-
subject.keys.each { |key| key.must_be_instance_of String }
|
20
|
+
it 'returns the id' do
|
21
|
+
subject.must_equal(3)
|
26
22
|
end
|
23
|
+
end
|
27
24
|
|
28
|
-
|
29
|
-
|
30
|
-
value.must_be_instance_of Array
|
31
|
-
value.each do |array|
|
32
|
-
array.must_be_instance_of Array
|
33
|
-
array[0].must_be_instance_of Time
|
34
|
-
array[1].must_be_instance_of String
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
25
|
+
describe 'passed last html from end of page' do
|
26
|
+
let(:film_html) { read_film_html('brighton/film_last') }
|
38
27
|
|
39
|
-
it 'returns the
|
40
|
-
subject.
|
41
|
-
subject['2D'].count.must_equal 49
|
42
|
-
subject['3D'].count.must_equal 89
|
28
|
+
it 'returns the id' do
|
29
|
+
subject.must_equal(3)
|
43
30
|
end
|
31
|
+
end
|
32
|
+
end
|
44
33
|
|
45
|
-
|
46
|
-
|
47
|
-
subject['2D'].last[0].must_equal Time.utc(2013, 11, 21, 20, 30, 0)
|
48
|
-
|
49
|
-
subject['3D'].first[0].must_equal Time.utc(2013, 11, 13, 12, 50, 0)
|
50
|
-
subject['3D'].last[0].must_equal Time.utc(2013, 11, 21, 17, 45, 0)
|
51
|
-
end
|
34
|
+
describe '#film_name' do
|
35
|
+
subject { described_class.new(film_html).film_name }
|
52
36
|
|
53
|
-
|
54
|
-
|
55
|
-
subject['2D'].last[1].must_equal 'http://www.cineworld.co.uk/booking?cinema=3&filmEdi=43483&date=20131121&time=20:30'
|
37
|
+
describe 'passed film html from top of page' do
|
38
|
+
let(:film_html) { read_film_html('brighton/film_first') }
|
56
39
|
|
57
|
-
|
58
|
-
subject
|
40
|
+
it 'returns the film name' do
|
41
|
+
subject.must_be_instance_of(String)
|
42
|
+
subject.must_equal('Dawn of the Planet of the Apes')
|
59
43
|
end
|
60
44
|
end
|
61
45
|
|
62
|
-
describe 'passed
|
63
|
-
let(:film_html) { read_film_html('
|
46
|
+
describe 'passed film html from page' do
|
47
|
+
let(:film_html) { read_film_html('brighton/film_second') }
|
64
48
|
|
65
|
-
it 'returns the
|
66
|
-
subject.
|
67
|
-
subject
|
68
|
-
subject['3D'].count.must_equal 24
|
69
|
-
subject['3D D-BOX'].count.must_equal 19
|
49
|
+
it 'returns the film name' do
|
50
|
+
subject.must_be_instance_of(String)
|
51
|
+
subject.must_equal('How To Train Your Dragon 2')
|
70
52
|
end
|
53
|
+
end
|
71
54
|
|
72
|
-
|
73
|
-
|
74
|
-
subject['2D'].last[0].must_equal Time.utc(2013, 11, 21, 18, 35, 0)
|
75
|
-
|
76
|
-
subject['3D'].first[0].must_equal Time.utc(2013, 11, 16, 22, 15, 0)
|
77
|
-
subject['3D'].last[0].must_equal Time.utc(2013, 11, 21, 21, 0, 0)
|
55
|
+
describe 'passed film html from end of page' do
|
56
|
+
let(:film_html) { read_film_html('brighton/film_last') }
|
78
57
|
|
79
|
-
|
80
|
-
subject
|
58
|
+
it 'returns the film name' do
|
59
|
+
subject.must_be_instance_of(String)
|
60
|
+
subject.must_equal('The Royal Ballet - Manon')
|
81
61
|
end
|
82
62
|
end
|
63
|
+
end
|
83
64
|
|
84
|
-
|
85
|
-
|
65
|
+
describe '#to_a' do
|
66
|
+
subject { described_class.new(film_html).to_a }
|
86
67
|
|
87
|
-
|
88
|
-
|
89
|
-
|
68
|
+
describe 'passed film html from top of page' do
|
69
|
+
let(:film_html) { read_film_html('brighton/film_first') }
|
70
|
+
let(:permitted_types) { %w(baby hfr kids) }
|
71
|
+
|
72
|
+
it 'returns a non-zero array of hashes' do
|
73
|
+
subject.must_be_instance_of(Array)
|
74
|
+
subject.size.must_be :>=, 1
|
75
|
+
subject.each do |hash|
|
76
|
+
hash.must_be_instance_of(Hash)
|
77
|
+
end
|
90
78
|
end
|
91
79
|
|
92
|
-
it '
|
93
|
-
subject
|
94
|
-
|
80
|
+
it 'contains properly completed hashes' do
|
81
|
+
subject.each do |hash|
|
82
|
+
hash[:booking_url].must_include('http://www.cineworld.co.uk')
|
83
|
+
hash[:dimension].must_match(/\A[23]d\z/)
|
84
|
+
hash[:time].must_be_instance_of(Time)
|
85
|
+
hash[:variant].must_be_instance_of(Array)
|
86
|
+
hash[:variant].each do |type|
|
87
|
+
type.must_be_instance_of(String)
|
88
|
+
permitted_types.must_include(type)
|
89
|
+
end
|
90
|
+
end
|
95
91
|
end
|
96
92
|
end
|
97
93
|
|
98
|
-
describe 'passed
|
99
|
-
let(:film_html)
|
94
|
+
describe 'passed film html from top of dbox cinema page' do
|
95
|
+
let(:film_html) { read_film_html('the-o2-greenwich/film_first') }
|
96
|
+
let(:permitted_types) { %w(baby dbox hfr kids) }
|
100
97
|
|
101
|
-
it 'returns
|
102
|
-
subject.
|
103
|
-
|
104
|
-
|
105
|
-
|
98
|
+
it 'returns a hash with allowed variants' do
|
99
|
+
subject.each do |hash|
|
100
|
+
hash[:variant].each do |type|
|
101
|
+
type.must_be_instance_of(String)
|
102
|
+
permitted_types.must_include(type)
|
103
|
+
end
|
104
|
+
end
|
106
105
|
end
|
106
|
+
end
|
107
107
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
subject['3D HFR'].first[0].must_equal Time.utc(2014, 1, 2, 19, 20, 0)
|
113
|
-
subject['3D HFR'].last[0].must_equal Time.utc(2014, 1, 2, 19, 20, 0)
|
108
|
+
describe 'passed film html from top of imax cinema page' do
|
109
|
+
let(:film_html) { read_film_html('glasgow-imax-at-gsc/film_first') }
|
110
|
+
let(:permitted_types) { %w(baby dbox hfr imax kids) }
|
114
111
|
|
115
|
-
|
116
|
-
subject
|
112
|
+
it 'returns a hash with allowed variants' do
|
113
|
+
subject.each do |hash|
|
114
|
+
hash[:variant].each do |type|
|
115
|
+
type.must_be_instance_of(String)
|
116
|
+
permitted_types.must_include(type)
|
117
|
+
end
|
118
|
+
end
|
117
119
|
end
|
118
120
|
end
|
119
|
-
|
120
121
|
end
|
121
122
|
|
122
123
|
private
|
123
124
|
|
124
125
|
def read_film_html(filename)
|
125
|
-
|
126
|
+
path = '../../../../fixtures/whatson/'
|
127
|
+
File.read(File.expand_path(path + "#{filename}.html", __FILE__))
|
126
128
|
end
|
127
129
|
end
|
@@ -6,8 +6,14 @@ describe CineworldUk::Internal::Titleize do
|
|
6
6
|
subject { CineworldUk::Internal::Titleize.titleize(string) }
|
7
7
|
|
8
8
|
[
|
9
|
-
[
|
10
|
-
|
9
|
+
[
|
10
|
+
'star wars: episode iv - a new hope',
|
11
|
+
'Star Wars: Episode IV - A New Hope'
|
12
|
+
],
|
13
|
+
[
|
14
|
+
'star wars: episode v - the empire strikes back',
|
15
|
+
'Star Wars: Episode V - The Empire Strikes Back'
|
16
|
+
],
|
11
17
|
['2 fast 2 furious', '2 Fast 2 Furious'],
|
12
18
|
['saw iv', 'Saw IV'],
|
13
19
|
['fast & Furious 6', 'Fast & Furious 6'],
|
@@ -20,7 +26,6 @@ describe CineworldUk::Internal::Titleize do
|
|
20
26
|
subject.must_equal test_case[1]
|
21
27
|
end
|
22
28
|
end
|
23
|
-
|
24
29
|
end
|
25
30
|
end
|
26
31
|
|
@@ -28,7 +33,10 @@ describe CineworldUk::Internal::Titleize do
|
|
28
33
|
subject { CineworldUk::Internal::Titleize.phrases(string) }
|
29
34
|
|
30
35
|
[
|
31
|
-
[
|
36
|
+
[
|
37
|
+
'star wars: episode iv - a new hope',
|
38
|
+
['star wars:', 'episode iv -', 'a new hope']
|
39
|
+
]
|
32
40
|
].each do |test_case|
|
33
41
|
|
34
42
|
describe test_case[0] do
|
@@ -38,6 +46,5 @@ describe CineworldUk::Internal::Titleize do
|
|
38
46
|
end
|
39
47
|
end
|
40
48
|
end
|
41
|
-
|
42
49
|
end
|
43
50
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require_relative '../../../test_helper'
|
2
|
+
|
3
|
+
describe CineworldUk::Internal::Website do
|
4
|
+
describe '#cinemas' do
|
5
|
+
subject { CineworldUk::Internal::Website.new.cinemas }
|
6
|
+
|
7
|
+
before { stub_get('cinemas', cinemas_html) }
|
8
|
+
|
9
|
+
it 'returns a string' do
|
10
|
+
subject.class.must_equal String
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#cinema_information(id)' do
|
15
|
+
subject { CineworldUk::Internal::Website.new.cinema_information(3) }
|
16
|
+
|
17
|
+
before { stub_get('cinemas/3/information', information_html) }
|
18
|
+
|
19
|
+
it 'returns a string' do
|
20
|
+
subject.class.must_equal String
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#whatson(id)' do
|
25
|
+
subject { CineworldUk::Internal::Website.new.whatson(3) }
|
26
|
+
|
27
|
+
before { stub_get('whatson?cinema=3', whatson_html) }
|
28
|
+
|
29
|
+
it 'returns a string' do
|
30
|
+
subject.class.must_equal String
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def read_file(filepath)
|
37
|
+
File.read(File.expand_path(filepath, __FILE__))
|
38
|
+
end
|
39
|
+
|
40
|
+
def cinemas_html
|
41
|
+
read_file('../../../../fixtures/cinemas.html')
|
42
|
+
end
|
43
|
+
|
44
|
+
def information_html
|
45
|
+
read_file('../../../../fixtures/information/brighton.html')
|
46
|
+
end
|
47
|
+
|
48
|
+
def stub_get(site_path, response_body)
|
49
|
+
url = "http://www.cineworld.co.uk/#{site_path}"
|
50
|
+
response = { status: 200, body: response_body, headers: {} }
|
51
|
+
stub_request(:get, url).to_return(response)
|
52
|
+
end
|
53
|
+
|
54
|
+
def whatson_html
|
55
|
+
read_file('../../../../fixtures/whatson/brighton.html')
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require_relative '../../../test_helper'
|
2
|
+
|
3
|
+
describe CineworldUk::Internal::WhatsonParser do
|
4
|
+
let(:described_class) { CineworldUk::Internal::WhatsonParser }
|
5
|
+
|
6
|
+
let(:website) { Minitest::Mock.new }
|
7
|
+
|
8
|
+
before do
|
9
|
+
WebMock.disable_net_connect!
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#films_with_screenings' do
|
13
|
+
subject { described_class.new(3).films_with_screenings }
|
14
|
+
|
15
|
+
before do
|
16
|
+
website.expect(:whatson, brighton_whatson_html, [3])
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'returns an non-zero array of film screenings html fragments' do
|
20
|
+
CineworldUk::Internal::Website.stub :new, website do
|
21
|
+
subject.must_be_instance_of(Array)
|
22
|
+
subject.size.must_be :>, 0
|
23
|
+
|
24
|
+
subject.each do |film_html|
|
25
|
+
film_html.must_be_instance_of(String)
|
26
|
+
film_html.size.must_be :>, 0
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'returns an array with correct content' do
|
32
|
+
CineworldUk::Internal::Website.stub :new, website do
|
33
|
+
# include primary film
|
34
|
+
subject.first.must_include('class="span4"') # big poster
|
35
|
+
subject.first.must_include('class="span5"') # film info block
|
36
|
+
subject.first.must_include('<h3 class="h1">') # title
|
37
|
+
subject.first.must_include('class="date row"') # showing rows
|
38
|
+
|
39
|
+
subject[1..-1].each do |html|
|
40
|
+
html.must_include('class="span2"') # poster
|
41
|
+
html.must_include('class="span7"') # film info block
|
42
|
+
html.must_include('<h3 class="h1">') # title
|
43
|
+
html.must_include('class="date row"') # showing rows
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def read_file(filepath)
|
52
|
+
File.read(File.expand_path(filepath, __FILE__))
|
53
|
+
end
|
54
|
+
|
55
|
+
def brighton_whatson_html
|
56
|
+
read_file('../../../../fixtures/whatson/brighton.html')
|
57
|
+
end
|
58
|
+
end
|
@@ -1,40 +1,172 @@
|
|
1
1
|
require_relative '../../test_helper'
|
2
2
|
|
3
3
|
describe CineworldUk::Screening do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
let(:website) { Minitest::Mock.new }
|
5
|
+
|
6
|
+
before do
|
7
|
+
WebMock.disable_net_connect!
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '.at(cinema_id)' do
|
11
|
+
subject { CineworldUk::Screening.at(3) }
|
12
|
+
|
13
|
+
before do
|
14
|
+
website.expect(:whatson, whatson_html('brighton'), [3])
|
15
|
+
website.expect(:cinemas, cinemas_html)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'returns an array of screenings' do
|
19
|
+
CineworldUk::Internal::Website.stub :new, website do
|
20
|
+
subject.must_be_instance_of(Array)
|
21
|
+
subject.each do |screening|
|
22
|
+
screening.must_be_instance_of(CineworldUk::Screening)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'returns correct number of screenings' do
|
28
|
+
CineworldUk::Internal::Website.stub :new, website do
|
29
|
+
subject.count.must_equal 333
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '.new' do
|
35
|
+
subject { CineworldUk::Screening.new(options) }
|
36
|
+
|
37
|
+
describe 'simple' do
|
38
|
+
let(:options) do
|
39
|
+
{
|
40
|
+
film_name: 'Iron Man 3',
|
41
|
+
cinema_id: 3,
|
42
|
+
cinema_name: 'Cineworld Brighton',
|
43
|
+
time: Time.utc(2013, 9, 12, 11, 0)
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'sets cinema name and film name' do
|
48
|
+
subject.film_name.must_equal 'Iron Man 3'
|
49
|
+
subject.cinema_name.must_equal 'Cineworld Brighton'
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'booking url, dimension & varient are set to defaults' do
|
53
|
+
subject.booking_url.must_equal nil
|
54
|
+
subject.dimension.must_equal '2d'
|
55
|
+
subject.variant.must_equal []
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '#dimension' do
|
61
|
+
let(:options) do
|
62
|
+
{
|
63
|
+
film_name: 'Iron Man 3',
|
64
|
+
dimension: '3d',
|
65
|
+
cinema_id: 3,
|
66
|
+
cinema_name: 'Cineworld Brighton',
|
67
|
+
time: Time.utc(2013, 9, 12, 11, 0)
|
68
|
+
}
|
69
|
+
end
|
70
|
+
|
71
|
+
subject { CineworldUk::Screening.new(options).dimension }
|
72
|
+
|
73
|
+
it 'returns 2d or 3d' do
|
74
|
+
subject.must_be_instance_of(String)
|
75
|
+
subject.must_equal '3d'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe '#showing_at' do
|
80
|
+
subject { CineworldUk::Screening.new(options).showing_at }
|
81
|
+
|
82
|
+
describe 'with utc time' do
|
83
|
+
let(:options) do
|
84
|
+
{
|
85
|
+
film_name: 'Iron Man 3',
|
86
|
+
cinema_id: 3,
|
87
|
+
cinema_name: 'Cineworld Brighton',
|
88
|
+
time: Time.utc(2013, 9, 12, 11, 0)
|
89
|
+
}
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'returns UTC time' do
|
93
|
+
subject.must_be_instance_of Time
|
94
|
+
subject.must_equal Time.utc(2013, 9, 12, 11, 0)
|
95
|
+
end
|
12
96
|
end
|
13
97
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
98
|
+
describe 'with non-utc time' do
|
99
|
+
let(:options) do
|
100
|
+
{
|
101
|
+
film_name: 'Iron Man 3',
|
102
|
+
cinema_id: 3,
|
103
|
+
cinema_name: 'Cineworld Brighton',
|
104
|
+
time: Time.parse('2013-09-12 11:00')
|
105
|
+
}
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'returns UTC time' do
|
109
|
+
subject.must_be_instance_of Time
|
110
|
+
subject.must_equal Time.utc(2013, 9, 12, 10, 0)
|
111
|
+
end
|
21
112
|
end
|
22
113
|
end
|
23
114
|
|
24
|
-
describe '#
|
25
|
-
|
26
|
-
|
115
|
+
describe '#showing_on' do
|
116
|
+
let(:options) do
|
117
|
+
{
|
118
|
+
film_name: 'Iron Man 3',
|
119
|
+
cinema_id: 3,
|
120
|
+
cinema_name: 'Cineworld Brighton',
|
121
|
+
time: Time.utc(2013, 9, 12, 11, 0)
|
122
|
+
}
|
123
|
+
end
|
124
|
+
|
125
|
+
subject { CineworldUk::Screening.new(options).showing_on }
|
126
|
+
|
127
|
+
it 'returns date of showing' do
|
27
128
|
subject.must_be_instance_of(Date)
|
28
129
|
subject.must_equal Date.new(2013, 9, 12)
|
29
130
|
end
|
30
131
|
end
|
31
132
|
|
32
|
-
describe '#
|
33
|
-
subject {
|
34
|
-
|
133
|
+
describe '#variant' do
|
134
|
+
subject { CineworldUk::Screening.new(options).variant }
|
135
|
+
|
136
|
+
let(:options) do
|
137
|
+
{
|
138
|
+
film_name: 'Iron Man 3',
|
139
|
+
cinema_id: 3,
|
140
|
+
cinema_name: 'Cineworld Brighton',
|
141
|
+
time: Time.utc(2013, 9, 12, 11, 0),
|
142
|
+
variant: 'Kids'
|
143
|
+
}
|
144
|
+
end
|
35
145
|
|
36
|
-
it '
|
37
|
-
subject.
|
146
|
+
it 'is an alphabetically ordered array of lower-cased strings' do
|
147
|
+
subject.must_be_instance_of Array
|
148
|
+
subject.each do |tag|
|
149
|
+
tag.must_be_instance_of String
|
150
|
+
end
|
151
|
+
subject.must_equal %w(kids)
|
38
152
|
end
|
39
153
|
end
|
154
|
+
|
155
|
+
private
|
156
|
+
|
157
|
+
def cinemas_html
|
158
|
+
read_file('../../../fixtures/cinemas.html')
|
159
|
+
end
|
160
|
+
|
161
|
+
def information_html(filename)
|
162
|
+
read_file("../../../fixtures/information/#{filename}.html")
|
163
|
+
end
|
164
|
+
|
165
|
+
def read_file(filepath)
|
166
|
+
File.read(File.expand_path(filepath, __FILE__))
|
167
|
+
end
|
168
|
+
|
169
|
+
def whatson_html(filename)
|
170
|
+
read_file("../../../fixtures/whatson/#{filename}.html")
|
171
|
+
end
|
40
172
|
end
|
data/test/test_helper.rb
CHANGED