translink 0.0.1
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.
- data/.gitignore +2 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/README.md +34 -0
- data/Rakefile +10 -0
- data/bin/translink +7 -0
- data/doc/schema.graffle +786 -0
- data/doc/schema.png +0 -0
- data/lib/translink.rb +18 -0
- data/lib/translink/cli.rb +53 -0
- data/lib/translink/code.rb +9 -0
- data/lib/translink/crawler.rb +21 -0
- data/lib/translink/db.rb +20 -0
- data/lib/translink/model/route.rb +28 -0
- data/lib/translink/model/service.rb +20 -0
- data/lib/translink/model/stop.rb +31 -0
- data/lib/translink/model/stop/extractor.rb +67 -0
- data/lib/translink/page.rb +22 -0
- data/lib/translink/page/route.rb +29 -0
- data/lib/translink/page/timetable.rb +31 -0
- data/lib/translink/page/trip.rb +35 -0
- data/lib/translink/version.rb +3 -0
- data/test/fixtures/sample/route.html +1288 -0
- data/test/fixtures/sample/timetable.html +568 -0
- data/test/fixtures/verbatim/route.html +8484 -0
- data/test/fixtures/verbatim/timetable.html +6962 -0
- data/test/fixtures/verbatim/trip.html +856 -0
- data/test/helper.rb +9 -0
- data/test/unit/cli_test.rb +78 -0
- data/test/unit/code_test.rb +12 -0
- data/test/unit/crawler_test.rb +42 -0
- data/test/unit/model/route_test.rb +35 -0
- data/test/unit/model/service_test.rb +23 -0
- data/test/unit/model/stop/extractor_test.rb +112 -0
- data/test/unit/model/stop_test.rb +37 -0
- data/test/unit/page/route_test.rb +41 -0
- data/test/unit/page/timetable_test.rb +26 -0
- data/test/unit/page/trip_test.rb +35 -0
- data/test/unit/page_test.rb +11 -0
- data/tmp/.gitkeep +0 -0
- data/translink.gemspec +30 -0
- metadata +175 -0
data/test/helper.rb
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class CLITtest < MiniTest::Unit::TestCase
|
4
|
+
TMPDIR = File.expand_path '../../../tmp', __FILE__
|
5
|
+
|
6
|
+
class Crawler
|
7
|
+
def initialize url
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
def crawl date
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def setup
|
17
|
+
@out = StringIO.new
|
18
|
+
@cli = CLI.new(TMPDIR).tap do |cli|
|
19
|
+
cli.__crawler__ = Crawler
|
20
|
+
cli.out = @out
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def teardown
|
25
|
+
pattern = File.join TMPDIR, '*.sqlite3'
|
26
|
+
Dir[pattern].each { |file| FileUtils.rm_rf file }
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_blank_executes_help_command
|
30
|
+
@cli.run ''
|
31
|
+
assert_match /help/, @out.string
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_unrecognised_command_executes_help_command
|
35
|
+
@cli.run 'unknown'
|
36
|
+
assert_match /help/, @out.string
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_execute_extract_command_with_invalid_uri
|
40
|
+
@cli.run 'extract invalid'
|
41
|
+
assert_match /help/, @out.string
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_execute_extract_command_with_valid_uri
|
45
|
+
file = File.join TMPDIR, "test_extract_#{Time.now.to_i}.sqlite3"
|
46
|
+
stop_instance = MiniTest::Mock.new.expect(:extract!, nil).expect(:save!, true)
|
47
|
+
stop_class = MiniTest::Mock.new.expect :all, [stop_instance]
|
48
|
+
@cli.__stop__ = stop_class
|
49
|
+
@cli.run "extract sqlite://#{file}"
|
50
|
+
assert stop_instance.verify
|
51
|
+
assert stop_class.verify
|
52
|
+
assert File.exists?(file), 'Expected file to exist.'
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_execute_help_command
|
56
|
+
@cli.run 'help'
|
57
|
+
assert_match /help/, @out.string
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_execute_scrape_command_with_uri
|
61
|
+
file = File.join TMPDIR, "test_scrape_#{Time.now.to_i}.sqlite3"
|
62
|
+
refute File.exists?(file), 'Expected file not to exist.'
|
63
|
+
@cli.run "scrape 2011-11-27 --uri=sqlite://#{file}"
|
64
|
+
assert File.exists?(file), 'Expected file to exist.'
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_execute_scrape_command_with_date_writes_sqlite_database
|
68
|
+
file = File.join TMPDIR, '2011-11-27.sqlite3'
|
69
|
+
refute File.exists?(file), 'Expected file not to exist.'
|
70
|
+
@cli.run 'scrape 2011-11-27'
|
71
|
+
assert File.exists?(file), 'Expected file to exist.'
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_execute_scrape_command_without_date_executes_help_command
|
75
|
+
@cli.run 'scrape'
|
76
|
+
assert_match /help/, @out.string
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class CodeTest < MiniTest::Unit::TestCase
|
4
|
+
def test_brisbane
|
5
|
+
refute Code.brisbane?('10')
|
6
|
+
assert Code.brisbane?('100')
|
7
|
+
assert Code.brisbane?('499')
|
8
|
+
assert Code.brisbane?('GLIDER')
|
9
|
+
assert Code.brisbane?('LOOP')
|
10
|
+
refute Code.brisbane?('500')
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class CrawlerTest < MiniTest::Unit::TestCase
|
4
|
+
class Model
|
5
|
+
attr_reader :trip_pages
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@trip_pages = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_service_from_trip_page trip_pages
|
12
|
+
@trip_pages << trip_pages
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.find_or_add_from_route_page route_page
|
16
|
+
instance
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.instance
|
20
|
+
@instance ||= new
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_initialize
|
25
|
+
assert_equal 'http://localhost', Crawler.new('http://localhost').url.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_crawl
|
29
|
+
stub_request(:get, 'http://jp.translink.com.au/travel-information/services-and-timetables/buses/all-bus-timetables').
|
30
|
+
to_return(:status => 200, :body => fixture('sample/timetable.html'), :headers => {'Content-Type' => 'text/html'})
|
31
|
+
stub_request(:get, /http:\/\/jp.translink.com.au\/travel-information\/services-and-timetables\/buses\/view-bus-timetable\/\d+\?direction=(In|Out)bound&routeCode=[0-9A-Z]+&timetableDate=\d{4}-\d{2}-\d{2}/).
|
32
|
+
to_return(:status => 200, :body => fixture('sample/route.html'), :headers => {'Content-Type' => 'text/html'})
|
33
|
+
stub_request(:get, /http:\/\/jp.translink.com.au\/travel-information\/services-and-timetables\/trip-details\/\d+\?timetableDate=\d{4}-\d{2}-\d{2}/).
|
34
|
+
to_return(:status => 200, :body => fixture('verbatim/trip.html'), :headers => {'Content-Type' => 'text/html'})
|
35
|
+
stub_request(:post, 'http://jp.translink.com.au/travel-information/services-and-timetables/buses/bus-timetables').
|
36
|
+
to_return(:status => 200, :body => fixture('sample/timetable.html'), :headers => {'Content-Type' => 'text/html'})
|
37
|
+
crawler = Crawler.new 'http://jp.translink.com.au/travel-information/services-and-timetables/buses/all-bus-timetables'
|
38
|
+
crawler.__model__ = Model
|
39
|
+
crawler.crawl Date.today
|
40
|
+
assert_equal 6, Model.instance.trip_pages.size
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class Model::RouteTest < MiniTest::Unit::TestCase
|
4
|
+
def test_add_services_from_trip_pages
|
5
|
+
DB.new 'sqlite::memory:' do
|
6
|
+
trip = Page::Trip::Trip.new.tap do |t|
|
7
|
+
t.stop = Page::Trip::Stop.new 'Illaweena St (Waterstone)', 'Waterstone, Illaweena St far side of Waterbrooke Crt'
|
8
|
+
t.time = DateTime.parse '2011-11-24 23:17:00'
|
9
|
+
end
|
10
|
+
route_page = MiniTest::Mock.new
|
11
|
+
route_page.expect :code, '130'
|
12
|
+
route_page.expect :name, 'City Buz 130 Via Sunnybank'
|
13
|
+
route_page.expect :translink_id, 1
|
14
|
+
trip_page = MiniTest::Mock.new
|
15
|
+
trip_page.expect :trips, [trip]
|
16
|
+
route_model = Model::Route.find_or_add_from_route_page route_page
|
17
|
+
route_model.add_service_from_trip_page trip_page
|
18
|
+
route_model.add_service_from_trip_page trip_page
|
19
|
+
route_model.add_service_from_trip_page trip_page
|
20
|
+
assert_equal 3, Model::Service.count
|
21
|
+
assert_equal 1, Model::Stop.count
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_find_or_add_from_route_page
|
26
|
+
DB.new 'sqlite::memory:' do
|
27
|
+
route_page = MiniTest::Mock.new
|
28
|
+
route_page.expect :code, '130'
|
29
|
+
route_page.expect :name, 'City Buz 130 Via Sunnybank'
|
30
|
+
route_page.expect :translink_id, 1
|
31
|
+
assert_equal Model::Route.find_or_add_from_route_page(route_page), Model::Route.find_or_add_from_route_page(route_page)
|
32
|
+
assert_equal 1, Model::Route.count
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class Model::ServiceTest < MiniTest::Unit::TestCase
|
4
|
+
class Trip
|
5
|
+
def stop
|
6
|
+
Model::Stop.first_or_create :name => 'Stop'
|
7
|
+
end
|
8
|
+
|
9
|
+
def time
|
10
|
+
DateTime.parse '2011-12-03 18:24:00'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_build_from_trip
|
15
|
+
DB.new 'sqlite::memory:' do
|
16
|
+
trip = Trip.new
|
17
|
+
service = Model::Service.build_from_trip trip
|
18
|
+
assert_equal trip.stop, service.stop
|
19
|
+
assert_equal trip.time, service.time
|
20
|
+
assert_instance_of Model::Service, service
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class Model::Stop::ExtractorTest < MiniTest::Unit::TestCase
|
4
|
+
def stub_extractor attributes
|
5
|
+
Model::Stop::Extractor.new OpenStruct.new(attributes)
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_extract!
|
9
|
+
stop = OpenStruct.new :summary => 'Grand Ave East, Grand Av opposite approaching Ascot Av'
|
10
|
+
extractor = Model::Stop::Extractor.new stop
|
11
|
+
assert_same stop, extractor.extract!
|
12
|
+
assert_equal 'Grand Av', stop.street1
|
13
|
+
assert_equal 'Ascot Av', stop.street2
|
14
|
+
assert_equal 'opposite_approaching', stop.locality
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_street1_opposite_approaching
|
18
|
+
assert_equal 'Grand Av', stub_extractor(:summary => 'Grand Ave East, Grand Av opposite approaching Ascot Av').street1
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_street2_opposite_approaching
|
22
|
+
assert_equal 'Ascot Av', stub_extractor(:summary => 'Grand Ave East, Grand Av opposite approaching Ascot Av').street2
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_locality_opposite_approaching
|
26
|
+
assert_equal 'opposite_approaching', stub_extractor(:summary => 'Grand Ave East, Grand Av opposite approaching Ascot Av').locality
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_street1_opposite_far_side
|
30
|
+
assert_equal 'Ipswich Rd', stub_extractor(:summary => 'P.A. Hospital - 14, Ipswich Rd opposite far side of Tottenham St').street1
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_street2_opposite_far_side
|
34
|
+
assert_equal 'Tottenham St', stub_extractor(:summary => 'P.A. Hospital - 14, Ipswich Rd opposite far side of Tottenham St').street2
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_locality_opposite_far_side
|
38
|
+
assert_equal 'opposite_far_side', stub_extractor(:summary => 'P.A. Hospital - 14, Ipswich Rd opposite far side of Tottenham St').locality
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_street1_opposite
|
42
|
+
assert_equal 'Partridge St', stub_extractor(:summary => 'Partridge, Partridge St opposite Tang St').street1
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_street2_opposite
|
46
|
+
assert_equal 'Tang St', stub_extractor(:summary => 'Partridge, Partridge St opposite Tang St').street2
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_locality_opposite
|
50
|
+
assert_equal 'opposite', stub_extractor(:summary => 'Partridge, Partridge St opposite Tang St').locality
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_street1_appraoching
|
54
|
+
assert_equal 'Blunder Rd', stub_extractor(:summary => 'Stop 66, Blunder Rd (approaching Ipswich Rd)').street1
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_street2_appraoching
|
58
|
+
assert_equal 'Ipswich Rd', stub_extractor(:summary => 'Stop 66, Blunder Rd (approaching Ipswich Rd)').street2
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_locality_appraoching
|
62
|
+
assert_equal 'approaching', stub_extractor(:summary => 'Stop 66, Blunder Rd (approaching Ipswich Rd)').locality
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_street1_far_side
|
66
|
+
assert_equal 'Illaweena St', stub_extractor(:summary => 'Waterstone, Illaweena St far side of Waterbrooke Crt').street1
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_street2_far_side
|
70
|
+
assert_equal 'Waterbrooke Crt', stub_extractor(:summary => 'Waterstone, Illaweena St far side of Waterbrooke Crt').street2
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_locality_far_side
|
74
|
+
assert_equal 'far_side', stub_extractor(:summary => 'Waterstone, Illaweena St far side of Waterbrooke Crt').locality
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_street1_at
|
78
|
+
assert_equal 'South East Busway', stub_extractor(:summary => 'Woolloongabba Platform 1, South East Busway At Main St').street1
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_street2_at
|
82
|
+
assert_equal 'Main St', stub_extractor(:summary => 'Woolloongabba Platform 1, South East Busway At Main St').street2
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_locality_at
|
86
|
+
assert_equal 'at', stub_extractor(:summary => 'Woolloongabba Platform 1, South East Busway At Main St').locality
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_street1_near
|
90
|
+
assert_equal 'Old Northern Rd', stub_extractor(:summary => 'Allamanda, Old Northern Rd (Near Allamanda Cres)').street1
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_street2_near
|
94
|
+
assert_equal 'Allamanda Cres', stub_extractor(:summary => 'Allamanda, Old Northern Rd (Near Allamanda Cres)').street2
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_locality_near
|
98
|
+
assert_equal 'near', stub_extractor(:summary => 'Allamanda, Old Northern Rd (Near Allamanda Cres)').locality
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_street1_without_locality
|
102
|
+
assert_equal 'Oyster Cove - Hail And Ride', stub_extractor(:name => 'Oyster Cove - Hail And Ride').street1
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_street2_without_locality
|
106
|
+
assert_nil stub_extractor(:name => 'Oyster Cove - Hail And Ride').street2
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_locality_without_locality
|
110
|
+
assert_nil stub_extractor(:name => 'Oyster Cove - Hail And Ride').locality
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class Model::StopTest < MiniTest::Unit::TestCase
|
4
|
+
def test_find_or_add_from_stop
|
5
|
+
DB.new 'sqlite::memory:' do
|
6
|
+
stop = MiniTest::Mock.new
|
7
|
+
stop.expect :name, 'Illaweena St (Waterstone)'
|
8
|
+
stop.expect :summary, 'Waterstone, Illaweena St far side of Waterbrooke Crt'
|
9
|
+
assert_equal Model::Stop.find_or_add_from_stop(stop), Model::Stop.find_or_add_from_stop(stop)
|
10
|
+
assert_equal 1, Model::Stop.count
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_all
|
15
|
+
DB.new 'sqlite::memory:' do
|
16
|
+
Model::Stop.create :name => 'Adelaide St'
|
17
|
+
Model::Stop.create :name => 'Queen St'
|
18
|
+
Model::Stop.create :name => 'Elizabeth St'
|
19
|
+
stops = Model::Stop.all
|
20
|
+
assert_equal ['Adelaide St', 'Queen St', 'Elizabeth St'], stops.map(&:name)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_extract!
|
25
|
+
stop = Model::Stop.new
|
26
|
+
extractor_instance = MiniTest::Mock.new.expect :extract!, stop
|
27
|
+
extractor_class = MiniTest::Mock.new.expect :new, extractor_instance, [stop]
|
28
|
+
stop.__extractor__ = extractor_class
|
29
|
+
stop.extract!
|
30
|
+
assert extractor_instance.verify
|
31
|
+
assert extractor_class.verify
|
32
|
+
end
|
33
|
+
|
34
|
+
def test__extractor__
|
35
|
+
assert_equal Model::Stop::Extractor, Model::Stop.new.__extractor__
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class Page::RouteTest < MiniTest::Unit::TestCase
|
4
|
+
def test_code
|
5
|
+
stub_request(:get, 'http://jp.translink.com.au/travel-information/services-and-timetables/buses/view-bus-timetable/1925?timetableDate=2011-11-14&direction=Inbound&routeCode=130').
|
6
|
+
to_return(:status => 200, :body => fixture('verbatim/route.html'), :headers => {'Content-Type' => 'text/html'})
|
7
|
+
assert_equal '130', Page::Route.new('http://jp.translink.com.au/travel-information/services-and-timetables/buses/view-bus-timetable/1925?timetableDate=2011-11-14&direction=Inbound&routeCode=130').code
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_date
|
11
|
+
stub_request(:get, 'http://jp.translink.com.au/travel-information/services-and-timetables/buses/view-bus-timetable/1925?timetableDate=2011-11-14&direction=Inbound&routeCode=130').
|
12
|
+
to_return(:status => 200, :body => fixture('verbatim/route.html'), :headers => {'Content-Type' => 'text/html'})
|
13
|
+
assert_equal Date.parse('Monday 14 November 2011'), Page::Route.new('http://jp.translink.com.au/travel-information/services-and-timetables/buses/view-bus-timetable/1925?timetableDate=2011-11-14&direction=Inbound&routeCode=130').date
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_direction
|
17
|
+
stub_request(:get, 'http://jp.translink.com.au/travel-information/services-and-timetables/buses/view-bus-timetable/1925?timetableDate=2011-11-14&direction=Inbound&routeCode=130').
|
18
|
+
to_return(:status => 200, :body => fixture('verbatim/route.html'), :headers => {'Content-Type' => 'text/html'})
|
19
|
+
assert_equal 'Inbound', Page::Route.new('http://jp.translink.com.au/travel-information/services-and-timetables/buses/view-bus-timetable/1925?timetableDate=2011-11-14&direction=Inbound&routeCode=130').direction
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_name
|
23
|
+
stub_request(:get, 'http://jp.translink.com.au/travel-information/services-and-timetables/buses/view-bus-timetable/1925?timetableDate=2011-11-14&direction=Inbound&routeCode=130').
|
24
|
+
to_return(:status => 200, :body => fixture('verbatim/route.html'), :headers => {'Content-Type' => 'text/html'})
|
25
|
+
assert_equal 'City Buz 130 Via Sunnybank', Page::Route.new('http://jp.translink.com.au/travel-information/services-and-timetables/buses/view-bus-timetable/1925?timetableDate=2011-11-14&direction=Inbound&routeCode=130').name
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_translink_id
|
29
|
+
stub_request(:get, 'http://jp.translink.com.au/travel-information/services-and-timetables/buses/view-bus-timetable/1925?timetableDate=2011-11-14&direction=Inbound&routeCode=130').
|
30
|
+
to_return(:status => 200, :body => fixture('verbatim/route.html'), :headers => {'Content-Type' => 'text/html'})
|
31
|
+
assert_equal '1925', Page::Route.new('http://jp.translink.com.au/travel-information/services-and-timetables/buses/view-bus-timetable/1925?timetableDate=2011-11-14&direction=Inbound&routeCode=130').translink_id
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_trip_pages
|
35
|
+
stub_request(:get, 'http://jp.translink.com.au/travel-information/services-and-timetables/buses/view-bus-timetable/1925?timetableDate=2011-11-14&direction=Inbound&routeCode=130').
|
36
|
+
to_return(:status => 200, :body => fixture('verbatim/route.html'), :headers => {'Content-Type' => 'text/html'})
|
37
|
+
trip_pages = Page::Route.new('http://jp.translink.com.au/travel-information/services-and-timetables/buses/view-bus-timetable/1925?timetableDate=2011-11-14&direction=Inbound&routeCode=130').trip_pages
|
38
|
+
assert_equal 'http://jp.translink.com.au/travel-information/services-and-timetables/trip-details/281889?timetableDate=2011-11-14', trip_pages.first.url.to_s
|
39
|
+
assert_equal 'http://jp.translink.com.au/travel-information/services-and-timetables/trip-details/252074?timetableDate=2011-11-14', trip_pages.last.url.to_s
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class Page::TimetableTest < MiniTest::Unit::TestCase
|
4
|
+
def test_page
|
5
|
+
stub_request(:get, 'http://jp.translink.com.au/travel-information/services-and-timetables/buses/bus-timetables').
|
6
|
+
to_return(:status => 200, :body => fixture('verbatim/timetable.html'), :headers => {'Content-Type' => 'text/html'})
|
7
|
+
assert_instance_of Mechanize::Page, Page::Timetable.new('http://jp.translink.com.au/travel-information/services-and-timetables/buses/bus-timetables').page
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_route_pages
|
11
|
+
stub_request(:get, 'http://jp.translink.com.au/travel-information/services-and-timetables/buses/bus-timetables').
|
12
|
+
to_return(:status => 200, :body => fixture('verbatim/timetable.html'), :headers => {'Content-Type' => 'text/html'})
|
13
|
+
route_pages = Page::Timetable.new('http://jp.translink.com.au/travel-information/services-and-timetables/buses/bus-timetables').route_pages
|
14
|
+
assert_equal 'http://jp.translink.com.au/travel-information/services-and-timetables/buses/view-bus-timetable/2245?timetableDate=2011-11-14&direction=Outbound&routeCode=100', route_pages.first.url.to_s
|
15
|
+
assert_equal 'http://jp.translink.com.au/travel-information/services-and-timetables/buses/view-bus-timetable/2631?timetableDate=2011-11-14&direction=Inbound&routeCode=LOOP', route_pages.last.url.to_s
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_timetable_page
|
19
|
+
stub_request(:get, 'http://jp.translink.com.au/travel-information/services-and-timetables/buses/all-bus-timetables').
|
20
|
+
to_return(:status => 200, :body => fixture('verbatim/timetable.html'), :headers => {'Content-Type' => 'text/html'})
|
21
|
+
stub_request(:post, 'http://jp.translink.com.au/travel-information/services-and-timetables/buses/bus-timetables').
|
22
|
+
to_return(:status => 200, :body => fixture('verbatim/timetable.html'), :headers => {'Content-Type' => 'text/html'})
|
23
|
+
timetable_page = Page::Timetable.new('http://jp.translink.com.au/travel-information/services-and-timetables/buses/all-bus-timetables').timetable_page Date.parse('2011-11-27')
|
24
|
+
assert_equal 'http://jp.translink.com.au/travel-information/services-and-timetables/buses/bus-timetables', timetable_page.url.to_s
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class Page::TripTest < MiniTest::Unit::TestCase
|
4
|
+
def test_date
|
5
|
+
stub_request(:get, 'http://jp.translink.com.au/travel-information/services-and-timetables/trip-details/281889?timetableDate=2011-11-14').
|
6
|
+
to_return(:status => 200, :body => fixture('verbatim/trip.html'), :headers => {'Content-Type' => 'text/html'})
|
7
|
+
assert_equal Date.parse('Monday 14 November 2011'), Page::Trip.new('http://jp.translink.com.au/travel-information/services-and-timetables/trip-details/281889?timetableDate=2011-11-14').date
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_stops
|
11
|
+
stub_request(:get, 'http://jp.translink.com.au/travel-information/services-and-timetables/trip-details/281889?timetableDate=2011-11-14').
|
12
|
+
to_return(:status => 200, :body => fixture('verbatim/trip.html'), :headers => {'Content-Type' => 'text/html'})
|
13
|
+
stops = Page::Trip.new('http://jp.translink.com.au/travel-information/services-and-timetables/trip-details/281889?timetableDate=2011-11-14').stops
|
14
|
+
assert_equal Page::Trip::Stop.new('Illaweena St (Waterstone)', 'Waterstone, Illaweena St far side of Waterbrooke Crt'), stops.first
|
15
|
+
assert_equal Page::Trip::Stop.new('Queen St Bus Station A6', 'Qsbs Stop A6'), stops.last
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_times
|
19
|
+
stub_request(:get, 'http://jp.translink.com.au/travel-information/services-and-timetables/trip-details/281889?timetableDate=2011-11-14').
|
20
|
+
to_return(:status => 200, :body => fixture('verbatim/trip.html'), :headers => {'Content-Type' => 'text/html'})
|
21
|
+
times = Page::Trip.new('http://jp.translink.com.au/travel-information/services-and-timetables/trip-details/281889?timetableDate=2011-11-14').times
|
22
|
+
assert_equal DateTime.parse('2011-11-14 05:00 +1000'), times.first
|
23
|
+
assert_equal DateTime.parse('2011-11-14 05:50 +1000'), times.last
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_trips
|
27
|
+
stub_request(:get, 'http://jp.translink.com.au/travel-information/services-and-timetables/trip-details/281889?timetableDate=2011-11-14').
|
28
|
+
to_return(:status => 200, :body => fixture('verbatim/trip.html'), :headers => {'Content-Type' => 'text/html'})
|
29
|
+
trips = Page::Trip.new('http://jp.translink.com.au/travel-information/services-and-timetables/trip-details/281889?timetableDate=2011-11-14').trips
|
30
|
+
assert_equal Page::Trip::Stop.new('Illaweena St (Waterstone)', 'Waterstone, Illaweena St far side of Waterbrooke Crt'), trips.first.stop
|
31
|
+
assert_equal DateTime.parse('2011-11-14 05:00 +1000'), trips.first.time
|
32
|
+
assert_equal Page::Trip::Stop.new('Queen St Bus Station A6', 'Qsbs Stop A6'), trips.last.stop
|
33
|
+
assert_equal DateTime.parse('2011-11-14 05:50 +1000'), trips.last.time
|
34
|
+
end
|
35
|
+
end
|