simpex 0.0.5 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +7 -0
- data/Gemfile.lock +17 -1
- data/Guardfile +24 -0
- data/Rakefile +1 -0
- data/lib/simpex/impex_result.rb +67 -42
- data/lib/simpex/type_entry.rb +5 -2
- data/lib/simpex/version.rb +1 -1
- data/test/test_result.rb +80 -7
- data/test/test_type.rb +1 -147
- data/test/test_type_entry.rb +182 -0
- metadata +5 -2
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,14 +1,30 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
simpex (0.0.
|
4
|
+
simpex (0.0.5)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
8
8
|
specs:
|
9
|
+
growl (1.0.3)
|
10
|
+
guard (1.4.0)
|
11
|
+
listen (>= 0.4.2)
|
12
|
+
thor (>= 0.14.6)
|
13
|
+
guard-minitest (0.5.0)
|
14
|
+
guard (>= 0.4)
|
15
|
+
listen (0.5.3)
|
16
|
+
metaclass (0.0.1)
|
17
|
+
mocha (0.12.6)
|
18
|
+
metaclass (~> 0.0.1)
|
19
|
+
rb-fsevent (0.9.2)
|
20
|
+
thor (0.16.0)
|
9
21
|
|
10
22
|
PLATFORMS
|
11
23
|
ruby
|
12
24
|
|
13
25
|
DEPENDENCIES
|
26
|
+
growl
|
27
|
+
guard-minitest
|
28
|
+
mocha
|
29
|
+
rb-fsevent
|
14
30
|
simpex!
|
data/Guardfile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard 'minitest' do
|
5
|
+
# with Minitest::Unit
|
6
|
+
watch(%r|^test/(.*)\/?test_(.*)\.rb|)
|
7
|
+
watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
|
8
|
+
watch(%r|^test/test_helper\.rb|) { "test" }
|
9
|
+
|
10
|
+
# with Minitest::Spec
|
11
|
+
# watch(%r|^spec/(.*)_spec\.rb|)
|
12
|
+
# watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
13
|
+
# watch(%r|^spec/spec_helper\.rb|) { "spec" }
|
14
|
+
|
15
|
+
# Rails 3.2
|
16
|
+
# watch(%r|^app/controllers/(.*)\.rb|) { |m| "test/controllers/#{m[1]}_test.rb" }
|
17
|
+
# watch(%r|^app/helpers/(.*)\.rb|) { |m| "test/helpers/#{m[1]}_test.rb" }
|
18
|
+
# watch(%r|^app/models/(.*)\.rb|) { |m| "test/unit/#{m[1]}_test.rb" }
|
19
|
+
|
20
|
+
# Rails
|
21
|
+
# watch(%r|^app/controllers/(.*)\.rb|) { |m| "test/functional/#{m[1]}_test.rb" }
|
22
|
+
# watch(%r|^app/helpers/(.*)\.rb|) { |m| "test/helpers/#{m[1]}_test.rb" }
|
23
|
+
# watch(%r|^app/models/(.*)\.rb|) { |m| "test/unit/#{m[1]}_test.rb" }
|
24
|
+
end
|
data/Rakefile
CHANGED
@@ -8,6 +8,7 @@ namespace :simpex do
|
|
8
8
|
desc "Generates ImpEx file"
|
9
9
|
task :generate do
|
10
10
|
output_directory = "tmp"
|
11
|
+
FileUtils.mkdir(output_directory) unless Dir.exist?(output_directory)
|
11
12
|
Factory.generate_base_catalog_setup_to(output_directory)
|
12
13
|
Factory.generate_base_catalog_setup_to_file(output_directory,"single_file_result.csv")
|
13
14
|
puts "Files generated inside #{output_directory}"
|
data/lib/simpex/impex_result.rb
CHANGED
@@ -25,22 +25,48 @@ class ImpexResult
|
|
25
25
|
|
26
26
|
def impexify(result_file_name="", time_stampify = false)
|
27
27
|
stamp = Time.now.strftime("%S_%M_%H_%d_%m_%Y") if time_stampify
|
28
|
+
validate_macros
|
28
29
|
if result_file_name.empty?
|
29
|
-
|
30
|
-
if time_stampify
|
31
|
-
file_name = "#{@dest_folder}/#{format_number(@impexify_occurences)}_#{type.name.downcase}_#{stamp}.csv"
|
32
|
-
else
|
33
|
-
file_name = "#{@dest_folder}/#{format_number(@impexify_occurences)}_#{type.name.downcase}.csv"
|
34
|
-
end
|
35
|
-
unless type.empty?
|
36
|
-
puts "writing #{type.name} to #{file_name}"
|
37
|
-
File.open(file_name, 'w') do |f|
|
38
|
-
f.puts type.to_imp
|
39
|
-
end
|
40
|
-
@impexify_occurences += 1
|
41
|
-
end
|
42
|
-
end
|
30
|
+
write_file_for_each_type(stamp, time_stampify)
|
43
31
|
else
|
32
|
+
write_result_to_one_file(result_file_name, stamp, time_stampify)
|
33
|
+
end
|
34
|
+
clean_all_type_entries
|
35
|
+
end
|
36
|
+
|
37
|
+
def format_number(number_to_format, numeric_positions="4")
|
38
|
+
"%0#{numeric_positions}d" % number_to_format
|
39
|
+
end
|
40
|
+
|
41
|
+
def global_enties_number
|
42
|
+
@global_enties_number
|
43
|
+
end
|
44
|
+
|
45
|
+
def add_entries_number(added_number)
|
46
|
+
@global_enties_number +=added_number
|
47
|
+
check_for_impexify
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
def validate_macros
|
52
|
+
|
53
|
+
#collect all macros from all types
|
54
|
+
@macros = @types.inject([]) do |result, type|
|
55
|
+
type.macros.each do |macro|
|
56
|
+
result << macro unless result.include?(macro)
|
57
|
+
end
|
58
|
+
result
|
59
|
+
end
|
60
|
+
|
61
|
+
#make sure each macro is used in at least one type
|
62
|
+
@macros.each do |macro|
|
63
|
+
if @types.none? {|type| type.attributes.include?(macro)}
|
64
|
+
raise ArgumentError.new "the macro #{macro} is never used in all declared types"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
def write_result_to_one_file(result_file_name, stamp, time_stampify)
|
69
|
+
#will write the complete result to one file
|
44
70
|
result_file_name = File.basename(result_file_name)
|
45
71
|
if time_stampify
|
46
72
|
file_name = "#{@dest_folder}/#{stamp}_#{result_file_name}"
|
@@ -67,36 +93,35 @@ class ImpexResult
|
|
67
93
|
end
|
68
94
|
@impexify_occurences += 1
|
69
95
|
end
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
private
|
87
|
-
def clean_all_type_entries
|
88
|
-
@types.each do |type|
|
89
|
-
type.entries.clear
|
96
|
+
def write_file_for_each_type(stamp, time_stampify)
|
97
|
+
@types.each_with_index do |type, index|
|
98
|
+
if time_stampify
|
99
|
+
file_name = "#{@dest_folder}/#{format_number(@impexify_occurences)}_#{type.name.downcase}_#{stamp}.csv"
|
100
|
+
else
|
101
|
+
file_name = "#{@dest_folder}/#{format_number(@impexify_occurences)}_#{type.name.downcase}.csv"
|
102
|
+
end
|
103
|
+
unless type.empty?
|
104
|
+
puts "writing #{type.name} to #{file_name}"
|
105
|
+
File.open(file_name, 'w') do |f|
|
106
|
+
f.puts type.to_imp
|
107
|
+
end
|
108
|
+
@impexify_occurences += 1
|
109
|
+
end
|
110
|
+
end
|
90
111
|
end
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
112
|
+
def clean_all_type_entries
|
113
|
+
@types.each do |type|
|
114
|
+
type.entries.clear
|
115
|
+
end
|
116
|
+
@global_enties_number = 0
|
117
|
+
end
|
118
|
+
def check_for_impexify
|
119
|
+
if @memory_safe
|
120
|
+
if @global_enties_number > @max_type_entries_in_tree
|
121
|
+
puts "impexifying all entries since global entries #{@global_enties_number} is bigger then max #{@max_type_entries_in_tree}"
|
122
|
+
self.impexify
|
123
|
+
end
|
98
124
|
end
|
99
125
|
end
|
100
126
|
end
|
101
|
-
end
|
102
127
|
|
data/lib/simpex/type_entry.rb
CHANGED
@@ -23,8 +23,11 @@ class TypeEntry
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
else
|
26
|
-
if @type.attributes.size
|
27
|
-
raise ArgumentError.new "The number of
|
26
|
+
if @type.attributes.size < values.size
|
27
|
+
raise ArgumentError.new "The number of values for the type entry is more (#{values.size}) then defined (#{@type.attributes.size}), inside the type '#{type.name}' following attributes are expected #{type.attributes.inspect}"
|
28
|
+
end
|
29
|
+
if @type.attributes.size > values.size
|
30
|
+
raise ArgumentError.new "The number of values for the type entry is less (#{values.size}) then defined (#{@type.attributes.size}), inside the type '#{type.name}' following attributes are expected #{type.attributes.inspect}"
|
28
31
|
end
|
29
32
|
@type.attributes.each_with_index do |att,index|
|
30
33
|
set(att, values[index])
|
data/lib/simpex/version.rb
CHANGED
data/test/test_result.rb
CHANGED
@@ -4,12 +4,9 @@ require 'fileutils'
|
|
4
4
|
|
5
5
|
class TestResult < Test::Unit::TestCase
|
6
6
|
def setup
|
7
|
-
macros = []
|
8
|
-
macros << "$firstmacro"
|
9
|
-
macros << "$secondmacro"
|
10
7
|
|
11
|
-
@category_type = Type.new("Category", %w{code[unique=true] name[lang=de]}
|
12
|
-
@product_type = Type.new("Product", %w{code[unique=true] name[lang=en]}
|
8
|
+
@category_type = Type.new("Category", %w{code[unique=true] name[lang=de]})
|
9
|
+
@product_type = Type.new("Product", %w{code[unique=true] name[lang=en]})
|
13
10
|
|
14
11
|
@impex_dest_dir = "test/tmp"
|
15
12
|
FileUtils.mkdir(@impex_dest_dir) unless Dir.exist?(@impex_dest_dir)
|
@@ -29,8 +26,84 @@ class TestResult < Test::Unit::TestCase
|
|
29
26
|
assert File.exist?(@result_file_path), "the file #{@result_file_path} should have been created"
|
30
27
|
end
|
31
28
|
|
32
|
-
def
|
33
|
-
|
29
|
+
def test_should_recognize_not_used_macros
|
30
|
+
macros = []
|
31
|
+
macros << "$firstmacro"
|
32
|
+
macros << "$secondmacro"
|
33
|
+
|
34
|
+
@category_type = Type.new("Category", %w{code[unique=true] name[lang=de]}, macros)
|
35
|
+
@product_type = Type.new("Product", %w{code[unique=true] name[lang=en]}, macros)
|
36
|
+
|
37
|
+
result = ImpexResult.new(@impex_dest_dir)
|
38
|
+
result << @category_type
|
39
|
+
result << @product_type
|
40
|
+
|
41
|
+
|
42
|
+
entry = TypeEntry.new(@product_type, %w{555 myproduct555})
|
43
|
+
entry = TypeEntry.new(@category_type, %w{555 mycategory})
|
44
|
+
|
45
|
+
assert_raises ArgumentError do
|
46
|
+
result.impexify("result.csv", false)
|
47
|
+
end
|
48
|
+
|
49
|
+
@product_type = Type.new("Product", %w{code[unique=true] name[lang=en] $firstmacro}, macros)
|
50
|
+
@category_type = Type.new("Category", %w{code[unique=true] name[lang=de]})
|
51
|
+
result = ImpexResult.new(@impex_dest_dir)
|
52
|
+
result << @category_type
|
53
|
+
result << @product_type
|
54
|
+
assert_raises ArgumentError do
|
55
|
+
result.impexify("result.csv", false)
|
56
|
+
end
|
57
|
+
|
58
|
+
@product_type = Type.new("Product", %w{code[unique=true] name[lang=en] $firstmacro}, macros)
|
59
|
+
@category_type = Type.new("Category", %w{code[unique=true] name[lang=de] $secondmacro}, macros)
|
60
|
+
result = ImpexResult.new(@impex_dest_dir)
|
61
|
+
result << @category_type
|
62
|
+
result << @product_type
|
63
|
+
result.impexify("result.csv", false)
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_should_write_the_impex_resupt_to_the_given_folder
|
67
|
+
impex_dest_dir = "test/tmp"
|
68
|
+
FileUtils.mkdir(impex_dest_dir) unless Dir.exist?(impex_dest_dir)
|
69
|
+
|
70
|
+
result = standard_result(impex_dest_dir)
|
71
|
+
result.impexify
|
72
|
+
|
73
|
+
FileUtils.rm_rf(impex_dest_dir)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_should_write_the_result_in_one_file
|
77
|
+
impex_dest_dir = "test/tmp"
|
78
|
+
FileUtils.mkdir(impex_dest_dir) unless Dir.exist?(impex_dest_dir)
|
79
|
+
result_file_path = "#{impex_dest_dir}/result.csv"
|
80
|
+
|
81
|
+
assert !File.exist?(result_file_path)
|
82
|
+
result = standard_result(impex_dest_dir)
|
83
|
+
result.impexify("result.csv")
|
84
|
+
assert File.exist?(result_file_path), "the file #{result_file_path} should have been created"
|
85
|
+
|
86
|
+
File.delete(result_file_path)
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
def standard_result(impex_dest_dir)
|
91
|
+
|
92
|
+
language_type = Type.new("Language", %w{isocode[unique=true] active})
|
93
|
+
TypeEntry.new(language_type, %w{de true})
|
94
|
+
TypeEntry.new(language_type, %w{en true})
|
95
|
+
|
96
|
+
catalog_type = Type.new("Catalog", %w{id[unique=true] name[lang=de] name[lang=en] defaultCatalog})
|
97
|
+
catalog = TypeEntry.new(catalog_type, %w{simpex_catalog SimpexCatalog SimpexCatalog true})
|
98
|
+
|
99
|
+
catalog_version_type = Type.new("CatalogVersion", %w{catalog(id)[unique=true] version[unique=true] active defaultCurrency(isocode)})
|
100
|
+
TypeEntry.new(catalog_version_type, [catalog.id, "online", "true", "EUR"])
|
101
|
+
|
102
|
+
result = ImpexResult.new(impex_dest_dir)
|
103
|
+
result << language_type
|
104
|
+
result << catalog_type
|
105
|
+
result << catalog_version_type
|
106
|
+
result
|
34
107
|
end
|
35
108
|
|
36
109
|
end
|
data/test/test_type.rb
CHANGED
@@ -46,6 +46,7 @@ class TestType < Test::Unit::TestCase
|
|
46
46
|
macros = ["$catalogVersion=adsfasdfasdf", "$contentCV=someValue"]
|
47
47
|
Type.new("MediaReference", %w{uid[unique=true] name referencedDamMedia(code,$contentCV)[lang=$lang] altText[lang=$lang] $contentCV[unique=true]}, macros)
|
48
48
|
Type.new("Product", %w{code[unique=true] name[lang=en] name[lang=de] unit(code) $catalogVersion[unique=true] supercategories(code)}, macros)
|
49
|
+
Type.new("Product", %w{code[unique=true] name[lang=en] name[lang=de] unit(code,$catalogVersion) $catalogVersion[unique=true] supercategories(code)}, macros)
|
49
50
|
end
|
50
51
|
|
51
52
|
def test_type_should_validate_the_presence_of_macros_if_no_macros_are_given
|
@@ -60,77 +61,12 @@ class TestType < Test::Unit::TestCase
|
|
60
61
|
Type.new("Product", %w{code[unique=true] name[lang=en] name[lang=de] unit(code) $catalogVe[unique=true] supercategories(code)}, macros)
|
61
62
|
end
|
62
63
|
|
63
|
-
def test_shoud_add_an_after_each_statement
|
64
|
-
bash_script = "#%afterEach: "
|
65
|
-
after_each = "impex.getLastImportedItem().setApprovalStatus(impex.getLastImportedItem().getBaseProduct().getApprovalStatus());"
|
66
|
-
product_type = Type.new("Product", %w{code[unique=true] name[lang=en]})
|
67
|
-
TypeEntry.new(product_type,%w{ 666 denis})
|
68
|
-
product_type.after_each << after_each
|
69
|
-
assert_match /impex/, product_type.after_each.first
|
70
|
-
assert_match /#%afterEach/, product_type.to_imp
|
71
|
-
puts product_type.to_imp
|
72
|
-
end
|
73
64
|
|
74
65
|
def test_type_should_generate_nothing_if_no_entries
|
75
66
|
assert_equal "", @product_type.to_imp(false)
|
76
67
|
end
|
77
68
|
|
78
|
-
def test_should_create_a_type_entry
|
79
|
-
entry = TypeEntry.new(@product_type, {"code" => "333", "name[lang=de]" => "MyName"})
|
80
|
-
@product_type << entry
|
81
|
-
puts entry.inspect
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_entry_should_verity_the_number_of_given_attributes
|
85
|
-
assert_raises ArgumentError do
|
86
|
-
entry = TypeEntry.new(@product_type, %w{66 myname myname pieces})
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_entry_should_handle_array_containnig_specific_types
|
91
|
-
some_type = Type.new('SomeType', %w{code some_list_attribute})
|
92
|
-
entry = TypeEntry.new(some_type, ["66", [1,2,3,4]])
|
93
|
-
end
|
94
69
|
|
95
|
-
def test_entry_should_reference_other_entries
|
96
|
-
entry = TypeEntry.new(@product_type, {"code" => "333", "name[lang=en]" => "MyName"})
|
97
|
-
@product_type << entry
|
98
|
-
|
99
|
-
assert_equal "333", entry.get("code")
|
100
|
-
assert_equal "MyName", entry.get("name[lang=en]")
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_entry_should_validate_against_the_given_type_attributes
|
104
|
-
product_type = Type.new("Product", %w{code[unique=true] name[lang=en] name[lang=de]})
|
105
|
-
assert_raise ArgumentError do
|
106
|
-
entry = TypeEntry.new(product_type, {"co" => "555"})
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
def test_should_fail_if_wrong_values_given
|
111
|
-
assert_raise ArgumentError do
|
112
|
-
entry = TypeEntry.new(@product_type, "somewrong string")
|
113
|
-
end
|
114
|
-
assert_raise ArgumentError do
|
115
|
-
entry = TypeEntry.new(nil, "somewrong string")
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
def test_entry_should_accept_array_of_values_and_assign_them_to_columns_according_to_the_order
|
120
|
-
entry = TypeEntry.new(@product_type, %w{555 myproduct555 meinproduct555 pieces SimpexProducts:Online SampleCategory})
|
121
|
-
assert_equal "myproduct555", entry.get("name[lang=en]")
|
122
|
-
assert_equal "meinproduct555", entry.get("name[lang=de]")
|
123
|
-
assert_equal "SampleCategory", entry.get("supercategories(code)")
|
124
|
-
end
|
125
|
-
|
126
|
-
|
127
|
-
def test_entry_should_inforce_to_use_unique_attributes_if_needed_for_fuzzy_matching
|
128
|
-
product_type = Type.new("Product", %w{code[unique=true] name[lang=en] name[lang=de]})
|
129
|
-
entry = TypeEntry.new(product_type, %w{555 myproduct555 meinproduct555 })
|
130
|
-
assert_raise ArgumentError do
|
131
|
-
entry.get("name")
|
132
|
-
end
|
133
|
-
end
|
134
70
|
|
135
71
|
def test_should_create_impex_list_from_array
|
136
72
|
catalog_version_type = Type.new("CatalogVersion", %w{languages(isocode)})
|
@@ -161,92 +97,10 @@ class TestType < Test::Unit::TestCase
|
|
161
97
|
assert_equal 2, found.size
|
162
98
|
end
|
163
99
|
|
164
|
-
def test_entry_should_match_fuzzy_attribute_names
|
165
|
-
product_type = Type.new("Product", %w{code[unique=true] name[lang=en] name[lang=de] unit(code) $catalogVersion supercategories(code)}, @macros)
|
166
|
-
entry = TypeEntry.new(product_type, %w{555 myproduct555 meinproduct555 pieces SimpexProducts:Online SampleCategory})
|
167
|
-
|
168
|
-
assert_equal "555", entry.get("code")
|
169
|
-
assert_equal "pieces", entry.get("unit")
|
170
|
-
assert_equal "SampleCategory", entry.get("supercategories")
|
171
|
-
|
172
|
-
assert_raise ArgumentError do
|
173
|
-
entry.get("supercat")
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
100
|
def test_entry_should_match_nested_brakets_attributes
|
178
101
|
product_type = Type.new("Product", %w{code[unique=true] catalog(id)[unique=true]})
|
179
102
|
entry = TypeEntry.new(product_type, %w{555 myCatalogId})
|
180
103
|
assert_equal "myCatalogId", entry.catalog
|
181
104
|
end
|
182
105
|
|
183
|
-
def test_entry_should_give_catalog_version_specific_attributes
|
184
|
-
product_type = Type.new("Product", %w{code[unique=true] $catalogVersion}, @macros)
|
185
|
-
entry = TypeEntry.new(product_type, %w{555 myCatalogId:staged })
|
186
|
-
assert_equal "555:myCatalogId:staged", entry.cat_ver_specific("code")
|
187
|
-
|
188
|
-
assert_raise ArgumentError do
|
189
|
-
product_type = Type.new("Product", %w{code[unique=true] someattr})
|
190
|
-
entry = TypeEntry.new(product_type, %w{555 myCatalogId:staged })
|
191
|
-
assert_equal "555:myCatalogId:staged", entry.cat_ver_specific("code")
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
def test_entry_should_match_macro_attributes
|
196
|
-
product_type = Type.new("Product", %w{code[unique=true] $catalogVersion},"$catalogVersion=asdfadsfasdfasdf")
|
197
|
-
entry = TypeEntry.new(product_type, %w{555 myCatalogId})
|
198
|
-
assert_equal "myCatalogId", entry.catalogVersion
|
199
|
-
end
|
200
|
-
|
201
|
-
def test_entry_should_match_fuzzy_attribute_names_to_real_attributes
|
202
|
-
product_type = Type.new("Product", %w{code[unique=true] name[lang=en] name[lang=de] unit(code) $catalogVersion supercategories(code)}, @macros)
|
203
|
-
entry = TypeEntry.new(product_type, %w{555 myproduct555 meinproduct555 pieces SimpexProducts:Online SampleCategory})
|
204
|
-
|
205
|
-
assert_equal "555", entry.code
|
206
|
-
assert_equal "pieces", entry.unit
|
207
|
-
assert_equal "SampleCategory", entry.supercategories
|
208
|
-
end
|
209
|
-
|
210
|
-
def test_should_write_the_impex_resupt_to_the_given_folder
|
211
|
-
impex_dest_dir = "test/tmp"
|
212
|
-
FileUtils.mkdir(impex_dest_dir) unless Dir.exist?(impex_dest_dir)
|
213
|
-
|
214
|
-
result = standard_result(impex_dest_dir)
|
215
|
-
result.impexify
|
216
|
-
|
217
|
-
FileUtils.rm_rf(impex_dest_dir)
|
218
|
-
end
|
219
|
-
|
220
|
-
def test_should_write_the_result_in_one_file
|
221
|
-
impex_dest_dir = "test/tmp"
|
222
|
-
FileUtils.mkdir(impex_dest_dir) unless Dir.exist?(impex_dest_dir)
|
223
|
-
result_file_path = "#{impex_dest_dir}/result.csv"
|
224
|
-
|
225
|
-
assert !File.exist?(result_file_path)
|
226
|
-
result = standard_result(impex_dest_dir)
|
227
|
-
result.impexify("result.csv")
|
228
|
-
assert File.exist?(result_file_path), "the file #{result_file_path} should have been created"
|
229
|
-
|
230
|
-
File.delete(result_file_path)
|
231
|
-
end
|
232
|
-
|
233
|
-
private
|
234
|
-
def standard_result(impex_dest_dir)
|
235
|
-
|
236
|
-
language_type = Type.new("Language", %w{isocode[unique=true] active})
|
237
|
-
TypeEntry.new(language_type, %w{de true})
|
238
|
-
TypeEntry.new(language_type, %w{en true})
|
239
|
-
|
240
|
-
catalog_type = Type.new("Catalog", %w{id[unique=true] name[lang=de] name[lang=en] defaultCatalog})
|
241
|
-
catalog = TypeEntry.new(catalog_type, %w{simpex_catalog SimpexCatalog SimpexCatalog true})
|
242
|
-
|
243
|
-
catalog_version_type = Type.new("CatalogVersion", %w{catalog(id)[unique=true] version[unique=true] active defaultCurrency(isocode)})
|
244
|
-
TypeEntry.new(catalog_version_type, [catalog.id, "online", "true", "EUR"])
|
245
|
-
|
246
|
-
result = ImpexResult.new(impex_dest_dir)
|
247
|
-
result << language_type
|
248
|
-
result << catalog_type
|
249
|
-
result << catalog_version_type
|
250
|
-
result
|
251
|
-
end
|
252
106
|
end
|
@@ -0,0 +1,182 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.expand_path('simpex.rb', 'lib')
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
class TestTypeEntry < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@macros = "$catalogVersion=catalogversion(catalog(id[default='simpexproducts']), version[default='staged'])[unique=true,default='simpexproducts:staged']"
|
8
|
+
|
9
|
+
@category_type = Type.new("Category", %w{code[unique=true] $catalogVersion name[lang=de] name[lang=en]}, @macros)
|
10
|
+
|
11
|
+
@product_type = Type.new("Product", %w{code[unique=true] name[lang=en] name[lang=de] unit(code) $catalogVersion supercategories(code)}, @macros)
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
def test_shoud_add_an_after_each_statement
|
16
|
+
bash_script = "#%afterEach: "
|
17
|
+
after_each = "impex.getLastImportedItem().setApprovalStatus(impex.getLastImportedItem().getBaseProduct().getApprovalStatus());"
|
18
|
+
product_type = Type.new("Product", %w{code[unique=true] name[lang=en]})
|
19
|
+
TypeEntry.new(product_type,%w{ 666 denis})
|
20
|
+
product_type.after_each << after_each
|
21
|
+
assert_match /impex/, product_type.after_each.first
|
22
|
+
assert_match /#%afterEach/, product_type.to_imp
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_create_a_type_entry
|
26
|
+
entry = TypeEntry.new(@product_type, {"code" => "333", "name[lang=de]" => "MyName"})
|
27
|
+
@product_type << entry
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_entry_should_handle_array_containnig_specific_types
|
31
|
+
some_type = Type.new('SomeType', %w{code some_list_attribute})
|
32
|
+
entry = TypeEntry.new(some_type, ["66", [1,2,3,4]])
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_entry_should_reference_other_entries
|
36
|
+
entry = TypeEntry.new(@product_type, {"code" => "333", "name[lang=en]" => "MyName"})
|
37
|
+
@product_type << entry
|
38
|
+
|
39
|
+
assert_equal "333", entry.get("code")
|
40
|
+
assert_equal "MyName", entry.get("name[lang=en]")
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_entry_should_validate_against_the_given_type_attributes
|
44
|
+
product_type = Type.new("Product", %w{code[unique=true] name[lang=en] name[lang=de]})
|
45
|
+
assert_raise ArgumentError do
|
46
|
+
entry = TypeEntry.new(product_type, {"co" => "555"})
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_should_fail_if_wrong_values_given
|
51
|
+
assert_raise ArgumentError do
|
52
|
+
entry = TypeEntry.new(@product_type, "somewrong string")
|
53
|
+
end
|
54
|
+
assert_raise ArgumentError do
|
55
|
+
entry = TypeEntry.new(nil, "somewrong string")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_entry_should_accept_array_of_values_and_assign_them_to_columns_according_to_the_order
|
60
|
+
entry = TypeEntry.new(@product_type, %w{555 myproduct555 meinproduct555 pieces SimpexProducts:Online SampleCategory})
|
61
|
+
assert_equal "myproduct555", entry.get("name[lang=en]")
|
62
|
+
assert_equal "meinproduct555", entry.get("name[lang=de]")
|
63
|
+
assert_equal "SampleCategory", entry.get("supercategories(code)")
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
def test_entry_should_inforce_to_use_unique_attributes_if_needed_for_fuzzy_matching
|
68
|
+
product_type = Type.new("Product", %w{code[unique=true] name[lang=en] name[lang=de]})
|
69
|
+
entry = TypeEntry.new(product_type, %w{555 myproduct555 meinproduct555 })
|
70
|
+
assert_raise ArgumentError do
|
71
|
+
entry.get("name")
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_should_create_impex_list_from_array
|
76
|
+
catalog_version_type = Type.new("CatalogVersion", %w{languages(isocode)})
|
77
|
+
|
78
|
+
entry = TypeEntry.new(catalog_version_type, [%w{en de fr it}])
|
79
|
+
assert_equal "en,de,fr,it", entry.languages
|
80
|
+
|
81
|
+
entry2 = TypeEntry.new(catalog_version_type, [["en", nil, "it"]])
|
82
|
+
assert_equal "en,it", entry2.languages
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_type_should_unregister_an_entry_by_attribute
|
86
|
+
product_type = Type.new("Product", %w{code})
|
87
|
+
entry = TypeEntry.new(product_type, %w{555 })
|
88
|
+
|
89
|
+
assert product_type.entries.one?{|e|e.code == "555"}
|
90
|
+
product_type.unregister_by("code", "555")
|
91
|
+
assert product_type.entries.none?{|e|e.code == "555"}
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_type_should_find_entry_by_attribute
|
95
|
+
product_type = Type.new("Product", %w{code})
|
96
|
+
assert product_type.find_by("code", "555").empty?
|
97
|
+
entry = TypeEntry.new(product_type, %w{555})
|
98
|
+
entry = TypeEntry.new(product_type, %w{555})
|
99
|
+
entry = TypeEntry.new(product_type, %w{556})
|
100
|
+
found = product_type.find_by("code", "555")
|
101
|
+
assert_equal 2, found.size
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_entry_should_match_fuzzy_attribute_names
|
105
|
+
product_type = Type.new("Product", %w{code[unique=true] name[lang=en] name[lang=de] unit(code) $catalogVersion supercategories(code)}, @macros)
|
106
|
+
entry = TypeEntry.new(product_type, %w{555 myproduct555 meinproduct555 pieces SimpexProducts:Online SampleCategory})
|
107
|
+
|
108
|
+
assert_equal "555", entry.get("code")
|
109
|
+
assert_equal "pieces", entry.get("unit")
|
110
|
+
assert_equal "SampleCategory", entry.get("supercategories")
|
111
|
+
|
112
|
+
assert_raise ArgumentError do
|
113
|
+
entry.get("supercat")
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_entry_should_match_nested_brakets_attributes
|
118
|
+
product_type = Type.new("Product", %w{code[unique=true] catalog(id)[unique=true]})
|
119
|
+
entry = TypeEntry.new(product_type, %w{555 myCatalogId})
|
120
|
+
assert_equal "myCatalogId", entry.catalog
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_entry_should_give_catalog_version_specific_attributes
|
124
|
+
product_type = Type.new("Product", %w{code[unique=true] $catalogVersion}, @macros)
|
125
|
+
entry = TypeEntry.new(product_type, %w{555 myCatalogId:staged })
|
126
|
+
assert_equal "555:myCatalogId:staged", entry.cat_ver_specific("code")
|
127
|
+
|
128
|
+
assert_raise ArgumentError do
|
129
|
+
product_type = Type.new("Product", %w{code[unique=true] someattr})
|
130
|
+
entry = TypeEntry.new(product_type, %w{555 myCatalogId:staged })
|
131
|
+
assert_equal "555:myCatalogId:staged", entry.cat_ver_specific("code")
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_entry_should_match_macro_attributes
|
136
|
+
product_type = Type.new("Product", %w{code[unique=true] $catalogVersion},"$catalogVersion=asdfadsfasdfasdf")
|
137
|
+
entry = TypeEntry.new(product_type, %w{555 myCatalogId})
|
138
|
+
assert_equal "myCatalogId", entry.catalogVersion
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_entry_should_match_fuzzy_attribute_names_to_real_attributes
|
142
|
+
product_type = Type.new("Product", %w{code[unique=true] name[lang=en] name[lang=de] unit(code) $catalogVersion supercategories(code)}, @macros)
|
143
|
+
entry = TypeEntry.new(product_type, %w{555 myproduct555 meinproduct555 pieces SimpexProducts:Online SampleCategory})
|
144
|
+
|
145
|
+
assert_equal "555", entry.code
|
146
|
+
assert_equal "pieces", entry.unit
|
147
|
+
assert_equal "SampleCategory", entry.supercategories
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_should_give_feedback_about_wrong_numbers_of_attributes
|
151
|
+
assert_raises ArgumentError do
|
152
|
+
language_type = Type.new("Language", %w{isocode[unique=true] active someOtherAtt})
|
153
|
+
TypeEntry.new(language_type, %w{de true})
|
154
|
+
end
|
155
|
+
|
156
|
+
assert_raises ArgumentError do
|
157
|
+
language_type = Type.new("Language", %w{isocode[unique=true] active})
|
158
|
+
TypeEntry.new(language_type, %w{de true xxx})
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
private
|
164
|
+
def standard_result(impex_dest_dir)
|
165
|
+
|
166
|
+
language_type = Type.new("Language", %w{isocode[unique=true] active})
|
167
|
+
TypeEntry.new(language_type, %w{de true})
|
168
|
+
TypeEntry.new(language_type, %w{en true})
|
169
|
+
|
170
|
+
catalog_type = Type.new("Catalog", %w{id[unique=true] name[lang=de] name[lang=en] defaultCatalog})
|
171
|
+
catalog = TypeEntry.new(catalog_type, %w{simpex_catalog SimpexCatalog SimpexCatalog true})
|
172
|
+
|
173
|
+
catalog_version_type = Type.new("CatalogVersion", %w{catalog(id)[unique=true] version[unique=true] active defaultCurrency(isocode)})
|
174
|
+
TypeEntry.new(catalog_version_type, [catalog.id, "online", "true", "EUR"])
|
175
|
+
|
176
|
+
result = ImpexResult.new(impex_dest_dir)
|
177
|
+
result << language_type
|
178
|
+
result << catalog_type
|
179
|
+
result << catalog_version_type
|
180
|
+
result
|
181
|
+
end
|
182
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simpex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-04 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description: Read more details at the homepage https://github.com/denislutz/simpex
|
15
15
|
email:
|
@@ -23,6 +23,7 @@ files:
|
|
23
23
|
- .rvmrc
|
24
24
|
- Gemfile
|
25
25
|
- Gemfile.lock
|
26
|
+
- Guardfile
|
26
27
|
- Rakefile
|
27
28
|
- lib/simpex.rb
|
28
29
|
- lib/simpex/catalog.rb
|
@@ -37,6 +38,7 @@ files:
|
|
37
38
|
- test/test_result.rb
|
38
39
|
- test/test_rich_types.rb
|
39
40
|
- test/test_type.rb
|
41
|
+
- test/test_type_entry.rb
|
40
42
|
homepage: https://github.com/denislutz/simpex
|
41
43
|
licenses: []
|
42
44
|
post_install_message:
|
@@ -66,3 +68,4 @@ test_files:
|
|
66
68
|
- test/test_result.rb
|
67
69
|
- test/test_rich_types.rb
|
68
70
|
- test/test_type.rb
|
71
|
+
- test/test_type_entry.rb
|