leap_salesforce 0.1.1 → 0.1.2
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/.idea/.rakeTasks +1 -1
- data/.idea/workspace.xml +257 -222
- data/ChangeLog +9 -1
- data/README.md +9 -1
- data/exe/leap_salesforce +10 -8
- data/leap_salesforce.gemspec +1 -0
- data/lib/leap_salesforce/error.rb +10 -0
- data/lib/leap_salesforce/generator/exe_helpers.rb +46 -12
- data/lib/leap_salesforce/generator/generator.rb +3 -2
- data/lib/leap_salesforce/generator/templates/.leap_salesforce.yml.erb +1 -1
- data/lib/leap_salesforce/generator/templates/config/credentials/salesforce_oauth2.yml.erb +3 -3
- data/lib/leap_salesforce/generator/templates/config/general.rb.erb +1 -1
- data/lib/leap_salesforce/generator/templates/spec/picklists_spec.rb.erb +11 -0
- data/lib/leap_salesforce/parameters.rb +20 -1
- data/lib/leap_salesforce/soql_data/soql_handler.rb +3 -5
- data/lib/leap_salesforce/version.rb +1 -1
- data/lib/leap_salesforce.rb +1 -11
- metadata +17 -1
data/ChangeLog
CHANGED
@@ -1,5 +1,13 @@
|
|
1
|
+
Version 0.1.2
|
2
|
+
* Enhancements
|
3
|
+
* Added color to output messages
|
4
|
+
* Add ticks when successful
|
5
|
+
* Check for Salesforce connectivity and OAuth connection on initialisation
|
6
|
+
* Add picklist spec into initially created spec files
|
7
|
+
|
1
8
|
Version 0.1.1
|
2
9
|
* Enhancements
|
3
10
|
* Suggestions for generated factory
|
4
11
|
* Begin unit tests
|
5
|
-
* Handle Macrons by ensuring they're not copied into Ruby names / Modules
|
12
|
+
* Handle Macrons by ensuring they're not copied into Ruby names / Modules
|
13
|
+
* Created executable
|
data/README.md
CHANGED
@@ -23,7 +23,15 @@ Or install it yourself as:
|
|
23
23
|
|
24
24
|
## Usage
|
25
25
|
|
26
|
-
|
26
|
+
After installing the gem, to get started in creating a fresh repository, the `leap_salesforce` executable can be used.
|
27
|
+
|
28
|
+
E.g
|
29
|
+
|
30
|
+
```
|
31
|
+
leap_salesforce init
|
32
|
+
```
|
33
|
+
|
34
|
+
|
27
35
|
|
28
36
|
## Docs
|
29
37
|
|
data/exe/leap_salesforce
CHANGED
@@ -6,6 +6,8 @@ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
|
6
6
|
require 'thor'
|
7
7
|
require 'leap_salesforce/parameters'
|
8
8
|
require 'leap_salesforce/generator/generator'
|
9
|
+
require 'leap_salesforce/error'
|
10
|
+
require 'colorize'
|
9
11
|
|
10
12
|
module LeapSalesforce
|
11
13
|
# Executable for setting up Leap Salesforce
|
@@ -26,26 +28,26 @@ module LeapSalesforce
|
|
26
28
|
def init
|
27
29
|
# Ask user to create OAuth application by following
|
28
30
|
unless options[:setup_done]
|
29
|
-
oauth_setup = input_for "Have you set up OAuth application by following #{OAUTH_WIKI} (y/n)?"
|
31
|
+
oauth_setup = input_for "Have you set up OAuth application by following #{OAUTH_WIKI} (y/n)?", :red
|
30
32
|
exit if oauth_setup.downcase == 'n'
|
31
33
|
end
|
32
34
|
|
33
35
|
query_for_parameters
|
34
36
|
generate_files binding, ['Gemfile', 'Rakefile', '.leap_salesforce.yml', '.rspec',
|
35
37
|
{ config: ['general.rb', { credentials: 'salesforce_oauth2.yml' }] },
|
36
|
-
{ spec: %w[spec_helper.rb limit_spec.rb crud_eg_spec.rb] }]
|
38
|
+
{ spec: %w[spec_helper.rb limit_spec.rb crud_eg_spec.rb picklists_spec.rb] }]
|
37
39
|
|
38
40
|
environment_content = read_template File.join('config', 'environments', 'specific_file.rb.erb'),
|
39
41
|
binding
|
40
|
-
generate_file File.join('config', 'environments', "#{
|
41
|
-
overwrite: false
|
42
|
+
generate_file File.join('config', 'environments', "#{LeapSalesforce.environment}.rb"),
|
43
|
+
environment_content, overwrite: false
|
42
44
|
|
43
|
-
puts
|
44
|
-
puts 'Installing gems'
|
45
|
+
puts "\u2713 Initial files created!".colorize :green
|
46
|
+
puts 'Installing gems'.colorize :yellow
|
45
47
|
puts `bundle install`
|
46
|
-
puts 'Creating initial Soql objects. See ".leap_salesforce.yml" for list'
|
48
|
+
puts 'Creating initial Soql objects. See ".leap_salesforce.yml" for list'.colorize :yellow
|
47
49
|
puts `rake leaps:create_soql_objects`
|
48
|
-
puts 'Creating enums'
|
50
|
+
puts 'Creating enums'.colorize :yellow
|
49
51
|
puts `rake leaps:create_enums`
|
50
52
|
end
|
51
53
|
end
|
data/leap_salesforce.gemspec
CHANGED
@@ -31,6 +31,7 @@ It reads the Metadata from Salesforce and creates the foundation for API tests.'
|
|
31
31
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
32
32
|
spec.add_development_dependency 'topoisomerase'
|
33
33
|
spec.add_dependency 'activerecord'
|
34
|
+
spec.add_dependency 'colorize'
|
34
35
|
spec.add_dependency 'factory_bot'
|
35
36
|
spec.add_dependency 'faker'
|
36
37
|
spec.add_dependency 'rake'
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module LeapSalesforce
|
2
|
+
# Any error specific to LeapSalesforce
|
3
|
+
class Error < StandardError; end
|
4
|
+
# Error related to handling a response
|
5
|
+
class ResponseError < StandardError; end
|
6
|
+
# Error related to setup of test automation suite
|
7
|
+
class SetupError < Error; end
|
8
|
+
# Error related to Test Users
|
9
|
+
class UserError < Error; end
|
10
|
+
end
|
@@ -1,29 +1,63 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'io/console'
|
4
|
+
require 'rest-client'
|
5
|
+
require 'soaspec'
|
6
|
+
|
3
7
|
module LeapSalesforce
|
4
8
|
# Helpers for LeapSalesforce executable
|
5
9
|
module ExeHelpers
|
6
10
|
# Return input for query
|
7
11
|
# @param [String] query Query to ask on terminal
|
8
12
|
# @return [String] User input to store
|
9
|
-
def input_for(query)
|
10
|
-
|
13
|
+
def input_for(query, color = nil)
|
14
|
+
if color
|
15
|
+
puts query.colorize(color)
|
16
|
+
else
|
17
|
+
puts query
|
18
|
+
end
|
11
19
|
$stdin.gets.strip
|
12
20
|
end
|
13
21
|
|
22
|
+
# Retrieve environment and ensure that environment can be connected to
|
23
|
+
def verify_environment
|
24
|
+
LeapSalesforce.environment = options[:environment] || input_for('Enter the environment you want to set things up for ' \
|
25
|
+
'(This will be parameterised so can be changed later). For production used "prod". Otherwise preference is to use the' \
|
26
|
+
' part of the URL that is unique for the environment')
|
27
|
+
# Verify connection to environment
|
28
|
+
RestClient.get(LeapSalesforce.general_url)
|
29
|
+
rescue SocketError
|
30
|
+
message = "Unable to connect to #{LeapSalesforce.general_url}. Potentially problem with" \
|
31
|
+
' internet or proxy settings'.colorize :red
|
32
|
+
raise LeapSalesforce::SetupError, message
|
33
|
+
else
|
34
|
+
puts "\u2713 Connection to #{LeapSalesforce.general_url} successful".colorize :green
|
35
|
+
end
|
36
|
+
|
37
|
+
# Retrieve OAuth credentials and verify that they're correct
|
38
|
+
def verify_oauth
|
39
|
+
LeapSalesforce.client_id = options[:client_id] || input_for('Client id (Customer Id)')
|
40
|
+
LeapSalesforce.client_secret = options[:client_secret] || STDIN.getpass('Client secret (Consumer Secret)')
|
41
|
+
LeapSalesforce.api_user = options[:username] || input_for('Salesforce username. It is ideal to start with a System admin' \
|
42
|
+
' so that any necessary metadata can be read. More users can be added later. You can use ERB to make name' \
|
43
|
+
' vary according to environment (e.g., test.user@<%= LeapSalesforce.environment %>.my.company.com)')
|
44
|
+
LeapSalesforce.password = options[:password] || STDIN.getpass('Password (Recommendation is that 1 password' \
|
45
|
+
' be shared across all test users to be easier to manage):')
|
46
|
+
Soaspec::OAuth2.debug_oauth = true
|
47
|
+
Soaspec::OAuth2.new(LeapSalesforce.oauth_settings).access_token
|
48
|
+
rescue StandardError
|
49
|
+
raise LeapSalesforce::SetupError, "Cannot perform OAuth. See 'logs' folder for details of what was sent"
|
50
|
+
else
|
51
|
+
puts "\u2713 OAuth successful".colorize :green
|
52
|
+
end
|
53
|
+
|
14
54
|
# Ask user to enter parameters specific to their Salesforce environment
|
15
55
|
def query_for_parameters
|
16
|
-
puts 'Please enter the following information to generate files for a new
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
@username = options[:username] || input_for('Enter the Salesforce username. It is ideal to start with a System admin' \
|
21
|
-
' so that any necessary metadata can be read')
|
56
|
+
puts 'Please enter the following information to generate files for a new' \
|
57
|
+
' leap_salesforce testing repo'.colorize(:green)
|
58
|
+
verify_environment
|
59
|
+
verify_oauth
|
22
60
|
@user_key = options[:user_key] || input_for('Enter a key to refer to this user (This will be stored as a Symbol)')
|
23
|
-
@password = options[:password] || input_for('Enter password for this user. Recommendation is that 1 password be shared across' \
|
24
|
-
' all test users to be easier to manage')
|
25
|
-
@environment = options[:environment] || input_for('Enter the environment you want to set things up for ' \
|
26
|
-
'(This will be parameterised so can be changed later)')
|
27
61
|
end
|
28
62
|
end
|
29
63
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'erb'
|
3
3
|
require 'fileutils'
|
4
4
|
require_relative 'exe_helpers'
|
5
|
+
require 'colorize'
|
5
6
|
|
6
7
|
module LeapSalesforce
|
7
8
|
# Generators for creating code
|
@@ -18,10 +19,10 @@ module LeapSalesforce
|
|
18
19
|
# @param [String] content Content to put within file
|
19
20
|
def generate_file(filename, content, overwrite: true)
|
20
21
|
FileUtils.mkdir_p File.dirname filename unless File.directory? File.dirname(filename)
|
21
|
-
return puts "File '#{filename}' already exists, skipping..." if
|
22
|
+
return puts "File '#{filename}' already exists, skipping...".colorize :red if File.exist?(filename) && !overwrite
|
22
23
|
|
23
24
|
File.write filename, content
|
24
|
-
puts "Created file at #{filename}"
|
25
|
+
puts "\u2713 Created file at #{filename}".colorize :green
|
25
26
|
end
|
26
27
|
|
27
28
|
# @example Create a spec_helper file and test file in spec folder
|
@@ -1,3 +1,3 @@
|
|
1
|
-
client_id: '<%=
|
2
|
-
client_secret: '<%=
|
3
|
-
password: '<%=
|
1
|
+
client_id: '<%= LeapSalesforce.client_id %>'
|
2
|
+
client_secret: '<%= LeapSalesforce.client_secret %>'
|
3
|
+
password: '<%= LeapSalesforce.password %>'
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe 'Picklists' do
|
4
|
+
LeapSalesforce.objects_to_verify.each do |data_class|
|
5
|
+
SoqlEnum.values_for(data_class).each do |picklist|
|
6
|
+
it "#{picklist} has not changed values" do
|
7
|
+
expect(picklist.values).to match_array data_class.picklist_for(picklist.name)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require_relative 'users/users'
|
4
4
|
require_relative 'soql_object'
|
5
5
|
|
6
|
-
# Adding parameters to set for authentication
|
6
|
+
# Adding parameters to set for authentication, environment and other common settings
|
7
7
|
module LeapSalesforce
|
8
8
|
@config_folder = 'config'
|
9
9
|
@lib_folder = File.join('lib', 'leap_salesforce').freeze
|
@@ -20,6 +20,23 @@ module LeapSalesforce
|
|
20
20
|
ENV['LEAP_ENV'] || @environment
|
21
21
|
end
|
22
22
|
|
23
|
+
# @return [Hash] OAuth2 parameters used in connecting to salesforce
|
24
|
+
def oauth_settings
|
25
|
+
settings = {
|
26
|
+
username: '<%= LeapSalesforce.api_user %>', password: LeapSalesforce.password,
|
27
|
+
client_id: LeapSalesforce.client_id,
|
28
|
+
client_secret: LeapSalesforce.client_secret,
|
29
|
+
token_url: "#{LeapSalesforce.general_url}/services/oauth2/token"
|
30
|
+
}
|
31
|
+
settings[:security_token] = LeapSalesforce.security_token if LeapSalesforce.security_token
|
32
|
+
settings
|
33
|
+
end
|
34
|
+
|
35
|
+
# @return [String] General salesforce URL for logging in to
|
36
|
+
def general_url
|
37
|
+
"https://#{LeapSalesforce.environment == 'prod' ? 'login' : 'test'}.salesforce.com"
|
38
|
+
end
|
39
|
+
|
23
40
|
# @param [String, LeapSalesforce::User] user User or email address of user
|
24
41
|
def api_user=(user)
|
25
42
|
@api_user = case user
|
@@ -47,6 +64,8 @@ module LeapSalesforce
|
|
47
64
|
attr_accessor :client_id
|
48
65
|
# @return [String] Client secret in Salesforce OAuth app
|
49
66
|
attr_accessor :client_secret
|
67
|
+
# @return [String] Token specific to a user used for authentication
|
68
|
+
attr_accessor :security_token
|
50
69
|
# @return [String] Path where library generated assets are stored. By default lib/leap_salesforce
|
51
70
|
attr_accessor :lib_folder
|
52
71
|
# @return [Array] List of objects to verify metadata for. This includes enums, required values
|
@@ -2,14 +2,12 @@
|
|
2
2
|
|
3
3
|
require 'soaspec'
|
4
4
|
|
5
|
-
# Handles basic Soql interactions.
|
5
|
+
# Handles basic Soql interactions. These are done through classes that are tied to this handler, i.e, the SoqlData
|
6
|
+
# class.
|
6
7
|
# Credentials are stored either in 'config/credentials' folder or via environment variables
|
7
8
|
# To check out SOQL SCHEMA go to workbench.developerforce.com. Use Sandbox and login
|
8
9
|
class SoqlHandler < Soaspec::RestHandler
|
9
|
-
oauth2
|
10
|
-
client_id: LeapSalesforce.client_id,
|
11
|
-
client_secret: LeapSalesforce.client_secret,
|
12
|
-
token_url: "https://#{LeapSalesforce.environment == 'prod' ? 'login' : 'test'}.salesforce.com/services/oauth2/token"
|
10
|
+
oauth2 LeapSalesforce.oauth_settings
|
13
11
|
base_url '<%= instance_url %>/services/data/v<%= api_version %>/'
|
14
12
|
|
15
13
|
pascal_keys true
|
data/lib/leap_salesforce.rb
CHANGED
@@ -13,17 +13,7 @@ require 'require_all'
|
|
13
13
|
require 'rake'
|
14
14
|
require 'factory_bot' # For mass production of data
|
15
15
|
require 'faker' # For fake data
|
16
|
-
|
17
|
-
module LeapSalesforce
|
18
|
-
class Error < StandardError; end
|
19
|
-
# Error related to handling a response
|
20
|
-
class ResponseError < StandardError; end
|
21
|
-
# Error related to setup of test automation suite
|
22
|
-
class SetupError < Error; end
|
23
|
-
# Error related to Test Users
|
24
|
-
class UserError < Error;
|
25
|
-
end
|
26
|
-
end
|
16
|
+
require 'leap_salesforce/error'
|
27
17
|
|
28
18
|
LEAP_CONFIG_FILE = '.leap_salesforce.yml'
|
29
19
|
CREDENTIAL_FILE = File.join('config', 'credentials', 'salesforce_oauth2.yml')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: leap_salesforce
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- IQA
|
@@ -81,6 +81,20 @@ dependencies:
|
|
81
81
|
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: colorize
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :runtime
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
84
98
|
- !ruby/object:Gem::Dependency
|
85
99
|
name: factory_bot
|
86
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -231,6 +245,7 @@ files:
|
|
231
245
|
- exe/leap_salesforce
|
232
246
|
- leap_salesforce.gemspec
|
233
247
|
- lib/leap_salesforce.rb
|
248
|
+
- lib/leap_salesforce/error.rb
|
234
249
|
- lib/leap_salesforce/ext/string.rb
|
235
250
|
- lib/leap_salesforce/ext/time.rb
|
236
251
|
- lib/leap_salesforce/generator/default.rb
|
@@ -251,6 +266,7 @@ files:
|
|
251
266
|
- lib/leap_salesforce/generator/templates/soql_object_field_names.rb.erb
|
252
267
|
- lib/leap_salesforce/generator/templates/spec/crud_eg_spec.rb.erb
|
253
268
|
- lib/leap_salesforce/generator/templates/spec/limit_spec.rb.erb
|
269
|
+
- lib/leap_salesforce/generator/templates/spec/picklists_spec.rb.erb
|
254
270
|
- lib/leap_salesforce/generator/templates/spec/spec_helper.rb.erb
|
255
271
|
- lib/leap_salesforce/limits.rb
|
256
272
|
- lib/leap_salesforce/parameters.rb
|