aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Gemfile1
-rw-r--r--Gemfile.lock9
-rw-r--r--config/environments/test.rb6
-rw-r--r--lib/tasks/organisations.rake10
-rw-r--r--spec/fixtures/organizations.json98
-rw-r--r--spec/spec_helper.rb4
-rw-r--r--spec/task/organisations_rake_spec.rb46
7 files changed, 167 insertions, 7 deletions
diff --git a/Gemfile b/Gemfile
index f61672069..55516328c 100644
--- a/Gemfile
+++ b/Gemfile
@@ -133,6 +133,7 @@ group :test, :development do
gem 'pry-rails'
gem 'rspec-rails', '~> 3.1.0'
gem 'fakeweb'
+ gem 'webmock'
gem 'capybara', '~> 2.4.0'
gem 'poltergeist'
gem 'launchy'
diff --git a/Gemfile.lock b/Gemfile.lock
index d543d272d..c9ad505a2 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -95,6 +95,8 @@ GEM
coffee-script-source
execjs
coffee-script-source (1.9.1)
+ crack (0.4.3)
+ safe_yaml (~> 1.0.0)
daemons (1.1.9)
database_cleaner (1.4.1)
dbf (3.0.3)
@@ -186,6 +188,7 @@ GEM
has_scope (0.6.0)
actionpack (>= 3.2, < 5)
activesupport (>= 3.2, < 5)
+ hashdiff (0.3.0)
highline (1.7.1)
hike (1.2.3)
hitimes (1.2.2)
@@ -386,6 +389,7 @@ GEM
rubycas-client (2.3.9)
activesupport
rubyzip (1.1.7)
+ safe_yaml (1.0.4)
sass (3.2.19)
sass-rails (4.0.5)
railties (>= 4.0.0, < 5.0)
@@ -469,6 +473,10 @@ GEM
json (>= 1.8.0)
warden (1.2.3)
rack (>= 1.0)
+ webmock (2.1.0)
+ addressable (>= 2.3.6)
+ crack (>= 0.3.2)
+ hashdiff
websocket-driver (0.5.3)
websocket-extensions (>= 0.1.0)
websocket-driver (0.5.3-java)
@@ -580,6 +588,7 @@ DEPENDENCIES
transpec
turbolinks
uglifier (~> 2.7.2)
+ webmock
will_paginate (~> 3.0.7)
will_paginate-bootstrap (~> 1.0.1)
diff --git a/config/environments/test.rb b/config/environments/test.rb
index 3e0c486e6..512afab4f 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -54,6 +54,12 @@ Rails.application.configure do
cas_server: "http://stif-portail-dev.af83.priv/sessions"
}
+ config.stif_portail_api =
+ {
+ key: "411e6b8d259bc9900c0caf9db6072013",
+ url: "http://localhost:3000"
+ }
+
# file to data for demo
config.demo_data = "tmp/demo.zip"
diff --git a/lib/tasks/organisations.rake b/lib/tasks/organisations.rake
index a887cd277..06e1d3da7 100644
--- a/lib/tasks/organisations.rake
+++ b/lib/tasks/organisations.rake
@@ -1,7 +1,7 @@
namespace :organisations do
def api_retrieve_organisation
- last_sync = User.minimum(:synced_at)
- conf = Rails.application.config.stif_portail_api
+ conf = Rails.application.config.try(:stif_portail_api)
+ raise 'Rails.application.config.stif_portail_api settings is not defined' unless conf
conn = Faraday.new(:url => conf[:url]) do |c|
c.headers['Authorization'] = "Token token=\"#{conf[:key]}\""
@@ -9,8 +9,8 @@ namespace :organisations do
c.adapter Faraday.default_adapter
end
- response = conn.get '/api/v1/organizations'
- JSON.parse response.body if response.status == 200
+ resp = conn.get '/api/v1/organizations'
+ JSON.parse resp.body if resp.status == 200
end
def sync_organisations data
@@ -19,7 +19,7 @@ namespace :organisations do
organisation.name = org['name']
organisation.synced_at = Time.now
organisation.save if organisation.changed?
- puts "Organisation #{organisation.name} has been updated"
+ puts "✓ Organisation #{organisation.name} has been updated" unless Rails.env.test?
end
end
end
diff --git a/spec/fixtures/organizations.json b/spec/fixtures/organizations.json
new file mode 100644
index 000000000..b70f99520
--- /dev/null
+++ b/spec/fixtures/organizations.json
@@ -0,0 +1,98 @@
+[{
+ "id": 1,
+ "name": "STIF",
+ "code": "STIF",
+ "created_at": "2016-05-17T15:33:45.951Z",
+ "updated_at": "2016-05-17T15:33:45.951Z",
+ "organization_users": {
+ "users_count": 9
+ },
+ "suborganizations": {
+ "suborganizations_count": 4,
+ "suborganizations": [{
+ "id": 6,
+ "name": "ALBATRANS",
+ "code": "ALBATRANS"
+ }, {
+ "id": 5,
+ "name": "OPTILE",
+ "code": "OPTILE"
+ }, {
+ "id": 2,
+ "name": "RATP",
+ "code": "RATP"
+ }, {
+ "id": 3,
+ "name": "SNCF",
+ "code": "SNCF"
+ }]
+ }
+}, {
+ "id": 3,
+ "name": "SNCF",
+ "code": "SNCF",
+ "created_at": "2016-05-17T16:04:27.047Z",
+ "updated_at": "2016-05-17T16:04:27.047Z",
+ "organization_users": {
+ "users_count": 2
+ },
+ "suborganizations": {
+ "suborganizations_count": 0,
+ "suborganizations": []
+ },
+ "organization_parent": {
+ "parent_id": 1,
+ "parent_name": "STIF"
+ }
+}, {
+ "id": 5,
+ "name": "OPTILE",
+ "code": "OPTILE",
+ "created_at": "2016-05-17T16:04:27.655Z",
+ "updated_at": "2016-05-17T16:04:27.655Z",
+ "organization_users": {
+ "users_count": 0
+ },
+ "suborganizations": {
+ "suborganizations_count": 0,
+ "suborganizations": []
+ },
+ "organization_parent": {
+ "parent_id": 1,
+ "parent_name": "STIF"
+ }
+}, {
+ "id": 6,
+ "name": "ALBATRANS",
+ "code": "ALBATRANS",
+ "created_at": "2016-05-17T16:04:27.955Z",
+ "updated_at": "2016-05-17T16:04:27.955Z",
+ "organization_users": {
+ "users_count": 0
+ },
+ "suborganizations": {
+ "suborganizations_count": 0,
+ "suborganizations": []
+ },
+ "organization_parent": {
+ "parent_id": 1,
+ "parent_name": "STIF"
+ }
+}, {
+ "id": 2,
+ "name": "RATP",
+ "code": "RATP",
+ "created_at": "2016-05-17T16:04:26.646Z",
+ "updated_at": "2016-05-31T10:06:39.349Z",
+ "organization_users": {
+ "users_count": 8
+ },
+ "suborganizations": {
+ "suborganizations_count": 0,
+ "suborganizations": []
+ },
+ "organization_parent": {
+ "parent_id": 1,
+ "parent_name": "STIF"
+ }
+}]
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 47cefaedf..93b148496 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -11,7 +11,7 @@ require 'capybara/poltergeist'
require 'georuby-ext'
require 'will_paginate/array'
require 'fakeweb'
-
+require 'webmock/rspec'
require 'simplecov'
if ENV['JOB_NAME']
@@ -49,7 +49,7 @@ RSpec.configure do |config|
config.filter_run_excluding :js => true
config.run_all_when_everything_filtered = true
config.include TokenInputHelper, :type => :feature
-
+
# ## Mock Framework
#
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
diff --git a/spec/task/organisations_rake_spec.rb b/spec/task/organisations_rake_spec.rb
new file mode 100644
index 000000000..9718533e9
--- /dev/null
+++ b/spec/task/organisations_rake_spec.rb
@@ -0,0 +1,46 @@
+require 'rails_helper'
+require 'rake'
+
+describe 'organisations:sync rake task' do
+ before :all do
+ Rake.application.rake_require "tasks/organisations"
+ Rake::Task.define_task(:environment)
+ end
+
+ describe 'organisations:sync' do
+ let(:conf) { Rails.application.config.stif_portail_api }
+ let :run_rake_task do
+ Rake::Task["organisations:sync"].reenable
+ Rake.application.invoke_task "organisations:sync"
+ end
+
+ before :each do
+ stub_request(:get, "#{conf[:url]}/api/v1/organizations").
+ with(headers: { 'Authorization' => "Token token=\"#{conf[:key]}\"" }).
+ to_return(body: File.open(File.join(Rails.root, 'spec', 'fixtures', 'organizations.json')), status: 200)
+ end
+
+ it 'should create new organisations' do
+ run_rake_task
+ expect(WebMock).to have_requested(:get, "#{conf[:url]}/api/v1/organizations").
+ with(headers: { 'Authorization' => "Token token=\"#{conf[:key]}\"" })
+ expect(Organisation.count).to eq(6)
+ end
+
+ it 'should update existing organisations' do
+ create :organisation, name: 'dummy_name', code:'RATP', updated_at: 10.days.ago
+ run_rake_task
+ organisation = Organisation.find_by(code: 'RATP')
+
+ expect(organisation.name).to eq('RATP')
+ expect(organisation.updated_at.utc).to be_within(1.second).of Time.now
+ expect(organisation.synced_at.utc).to be_within(1.second).of Time.now
+ end
+
+ it 'should not create organisation if code is already present' do
+ create :organisation, code:'RATP'
+ run_rake_task
+ expect(Organisation.count).to eq(6)
+ end
+ end
+end