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.
Files changed (43) hide show
  1. data/.gitignore +2 -0
  2. data/.travis.yml +4 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +21 -0
  5. data/README.md +34 -0
  6. data/Rakefile +10 -0
  7. data/bin/translink +7 -0
  8. data/doc/schema.graffle +786 -0
  9. data/doc/schema.png +0 -0
  10. data/lib/translink.rb +18 -0
  11. data/lib/translink/cli.rb +53 -0
  12. data/lib/translink/code.rb +9 -0
  13. data/lib/translink/crawler.rb +21 -0
  14. data/lib/translink/db.rb +20 -0
  15. data/lib/translink/model/route.rb +28 -0
  16. data/lib/translink/model/service.rb +20 -0
  17. data/lib/translink/model/stop.rb +31 -0
  18. data/lib/translink/model/stop/extractor.rb +67 -0
  19. data/lib/translink/page.rb +22 -0
  20. data/lib/translink/page/route.rb +29 -0
  21. data/lib/translink/page/timetable.rb +31 -0
  22. data/lib/translink/page/trip.rb +35 -0
  23. data/lib/translink/version.rb +3 -0
  24. data/test/fixtures/sample/route.html +1288 -0
  25. data/test/fixtures/sample/timetable.html +568 -0
  26. data/test/fixtures/verbatim/route.html +8484 -0
  27. data/test/fixtures/verbatim/timetable.html +6962 -0
  28. data/test/fixtures/verbatim/trip.html +856 -0
  29. data/test/helper.rb +9 -0
  30. data/test/unit/cli_test.rb +78 -0
  31. data/test/unit/code_test.rb +12 -0
  32. data/test/unit/crawler_test.rb +42 -0
  33. data/test/unit/model/route_test.rb +35 -0
  34. data/test/unit/model/service_test.rb +23 -0
  35. data/test/unit/model/stop/extractor_test.rb +112 -0
  36. data/test/unit/model/stop_test.rb +37 -0
  37. data/test/unit/page/route_test.rb +41 -0
  38. data/test/unit/page/timetable_test.rb +26 -0
  39. data/test/unit/page/trip_test.rb +35 -0
  40. data/test/unit/page_test.rb +11 -0
  41. data/tmp/.gitkeep +0 -0
  42. data/translink.gemspec +30 -0
  43. metadata +175 -0
data/test/helper.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'minitest/autorun'
2
+ require 'translink'
3
+ require 'webmock/minitest'
4
+
5
+ include Translink
6
+
7
+ def fixture path
8
+ File.read File.expand_path("../fixtures/#{path}", __FILE__)
9
+ end
@@ -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