prestashop-automation-tool 0.3.1 → 0.4

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.
data/bin/pat ADDED
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/ruby
2
+ require 'prestashop-automation-tool'
3
+
4
+ require 'optparse'
5
+ require 'json'
6
+
7
+ def withConfig &block
8
+ if File.exists? 'pat.conf.json'
9
+ yield JSON.parse(File.read('pat.conf.json'), :symbolize_names => true)
10
+ else
11
+ abort "Could not find the config file #{pat.conf.json}, did you run 'pat.rb init'?"
12
+ end
13
+ end
14
+
15
+ options = {}
16
+ OptionParser.new do |opts|
17
+ opts.on('-ad', '--accept-defaults', 'Accept default values automatically.') do
18
+ options[:accept_defaults] = true
19
+ end
20
+ opts.on('--no-restore', 'Do not save/restore intial state when running tests.') do
21
+ options[:no_restore] = true
22
+ end
23
+ end.parse!
24
+ if ARGV.count == 0
25
+ puts "Missing action argument!"
26
+ exit 1
27
+ elsif ARGV[0] == 'init'
28
+ conf = PrestaShopAutomationTool::ConfigurationParser.new '.'
29
+ conf.parse
30
+ conf.ask_user_for_missing_info options
31
+ conf.autocomplete_config
32
+ File.write 'pat.conf.json', JSON.pretty_generate({
33
+ shop: conf.config
34
+ })
35
+ unless File.exists? 'tests-enabled'
36
+ Dir.mkdir 'tests-enabled'
37
+ end
38
+ unless File.exists? 'tests-available'
39
+ `git clone #{conf.config[:tests_repository]} tests-available`
40
+ end
41
+ elsif ARGV[0] == 'purge'
42
+ `rm -Rf pat.conf.json tests-enabled tests-available`
43
+ elsif ARGV[0] == 'install'
44
+ withConfig do |conf|
45
+ ps = PrestaShopAutomation::PrestaShop.new(conf[:shop])
46
+ ps.drop_database
47
+ ps.install options
48
+ end
49
+ elsif ARGV[0] == 'create'
50
+ if ARGV[1]
51
+ template = File.join PrestaShopAutomationTool.gem_root, 'lib', 'templates', 'sample_test.rb'
52
+ `cp #{template} tests-enabled/#{ARGV[1]}.rb`
53
+ else
54
+ puts 'Please provide the name of the test to create!'
55
+ end
56
+ elsif ARGV[0] == 'dump'
57
+ withConfig do |conf|
58
+ ps = PrestaShopAutomation::PrestaShop.new(conf[:shop])
59
+ ps.dump_database 'dump.sql'
60
+ end
61
+ elsif ARGV[0] == 'restore'
62
+ withConfig do |conf|
63
+ ps = PrestaShopAutomation::PrestaShop.new(conf[:shop])
64
+ ps.load_database 'dump.sql'
65
+ end
66
+ elsif ARGV[0] == 'test'
67
+
68
+ list = ARGV[1..-1]
69
+
70
+ if list.nil? or list.empty?
71
+ list = Dir.glob('tests-enabled/**/*')
72
+ end
73
+
74
+ list.sort!
75
+
76
+ list.each do |file|
77
+ ok = if file =~ /\.rb$/
78
+ puts "Running #{file}..."
79
+ system({'NO_RESTORE' => options[:no_restore]}, 'rspec', file)
80
+ elsif file =~ /\.json$/
81
+ puts "Running #{file}..."
82
+ data = JSON.parse File.read(file)
83
+ runner = "pat-runner-#{data['spec']['runner']}.rb"
84
+ system({'PAT_SOURCE' => file, 'NO_RESTORE' => (options[:no_restore] ? '1' : '0')}, runner)
85
+ else
86
+ :not_runnable
87
+ end
88
+
89
+ if ok != :not_runnable
90
+ puts "Ran #{file}: #{ok ? "success!" : "FAILED"}"
91
+ end
92
+
93
+ end
94
+ elsif ARGV[0] == 'enable'
95
+ if ARGV[1]
96
+ `cp tests-available/#{ARGV[1]}.* tests-enabled/`
97
+ else
98
+ puts "Please also provide prefix!"
99
+ end
100
+ elsif ARGV[0] == 'disable'
101
+ if ARGV[1]
102
+ `mv tests-enabled/#{ARGV[1]}.* tests-available/`
103
+ else
104
+ puts "Please also provide prefix!"
105
+ end
106
+ else
107
+ puts "Unknown command '#{ARGV[0]}'!"
108
+ end
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'rspec'
4
+ require 'rspec/autorun'
5
+ require 'prestashop-automation-tool/helper'
6
+
7
+ def test_invoice ps, scenario, options={}
8
+
9
+ taxes = {}
10
+ groups = {}
11
+
12
+ ps.login_to_back_office
13
+ ps.set_friendly_urls false
14
+ ps.set_order_process_type scenario['meta']['order_process'].to_sym
15
+
16
+ if scenario["discounts"]
17
+ scenario["discounts"].each_pair do |name, amount|
18
+ ps.create_cart_rule :name=> name, :amount => amount
19
+ end
20
+ end
21
+
22
+ if scenario["gift_wrapping"]
23
+ ps.set_gift_wrapping_option true,
24
+ :price => scenario["gift_wrapping"]["price"],
25
+ :tax_group_id => scenario["gift_wrapping"]["vat"] ? ps.create_tax_group_from_rate(scenario["gift_wrapping"]["vat"], taxes, groups) : nil,
26
+ :recycling_option => false
27
+ else
28
+ ps.set_gift_wrapping_option false
29
+ end
30
+
31
+ ps.set_rounding_rule scenario['meta']['rounding_rule']
32
+ ps.set_rounding_method scenario['meta']['rounding_method']
33
+
34
+ if scenario['meta']['ecotax']
35
+ ps.set_ecotax_option true, ps.create_tax_group_from_rate(scenario['meta']['ecotax'], taxes, groups)
36
+ else
37
+ ps.set_ecotax_option false
38
+ end
39
+
40
+ carrier_name = ps.create_carrier({
41
+ :name => scenario['carrier']['name'],
42
+ :with_handling_fees => scenario['carrier']['with_handling_fees'],
43
+ :free_shipping => scenario['carrier']['shipping_fees'] == 0,
44
+ :ranges => [{:from_included => 0, :to_excluded => 1000, :prices => {0 => scenario['carrier']['shipping_fees']}}],
45
+ :tax_group_id => scenario['carrier']['vat'] ? ps.create_tax_group_from_rate(scenario['carrier']['vat'], taxes, groups) : nil
46
+ })
47
+
48
+ products = []
49
+ scenario['products'].each_pair do |name, data|
50
+ id = ps.create_product({
51
+ :name => name,
52
+ :price => data['price'],
53
+ :tax_group_id => ps.create_tax_group_from_rate(data['vat'], taxes, groups),
54
+ :ecotax => data['ecotax'],
55
+ :specific_price => data['specific_price']
56
+ })
57
+ products << {id: id, quantity: data['quantity']}
58
+
59
+ if data["discount"]
60
+ ps.create_cart_rule({
61
+ :product_id => id,
62
+ :amount => data["discount"],
63
+ :free_shipping => false,
64
+ :name => "#{name} with (#{data['discount']}) discount"
65
+ })
66
+ end
67
+ end
68
+
69
+ ps.login_to_front_office
70
+ ps.add_products_to_cart products
71
+
72
+ order_id = if scenario['meta']['order_process'] == 'five_steps'
73
+ ps.order_current_cart_5_steps :carrier => carrier_name, :gift_wrapping => scenario["gift_wrapping"]
74
+ else
75
+ ps.order_current_cart_opc :carrier => carrier_name, :gift_wrapping => scenario["gift_wrapping"]
76
+ end
77
+
78
+ ps.goto_back_office
79
+ invoice = ps.validate_order :id => order_id, :dump_pdf_to => options[:dump_pdf_to], :get_invoice_json => true
80
+
81
+ if scenario['expect']['invoice']
82
+ if expected_total = scenario['expect']['invoice']['total']
83
+ actual_total = invoice['order']
84
+ mapping = {
85
+ 'to_pay_tax_included' => 'total_paid_tax_incl',
86
+ 'to_pay_tax_excluded' => 'total_paid_tax_excl',
87
+ 'products_tax_included' => 'total_products_wt',
88
+ 'products_tax_excluded' => 'total_products',
89
+ 'shipping_tax_included' => 'total_shipping_tax_incl',
90
+ 'shipping_tax_excluded' => 'total_shipping_tax_excl',
91
+ 'discounts_tax_included' => 'total_discounts_tax_incl',
92
+ 'discounts_tax_excluded' => 'total_discounts_tax_excl',
93
+ 'wrapping_tax_included' => 'total_wrapping_tax_incl',
94
+ 'wrapping_tax_excluded' => 'total_wrapping_tax_excl'
95
+ }
96
+ #puts invoice
97
+ expected_total.each_pair do |key, value_expected|
98
+ expect(actual_total[mapping[key]].to_f).to eq value_expected.to_f
99
+ end
100
+ end
101
+ end
102
+ end
103
+
104
+ scenario = JSON.parse File.read(ENV['PAT_SOURCE'])
105
+
106
+ describe 'Invoice test' do
107
+ it 'should work' do
108
+ test_invoice @shop, scenario, :dump_pdf_to => ENV['PAT_SOURCE'].sub(/\.json$/, '.pdf')
109
+ end
110
+ end
@@ -3,6 +3,11 @@ require 'apache-vhosts-parser'
3
3
  require 'prestashop-automation'
4
4
 
5
5
  module PrestaShopAutomationTool
6
+
7
+ def self.gem_root
8
+ File.expand_path '../..', __FILE__
9
+ end
10
+
6
11
  class ConfigurationParser
7
12
 
8
13
  attr_reader :config
@@ -31,7 +36,8 @@ module PrestaShopAutomationTool
31
36
  admin_email: 'pub@prestashop.com',
32
37
  admin_password: '123456789',
33
38
  default_customer_email: 'pub@prestashop.com',
34
- default_customer_password: '123456789'
39
+ default_customer_password: '123456789',
40
+ tests_repository: 'https://github.com/djfm/prestashop-automation-tool-tests'
35
41
  }
36
42
 
37
43
  @config = {}
@@ -91,12 +97,11 @@ module PrestaShopAutomationTool
91
97
  @config[:database_host] = m[1]
92
98
  @config[:database_port] = m[2]
93
99
  end
94
-
95
100
  if @admin_folder
96
- @config[:back_office_url] = URI.join(@config[:front_office_url], @admin_folder).to_s
101
+ @config[:back_office_url] = URI.join(@config[:front_office_url], @admin_folder + '/').to_s
97
102
  end
98
103
  if @installer_folder
99
- @config[:installer_url] = URI.join(@config[:front_office_url], @installer_folder).to_s
104
+ @config[:installer_url] = URI.join(@config[:front_office_url], @installer_folder + '/').to_s
100
105
  end
101
106
  end
102
107
  end
@@ -0,0 +1,20 @@
1
+ require 'prestashop-automation'
2
+ require 'json'
3
+
4
+ dump = nil
5
+
6
+ RSpec.configure do |config|
7
+ config.before :all do
8
+ conf = JSON.parse(File.read('pat.conf.json'), :symbolize_names => true)
9
+ @shop = PrestaShopAutomation::PrestaShop.new conf[:shop]
10
+ unless ENV['NO_RESTORE'] == '1'
11
+ dump = @shop.save
12
+ end
13
+ end
14
+
15
+ config.after :all do
16
+ unless ENV['NO_RESTORE'] == '1'
17
+ @shop.restore dump
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ require 'prestashop-automation-tool/helper'
2
+
3
+ describe 'My first test' do
4
+ it 'should login as a customer' do
5
+ @shop.login_to_front_office
6
+ end
7
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prestashop-automation-tool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: '0.4'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -46,12 +46,16 @@ dependencies:
46
46
  description: Automate prestashop.
47
47
  email: fm.de.jouvencel@gmail.com
48
48
  executables:
49
- - pat.rb
49
+ - pat
50
+ - pat-runner-invoice.rb
50
51
  extensions: []
51
52
  extra_rdoc_files: []
52
53
  files:
54
+ - lib/prestashop-automation-tool/helper.rb
53
55
  - lib/prestashop-automation-tool.rb
54
- - bin/pat.rb
56
+ - lib/templates/sample_test.rb
57
+ - bin/pat
58
+ - bin/pat-runner-invoice.rb
55
59
  homepage: https://github.com/djfm/prestashop-automation-tool
56
60
  licenses:
57
61
  - OSL
data/bin/pat.rb DELETED
@@ -1,38 +0,0 @@
1
- #!/usr/bin/ruby
2
- require 'prestashop-automation-tool'
3
-
4
- require 'optparse'
5
- require 'json'
6
-
7
- def withConfig &block
8
- if File.exists? 'pat.conf.json'
9
- yield JSON.parse(File.read('pat.conf.json'), :symbolize_names => true)
10
- else
11
- abort "Could not find the config file #{pat.conf.json}, did you run 'pat.rb init'?"
12
- end
13
- end
14
-
15
- options = {}
16
- OptionParser.new do |opts|
17
- opts.on('-ad', '--accept-defaults', 'Accept default values automatically') do
18
- options[:accept_defaults] = true
19
- end
20
- end.parse!
21
- if ARGV.count != 1
22
- puts "Missing action argument!"
23
- exit 1
24
- elsif ARGV[0] == 'init'
25
- conf = PrestaShopAutomationTool::ConfigurationParser.new '.'
26
- conf.parse
27
- conf.ask_user_for_missing_info options
28
- conf.autocomplete_config
29
- File.write 'pat.conf.json', JSON.pretty_generate({
30
- shop: conf.config
31
- })
32
- elsif ARGV[0] == 'install'
33
- withConfig do |conf|
34
- ps = PrestaShopAutomation::PrestaShop.new(conf[:shop])
35
- ps.drop_database
36
- ps.install options
37
- end
38
- end