odeon_uk 2.0.4 → 3.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 +2 -1
- data/CHANGELOG.md +6 -0
- data/Rakefile +29 -0
- data/lib/odeon_uk/api/cinema.rb +62 -0
- data/lib/odeon_uk/api/response.rb +55 -0
- data/lib/odeon_uk/api/screenings.rb +89 -0
- data/lib/odeon_uk/cinema.rb +53 -114
- data/lib/odeon_uk/configuration.rb +21 -0
- data/lib/odeon_uk/html/cinema.rb +101 -0
- data/lib/odeon_uk/html/parser/film_with_screenings.rb +160 -0
- data/lib/odeon_uk/html/screenings.rb +38 -0
- data/lib/odeon_uk/{internal → html}/website.rb +1 -1
- data/lib/odeon_uk/internal/title_sanitizer.rb +1 -0
- data/lib/odeon_uk/screening.rb +7 -15
- data/lib/odeon_uk/version.rb +2 -2
- data/lib/odeon_uk.rb +11 -4
- data/odeon_uk.gemspec +2 -0
- data/rake/fixture_creator.rb +98 -0
- data/test/fixtures/api/all_cinemas.plist +0 -0
- data/test/fixtures/api/app_init.plist +0 -0
- data/test/fixtures/api/film_times/71-100747.plist +0 -0
- data/test/fixtures/api/film_times/71-100750.plist +0 -0
- data/test/fixtures/api/film_times/71-100790.plist +0 -0
- data/test/fixtures/api/film_times/71-14646.plist +0 -0
- data/test/fixtures/api/film_times/71-14725.plist +0 -0
- data/test/fixtures/api/film_times/71-15086.plist +0 -0
- data/test/fixtures/api/film_times/71-15096.plist +0 -0
- data/test/fixtures/api/film_times/71-15122.plist +0 -0
- data/test/fixtures/api/film_times/71-15130.plist +0 -0
- data/test/fixtures/api/film_times/71-15141.plist +0 -0
- data/test/fixtures/api/film_times/71-15142.plist +0 -0
- data/test/fixtures/api/film_times/71-15143.plist +0 -0
- data/test/fixtures/api/film_times/71-15144.plist +0 -0
- data/test/fixtures/api/film_times/71-15145.plist +0 -0
- data/test/fixtures/api/film_times/71-15170.plist +0 -0
- data/test/fixtures/api/film_times/71-15172.plist +0 -0
- data/test/fixtures/api/film_times/71-15177.plist +0 -0
- data/test/fixtures/api/film_times/71-15179.plist +0 -0
- data/test/fixtures/api/film_times/71-15182.plist +0 -0
- data/test/fixtures/api/film_times/71-15286.plist +0 -0
- data/test/fixtures/api/film_times/71-15360.plist +0 -0
- data/test/fixtures/api/film_times/71-15586.plist +0 -0
- data/test/fixtures/api/film_times/71-15700.plist +0 -0
- data/test/fixtures/api/film_times/71-15718.plist +0 -0
- data/test/fixtures/api/film_times/71-15768.plist +0 -0
- data/test/fixtures/api/film_times/71-15788.plist +0 -0
- data/test/fixtures/api/film_times/71-15793.plist +0 -0
- data/test/fixtures/api/film_times/71-15794.plist +0 -0
- data/test/fixtures/api/film_times/71-15795.plist +0 -0
- data/test/fixtures/api/film_times/71-15796.plist +0 -0
- data/test/fixtures/api/film_times/71-15799.plist +0 -0
- data/test/fixtures/api/film_times/71-15802.plist +0 -0
- data/test/fixtures/api/film_times/71-15814.plist +0 -0
- data/test/fixtures/api/film_times/71-15817.plist +0 -0
- data/test/fixtures/api/film_times/71-15840.plist +0 -0
- data/test/fixtures/{cinema/leicester_square.html → html/cinema/105.html} +384 -313
- data/test/fixtures/{cinema/bfi_imax.html → html/cinema/211.html} +677 -355
- data/test/fixtures/{cinema/brighton.html → html/cinema/71.html} +899 -431
- data/test/fixtures/html/showtimes/11-imax.html +170 -0
- data/test/fixtures/html/showtimes/171-d-box.html +203 -0
- data/test/fixtures/html/showtimes/71-0.html +59 -0
- data/test/fixtures/html/showtimes/71.html +2395 -0
- data/test/fixtures/{sitemap.html → html/sitemap.html} +264 -352
- data/test/lib/odeon_uk/api/cinema_test.rb +149 -0
- data/test/lib/odeon_uk/api/response_test.rb +44 -0
- data/test/lib/odeon_uk/api/screenings_test.rb +43 -0
- data/test/lib/odeon_uk/cinema_test.rb +373 -148
- data/test/lib/odeon_uk/configuration_test.rb +29 -0
- data/test/lib/odeon_uk/html/cinema_test.rb +149 -0
- data/test/lib/odeon_uk/{internal/film_with_screenings_parser_test.rb → html/parser/film_with_screenings_test.rb} +12 -42
- data/test/lib/odeon_uk/html/screenings_test.rb +43 -0
- data/test/lib/odeon_uk/html/website_test.rb +37 -0
- data/test/lib/odeon_uk/screening_test.rb +17 -83
- data/test/support/api_fixtures_helper.rb +34 -0
- data/test/support/website_fixtures_helper.rb +25 -0
- data/test/test_helper.rb +7 -2
- metadata +149 -34
- data/lib/odeon_uk/film.rb +0 -65
- data/lib/odeon_uk/internal/film_with_screenings_parser.rb +0 -159
- data/lib/odeon_uk/internal/showtimes_page.rb +0 -36
- data/test/fixture_updater.rb +0 -72
- data/test/fixtures/showtimes/brighton/film_first.html +0 -92
- data/test/fixtures/showtimes/brighton/film_last.html +0 -100
- data/test/fixtures/showtimes/brighton.html +0 -2071
- data/test/fixtures/showtimes/liverpool_one/film_first_dbox.html +0 -188
- data/test/fixtures/showtimes/manchester/film_first_imax.html +0 -182
- data/test/lib/odeon_uk/film_test.rb +0 -142
- data/test/lib/odeon_uk/internal/showtimes_page_test.rb +0 -51
- data/test/lib/odeon_uk/internal/website_test.rb +0 -59
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
require_relative '../../../test_helper'
|
|
2
|
+
|
|
3
|
+
describe OdeonUk::Html::Cinema do
|
|
4
|
+
include WebsiteFixturesHelper
|
|
5
|
+
|
|
6
|
+
let(:described_class) { OdeonUk::Html::Cinema }
|
|
7
|
+
|
|
8
|
+
let(:website) { Minitest::Mock.new }
|
|
9
|
+
|
|
10
|
+
before do
|
|
11
|
+
WebMock.disable_net_connect!
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe '.ids' do
|
|
15
|
+
subject { described_class.ids }
|
|
16
|
+
|
|
17
|
+
before do
|
|
18
|
+
website.expect(:sitemap, sitemap_html)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'returns an Array of OdeonUk::Html::Cinemas' do
|
|
22
|
+
OdeonUk::Html::Website.stub :new, website do
|
|
23
|
+
subject.must_be_instance_of(Array)
|
|
24
|
+
subject.each do |value|
|
|
25
|
+
value.must_be_instance_of(Fixnum)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'returns the correctly sized array' do
|
|
31
|
+
OdeonUk::Html::Website.stub :new, website do
|
|
32
|
+
subject.size.must_equal 115
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe '.new(id)' do
|
|
38
|
+
subject { described_class.new(id) }
|
|
39
|
+
|
|
40
|
+
describe 'Brighton' do
|
|
41
|
+
let(:id) { 71 }
|
|
42
|
+
|
|
43
|
+
it 'returns a cinema' do
|
|
44
|
+
subject.must_be_instance_of(described_class)
|
|
45
|
+
subject.id.must_equal(id)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe '#name' do
|
|
51
|
+
subject { described_class.new(id).name }
|
|
52
|
+
|
|
53
|
+
before { website.expect(:sitemap, sitemap_html) }
|
|
54
|
+
|
|
55
|
+
describe 'Brighton' do
|
|
56
|
+
let(:id) { 71 }
|
|
57
|
+
|
|
58
|
+
it 'returns cinema name' do
|
|
59
|
+
OdeonUk::Html::Website.stub :new, website do
|
|
60
|
+
subject.must_equal 'Brighton'
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
describe 'Leicester Square' do
|
|
66
|
+
let(:id) { 105 }
|
|
67
|
+
|
|
68
|
+
it 'returns cinema name' do
|
|
69
|
+
OdeonUk::Html::Website.stub :new, website do
|
|
70
|
+
subject.must_equal 'London - Leicester Square'
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe '#locality' do
|
|
77
|
+
subject { described_class.new(id).locality }
|
|
78
|
+
|
|
79
|
+
before { website.expect(:sitemap, sitemap_html) }
|
|
80
|
+
|
|
81
|
+
describe 'Short Address (Brighton)' do
|
|
82
|
+
let(:id) { 71 }
|
|
83
|
+
|
|
84
|
+
before { website.expect(:cinema, cinema_html(71), [71]) }
|
|
85
|
+
|
|
86
|
+
it 'returns town name' do
|
|
87
|
+
OdeonUk::Html::Website.stub :new, website do
|
|
88
|
+
subject.must_equal 'Brighton'
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
describe '#postal_code' do
|
|
95
|
+
subject { described_class.new(id).postal_code }
|
|
96
|
+
|
|
97
|
+
describe 'short address' do
|
|
98
|
+
let(:id) { 71 }
|
|
99
|
+
|
|
100
|
+
before { website.expect(:cinema, cinema_html(71), [71]) }
|
|
101
|
+
|
|
102
|
+
it 'returns the postcode' do
|
|
103
|
+
OdeonUk::Html::Website.stub :new, website do
|
|
104
|
+
subject.must_equal 'BN1 2RE'
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
describe 'short address (London)' do
|
|
110
|
+
let(:id) { 211 }
|
|
111
|
+
|
|
112
|
+
before { website.expect(:cinema, cinema_html(211), [211]) }
|
|
113
|
+
|
|
114
|
+
it 'returns the postcode' do
|
|
115
|
+
OdeonUk::Html::Website.stub :new, website do
|
|
116
|
+
subject.must_equal 'SE1 8XR'
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
describe 'short address (extra London Postcode)' do
|
|
122
|
+
let(:id) { 105 }
|
|
123
|
+
|
|
124
|
+
before { website.expect(:cinema, cinema_html(105), [105]) }
|
|
125
|
+
|
|
126
|
+
it 'returns the postcode' do
|
|
127
|
+
OdeonUk::Html::Website.stub :new, website do
|
|
128
|
+
subject.must_equal 'WC2H 7LQ'
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
describe '#street_address' do
|
|
135
|
+
subject { described_class.new(id).street_address }
|
|
136
|
+
|
|
137
|
+
describe 'short address' do
|
|
138
|
+
let(:id) { 71 }
|
|
139
|
+
|
|
140
|
+
before { website.expect(:cinema, cinema_html(71), [71]) }
|
|
141
|
+
|
|
142
|
+
it 'returns first line of address' do
|
|
143
|
+
OdeonUk::Html::Website.stub :new, website do
|
|
144
|
+
subject.must_equal 'Kingswest'
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
@@ -1,24 +1,18 @@
|
|
|
1
|
-
require_relative '
|
|
1
|
+
require_relative '../../../../test_helper'
|
|
2
2
|
|
|
3
|
-
describe OdeonUk::
|
|
4
|
-
|
|
3
|
+
describe OdeonUk::Html::Parser::FilmWithScreenings do
|
|
4
|
+
include WebsiteFixturesHelper
|
|
5
|
+
|
|
6
|
+
let(:described_class) { OdeonUk::Html::Parser::FilmWithScreenings }
|
|
5
7
|
|
|
6
8
|
describe '#film_name' do
|
|
7
9
|
subject { described_class.new(film_html).film_name }
|
|
8
10
|
|
|
9
|
-
describe 'passed
|
|
10
|
-
let(:film_html) {
|
|
11
|
-
|
|
12
|
-
it 'returns film name' do
|
|
13
|
-
subject.must_equal 'A Most Wanted Man'
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
describe 'passed last film html' do
|
|
18
|
-
let(:film_html) { read_film_html('brighton/film_last') }
|
|
11
|
+
describe 'passed film html' do
|
|
12
|
+
let(:film_html) { showtimes_html('71-0') }
|
|
19
13
|
|
|
20
14
|
it 'returns film name' do
|
|
21
|
-
subject.must_equal '
|
|
15
|
+
subject.must_equal 'Home'
|
|
22
16
|
end
|
|
23
17
|
end
|
|
24
18
|
end
|
|
@@ -26,8 +20,8 @@ describe OdeonUk::Internal::FilmWithScreeningsParser do
|
|
|
26
20
|
describe '#to_a' do
|
|
27
21
|
subject { described_class.new(film_html).to_a }
|
|
28
22
|
|
|
29
|
-
describe 'passed
|
|
30
|
-
let(:film_html) {
|
|
23
|
+
describe 'passed film html' do
|
|
24
|
+
let(:film_html) { showtimes_html('71-0') }
|
|
31
25
|
|
|
32
26
|
it 'returns an array of hashes of screening attributes' do
|
|
33
27
|
subject.must_be_instance_of Array
|
|
@@ -47,32 +41,13 @@ describe OdeonUk::Internal::FilmWithScreeningsParser do
|
|
|
47
41
|
end
|
|
48
42
|
end
|
|
49
43
|
|
|
50
|
-
it 'returns the correct number of screenings' do
|
|
51
|
-
subject.count.must_equal 10
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
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
|
|
67
|
-
end
|
|
68
|
-
|
|
69
44
|
it 'returns at least 1' do
|
|
70
45
|
subject.count.must_be :>=, 1
|
|
71
46
|
end
|
|
72
47
|
end
|
|
73
48
|
|
|
74
49
|
describe 'passed imax film html' do
|
|
75
|
-
let(:film_html) {
|
|
50
|
+
let(:film_html) { showtimes_html('11-imax') }
|
|
76
51
|
|
|
77
52
|
it 'returns an array of hashes of screening attributes' do
|
|
78
53
|
subject.must_be_instance_of Array
|
|
@@ -96,7 +71,7 @@ describe OdeonUk::Internal::FilmWithScreeningsParser do
|
|
|
96
71
|
end
|
|
97
72
|
|
|
98
73
|
describe 'passed d-box film html' do
|
|
99
|
-
let(:film_html) {
|
|
74
|
+
let(:film_html) { showtimes_html('171-d-box') }
|
|
100
75
|
|
|
101
76
|
it 'returns an array of hashes of screening attributes' do
|
|
102
77
|
subject.must_be_instance_of Array
|
|
@@ -119,9 +94,4 @@ describe OdeonUk::Internal::FilmWithScreeningsParser do
|
|
|
119
94
|
end
|
|
120
95
|
end
|
|
121
96
|
end
|
|
122
|
-
|
|
123
|
-
def read_film_html(filename)
|
|
124
|
-
path = '../../../../fixtures/showtimes'
|
|
125
|
-
File.read(File.expand_path("#{path}/#{filename}.html", __FILE__))
|
|
126
|
-
end
|
|
127
97
|
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require_relative '../../../test_helper'
|
|
2
|
+
|
|
3
|
+
describe OdeonUk::Html::Screenings do
|
|
4
|
+
include WebsiteFixturesHelper
|
|
5
|
+
|
|
6
|
+
let(:described_class) { OdeonUk::Html::Screenings }
|
|
7
|
+
|
|
8
|
+
let(:website) { Minitest::Mock.new }
|
|
9
|
+
|
|
10
|
+
before { WebMock.disable_net_connect! }
|
|
11
|
+
|
|
12
|
+
describe '.at(cinema_id)' do
|
|
13
|
+
subject { described_class.at(71) }
|
|
14
|
+
|
|
15
|
+
before do
|
|
16
|
+
website.expect(:showtimes, showtimes_html(71), [71])
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'returns an array of screening attributes as hashes' do
|
|
20
|
+
OdeonUk::Html::Website.stub :new, website do
|
|
21
|
+
subject.must_be_instance_of(Array)
|
|
22
|
+
subject.each do |screening|
|
|
23
|
+
screening.must_be_instance_of(Hash)
|
|
24
|
+
screening.keys.must_include(:film_name)
|
|
25
|
+
|
|
26
|
+
screening.keys.must_include(:time)
|
|
27
|
+
screening[:time].must_be_instance_of(Time)
|
|
28
|
+
|
|
29
|
+
screening.keys.must_include(:variant)
|
|
30
|
+
|
|
31
|
+
screening.keys.must_include(:dimension)
|
|
32
|
+
screening[:dimension].must_match(/[23]d/)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'returns correct number of screenings' do
|
|
38
|
+
OdeonUk::Html::Website.stub :new, website do
|
|
39
|
+
subject.count.must_equal 212
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require_relative '../../../test_helper'
|
|
2
|
+
|
|
3
|
+
describe OdeonUk::Html::Website do
|
|
4
|
+
include WebsiteFixturesHelper
|
|
5
|
+
|
|
6
|
+
let(:described_class) { OdeonUk::Html::Website }
|
|
7
|
+
|
|
8
|
+
describe '#cinema(id)' do
|
|
9
|
+
subject { described_class.new.cinema(71) }
|
|
10
|
+
|
|
11
|
+
before { stub_get('cinemas/odeon/71/', cinema_html(71)) }
|
|
12
|
+
|
|
13
|
+
it 'returns a string' do
|
|
14
|
+
subject.class.must_equal String
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe '#sitemap' do
|
|
19
|
+
subject { described_class.new.sitemap }
|
|
20
|
+
|
|
21
|
+
before { stub_get('sitemap/', sitemap_html) }
|
|
22
|
+
|
|
23
|
+
it 'returns a string' do
|
|
24
|
+
subject.class.must_equal String
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe '#showtimes(id)' do
|
|
29
|
+
subject { described_class.new.showtimes(71) }
|
|
30
|
+
|
|
31
|
+
before { stub_get('showtimes/week/71/?siteId=71', showtimes_html(71)) }
|
|
32
|
+
|
|
33
|
+
it 'returns a string' do
|
|
34
|
+
subject.class.must_equal String
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -1,109 +1,43 @@
|
|
|
1
1
|
require_relative '../../test_helper'
|
|
2
2
|
|
|
3
3
|
describe OdeonUk::Screening do
|
|
4
|
+
include WebsiteFixturesHelper
|
|
5
|
+
|
|
4
6
|
let(:described_class) { OdeonUk::Screening }
|
|
5
7
|
|
|
6
8
|
let(:website) { Minitest::Mock.new }
|
|
7
9
|
|
|
8
|
-
before
|
|
10
|
+
before do
|
|
11
|
+
WebMock.disable_net_connect!
|
|
12
|
+
end
|
|
9
13
|
|
|
10
14
|
describe '.at(cinema_id)' do
|
|
11
15
|
subject { described_class.at(71) }
|
|
12
16
|
|
|
13
17
|
before do
|
|
14
|
-
website.expect(:
|
|
15
|
-
website.expect(:
|
|
18
|
+
website.expect(:cinema, cinema_html(71), [71])
|
|
19
|
+
website.expect(:showtimes, showtimes_html(71), [71])
|
|
16
20
|
end
|
|
17
21
|
|
|
18
|
-
it 'returns an array of
|
|
19
|
-
OdeonUk::
|
|
22
|
+
it 'returns an array of screening attributes as hashes' do
|
|
23
|
+
OdeonUk::Html::Website.stub :new, website do
|
|
20
24
|
subject.must_be_instance_of(Array)
|
|
21
25
|
subject.each do |screening|
|
|
22
26
|
screening.must_be_instance_of(described_class)
|
|
27
|
+
screening.cinema_name.must_equal('Brighton')
|
|
28
|
+
screening.cinema_id.must_equal(71)
|
|
29
|
+
screening.film_name.wont_be_nil
|
|
30
|
+
screening.showing_at.must_be_instance_of(Time)
|
|
31
|
+
screening.showing_on.must_be_instance_of(Date)
|
|
32
|
+
screening.dimension.must_match(/[23]d/)
|
|
23
33
|
end
|
|
24
34
|
end
|
|
25
35
|
end
|
|
26
36
|
|
|
27
37
|
it 'returns correct number of screenings' do
|
|
28
|
-
OdeonUk::
|
|
29
|
-
subject.count.must_equal
|
|
38
|
+
OdeonUk::Html::Website.stub :new, website do
|
|
39
|
+
subject.count.must_equal 212
|
|
30
40
|
end
|
|
31
41
|
end
|
|
32
42
|
end
|
|
33
|
-
|
|
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
|
|
47
|
-
subject.must_be_instance_of(Date)
|
|
48
|
-
subject.must_equal Date.new(2014, 9, 12)
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
describe '#variant' do
|
|
53
|
-
subject { described_class.new(options).variant }
|
|
54
|
-
|
|
55
|
-
describe 'passed array' do
|
|
56
|
-
let(:options) do
|
|
57
|
-
{
|
|
58
|
-
film_name: 'Guardians of the Galaxy',
|
|
59
|
-
cinema_id: 71,
|
|
60
|
-
cinema_name: 'Odeon Brighton',
|
|
61
|
-
time: Time.utc(2014, 9, 12, 11, 0),
|
|
62
|
-
variant: %w(Kids BABY)
|
|
63
|
-
}
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it 'is an alphabetically ordered array of lower-cased strings' do
|
|
67
|
-
subject.must_be_instance_of Array
|
|
68
|
-
subject.each do |tag|
|
|
69
|
-
tag.must_be_instance_of String
|
|
70
|
-
end
|
|
71
|
-
subject.must_equal %w(baby kids)
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
describe 'passed string' do
|
|
76
|
-
let(:options) do
|
|
77
|
-
{
|
|
78
|
-
film_name: 'Guardians of the Galaxy',
|
|
79
|
-
cinema_id: 71,
|
|
80
|
-
cinema_name: 'Odeon Brighton',
|
|
81
|
-
time: Time.utc(2014, 9, 12, 11, 0),
|
|
82
|
-
variant: 'Kids BABY'
|
|
83
|
-
}
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
it 'is an alphabetically ordered array of lower-cased strings' do
|
|
87
|
-
subject.must_be_instance_of Array
|
|
88
|
-
subject.each do |tag|
|
|
89
|
-
tag.must_be_instance_of String
|
|
90
|
-
end
|
|
91
|
-
subject.must_equal %w(baby kids)
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
private
|
|
97
|
-
|
|
98
|
-
def brighton_showtimes_html
|
|
99
|
-
read_file('../../../fixtures/showtimes/brighton.html')
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def read_file(filepath)
|
|
103
|
-
File.read(File.expand_path(filepath, __FILE__))
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
def sitemap_html
|
|
107
|
-
read_file('../../../fixtures/sitemap.html')
|
|
108
|
-
end
|
|
109
43
|
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module ApiFixturesHelper
|
|
2
|
+
private
|
|
3
|
+
|
|
4
|
+
def all_cinemas_plist
|
|
5
|
+
read_fixture('api/all_cinemas')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def app_init_plist
|
|
9
|
+
read_fixture('api/app_init')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def film_times_plist(cinema_id, film_id)
|
|
13
|
+
read_fixture("api/film_times/#{cinema_id}-#{film_id}")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def film_times_plists(cinema_id)
|
|
17
|
+
listing = Dir.entries(File.expand_path('../../fixtures/api/film_times', __FILE__))
|
|
18
|
+
listing.reject { |filename| !filename.match(/\A#{cinema_id}-/) }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def parse(content)
|
|
22
|
+
CFPropertyList.native_types(CFPropertyList::List.new(data: content).value)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def read_fixture(filepath)
|
|
26
|
+
File.read(File.expand_path("../../fixtures/#{filepath}.plist", __FILE__))
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def stub_post(site_path, request_body, response_body)
|
|
30
|
+
url = "https://api.odeon.co.uk/2.1/api/#{site_path}"
|
|
31
|
+
response = { status: 200, body: response_body, headers: {} }
|
|
32
|
+
stub_request(:post, url).with(body: request_body).to_return(response)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module WebsiteFixturesHelper
|
|
2
|
+
private
|
|
3
|
+
|
|
4
|
+
def cinema_html(id)
|
|
5
|
+
read_fixture("html/cinema/#{id}")
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def showtimes_html(id, i = nil)
|
|
9
|
+
read_fixture("html/showtimes/#{id}#{ "-#{i}" if i }")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def sitemap_html
|
|
13
|
+
read_fixture('html/sitemap')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def read_fixture(filepath)
|
|
17
|
+
File.read(File.expand_path("../../fixtures/#{filepath}.html", __FILE__))
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def stub_get(site_path, response_body)
|
|
21
|
+
url = "http://www.odeon.co.uk/#{site_path}"
|
|
22
|
+
response = { status: 200, body: response_body, headers: {} }
|
|
23
|
+
stub_request(:get, url).to_return(response)
|
|
24
|
+
end
|
|
25
|
+
end
|
data/test/test_helper.rb
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
require 'minitest/autorun'
|
|
2
|
-
require 'minitest/
|
|
2
|
+
require 'minitest/reporters'
|
|
3
|
+
reporter_options = { color: true, slow_count: 5 }
|
|
4
|
+
Minitest::Reporters.use! [Minitest::Reporters::DefaultReporter.new(reporter_options)]
|
|
3
5
|
|
|
4
6
|
require 'webmock/minitest'
|
|
5
7
|
|
|
6
|
-
require File.expand_path('../../lib/odeon_uk.rb', __FILE__)
|
|
8
|
+
require File.expand_path('../../lib/odeon_uk.rb', __FILE__)
|
|
9
|
+
|
|
10
|
+
require_relative 'support/api_fixtures_helper'
|
|
11
|
+
require_relative 'support/website_fixtures_helper'
|