cricos_scrape 2.0 → 2.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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/bin/cricos_scrape +40 -0
  4. data/cricos_scrape.gemspec +7 -9
  5. data/lib/cricos_scrape/bulk_import_courses.rb +2 -2
  6. data/lib/cricos_scrape/bulk_import_institutions.rb +2 -2
  7. data/lib/cricos_scrape/entities/address.rb +4 -0
  8. data/lib/cricos_scrape/entities/contact.rb +4 -0
  9. data/lib/cricos_scrape/entities/contact_officer.rb +4 -0
  10. data/lib/cricos_scrape/entities/course.rb +4 -0
  11. data/lib/cricos_scrape/entities/institution.rb +4 -0
  12. data/lib/cricos_scrape/entities/location.rb +4 -0
  13. data/lib/cricos_scrape/import_contacts.rb +2 -2
  14. data/lib/cricos_scrape/importer/contact_importer.rb +120 -0
  15. data/lib/cricos_scrape/importer/course_importer.rb +291 -0
  16. data/lib/cricos_scrape/importer/institution_importer.rb +279 -0
  17. data/lib/cricos_scrape/version.rb +1 -1
  18. data/lib/cricos_scrape.rb +4 -5
  19. metadata +16 -44
  20. data/CONTRIBUTING.md +0 -51
  21. data/Gemfile +0 -2
  22. data/Gemfile.lock +0 -64
  23. data/Procfile +0 -3
  24. data/Rakefile +0 -13
  25. data/spec/contact_importer_spec.rb +0 -76
  26. data/spec/course_importer_spec.rb +0 -71
  27. data/spec/fixtures/contact_details_of_state_act_uri.html +0 -546
  28. data/spec/fixtures/contact_details_of_state_wa_uri.html +0 -546
  29. data/spec/fixtures/course_details_with_contact_officers_table_grid.html +0 -467
  30. data/spec/fixtures/course_details_without_pagination_uri.html +0 -470
  31. data/spec/fixtures/courses_list_by_location_id_uri.html +0 -174
  32. data/spec/fixtures/institution_details_with_pagination_location_page_1_uri.html +0 -406
  33. data/spec/fixtures/institution_details_with_pagination_location_page_2_uri.html +0 -358
  34. data/spec/fixtures/institution_details_with_po_box_postal_address.html +0 -240
  35. data/spec/fixtures/institution_details_with_trading_name.html +0 -322
  36. data/spec/fixtures/institution_details_without_locations_details_uri.html +0 -151
  37. data/spec/fixtures/institution_details_without_pagination_location_uri.html +0 -299
  38. data/spec/fixtures/not_found_course_details_uri.html +0 -837
  39. data/spec/fixtures/not_found_institution_details.html +0 -36
  40. data/spec/institution_importer_spec.rb +0 -138
  41. data/spec/spec_helper.rb +0 -67
@@ -0,0 +1,279 @@
1
+ require 'cricos_scrape/entities/institution'
2
+ require 'cricos_scrape/entities/location'
3
+ require 'cricos_scrape/entities/contact_officer'
4
+
5
+ module CricosScrape
6
+ class InstitutionImporter
7
+
8
+ INSTITUTION_URL = 'http://cricos.education.gov.au/Institution/InstitutionDetailsOnePage.aspx'
9
+
10
+ def initialize(agent, **params)
11
+ @agent = agent
12
+ @provider_id = params.fetch(:provider_id)
13
+ @page = agent.get(url)
14
+ end
15
+
16
+ def run
17
+ return if institution_not_found?
18
+
19
+ institution = Institution.new
20
+ institution.provider_id = provider_id
21
+ institution.provider_code = find_provider_code
22
+ institution.trading_name = find_trading_name
23
+ institution.name = find_name
24
+ institution.type = find_type
25
+ institution.total_capacity = find_total_capacity
26
+ institution.website = find_website
27
+ institution.postal_address = find_postal_address
28
+ institution.locations = find_location if location_found?
29
+ institution.contact_officers = find_contact_officers
30
+
31
+ institution
32
+ end
33
+
34
+ private
35
+
36
+ attr_reader :agent, :provider_id, :page
37
+
38
+ def url
39
+ "#{INSTITUTION_URL}?ProviderID=#{provider_id}"
40
+ end
41
+
42
+ def find_value_of_field(field)
43
+ field.nil? ? nil : field.text.strip
44
+ end
45
+
46
+ def find_provider_code
47
+ field = @page.at('#institutionDetails_lblProviderCode')
48
+ find_value_of_field(field)
49
+ end
50
+
51
+ def find_trading_name
52
+ field = @page.at('#institutionDetails_lblInstitutionTradingName')
53
+ find_value_of_field(field)
54
+ end
55
+
56
+ def find_name
57
+ field = @page.at('#institutionDetails_lblInstitutionName')
58
+ find_value_of_field(field)
59
+ end
60
+
61
+ def find_type
62
+ field = @page.at('#institutionDetails_lblInstitutionType')
63
+ find_value_of_field(field)
64
+ end
65
+
66
+ def find_total_capacity
67
+ field = @page.at('#institutionDetails_lblLocationCapacity')
68
+
69
+ capacity = find_value_of_field(field)
70
+ capacity = is_number?(capacity) ? capacity.to_i : nil
71
+ capacity
72
+ end
73
+
74
+ def is_number?(text)
75
+ text =~ /\d/
76
+ end
77
+
78
+ def find_website
79
+ field = @page.at('#institutionDetails_hplInstitutionWebAddress')
80
+ find_value_of_field(field)
81
+ end
82
+
83
+ def find_postal_address
84
+ post_address_node = @page.at('#institutionDetails_lblInstitutionPostalAddress')
85
+
86
+ if post_address_node
87
+ address_lines = post_address_node.children.select { |node| node.is_a?(Nokogiri::XML::Text) }.map { |node| find_value_of_field(node) }
88
+ address_lines.join("\n")
89
+ end
90
+ end
91
+
92
+ # there is no record not found page
93
+ # instead a search page is returned
94
+ def institution_not_found?
95
+ @page.body.include?('The Provider ID entered is invalid - please try another.')
96
+ end
97
+
98
+ def location_found?
99
+ !@page.body.include?('No locations were found for the selected institution.')
100
+ end
101
+
102
+ def find_location
103
+ locations = []
104
+
105
+ if location_results_paginated?
106
+ for page_number in 1..total_pages
107
+ jump_to_page(page_number)
108
+ locations += fetch_locations_from_current_page
109
+ end
110
+ else
111
+ locations += fetch_locations_from_current_page
112
+ end
113
+
114
+ locations
115
+ end
116
+
117
+ def pagination
118
+ @page.at('#locationList_gridSearchResults .gridPager')
119
+ end
120
+
121
+ def location_results_paginated?
122
+ !!pagination
123
+ end
124
+
125
+ def total_pages
126
+ pagination.children[1].text.strip[/^Page [0-9]+ of ([0-9]+).*/, 1].to_i
127
+ end
128
+
129
+ def current_pagination_page
130
+ pagination.children[1].text.strip[/^Page ([0-9]+) of [0-9]+.*/, 1].to_i
131
+ end
132
+
133
+ def jump_to_page(page_number)
134
+ return @page if page_number == current_pagination_page
135
+
136
+ hidden_form = @page.form_with id: 'Form1'
137
+ hidden_form['__EVENTTARGET'] = 'locationList$gridSearchResults'
138
+ hidden_form['__EVENTARGUMENT'] = "Page$#{page_number}"
139
+ begin
140
+ @page = hidden_form.submit(nil, {'action' => 'change-location-page'})
141
+ rescue Mechanize::ResponseCodeError
142
+ sleep 5
143
+ jump_to_page(page_number)
144
+ end
145
+ end
146
+
147
+ def get_location_id(row_index)
148
+ hidden_form = @page.form_with id: 'Form1'
149
+ hidden_form['__EVENTTARGET'] = 'locationList$gridSearchResults'
150
+ hidden_form['__EVENTARGUMENT'] = "click-#{row_index-3}"
151
+
152
+ begin
153
+ course_page = hidden_form.submit(nil, {'action' => 'get-location-id'})
154
+ rescue Mechanize::ResponseCodeError
155
+ sleep 5
156
+ get_location_id(row_index)
157
+ end
158
+
159
+ course_page.uri.to_s[/LocationID=([0-9]+)/, 1]
160
+ end
161
+
162
+ def fetch_locations_from_current_page
163
+ locations_of_page = []
164
+
165
+ # location_list is table contains locations in current page
166
+ if search_results_node = @page.at('#locationList_gridSearchResults')
167
+ location_list = search_results_node.children
168
+
169
+ excess_row_at_the_end_table = location_results_paginated? ? 3 : 2
170
+ start_location_row = 3
171
+ end_location_row = location_list.count - excess_row_at_the_end_table
172
+
173
+ for i in start_location_row..end_location_row
174
+ location_row = location_list[i].children
175
+
176
+ location_obj = Location.new
177
+ location_obj.location_id = get_location_id(i)
178
+ location_obj.name = find_value_of_field(location_row[1])
179
+ location_obj.state = find_value_of_field(location_row[2])
180
+ location_obj.number_of_courses = find_value_of_field(location_row[3])
181
+
182
+ locations_of_page << location_obj
183
+ end
184
+ end
185
+
186
+ locations_of_page
187
+ end
188
+
189
+ def find_contact_officers
190
+ contact_officers = []
191
+
192
+ contact_officers_list = @page.search('//div[starts-with(@id, "contactDetails_pnl")]')
193
+
194
+ contact_officers_list.each do |contact_officer|
195
+ @contact_officer_area = contact_officer
196
+ @contact_officer_table = @contact_officer_area.at('table').children
197
+
198
+ if contains_contact_details_grid?
199
+ contact_officers += find_contact_officer_grid
200
+ else
201
+ contact_officers << find_contact_officer
202
+ end
203
+ end
204
+
205
+ contact_officers
206
+ end
207
+
208
+ def find_contact_officer_grid
209
+ contact_officers = []
210
+
211
+ excess_row_at_the_end_table = 2
212
+ data_row_start = 3
213
+ data_row_end = @contact_officer_table.count - excess_row_at_the_end_table
214
+
215
+ for i in data_row_start..data_row_end
216
+ contact_row = @contact_officer_table[i].children
217
+
218
+ contact = ContactOfficer.new
219
+ contact.role = find_contact_officer_role
220
+ contact.name = find_value_of_field(contact_row[1])
221
+ contact.phone = find_value_of_field(contact_row[2])
222
+ contact.fax = find_value_of_field(contact_row[3])
223
+ contact.email = find_value_of_field(contact_row[4])
224
+
225
+ contact_officers << contact
226
+ end
227
+
228
+ contact_officers
229
+ end
230
+
231
+ def find_contact_officer
232
+ contact = ContactOfficer.new
233
+ contact.role = find_contact_officer_role
234
+ contact.name = find_contact_officer_name
235
+ contact.title = find_contact_officer_title
236
+ contact.phone = find_contact_officer_phone
237
+ contact.fax = find_contact_officer_fax
238
+ contact.email = find_contact_officer_email
239
+
240
+ contact
241
+ end
242
+
243
+ def find_contact_officer_role
244
+ row = @contact_officer_area.children
245
+ find_value_of_field(row[1]).sub(':', '')
246
+ end
247
+
248
+ def find_contact_officer_name
249
+ row = @contact_officer_table[1].children
250
+ find_value_of_field(row[3])
251
+ end
252
+
253
+ def find_contact_officer_title
254
+ row = @contact_officer_table[3].children
255
+ find_value_of_field(row[3])
256
+ end
257
+
258
+ def find_contact_officer_phone
259
+ row = @contact_officer_table[5].children
260
+ find_value_of_field(row[3])
261
+ end
262
+
263
+ def find_contact_officer_fax
264
+ row = @contact_officer_table[7].children
265
+ find_value_of_field(row[3])
266
+ end
267
+
268
+ def find_contact_officer_email
269
+ row = @contact_officer_table[9]
270
+ find_value_of_field(row.children[3]) unless row.nil?
271
+ end
272
+
273
+ def contains_contact_details_grid?
274
+ contact_officer_area_css_id = @contact_officer_area.attributes['id'].text
275
+ @page.search("//*[@id='#{contact_officer_area_css_id}']/div/table[starts-with(@id, 'contactDetails_grid')]").any?
276
+ end
277
+
278
+ end
279
+ end
@@ -1,3 +1,3 @@
1
1
  module CricosScrape
2
- VERSION = 2.0
2
+ VERSION = 2.1
3
3
  end
data/lib/cricos_scrape.rb CHANGED
@@ -1,8 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'json'
3
3
  require 'json/add/core'
4
-
5
- require_relative 'cricos_scrape/json_struct'
6
- require_relative 'cricos_scrape/bulk_import_institutions'
7
- require_relative 'cricos_scrape/bulk_import_courses'
8
- require_relative 'cricos_scrape/import_contacts'
4
+ require 'cricos_scrape/json_struct'
5
+ require 'cricos_scrape/bulk_import_institutions'
6
+ require 'cricos_scrape/bulk_import_courses'
7
+ require 'cricos_scrape/import_contacts'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cricos_scrape
3
3
  version: !ruby/object:Gem::Version
4
- version: '2.0'
4
+ version: '2.1'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Trung Lê
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-10-11 00:00:00.000000000 Z
12
+ date: 2015-10-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -109,42 +109,31 @@ description: Scrape Institutions, Courses, Contacts from CRICOS
109
109
  email:
110
110
  - trung.le@ruby-journal.com
111
111
  - ktoanlba@gmail.com
112
- executables: []
112
+ executables:
113
+ - cricos_scrape
113
114
  extensions: []
114
115
  extra_rdoc_files: []
115
116
  files:
116
- - CONTRIBUTING.md
117
- - Gemfile
118
- - Gemfile.lock
119
117
  - LICENSE.md
120
- - Procfile
121
118
  - README.md
122
- - Rakefile
119
+ - bin/cricos_scrape
123
120
  - cricos_scrape.gemspec
124
121
  - lib/cricos_scrape.rb
125
122
  - lib/cricos_scrape/agent.rb
126
123
  - lib/cricos_scrape/bulk_import_courses.rb
127
124
  - lib/cricos_scrape/bulk_import_institutions.rb
125
+ - lib/cricos_scrape/entities/address.rb
126
+ - lib/cricos_scrape/entities/contact.rb
127
+ - lib/cricos_scrape/entities/contact_officer.rb
128
+ - lib/cricos_scrape/entities/course.rb
129
+ - lib/cricos_scrape/entities/institution.rb
130
+ - lib/cricos_scrape/entities/location.rb
128
131
  - lib/cricos_scrape/import_contacts.rb
132
+ - lib/cricos_scrape/importer/contact_importer.rb
133
+ - lib/cricos_scrape/importer/course_importer.rb
134
+ - lib/cricos_scrape/importer/institution_importer.rb
129
135
  - lib/cricos_scrape/json_struct.rb
130
136
  - lib/cricos_scrape/version.rb
131
- - spec/contact_importer_spec.rb
132
- - spec/course_importer_spec.rb
133
- - spec/fixtures/contact_details_of_state_act_uri.html
134
- - spec/fixtures/contact_details_of_state_wa_uri.html
135
- - spec/fixtures/course_details_with_contact_officers_table_grid.html
136
- - spec/fixtures/course_details_without_pagination_uri.html
137
- - spec/fixtures/courses_list_by_location_id_uri.html
138
- - spec/fixtures/institution_details_with_pagination_location_page_1_uri.html
139
- - spec/fixtures/institution_details_with_pagination_location_page_2_uri.html
140
- - spec/fixtures/institution_details_with_po_box_postal_address.html
141
- - spec/fixtures/institution_details_with_trading_name.html
142
- - spec/fixtures/institution_details_without_locations_details_uri.html
143
- - spec/fixtures/institution_details_without_pagination_location_uri.html
144
- - spec/fixtures/not_found_course_details_uri.html
145
- - spec/fixtures/not_found_institution_details.html
146
- - spec/institution_importer_spec.rb
147
- - spec/spec_helper.rb
148
137
  homepage: https://github.com/ruby-journal/cricos_scrape.rb
149
138
  licenses:
150
139
  - MIT
@@ -157,7 +146,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
157
146
  requirements:
158
147
  - - ">="
159
148
  - !ruby/object:Gem::Version
160
- version: 2.2.2
149
+ version: 2.0.0
161
150
  required_rubygems_version: !ruby/object:Gem::Requirement
162
151
  requirements:
163
152
  - - ">="
@@ -169,22 +158,5 @@ rubygems_version: 2.4.5.1
169
158
  signing_key:
170
159
  specification_version: 4
171
160
  summary: CRICOS Scrape
172
- test_files:
173
- - spec/contact_importer_spec.rb
174
- - spec/course_importer_spec.rb
175
- - spec/fixtures/contact_details_of_state_act_uri.html
176
- - spec/fixtures/contact_details_of_state_wa_uri.html
177
- - spec/fixtures/course_details_with_contact_officers_table_grid.html
178
- - spec/fixtures/course_details_without_pagination_uri.html
179
- - spec/fixtures/courses_list_by_location_id_uri.html
180
- - spec/fixtures/institution_details_with_pagination_location_page_1_uri.html
181
- - spec/fixtures/institution_details_with_pagination_location_page_2_uri.html
182
- - spec/fixtures/institution_details_with_po_box_postal_address.html
183
- - spec/fixtures/institution_details_with_trading_name.html
184
- - spec/fixtures/institution_details_without_locations_details_uri.html
185
- - spec/fixtures/institution_details_without_pagination_location_uri.html
186
- - spec/fixtures/not_found_course_details_uri.html
187
- - spec/fixtures/not_found_institution_details.html
188
- - spec/institution_importer_spec.rb
189
- - spec/spec_helper.rb
161
+ test_files: []
190
162
  has_rdoc:
data/CONTRIBUTING.md DELETED
@@ -1,51 +0,0 @@
1
- Lotus is an open source project and we would love you to help us make it better.
2
-
3
- ## Reporting Issues
4
-
5
- A well formatted issue is appreciated, and goes a long way in helping us help you.
6
-
7
- * Make sure you have a [GitHub account](https://github.com/signup/free)
8
- * Submit a [Github issue](./issues) by:
9
- * Clearly describing the issue
10
- * Provide a descriptive summary
11
- * Explain the expected behavior
12
- * Explain the actual behavior
13
- * Provide steps to reproduce the actual behavior
14
- * Provide your application's complete `Gemfile.lock` as text (in a [Gist](https://gist.github.com) for bonus points)
15
- * Any relevant stack traces
16
-
17
- If you provide code, make sure it is formatted with the triple backticks (\`).
18
-
19
- At this point, we'd love to tell you how long it will take for us to respond,
20
- but we just don't know.
21
-
22
- ## Pull requests
23
-
24
- We accept pull requests to Lotus for:
25
-
26
- * Adding documentation
27
- * Fixing bugs
28
- * Adding new features
29
-
30
- Not all features proposed will be added but we are open to having a conversation
31
- about a feature you are championing.
32
-
33
- Here's a quick guide:
34
-
35
- 1. Fork the repo.
36
-
37
- 2. Run the tests. This is to make sure your starting point works. Tests can be
38
- run via `rake`
39
-
40
- 3. Create a new branch and make your changes. This includes tests for features!
41
-
42
- 4. Push to your fork and submit a pull request. For more information, see
43
- [Github's pull request help section](https://help.github.com/articles/using-pull-requests/).
44
-
45
- At this point you're waiting on us. Expect a conversation regarding your pull
46
- request; Questions, clarifications, and so on.
47
-
48
- Some things that will increase the chance that your pull request is accepted:
49
-
50
- * Include tests that fail without your code, and pass with it
51
- * Update the documentation
data/Gemfile DELETED
@@ -1,2 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
data/Gemfile.lock DELETED
@@ -1,64 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- cricos_scrape (2.0)
5
- mechanize (~> 2.7, >= 2.7.2)
6
- slop (~> 4.2.0, >= 4.2.0)
7
-
8
- GEM
9
- remote: https://rubygems.org/
10
- specs:
11
- diff-lcs (1.2.5)
12
- domain_name (0.5.25)
13
- unf (>= 0.0.5, < 1.0.0)
14
- http-cookie (1.0.2)
15
- domain_name (~> 0.5)
16
- mechanize (2.7.3)
17
- domain_name (~> 0.5, >= 0.5.1)
18
- http-cookie (~> 1.0)
19
- mime-types (~> 2.0)
20
- net-http-digest_auth (~> 1.1, >= 1.1.1)
21
- net-http-persistent (~> 2.5, >= 2.5.2)
22
- nokogiri (~> 1.4)
23
- ntlm-http (~> 0.1, >= 0.1.1)
24
- webrobots (>= 0.0.9, < 0.2)
25
- mime-types (2.6.2)
26
- mini_portile (0.6.2)
27
- net-http-digest_auth (1.4)
28
- net-http-persistent (2.9.4)
29
- nokogiri (1.6.6.2)
30
- mini_portile (~> 0.6.0)
31
- ntlm-http (0.1.1)
32
- rspec (3.3.0)
33
- rspec-core (~> 3.3.0)
34
- rspec-expectations (~> 3.3.0)
35
- rspec-mocks (~> 3.3.0)
36
- rspec-core (3.3.2)
37
- rspec-support (~> 3.3.0)
38
- rspec-expectations (3.3.1)
39
- diff-lcs (>= 1.2.0, < 2.0)
40
- rspec-support (~> 3.3.0)
41
- rspec-its (1.2.0)
42
- rspec-core (>= 3.0.0)
43
- rspec-expectations (>= 3.0.0)
44
- rspec-mocks (3.3.2)
45
- diff-lcs (>= 1.2.0, < 2.0)
46
- rspec-support (~> 3.3.0)
47
- rspec-support (3.3.0)
48
- slop (4.2.0)
49
- unf (0.1.4)
50
- unf_ext
51
- unf_ext (0.0.7.1)
52
- webrobots (0.1.1)
53
-
54
- PLATFORMS
55
- ruby
56
-
57
- DEPENDENCIES
58
- bundler (~> 1.6)
59
- cricos_scrape!
60
- rspec (~> 3.3.0, >= 3.3.0)
61
- rspec-its (~> 1.2.0, >= 1.2.0)
62
-
63
- BUNDLED WITH
64
- 1.10.6
data/Procfile DELETED
@@ -1,3 +0,0 @@
1
- job_1: bundle exec rake import:institutions MIN_ID=1 MAX_ID=10000
2
- job_2: bundle exec rake import:courses
3
- job_3: bundle exec rake import:contacts OVERWRITE=true
data/Rakefile DELETED
@@ -1,13 +0,0 @@
1
- require 'rspec/core/rake_task'
2
- RSpec::Core::RakeTask.new
3
-
4
- require_relative 'lib/cricos_scrape'
5
- namespace :import do
6
-
7
-
8
- task :contacts do
9
- output_file = ENV['OUTPUT_FILE'] || 'contacts.json'
10
- CricosScrape::BulkImportContacts::new(output_file, ENV['OVERWRITE']).perform
11
- end
12
-
13
- end
@@ -1,76 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CricosScrape::ContactImporter do
4
-
5
- describe '#run' do
6
- let(:agent) { CricosScrape.agent }
7
- let(:importer) { CricosScrape::ContactImporter.new(agent) }
8
- before do
9
- stub_const('CricosScrape::ContactImporter::STATES_CODE', ['ACT', 'WA'])
10
-
11
- allow(importer).to receive(:url_for).with('ACT').and_return(contact_details_of_state_act_uri)
12
- allow(importer).to receive(:url_for).with('WA').and_return(contact_details_of_state_wa_uri)
13
-
14
- @contacts = importer.run
15
- end
16
-
17
- context 'when the response body contains with states ACT and WA' do
18
- it 'returns array contacts array' do
19
- data = [
20
- #contacts of ACT
21
- CricosScrape::Contact.new('School Courses (and ELICOS and Foundation Programs where delivered by a school)',
22
- 'Ms Rebecca Hughes',
23
- 'ACT Education and Training Directorate',
24
- CricosScrape::Address.new('GPO Box 158', nil, 'CANBERRA', 'ACT', '2601'),
25
- '0262059299',
26
- '',
27
- 'etd.contactus@act.gov.au'
28
- ),
29
- CricosScrape::Contact.new('Vocational Courses (and ELICOS courses offered by an RTO or remaining ‘stand-alone’ ELICOS provider)',
30
- 'ASQA Info Line',
31
- 'Australian Skills Quality Authority',
32
- CricosScrape::Address.new('PO Box 9928', nil, 'Melbourne', 'VIC', '3001'),
33
- '1300701801',
34
- '',
35
- 'enquiries@asqa.gov.au'
36
- ),
37
- CricosScrape::Contact.new('Higher Education Courses (and ELICOS and Foundation Programs where delivered in a pathway arrangement with a Higher Education Provider)',
38
- 'Tertiary Education Quality and Standards Agency',
39
- 'Tertiary Education Quality and Standards Agency',
40
- CricosScrape::Address.new('GPO Box 1672', nil, 'Melbourne', 'VIC', '3001'),
41
- '1300739585',
42
- '1300739586',
43
- 'enquiries@teqsa.gov.au'
44
- ),
45
- #contacts of WA
46
- CricosScrape::Contact.new('Vocational Courses (and ELICOS courses offered by an RTO or remaining ‘stand-alone’ ELICOS provider)',
47
- 'ASQA Info Line',
48
- 'Australian Skills Quality Authority',
49
- CricosScrape::Address.new('PO Box 9928', nil, 'Melbourne', 'VIC', '3001'),
50
- '1300701801',
51
- '',
52
- 'enquiries@asqa.gov.au'
53
- ),
54
- CricosScrape::Contact.new('School Courses (and ELICOS and Foundation Programs where delivered by a school)',
55
- 'Mr Steve Page Senior Registration and Policy Officer',
56
- 'Department of Education Services, Non-Government & International Education Directorate',
57
- CricosScrape::Address.new('PO Box 1766', nil, 'OSBORNE PARK', 'WA', '6916'),
58
- '0894411962',
59
- '0894411901',
60
- 'ngs@des.wa.gov.au'
61
- ),
62
- CricosScrape::Contact.new('Higher Education Courses (and ELICOS and Foundation Programs where delivered in a pathway arrangement with a Higher Education Provider)',
63
- 'Tertiary Education Quality and Standards Agency',
64
- 'Tertiary Education Quality and Standards Agency',
65
- CricosScrape::Address.new('GPO Box 1672', nil, 'Melbourne', 'VIC', '3001'),
66
- '1300739585',
67
- '1300739586',
68
- 'enquiries@teqsa.gov.au'
69
- ),
70
- ]
71
-
72
- expect(@contacts).to eq data
73
- end
74
- end
75
- end
76
- end
@@ -1,71 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CricosScrape::CourseImporter do
4
-
5
- describe '#run' do
6
- let(:agent) { CricosScrape.agent }
7
- subject(:course) { CricosScrape::CourseImporter.new(agent, course_id: 1).run }
8
-
9
- before do
10
- allow_any_instance_of(CricosScrape::CourseImporter).to receive(:url).and_return(uri)
11
- course_list_page_1 = agent.get("#{uri}?LocationID=123")
12
- course_list_page_2 = agent.get("#{uri}?LocationID=456")
13
- allow_any_instance_of(Mechanize::Form).to receive(:submit).with(nil, {'action' => 'get-location-id'}).and_return(course_list_page_1, course_list_page_2)
14
- end
15
-
16
- context 'when there is no course found' do
17
- let(:uri) { not_found_course_details_uri }
18
-
19
- it 'does not import' do
20
- expect(course).to be_nil
21
- end
22
- end
23
-
24
- context 'when the details course is found' do
25
- let(:uri) { course_details_without_pagination_uri }
26
-
27
- its(:course_id) { is_expected.to eq 1 }
28
- its(:course_name) { is_expected.to eq 'Primary Yrs K-6' }
29
- its(:course_code) { is_expected.to eq '012395K' }
30
- its(:dual_qualification) { is_expected.to eq 'No' }
31
- its(:field_of_education) { is_expected.to eq '' }
32
- its(:broad_field) { is_expected.to eq '12 - Mixed Field Programmes' }
33
- its(:narrow_field) { is_expected.to eq '1201 - General Education Programmes' }
34
- its(:detailed_field) { is_expected.to eq '120101 - General Primary and Secondary Education Programmes' }
35
- its(:course_level) { is_expected.to eq 'Primary School Studies' }
36
- its(:foundation_studies) { is_expected.to eq 'No' }
37
- its(:work_component) { is_expected.to eq 'No' }
38
- its(:course_language) { is_expected.to eq 'English' }
39
- its(:duration) { is_expected.to eq '364' }
40
- its(:total_cost) { is_expected.to eq '66,500' }
41
- its(:contact_officers) do
42
- contact_officers = [
43
- CricosScrape::ContactOfficer.new('Principal Executive Officer', 'Nicole King', 'Manager', '0262056998', '62059239', nil),
44
- CricosScrape::ContactOfficer.new('International Student Contact', 'PAUL Wang', 'Study Tour Coordinator', '62077293', '', 'paul.wang@act.gov.au'),
45
- ]
46
-
47
- is_expected.to eq contact_officers
48
- end
49
- end
50
-
51
- context 'when the response body not contains pagination location' do
52
- let(:uri) { course_details_without_pagination_uri }
53
-
54
- its(:location_ids) do
55
- location_ids = ["123", "456"]
56
- is_expected.to eq location_ids
57
- end
58
- end
59
-
60
- context 'when the contact officers contains table grid' do
61
- let(:uri) { course_details_with_contact_officers_table_grid }
62
- let(:data) { [CricosScrape::ContactOfficer.new('Principal Executive Officer', 'Andrew Vann', 'Vice-Chancellor', '02 6338 4209', '02 6338 4809', nil),
63
- CricosScrape::ContactOfficer.new('International Student Contact', 'Matthew Evans', nil, '02 63657537', '02 63657590', 'mevans@csu.edu.au'),
64
- CricosScrape::ContactOfficer.new('International Student Contact', 'Matthew Evans', nil, '02 6365 7537', '02 6365 7590', 'mevans@csu.edu.au')] }
65
-
66
- its(:contact_officers) do
67
- is_expected.to eq data
68
- end
69
- end
70
- end
71
- end