stackone_migration 1.0.0 → 1.1.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.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +4 -4
- data/README.md +1 -1
- data/lib/stackone_migration/api/account_token_api.rb +2 -2
- data/lib/stackone_migration/api/delete_account_api.rb +16 -0
- data/lib/stackone_migration/api/employees_api.rb +3 -3
- data/lib/stackone_migration/api/link_token_api.rb +3 -3
- data/lib/stackone_migration/mappers/employees_mapper.rb +121 -2
- data/lib/stackone_migration/version.rb +1 -1
- data/lib/stackone_migration.rb +1 -0
- data/spec/api/account_token_api_spec.rb +6 -6
- data/spec/api/delete_account_api_spec.rb +41 -0
- data/spec/api/employees_api_spec.rb +6 -6
- data/spec/api/link_token_api_spec.rb +10 -10
- data/spec/mappers/employees_mapper_spec.rb +95 -59
- data/stackone_migration.gemspec +1 -1
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a44d4260363aee391c5c48f3d0f0fe6500181ab834949b6b9a530ba802a50051
|
4
|
+
data.tar.gz: '0653183cc3817cf604d47fc928c944861481c760bddaf1261c7b11a87017f08c'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed07b461361433768d77c4ba9e88babaf7e5bfcd10c152208e2fe52ca010a6bad342c16f0280b17c1793f356a70f067e012a50d976efa6c3f18146567a7a3b0c
|
7
|
+
data.tar.gz: 8428afb3002ba02cb8dd52090bf4b1930de55f9d0bfabdee11195b47089f3e38daffcbf19fdf882a3fa4768992ea9b6a2d2f4671b97b1a023815f0fcc14a10ac
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
stackone_migration (1.
|
4
|
+
stackone_migration (1.1.1)
|
5
5
|
merge_hris_client (~> 3.0)
|
6
|
-
stackone_hris_client (~> 1.
|
6
|
+
stackone_hris_client (~> 1.2.2)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
@@ -58,7 +58,7 @@ GEM
|
|
58
58
|
rubocop-ast (1.27.0)
|
59
59
|
parser (>= 3.2.1.0)
|
60
60
|
ruby-progressbar (1.13.0)
|
61
|
-
stackone_hris_client (1.
|
61
|
+
stackone_hris_client (1.2.2)
|
62
62
|
typhoeus (~> 1.0, >= 1.0.1)
|
63
63
|
typhoeus (1.4.0)
|
64
64
|
ethon (>= 0.9.0)
|
@@ -73,7 +73,7 @@ DEPENDENCIES
|
|
73
73
|
rake (~> 13.0.1)
|
74
74
|
rspec (~> 3.6, >= 3.6.0)
|
75
75
|
rubocop (~> 1.48.0)
|
76
|
-
stackone_hris_client (~> 1.
|
76
|
+
stackone_hris_client (~> 1.2.2)
|
77
77
|
stackone_migration!
|
78
78
|
|
79
79
|
BUNDLED WITH
|
data/README.md
CHANGED
@@ -7,12 +7,12 @@ module MergeHRISClient
|
|
7
7
|
def account_token_retrieve(public_token, opts = {})
|
8
8
|
return original_account_token_retrieve(public_token, opts) unless StackOneMigration::AccountHelper.stackone_account?(public_token)
|
9
9
|
|
10
|
-
account_data =
|
10
|
+
account_data = StackOneHRIS::AccountsApi.new.accounts_get(public_token)
|
11
11
|
|
12
12
|
integration_data = MergeHRISClient::AccountIntegration.new(slug: account_data.provider)
|
13
13
|
MergeHRISClient::AccountToken.new(account_token: public_token, integration: integration_data)
|
14
14
|
|
15
|
-
rescue
|
15
|
+
rescue StackOneHRIS::ApiError
|
16
16
|
raise MergeHRISClient::ApiError
|
17
17
|
end
|
18
18
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
3
|
+
module MergeHRISClient
|
4
|
+
class DeleteAccountApi
|
5
|
+
alias_method :original_delete_account_create, :delete_account_create
|
6
|
+
|
7
|
+
def delete_account_create(x_account_id, opts = {})
|
8
|
+
return original_delete_account_create(x_account_id, opts) unless StackOneMigration::AccountHelper.stackone_account?(x_account_id)
|
9
|
+
|
10
|
+
StackOneHRIS::AccountsApi.new.accounts_delete(x_account_id)
|
11
|
+
nil
|
12
|
+
rescue StackOneHRIS::ApiError
|
13
|
+
raise MergeHRISClient::ApiError
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -11,16 +11,16 @@ module MergeHRISClient
|
|
11
11
|
|
12
12
|
if opts.key?(:remote_id)
|
13
13
|
stripped_opts = opts.reject { |k, _| k == :remote_id }
|
14
|
-
response =
|
14
|
+
response = StackOneHRIS::EmployeesApi.new.employees_get(opts[:remote_id], x_account_id,
|
15
15
|
stripped_opts)
|
16
16
|
|
17
17
|
StackOneMigration::EmployeesMapper.map_single_employee_to_list_model(response&.data)
|
18
18
|
else
|
19
|
-
response =
|
19
|
+
response = StackOneHRIS::EmployeesApi.new.employees_list(x_account_id, opts)
|
20
20
|
|
21
21
|
StackOneMigration::EmployeesMapper.map_to_paginated_employee_list_model(response)
|
22
22
|
end
|
23
|
-
rescue
|
23
|
+
rescue StackOneHRIS::ApiError
|
24
24
|
raise MergeHRISClient::ApiError
|
25
25
|
end
|
26
26
|
end
|
@@ -7,17 +7,17 @@ module MergeHRISClient
|
|
7
7
|
def link_token_create(end_user_details_request, opts = {})
|
8
8
|
return original_link_token_create(end_user_details_request, opts) if opts.key?(:use_merge) && opts[:use_merge]
|
9
9
|
|
10
|
-
connect_session_create_request =
|
10
|
+
connect_session_create_request = StackOneHRIS::ConnectSessionCreate.new(
|
11
11
|
:origin_owner_id => end_user_details_request.end_user_origin_id,
|
12
12
|
:origin_owner_name => end_user_details_request.end_user_email_address,
|
13
13
|
:provider => end_user_details_request.integration,
|
14
14
|
:categories => end_user_details_request.categories,
|
15
15
|
)
|
16
16
|
|
17
|
-
created_session =
|
17
|
+
created_session = StackOneHRIS::ConnectSessionsApi.new.connect_sessions_create(connect_session_create_request)
|
18
18
|
MergeHRISClient::LinkToken.new(:link_token => created_session.token, :integration_name => end_user_details_request.integration)
|
19
19
|
|
20
|
-
rescue
|
20
|
+
rescue StackOneHRIS::ApiError
|
21
21
|
raise MergeHRISClient::ApiError
|
22
22
|
end
|
23
23
|
end
|
@@ -1,5 +1,91 @@
|
|
1
1
|
module StackOneMigration
|
2
2
|
class EmployeesMapper
|
3
|
+
def self.gender_enum_hash
|
4
|
+
{
|
5
|
+
:male => 'MALE',
|
6
|
+
:female => 'FEMALE',
|
7
|
+
:non_binary => 'NON-BINARY',
|
8
|
+
:other => 'OTHER',
|
9
|
+
:not_disclosed => 'PREFER_NOT_TO_DISCLOSE',
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.marital_status_enum_hash
|
14
|
+
{
|
15
|
+
:single => 'SINGLE',
|
16
|
+
:married => 'MARRIED_FILING_JOINTLY',
|
17
|
+
:divorced => 'MERGE_NONSTANDARD_VALUE',
|
18
|
+
:widowed => 'QUALIFYING_WIDOW_OR_WIDOWER_WITH_DEPENDENT_CHILD',
|
19
|
+
:domestic_partnership => 'MERGE_NONSTANDARD_VALUE',
|
20
|
+
:other => 'MERGE_NONSTANDARD_VALUE',
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.ethnicity_enum_hash
|
25
|
+
{
|
26
|
+
:white => 'WHITE',
|
27
|
+
:black_or_african_american => 'BLACK_OR_AFRICAN_AMERICAN',
|
28
|
+
:asian => 'ASIAN_OR_INDIAN_SUBCONTINENT',
|
29
|
+
:hispanic_or_latino => 'HISPANIC_OR_LATINO',
|
30
|
+
:american_indian_or_alaska_native => 'AMERICAN_INDIAN_OR_ALASKA_NATIVE',
|
31
|
+
:native_hawaiian_or_pacific_islander => 'NATIVE_HAWAIIAN_OR_OTHER_PACIFIC_ISLANDER',
|
32
|
+
:two_or_more_races => 'TWO_OR_MORE_RACES',
|
33
|
+
:not_disclosed => 'PREFER_NOT_TO_DISCLOSE',
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.employment_status_enum_hash
|
38
|
+
{
|
39
|
+
:active => 'ACTIVE',
|
40
|
+
:pending => 'PENDING',
|
41
|
+
:terminated => 'INACTIVE',
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.employment_type_enum_hash
|
46
|
+
{
|
47
|
+
:full_time => 'FULL_TIME',
|
48
|
+
:part_time => 'PART_TIME',
|
49
|
+
:contractor => 'CONTRACTOR',
|
50
|
+
:intern => 'INTERN',
|
51
|
+
:freelance => 'FREELANCE',
|
52
|
+
:terminated => 'MERGE_NONSTANDARD_VALUE',
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.pay_period_enum_hash
|
57
|
+
{
|
58
|
+
:hour => 'HOUR',
|
59
|
+
:day => 'DAY',
|
60
|
+
:week => 'WEEK',
|
61
|
+
:every_two_weeks => 'EVERY_TWO_WEEKS',
|
62
|
+
:month => 'MONTH',
|
63
|
+
:quarter => 'QUARTER',
|
64
|
+
:every_six_months => 'EVERY_SIX_MONTHS',
|
65
|
+
:year => 'YEAR',
|
66
|
+
}
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.pay_frequency_enum_hash
|
70
|
+
{
|
71
|
+
:weekly => 'WEEKLY',
|
72
|
+
:bi_weekly => 'BIWEEKLY',
|
73
|
+
:monthly => 'MONTHLY',
|
74
|
+
:quarterly => 'QUARTERLY',
|
75
|
+
:semi_annually => 'SEMIANNUALLY',
|
76
|
+
:yearly => 'ANNUALLY',
|
77
|
+
:thirteen_monthly => 'THIRTEEN-MONTHLY',
|
78
|
+
:pro_rata => 'PRO_RATA',
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.location_type_enum_hash
|
83
|
+
{
|
84
|
+
:home => 'HOME',
|
85
|
+
:work => 'WORK',
|
86
|
+
}
|
87
|
+
end
|
88
|
+
|
3
89
|
def self.map_to_employee_model(employee)
|
4
90
|
return nil if employee.nil?
|
5
91
|
|
@@ -13,13 +99,46 @@ module StackOneMigration
|
|
13
99
|
:personal_email => employee.personal_email,
|
14
100
|
:work_email => employee.work_email,
|
15
101
|
:mobile_phone_number => employee.personal_phone_number,
|
16
|
-
:gender => employee.gender,
|
17
|
-
:date_of_birth => employee.
|
102
|
+
:gender => MergeHRISClient::GenderEnum.build_from_hash(gender_enum_hash[employee.gender&.to_sym]),
|
103
|
+
:date_of_birth => employee.date_of_birth,
|
18
104
|
:start_date => employee.start_date,
|
19
105
|
:manager => employee.manager_id,
|
106
|
+
:ethnicity => MergeHRISClient::EthnicityEnum.build_from_hash(ethnicity_enum_hash[employee.ethnicity&.to_sym]),
|
107
|
+
:marital_status => MergeHRISClient::MaritalStatusEnum.build_from_hash(marital_status_enum_hash[employee.marital_status&.to_sym]),
|
108
|
+
:hire_date => employee.hire_date,
|
109
|
+
:employment_status => MergeHRISClient::EmploymentStatusEnum.build_from_hash(employment_status_enum_hash[employee.employment_status&.to_sym]),
|
110
|
+
:termination_date => employee.termination_date,
|
111
|
+
:company => employee.company,
|
112
|
+
:home_location => employee.home_location,
|
113
|
+
:work_location => employee.work_location,
|
114
|
+
:employments => map_employments(employee.employments),
|
115
|
+
)
|
116
|
+
end
|
117
|
+
|
118
|
+
def self.map_to_employment_model(employment)
|
119
|
+
return nil if employment.nil?
|
120
|
+
|
121
|
+
MergeHRISClient::Employment.new(
|
122
|
+
:job_title => employment[:job_title],
|
123
|
+
:pay_rate => employment[:pay_rate],
|
124
|
+
:pay_period => MergeHRISClient::PayPeriodEnum.build_from_hash(pay_period_enum_hash[employment[:pay_period]&.to_sym]),
|
125
|
+
:pay_frequency => MergeHRISClient::PayFrequencyEnum.build_from_hash(pay_frequency_enum_hash[employment[:pay_frequency]&.to_sym]),
|
126
|
+
:pay_currency => MergeHRISClient::PayCurrencyEnum.build_from_hash(employment[:pay_currency]&.to_s.upcase),
|
127
|
+
:effective_date => employment[:effective_date],
|
128
|
+
:employment_type => MergeHRISClient::EmploymentTypeEnum.build_from_hash(employment_type_enum_hash[employment[:employment_type]&.to_sym]),
|
20
129
|
)
|
21
130
|
end
|
22
131
|
|
132
|
+
def self.map_employments(employments)
|
133
|
+
if employments.nil?
|
134
|
+
mapped_results = []
|
135
|
+
else
|
136
|
+
mapped_results = employments.map do |employment|
|
137
|
+
map_to_employment_model(employment)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
23
142
|
def self.map_single_employee_to_list_model(employee)
|
24
143
|
mapped_employee = map_to_employee_model(employee)
|
25
144
|
|
data/lib/stackone_migration.rb
CHANGED
@@ -9,6 +9,7 @@ require 'stackone_migration/version'
|
|
9
9
|
# APIs
|
10
10
|
require 'stackone_migration/api/employees_api'
|
11
11
|
require 'stackone_migration/api/account_token_api'
|
12
|
+
require 'stackone_migration/api/delete_account_api'
|
12
13
|
require 'stackone_migration/api/link_token_api'
|
13
14
|
|
14
15
|
# Mappers
|
@@ -8,9 +8,9 @@ describe MergeHRISClient::AccountTokenApi do
|
|
8
8
|
context '.account_token_retrieve' do
|
9
9
|
context 'when the public token is an account id from StackOne' do
|
10
10
|
it 'returns a merge account token object' do
|
11
|
-
account_data =
|
12
|
-
stackone_account_api_double = double('
|
13
|
-
allow(
|
11
|
+
account_data = StackOneHRIS::Account.new(:id => '12345', :provider => 'stackone_hris_provider')
|
12
|
+
stackone_account_api_double = double('StackOneHRIS::AccountsApi', :accounts_get => account_data)
|
13
|
+
allow(StackOneHRIS::AccountsApi).to receive(:new).and_return(stackone_account_api_double)
|
14
14
|
|
15
15
|
result = subject.account_token_retrieve('12345')
|
16
16
|
|
@@ -18,9 +18,9 @@ describe MergeHRISClient::AccountTokenApi do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'returns an account token object with the right attributes' do
|
21
|
-
account_data =
|
22
|
-
stackone_account_api_double = double('
|
23
|
-
allow(
|
21
|
+
account_data = StackOneHRIS::Account.new(:id => '12345', :provider => 'stackone_hris_provider')
|
22
|
+
stackone_account_api_double = double('StackOneHRIS::AccountsApi', :accounts_get => account_data)
|
23
|
+
allow(StackOneHRIS::AccountsApi).to receive(:new).and_return(stackone_account_api_double)
|
24
24
|
|
25
25
|
result = subject.account_token_retrieve('12345')
|
26
26
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe MergeHRISClient::DeleteAccountApi do
|
6
|
+
subject { MergeHRISClient::DeleteAccountApi.new }
|
7
|
+
|
8
|
+
context '.delete_account_create' do
|
9
|
+
context 'when the account identifier is an account id from StackOne' do
|
10
|
+
it 'returns nil' do
|
11
|
+
stackone_account_api_double = double('StackOneHRIS::AccountsApi', :accounts_delete => nil)
|
12
|
+
allow(StackOneHRIS::AccountsApi).to receive(:new).and_return(stackone_account_api_double)
|
13
|
+
|
14
|
+
result = subject.delete_account_create('12345')
|
15
|
+
|
16
|
+
expect(result).to be_nil
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'calls the method from the StackOne API to delete the account' do
|
20
|
+
stackone_account_api_double = double('StackOneHRIS::AccountsApi', :accounts_delete => nil)
|
21
|
+
allow(StackOneHRIS::AccountsApi).to receive(:new).and_return(stackone_account_api_double)
|
22
|
+
|
23
|
+
expect(stackone_account_api_double).to receive(:accounts_delete).with('12345')
|
24
|
+
|
25
|
+
result = subject.delete_account_create('12345')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'when the account identifier is from Merge' do
|
31
|
+
it 'calls the method from the Merge API to delete the account' do
|
32
|
+
merge_delete_account_api_double = double('MergeHRISClient::DeleteAccountApi')
|
33
|
+
allow(MergeHRISClient::DeleteAccountApi).to receive(:new).and_return(merge_delete_account_api_double)
|
34
|
+
options = { :custom => 'option_value' }
|
35
|
+
|
36
|
+
expect(merge_delete_account_api_double).to receive(:delete_account_create).with('123abc', options)
|
37
|
+
|
38
|
+
subject.delete_account_create('123abc', options)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -8,9 +8,9 @@ describe MergeHRISClient::EmployeesApi do
|
|
8
8
|
context '.employees_list' do
|
9
9
|
context 'when the account id is from StackOne' do
|
10
10
|
it 'calls the method from the StackOne client to list employees' do
|
11
|
-
paginated_employees_double = double('
|
12
|
-
stackone_employees_api_double = double('
|
13
|
-
allow(
|
11
|
+
paginated_employees_double = double('StackOneHRIS::PaginatedEmployeeList', :data => nil, :next_page => nil)
|
12
|
+
stackone_employees_api_double = double('StackOneHRIS::EmployeesApi', :employees_list => paginated_employees_double)
|
13
|
+
allow(StackOneHRIS::EmployeesApi).to receive(:new).and_return(stackone_employees_api_double)
|
14
14
|
options = { :expand => 'employments,home_location' }
|
15
15
|
|
16
16
|
expect(stackone_employees_api_double).to receive(:employees_list).with('123', options)
|
@@ -20,9 +20,9 @@ describe MergeHRISClient::EmployeesApi do
|
|
20
20
|
|
21
21
|
context 'and the remote id param is in the options' do
|
22
22
|
it 'calls the method from the StackOne client to get an employee with remote id parameter' do
|
23
|
-
paginated_employees_double = double('
|
24
|
-
stackone_employees_api_double = double('
|
25
|
-
allow(
|
23
|
+
paginated_employees_double = double('StackOneHRIS::PaginatedEmployeeList', :data => nil)
|
24
|
+
stackone_employees_api_double = double('StackOneHRIS::EmployeesApi', :employees_get => paginated_employees_double)
|
25
|
+
allow(StackOneHRIS::EmployeesApi).to receive(:new).and_return(stackone_employees_api_double)
|
26
26
|
options = { :expand => 'employments,home_location', :remote_id => '456' }
|
27
27
|
|
28
28
|
expect(stackone_employees_api_double).to receive(:employees_get).with('456', '123', { :expand => 'employments,home_location' })
|
@@ -8,9 +8,9 @@ describe MergeHRISClient::LinkTokenApi do
|
|
8
8
|
context '.link_token_create' do
|
9
9
|
context 'when the the key to use merge is not present in the options' do
|
10
10
|
it 'returns a merge link token object' do
|
11
|
-
session_data =
|
12
|
-
connect_sessions_api_double = double('
|
13
|
-
allow(
|
11
|
+
session_data = StackOneHRIS::ConnectSessionToken.new(:token => 'test_token')
|
12
|
+
connect_sessions_api_double = double('StackOneHRIS::ConnectSessionsApi', :connect_sessions_create => session_data)
|
13
|
+
allow(StackOneHRIS::ConnectSessionsApi).to receive(:new).and_return(connect_sessions_api_double)
|
14
14
|
|
15
15
|
end_user_details_request = MergeHRISClient::EndUserDetailsRequest.new(
|
16
16
|
:end_user_email_address => 'tos@potig.er',
|
@@ -25,9 +25,9 @@ describe MergeHRISClient::LinkTokenApi do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'returns an object with the right attributes' do
|
28
|
-
session_data =
|
29
|
-
connect_sessions_api_double = double('
|
30
|
-
allow(
|
28
|
+
session_data = StackOneHRIS::ConnectSessionToken.new(:token => 'test_token')
|
29
|
+
connect_sessions_api_double = double('StackOneHRIS::ConnectSessionsApi', :connect_sessions_create => session_data)
|
30
|
+
allow(StackOneHRIS::ConnectSessionsApi).to receive(:new).and_return(connect_sessions_api_double)
|
31
31
|
|
32
32
|
end_user_details_request = MergeHRISClient::EndUserDetailsRequest.new(
|
33
33
|
:end_user_email_address => 'tos@potig.er',
|
@@ -42,9 +42,9 @@ describe MergeHRISClient::LinkTokenApi do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it 'calls the connect sessions api with the right parameters' do
|
45
|
-
session_data =
|
46
|
-
connect_sessions_api_double = double('
|
47
|
-
allow(
|
45
|
+
session_data = StackOneHRIS::ConnectSessionToken.new(:token => 'test_token')
|
46
|
+
connect_sessions_api_double = double('StackOneHRIS::ConnectSessionsApi', :connect_sessions_create => session_data)
|
47
|
+
allow(StackOneHRIS::ConnectSessionsApi).to receive(:new).and_return(connect_sessions_api_double)
|
48
48
|
|
49
49
|
end_user_details_request = MergeHRISClient::EndUserDetailsRequest.new(
|
50
50
|
:end_user_email_address => 'tos@potig.er',
|
@@ -53,7 +53,7 @@ describe MergeHRISClient::LinkTokenApi do
|
|
53
53
|
:integration => 'stackone_hris_provider',
|
54
54
|
)
|
55
55
|
|
56
|
-
expected_request =
|
56
|
+
expected_request = StackOneHRIS::ConnectSessionCreate.new(
|
57
57
|
:origin_owner_id => 'user_origin_id',
|
58
58
|
:origin_owner_name => 'tos@potig.er',
|
59
59
|
:provider => 'stackone_hris_provider',
|
@@ -4,7 +4,7 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
describe StackOneMigration::EmployeesMapper do
|
6
6
|
let(:sample_employee) {
|
7
|
-
|
7
|
+
StackOneHRIS::Employee.new(
|
8
8
|
:id => '123',
|
9
9
|
:first_name => 'Jean',
|
10
10
|
:last_name => 'Harrington',
|
@@ -15,16 +15,43 @@ describe StackOneMigration::EmployeesMapper do
|
|
15
15
|
:work_email => 'kota@efpiphi.kw',
|
16
16
|
:personal_phone_number => '(715) 658-9486',
|
17
17
|
:gender => 'female',
|
18
|
-
:
|
18
|
+
:date_of_birth => '1990-01-01',
|
19
19
|
:start_date => '2018-01-01',
|
20
20
|
:manager_id => '417b5e62-e011-5e69-a906-0aefade9ded1',
|
21
|
+
:ethnicity => 'white',
|
22
|
+
:marital_status => 'married',
|
23
|
+
:employment_status => 'terminated',
|
21
24
|
:work_phone_number => '(456) 787-3508',
|
22
|
-
:
|
25
|
+
:job_title => 'Manager',
|
23
26
|
:department => 'Human Resources',
|
24
|
-
|
27
|
+
:home_location => {
|
28
|
+
:phone_number => '(456) 787-3508',
|
29
|
+
:street_1 => '123 Main St',
|
30
|
+
:street_2 => 'Apt 1',
|
31
|
+
:city => 'San Francisco',
|
32
|
+
:state => 'CA',
|
33
|
+
:zip_code => '94105',
|
34
|
+
:country => 'US',
|
35
|
+
},
|
36
|
+
:work_location => nil,
|
37
|
+
:company => {
|
38
|
+
display_name: 'StackOne',
|
39
|
+
},
|
40
|
+
:employments => [
|
41
|
+
{
|
42
|
+
job_title: 'Manager',
|
43
|
+
pay_rate: 100000,
|
44
|
+
pay_period: 'yearly',
|
45
|
+
pay_frequency: 'weekly',
|
46
|
+
pay_currency: 'USD',
|
47
|
+
effective_date: '2018-01-01',
|
48
|
+
employee_type: 'full_time',
|
49
|
+
}
|
50
|
+
]
|
51
|
+
)
|
25
52
|
}
|
26
53
|
let(:other_sample_employee) {
|
27
|
-
|
54
|
+
StackOneHRIS::Employee.new(
|
28
55
|
:id => '456',
|
29
56
|
:first_name => 'Allie',
|
30
57
|
:last_name => 'Shaw',
|
@@ -35,11 +62,11 @@ describe StackOneMigration::EmployeesMapper do
|
|
35
62
|
:work_email => 'kota@efpiphi.kw',
|
36
63
|
:personal_phone_number => '(715) 658-9486',
|
37
64
|
:gender => 'female',
|
38
|
-
:
|
65
|
+
:date_of_birth => '1990-01-01',
|
39
66
|
:start_date => '2018-01-01',
|
40
67
|
:manager_id => '417b5e62-e011-5e69-a906-0aefade9ded1',
|
41
68
|
:work_phone_number => '(456) 787-3508',
|
42
|
-
:
|
69
|
+
:job_title => 'Manager',
|
43
70
|
:department => 'Human Resources',
|
44
71
|
)
|
45
72
|
}
|
@@ -64,11 +91,27 @@ describe StackOneMigration::EmployeesMapper do
|
|
64
91
|
:personal_email => 'ija@egje.wf',
|
65
92
|
:work_email => 'kota@efpiphi.kw',
|
66
93
|
:mobile_phone_number => '(715) 658-9486',
|
67
|
-
:gender => 'female',
|
68
94
|
:date_of_birth => '1990-01-01',
|
69
95
|
:start_date => '2018-01-01',
|
70
96
|
:manager => '417b5e62-e011-5e69-a906-0aefade9ded1',
|
97
|
+
:home_location => {
|
98
|
+
phone_number: '(456) 787-3508',
|
99
|
+
street_1: '123 Main St',
|
100
|
+
street_2: 'Apt 1',
|
101
|
+
city: 'San Francisco',
|
102
|
+
state: 'CA',
|
103
|
+
zip_code: '94105',
|
104
|
+
country: 'US',
|
105
|
+
},
|
106
|
+
:work_location => nil,
|
107
|
+
:company => {
|
108
|
+
display_name: 'StackOne',
|
109
|
+
},
|
71
110
|
)
|
111
|
+
expect(target_model.gender).to have_attributes(:value => 'FEMALE')
|
112
|
+
expect(target_model.ethnicity).to have_attributes(:value => 'WHITE')
|
113
|
+
expect(target_model.marital_status).to have_attributes(:value => 'MARRIED_FILING_JOINTLY')
|
114
|
+
expect(target_model.employment_status).to have_attributes(:value => 'INACTIVE')
|
72
115
|
end
|
73
116
|
|
74
117
|
context 'when the employee record to map is nil' do
|
@@ -80,6 +123,46 @@ describe StackOneMigration::EmployeesMapper do
|
|
80
123
|
end
|
81
124
|
end
|
82
125
|
|
126
|
+
context '.map_to_employment_model' do
|
127
|
+
it 'maps a employeement hash to correct class' do
|
128
|
+
sample_employment = {
|
129
|
+
job_title: 'Manager',
|
130
|
+
pay_rate: 100000,
|
131
|
+
pay_period: 'yearly',
|
132
|
+
pay_frequency: 'weekly',
|
133
|
+
pay_currency: 'USD',
|
134
|
+
effective_date: '2018-01-01',
|
135
|
+
employment_type: 'full_time',
|
136
|
+
}
|
137
|
+
|
138
|
+
target_model = described_class.map_to_employment_model(sample_employment)
|
139
|
+
|
140
|
+
expect(target_model).to be_a(MergeHRISClient::Employment)
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'maps a employeement hash with the right attributes' do
|
144
|
+
sample_employment = {
|
145
|
+
job_title: 'Manager',
|
146
|
+
pay_rate: 100000,
|
147
|
+
pay_period: 'year',
|
148
|
+
pay_frequency: 'weekly',
|
149
|
+
pay_currency: 'usd',
|
150
|
+
effective_date: '2018-01-01',
|
151
|
+
employment_type: 'full_time',
|
152
|
+
}
|
153
|
+
|
154
|
+
target_model = described_class.map_to_employment_model(sample_employment)
|
155
|
+
|
156
|
+
expect(target_model.job_title).to eq('Manager')
|
157
|
+
expect(target_model.pay_rate).to eq(100000)
|
158
|
+
expect(target_model.pay_period).to have_attributes(:value => 'YEAR')
|
159
|
+
expect(target_model.pay_frequency).to have_attributes(:value => 'WEEKLY')
|
160
|
+
expect(target_model.pay_currency).to have_attributes(:value => 'USD')
|
161
|
+
expect(target_model.effective_date).to eq('2018-01-01')
|
162
|
+
expect(target_model.employment_type).to have_attributes(:value => 'FULL_TIME')
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
83
166
|
context '.map_single_employee_to_list_model' do
|
84
167
|
it 'maps a single employee to a paginated employee list class' do
|
85
168
|
target_model = described_class.map_single_employee_to_list_model(sample_employee)
|
@@ -92,24 +175,8 @@ describe StackOneMigration::EmployeesMapper do
|
|
92
175
|
|
93
176
|
expect(target_model).to have_attributes(
|
94
177
|
:_next => nil,
|
95
|
-
:results => [
|
96
|
-
MergeHRISClient::Employee.new(
|
97
|
-
:id => '123',
|
98
|
-
:remote_id => '123',
|
99
|
-
:first_name => 'Jean',
|
100
|
-
:last_name => 'Harrington',
|
101
|
-
:display_full_name => 'Jean Harrington',
|
102
|
-
:avatar => 'https://www.gravatar.com/avatar/0c1c0c1c0c1c0c1c0c1c0c1c0c1c0c1c?d=mm&s=200',
|
103
|
-
:personal_email => 'ija@egje.wf',
|
104
|
-
:work_email => 'kota@efpiphi.kw',
|
105
|
-
:mobile_phone_number => '(715) 658-9486',
|
106
|
-
:gender => 'female',
|
107
|
-
:date_of_birth => '1990-01-01',
|
108
|
-
:start_date => '2018-01-01',
|
109
|
-
:manager => '417b5e62-e011-5e69-a906-0aefade9ded1',
|
110
|
-
)
|
111
|
-
],
|
112
178
|
:previous => nil)
|
179
|
+
expect(target_model).to include(:results)
|
113
180
|
end
|
114
181
|
|
115
182
|
context 'when the single employee record to map is nil' do
|
@@ -128,7 +195,7 @@ describe StackOneMigration::EmployeesMapper do
|
|
128
195
|
it 'maps the employees to a paginated employee list classl' do
|
129
196
|
other_sample_employee = sample_employee.clone
|
130
197
|
|
131
|
-
stackone_paginated_employees =
|
198
|
+
stackone_paginated_employees = StackOneHRIS::EmployeesPaginated.new(
|
132
199
|
:next_page => 'next_page_token',
|
133
200
|
:data => [sample_employee, other_sample_employee],
|
134
201
|
)
|
@@ -140,7 +207,7 @@ describe StackOneMigration::EmployeesMapper do
|
|
140
207
|
|
141
208
|
|
142
209
|
it 'maps the employee list attributes with the right structure to the target class' do
|
143
|
-
stackone_paginated_employees =
|
210
|
+
stackone_paginated_employees = StackOneHRIS::EmployeesPaginated.new(
|
144
211
|
:next_page => 'next_page_token',
|
145
212
|
:data => [sample_employee, other_sample_employee],
|
146
213
|
)
|
@@ -149,40 +216,9 @@ describe StackOneMigration::EmployeesMapper do
|
|
149
216
|
|
150
217
|
expect(target_model).to have_attributes(
|
151
218
|
:_next => 'next_page_token',
|
152
|
-
:results => [
|
153
|
-
MergeHRISClient::Employee.new(
|
154
|
-
:id => '123',
|
155
|
-
:remote_id => '123',
|
156
|
-
:first_name => 'Jean',
|
157
|
-
:last_name => 'Harrington',
|
158
|
-
:display_full_name => 'Jean Harrington',
|
159
|
-
:avatar => 'https://www.gravatar.com/avatar/0c1c0c1c0c1c0c1c0c1c0c1c0c1c0c1c?d=mm&s=200',
|
160
|
-
:personal_email => 'ija@egje.wf',
|
161
|
-
:work_email => 'kota@efpiphi.kw',
|
162
|
-
:mobile_phone_number => '(715) 658-9486',
|
163
|
-
:gender => 'female',
|
164
|
-
:date_of_birth => '1990-01-01',
|
165
|
-
:start_date => '2018-01-01',
|
166
|
-
:manager => '417b5e62-e011-5e69-a906-0aefade9ded1',
|
167
|
-
),
|
168
|
-
MergeHRISClient::Employee.new(
|
169
|
-
:id => '456',
|
170
|
-
:remote_id => '456',
|
171
|
-
:first_name => 'Allie',
|
172
|
-
:last_name => 'Shaw',
|
173
|
-
:display_full_name => 'Allie Shaw',
|
174
|
-
:avatar => 'https://www.gravatar.com/avatar/0c1c0c1c0c1c0c1c0c1c0c1c0c1c0c1c?d=mm&s=200',
|
175
|
-
:personal_email => 'ija@egje.wf',
|
176
|
-
:work_email => 'kota@efpiphi.kw',
|
177
|
-
:mobile_phone_number => '(715) 658-9486',
|
178
|
-
:gender => 'female',
|
179
|
-
:date_of_birth => '1990-01-01',
|
180
|
-
:start_date => '2018-01-01',
|
181
|
-
:manager => '417b5e62-e011-5e69-a906-0aefade9ded1',
|
182
|
-
)
|
183
|
-
],
|
184
219
|
:previous => nil
|
185
220
|
)
|
221
|
+
expect(target_model.results.length).to eq(2)
|
186
222
|
end
|
187
223
|
|
188
224
|
context 'when the employee list to map is nil' do
|
data/stackone_migration.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.required_ruby_version = '>= 2.7'
|
17
17
|
|
18
18
|
s.add_runtime_dependency 'merge_hris_client', '~> 3.0'
|
19
|
-
s.add_runtime_dependency 'stackone_hris_client', '~> 1.
|
19
|
+
s.add_runtime_dependency 'stackone_hris_client', '~> 1.2.2'
|
20
20
|
|
21
21
|
s.add_development_dependency 'rspec', '~> 3.6', '>= 3.6.0'
|
22
22
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stackone_migration
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- StackOne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: merge_hris_client
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.2.2
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.2.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,12 +72,14 @@ files:
|
|
72
72
|
- Rakefile
|
73
73
|
- lib/stackone_migration.rb
|
74
74
|
- lib/stackone_migration/api/account_token_api.rb
|
75
|
+
- lib/stackone_migration/api/delete_account_api.rb
|
75
76
|
- lib/stackone_migration/api/employees_api.rb
|
76
77
|
- lib/stackone_migration/api/link_token_api.rb
|
77
78
|
- lib/stackone_migration/helpers/account_helper.rb
|
78
79
|
- lib/stackone_migration/mappers/employees_mapper.rb
|
79
80
|
- lib/stackone_migration/version.rb
|
80
81
|
- spec/api/account_token_api_spec.rb
|
82
|
+
- spec/api/delete_account_api_spec.rb
|
81
83
|
- spec/api/employees_api_spec.rb
|
82
84
|
- spec/api/link_token_api_spec.rb
|
83
85
|
- spec/helpers/account_helper_spec.rb
|
@@ -110,6 +112,7 @@ summary: StackOne migration client gem
|
|
110
112
|
test_files:
|
111
113
|
- spec/api/employees_api_spec.rb
|
112
114
|
- spec/api/account_token_api_spec.rb
|
115
|
+
- spec/api/delete_account_api_spec.rb
|
113
116
|
- spec/api/link_token_api_spec.rb
|
114
117
|
- spec/helpers/account_helper_spec.rb
|
115
118
|
- spec/mappers/employees_mapper_spec.rb
|