cucumber-openerpscenario 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{cucumber-openerpscenario}
3
- s.version = "0.1.6"
3
+ s.version = "0.1.7"
4
4
  s.date = %q{2013-03-06}
5
5
  s.authors = ["Nicolas Bessi - Camptocamp"]
6
6
  s.summary = %q{cucumber on OpenERP}
Binary file
@@ -61,7 +61,7 @@ def manage_item_table(item, table)
61
61
  fields.merge! item.class.many2one_associations
62
62
  fields.merge! item.class.one2many_associations
63
63
  fields.merge! item.class.many2many_associations
64
-
64
+
65
65
  table.hashes.each do |dict|
66
66
  if fields[dict['name']]
67
67
  rel_item = _manage_col_search(fields[dict['name']], dict['value'])
@@ -73,10 +73,18 @@ def manage_item_table(item, table)
73
73
  value = Integer(value)
74
74
  elsif v_type == 'float'
75
75
  value = Float(value)
76
+ elsif v_type == 'boolean'
77
+ if [nil, 0, false, ''].include? value
78
+ value = false
79
+ end
80
+ elsif ['date', 'datetime'].include? v_type
81
+ if value.include? "%"
82
+ value = Time.new().strftime(value)
83
+ end
76
84
  end
77
85
  eval "item.#{dict['name']} = value"
78
86
  end
79
- end
87
+ end
80
88
  end
81
89
 
82
90
  Given /^I (create|need|should have|find|find or create) (a|all|last) "([^"]*)" with (.*)$/ do |action, qty, model, args|
@@ -0,0 +1,122 @@
1
+ def prepare_args(args)
2
+ mixed = args.strip.split('and')
3
+ attrs = []
4
+ arguments = []
5
+ mixed.each do |set|
6
+ tmp = set.split(':')
7
+ attrs.push(tmp[0].strip)
8
+ arguments.push(tmp[1].strip)
9
+ end
10
+ attrs_string = attrs.join('_and_')
11
+ return attrs_string, arguments
12
+ end
13
+
14
+ def get_items(action, qty, model, args)
15
+ @found_items = nil
16
+ @found_item = nil
17
+ oclass = Object.const_get(model.split('.').collect {|s| s.capitalize}.join)
18
+ unique_mode = ['create', 'need', 'find or create']
19
+ if qty == 'all'
20
+ if unique_mode.include? action
21
+ raise "#{unique_mode.inspect} does not allows 'all' keyword"
22
+ end
23
+ qty = 'all_'
24
+ else
25
+ qty = ''
26
+ end
27
+ command_map = {'create' => 'new', 'need' => 'find_or_initialize_by_', 'shoud_have' => "find_#{qty}by_", 'find' => "find_#{qty}by_", 'find or create' => 'find_or_initialize_by_'}
28
+ comm_ext, arguments = prepare_args(args)
29
+ arguments.push({:fields =>['id']})
30
+ if command_map[action] == 'create'
31
+ if oclass.send(('find_by_'+comm_ext).to_sym, *arguments)
32
+ raise "Error object allerady exist if this is not the wished behavior please use need keyword"
33
+ end
34
+ end
35
+ res = oclass.send((command_map[action]+comm_ext).to_sym, *arguments) # I know in case or create we do 2 search but as there should be nul it cost almost nothing
36
+ if @found_items.is_a? Array
37
+ @found_items = res
38
+ else
39
+ @found_item = res
40
+ end
41
+ end
42
+
43
+ def _manage_col_search(field_def, value)
44
+ oclass = Object.const_get(field_def['relation'].split('.').collect {|s| s.capitalize}.join) # TODO use Scenario helper
45
+ oid = nil
46
+ if value.start_with? 'by '
47
+ comm_ext, arguments = prepare_args(value.gsub('by ', ''))
48
+ arguments.push({'fields'=>['id']})
49
+ oid = oclass.send(('find_by_'+comm_ext).to_sym, *arguments)
50
+ else
51
+ eval "oid = oclass.#{value}"
52
+ end
53
+ unless oid
54
+ raise "Can not find #{value}"
55
+ end
56
+ return oid
57
+ end
58
+
59
+ def manage_item_table(item, table)
60
+ fields = {}
61
+ fields.merge! item.class.many2one_associations
62
+ fields.merge! item.class.one2many_associations
63
+ fields.merge! item.class.many2many_associations
64
+
65
+ table.hashes.each do |dict|
66
+ if fields[dict['name']]
67
+ rel_item = _manage_col_search(fields[dict['name']], dict['value'])
68
+ eval "item.#{dict['name']} = rel_item.id"
69
+ else
70
+ value = dict['value']
71
+ v_type = item.class.fields.fetch(dict['name'],{}).fetch('type', nil)
72
+ if v_type == 'integer'
73
+ value = Integer(value)
74
+ elsif v_type == 'float'
75
+ value = Float(value)
76
+ elsif v_type == 'boolean'
77
+ if [nil, 0, false, ''].include? value
78
+ value = false
79
+ end
80
+ elsif ['date', 'datetime'].include? v_type
81
+ if value.include? "%"
82
+ value = Time.new().strftime(value)
83
+ end
84
+ end
85
+ eval "item.#{dict['name']} = value"
86
+ end
87
+ end
88
+ end
89
+
90
+ Given /^I (create|need|should have|find|find or create) (a|all|last) "([^"]*)" with (.*)$/ do |action, qty, model, args|
91
+ get_items(action, qty, model, args)
92
+ end
93
+
94
+ Given /^(having:|prepared with:)$/ do |mode, table|
95
+ @found_item.should_not be_nil,
96
+ "No item to set attribute found"
97
+ manage_item_table(@found_item, table)
98
+ unless mode == 'prepared with:'
99
+ @found_item.save
100
+ end
101
+ end
102
+
103
+ Given /^having$/ do |table|
104
+ $utils.log.warn "Deprecated sentence, please use this one : \"having:\""
105
+ step "having:", table
106
+ end
107
+
108
+ Given /^I save$/ do
109
+ @found_item.should_not be_nil,
110
+ "No item to set attribute found"
111
+ @found_item.save
112
+ end
113
+
114
+ Then /^I remove the Log fields$/ do
115
+ # weird hack
116
+ # for some objects, a bug forbid to save a resource
117
+ # and we have to delete the log columns before save them
118
+ @found_item.associations.delete('write_uid')
119
+ @found_item.associations.delete('create_uid')
120
+ @found_item.attributes.delete('write_date')
121
+ @found_item.attributes.delete('create_date')
122
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: cucumber-openerpscenario
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.6
5
+ version: 0.1.7
6
6
  platform: ruby
7
7
  authors:
8
8
  - Nicolas Bessi - Camptocamp
@@ -82,6 +82,7 @@ files:
82
82
  - README.txt
83
83
  - bin/cucumber-openerp
84
84
  - cucumber-openerp.gemspec
85
+ - cucumber-openerpscenario-0.1.6.gem
85
86
  - lib/.DS_Store
86
87
  - lib/cucumber/.DS_Store
87
88
  - lib/cucumber/lib/.DS_Store
@@ -91,6 +92,7 @@ files:
91
92
  - lib/cucumber/lib/utils/ooor_utils.rb
92
93
  - lib/cucumber/lib/utils/sequel_utils.rb
93
94
  - lib/cucumber/openerp/dsl.rb
95
+ - lib/cucumber/openerp/dsl.rb.~1~
94
96
  - lib/cucumber/openerp/world.rb
95
97
  - lib/cucumber/openerp.rb
96
98
  homepage: