cutara 0.0.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.
@@ -0,0 +1,60 @@
1
+ # -*- encoding : utf-8 -*-
2
+ def run_action_validator(action_name, check_value)
3
+ res = PageObjectWrapper.current_page.send action_name.to_action
4
+ res.should eq check_value
5
+ end
6
+
7
+ def run_action_with_args_validator(action_name, params_string, check_value)
8
+ args = params_string.to_params.values
9
+ res = PageObjectWrapper.current_page.send action_name.to_action, *args
10
+ res.should eq check_value
11
+ end
12
+
13
+ def complex_select_validator(find_in, t_name, find_by, value, check_value)
14
+ current_page = PageObjectWrapper.current_page
15
+ res = current_page.send t_name.to_select, find_in.to_label.to_sym, { find_by.to_label.to_sym => value }
16
+ res.text.should =~ /#{check_value}/
17
+ end
18
+
19
+ def complex_select_regexp_validator(find_in, t_name, find_by, value, check_value)
20
+ current_page = PageObjectWrapper.current_page
21
+ res = current_page.send t_name.to_select, find_in.to_label.to_sym, { find_by.to_label.to_sym => Regexp.new(value) }
22
+ res.text.should =~ /#{check_value}/
23
+ end
24
+
25
+ def select_by_row_num_validator(col_num, find_in, t_name, check_value)
26
+ current_page = PageObjectWrapper.current_page
27
+ res = current_page.send t_name.to_select, find_in.to_label.to_sym, :row => col_num.to_i
28
+ res.text.should =~ /#{check_value}/
29
+ end
30
+
31
+ Тогда(/^открывается страница "(.*?)"$/) do |arg1|
32
+ PageObjectWrapper.current_page? arg1.to_label.to_sym
33
+ end
34
+
35
+ Тогда(/^проверка "(.*?)" вернет "(.*?)"$/) do |arg1, arg2|
36
+ current_page = PageObjectWrapper.current_page
37
+ res = current_page.send arg1.to_validator
38
+ res.should eq arg2
39
+ end
40
+
41
+ Тогда(/^действие "(.*?)" вернет "(.*?)"$/) do |arg1, arg2|
42
+ run_action_validator(arg1, arg2)
43
+ end
44
+
45
+ Тогда(/^выполнение действия "(.*?)" с параметрами "(.*?)" вернет "(.*?)"$/) do |arg1, arg2, arg3|
46
+ run_action_with_args_validator(arg1, arg2, arg3)
47
+ end
48
+
49
+ Тогда(/^в "(.*?)" строке колонки "(.*?)" таблицы "(.*?)" содержится "(.*?)"$/) do |arg1, arg2, arg3, arg4|
50
+ select_by_row_num_validator(arg1, arg2, arg3, arg4)
51
+ end
52
+
53
+ Тогда(/^в колонке "(.*?)" таблицы "(.*?)" с "(.*?)" равным "(.*?)" содержится "(.*?)"$/) do |arg1, arg2, arg3, arg4, arg5|
54
+ complex_select_validator(arg1, arg2, arg3, arg4, arg5)
55
+ end
56
+
57
+ Тогда(/^в колонке "(.*?)" таблицы "(.*?)" с "(.*?)" похожим на "(.*?)" содержится "(.*?)"$/) do |arg1, arg2, arg3, arg4, arg5|
58
+ complex_select_regexp_validator(arg1, arg2, arg3, arg4, arg5)
59
+ end
60
+
@@ -0,0 +1,4 @@
1
+ language: language_of_your_specs # supported: [:en,:ru], please do pull request for other langs
2
+ username: tarantula_admin_login
3
+ password: tarantula_admin_password
4
+ server: http://localhost:8080
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "cutara"
8
+ gem.version = Cutara::VERSION
9
+ gem.authors = ["Evgeniy Khatko"]
10
+ gem.email = ["evgeniy.khatko@gmail.com"]
11
+ gem.description = %q{ Cutara is the bridge between Tarantula and Cucumber }
12
+ gem.summary = %q{ Cutara provides rake tasks for integration between Cucumber (test automation tool) and Taranula (test-management tool) }
13
+ gem.homepage = ""
14
+ gem.add_dependency "page_object_wrapper"
15
+ gem.add_dependency "rspec"
16
+ gem.add_dependency "babosa"
17
+ gem.add_dependency "cucumber"
18
+ gem.add_dependency "httparty"
19
+ gem.add_dependency "activerecord"
20
+ gem.add_dependency "rake"
21
+ gem.add_development_dependency "debugger"
22
+ gem.add_development_dependency "magic_encoding"
23
+
24
+ gem.files = `git ls-files`.split($/)
25
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
26
+ gem.test_files = gem.files.grep(%r{^(test|spec)/})
27
+ gem.require_paths = ["lib", "tasks", "generation"]
28
+ end
@@ -0,0 +1,20 @@
1
+ require 'PageElement'
2
+
3
+ module Cutara
4
+ class Action < PageElement
5
+ attr_accessor :params
6
+
7
+ def initialize label, params=nil
8
+ super label
9
+ @params = params
10
+ end
11
+
12
+ def to_snippet
13
+ if @params
14
+ return "\taction #{@label.inspect} do |#{params.join(", ")}|\n\tend\n\n"
15
+ else
16
+ return "\taction #{@label.inspect} do\n\tend\n\n"
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,80 @@
1
+ require 'Page'
2
+ require 'Action'
3
+ require 'Eset'
4
+ require 'Input'
5
+ require 'Clickable'
6
+ require 'Table'
7
+ require 'Validator'
8
+ require 'Pagination'
9
+
10
+ module Cutara
11
+
12
+ class Application
13
+ attr_accessor :current_page
14
+
15
+ def initialize
16
+ @current_page = nil
17
+ end
18
+
19
+ def pages
20
+ Page.pages
21
+ end
22
+
23
+ def add_page label
24
+ p = Page.find_page(label) || Page.new(label)
25
+ (Page.pages << p).uniq!
26
+ @current_page = p
27
+ end
28
+
29
+ def add_action label, params=nil
30
+ a = @current_page.find_action(label) || Action.new(label, params)
31
+ (@current_page.actions << a).uniq!
32
+ end
33
+
34
+ def add_menu label
35
+ @current_page.inputs.each{ |i| i.menus << label; i.menus.uniq! }
36
+ @current_page.esets.each{ |e| e.menus << label; e.menus.uniq! }
37
+ end
38
+
39
+ def add_eset label, menu
40
+ eset = @current_page.find_eset(label) || Eset.new(label)
41
+ eset.menus << menu
42
+ (@current_page.esets << eset).uniq!
43
+ end
44
+
45
+ def add_input label
46
+ i = @current_page.find_input(label) || Input.new(label)
47
+ (@current_page.inputs << i).uniq!
48
+ end
49
+
50
+ def add_link label
51
+ c = @current_page.find_clickable(label, :link) || Clickable.new(label, :link)
52
+ (@current_page.clickables << c).uniq!
53
+ end
54
+
55
+ def add_button label
56
+ c = @current_page.find_clickable(label, :button) || Clickable.new(label, :button)
57
+ (@current_page.clickables << c).uniq!
58
+ end
59
+
60
+ def add_element label
61
+ c = @current_page.find_clickable(label, :element) || Clickable.new(label, :element)
62
+ (@current_page.clickables << c).uniq!
63
+ end
64
+
65
+ def add_table label
66
+ t = @current_page.find_table(label) || Table.new(label)
67
+ (@current_page.tables << t).uniq!
68
+ t
69
+ end
70
+
71
+ def add_validator label
72
+ v = @current_page.find_validator(label) || Validator.new(label)
73
+ (@current_page.validators << v).uniq!
74
+ end
75
+
76
+ def add_pagination
77
+ @current_page.pagination = :pagination
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,14 @@
1
+ require 'PageElement'
2
+ module Cutara
3
+ class Clickable < PageElement
4
+ attr_accessor :type
5
+ def initialize label, type
6
+ super label
7
+ @type = type
8
+ end
9
+
10
+ def to_snippet
11
+ "\t#{@type} #{@label.inspect} do\n\t\tlocator\n\tend\n\n"
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,18 @@
1
+ require 'PageElement'
2
+ module Cutara
3
+ class Eset < PageElement
4
+ attr_accessor :menus
5
+ def initialize label
6
+ super label
7
+ @menus = []
8
+ end
9
+
10
+ def to_snippet
11
+ out = "\telements_set #{@label.inspect} do\n"
12
+ @menus.each{|menu|
13
+ out += "\t\tmenu #{menu.inspect}\n"
14
+ }
15
+ out += "\tend\n\n"
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'PageElement'
2
+ module Cutara
3
+ class Input < PageElement
4
+ attr_accessor :menus
5
+ def initialize label
6
+ super label
7
+ @menus = []
8
+ end
9
+
10
+ def to_snippet
11
+ out = "\ttext_field #{@label.inspect} do\n\t\tlocator\n"
12
+ @menus.each{|menu|
13
+ out += "\t\tmenu #{menu.inspect}\n"
14
+ }
15
+ out += "\tend\n\n"
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,62 @@
1
+ require 'PageElement'
2
+ module Cutara
3
+ class Page < PageElement
4
+ attr_accessor :label, :actions, :esets, :inputs, :clickables, :tables, :pagination, :validators
5
+ @@pages = []
6
+
7
+ def initialize label
8
+ @label = label
9
+ @actions = []
10
+ @esets = []
11
+ @inputs = []
12
+ @clickables = []
13
+ @tables = []
14
+ @validators = []
15
+ @pagination = nil
16
+ end
17
+
18
+ def self.pages
19
+ @@pages
20
+ end
21
+
22
+ def to_snippet
23
+ out = "PageObjectWrapper.define_page #{@label.inspect} do\n\tlocator\n"
24
+ @clickables.each{ |e| out += e.to_snippet }
25
+ @inputs.each{ |e| out += e.to_snippet }
26
+ @esets.each{ |e| out += e.to_snippet }
27
+ @tables.each{ |e| out += e.to_snippet }
28
+ @actions.each{ |e| out += e.to_snippet }
29
+ @validators.each{ |e| out += e.to_snippet }
30
+ out += "\tpagination :pagination do\n\tend\n" if @pagination
31
+ out += "end"
32
+ end
33
+
34
+ def self.find_page label
35
+ @@pages.select{|e| e.label == label}.first
36
+ end
37
+
38
+ def find_action label
39
+ @actions.select{|e| e.label == label}.first
40
+ end
41
+
42
+ def find_clickable label, type
43
+ @clickables.select{|e| e.label == label and e.type == type}.first
44
+ end
45
+
46
+ def find_eset label
47
+ @esets.select{|e| e.label == label}.first
48
+ end
49
+
50
+ def find_input label
51
+ @inputs.select{|e| e.label == label }.first
52
+ end
53
+
54
+ def find_table label
55
+ @tables.select{|e| e.label == label}.first
56
+ end
57
+
58
+ def find_validator label
59
+ @validators.select{|e| e.label == label}.first
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,11 @@
1
+ module Cutara
2
+ class PageElement
3
+ attr_accessor :label
4
+ def initialize label
5
+ @label = label
6
+ end
7
+
8
+ def to_snippet
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,22 @@
1
+ require 'PageElement'
2
+ module Cutara
3
+ class Table < PageElement
4
+ attr_accessor :columns
5
+ def initialize label
6
+ super label
7
+ @columns = []
8
+ end
9
+
10
+ def to_snippet
11
+ out = ""
12
+ out += "\ttable #{@label.inspect} do\n\t\tlocator\n"
13
+ out += "\t\theader #{@columns.inspect}\n"
14
+ out += "\tend\n\n"
15
+ end
16
+
17
+ def add_column label
18
+ @columns << label
19
+ @columns.uniq!
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,12 @@
1
+ require 'PageElement'
2
+ module Cutara
3
+ class Validator < PageElement
4
+ def initialize label
5
+ super label
6
+ end
7
+
8
+ def to_snippet
9
+ "\tvalidator #{@label.inspect} do\n\tend\n\n"
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'Application'
3
+ require 'Helper'
4
+ module Cutara
5
+ APP = Application.new
6
+ end
7
+
8
+ World{ Cutara }
9
+
10
+ at_exit do
11
+ Cutara::APP.pages.each{ |p|
12
+ file_name = "#{ROOT}/pages/#{p.label.to_s}.rb"
13
+ raise "directory #{ROOT}/pages not found, run rake cutara:build first" unless File.exist? "#{ROOT}/pages"
14
+ data = p.to_snippet
15
+ unless File.exist? file_name
16
+ File.open(file_name, "w") do |f|
17
+ f.puts "# -*- encoding : utf-8 -*-"
18
+ f.puts data
19
+ f.close
20
+ end
21
+ end
22
+ puts data
23
+ }
24
+ end
@@ -0,0 +1,205 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'Application'
3
+ include Cutara
4
+
5
+ # open_steps
6
+ Допустим /^открыта страница "(.*?)"$/ do |arg1|
7
+ APP.add_page arg1.to_label.to_sym
8
+ end
9
+
10
+ Допустим /^страница "(.*?)" открыта с параметрами "(.*?)"$/ do |arg1, arg2|
11
+ APP.add_page arg1.to_label.to_sym
12
+ end
13
+
14
+ Если /^открыть страницу "(.*?)"$/ do |arg1|
15
+ APP.add_page arg1.to_label.to_sym
16
+ end
17
+
18
+ Если /^страницу "(.*?)" открыть с параметрами "(.*?)"$/ do |arg1, arg2|
19
+ APP.add_page arg1.to_label.to_sym
20
+ end
21
+
22
+ # action_steps
23
+ Допустим /^выполнено действие "(.*?)"$/ do |arg1|
24
+ APP.add_action arg1.to_label.to_sym
25
+ end
26
+
27
+ Допустим /^действие "(.*?)" выполнено с параметрами "(.*?)"$/ do |arg1, arg2|
28
+ args = arg2.to_params.keys
29
+ APP.add_action arg1.to_label.to_sym, args
30
+ end
31
+
32
+ Если /^выполнить действие "(.*?)"$/ do |arg1|
33
+ APP.add_action arg1.to_label.to_sym
34
+ end
35
+
36
+ Если /^действие "(.*?)" выполнить с параметрами "(.*?)"$/ do |arg1, arg2|
37
+ args = arg2.to_params.keys
38
+ APP.add_action arg1.to_label.to_sym, args
39
+ end
40
+
41
+ # data_input_steps
42
+ Пусть /^на странице введены данные типа "(.*?)"$/ do |arg1|
43
+ APP.add_menu arg1.to_label.to_sym
44
+ end
45
+
46
+ Пусть /^в набор элементов "(.*?)" введены данные типа "(.*?)"$/ do |arg1, arg2|
47
+ APP.add_eset arg1.to_label.to_sym, arg2.to_label.to_sym
48
+ end
49
+
50
+ Пусть /^на форме "(.*?)" введены данные типа "(.*?)"$/ do |arg1, arg2|
51
+ APP.add_eset arg1.to_label.to_sym, arg2.to_label.to_sym
52
+ end
53
+
54
+ Пусть /^в поле "(.*?)" введено значение "(.*?)"$/ do |arg1, arg2|
55
+ APP.add_input arg1.to_label.to_sym
56
+ end
57
+
58
+ Если /^на странице ввести данные типа "(.*?)"$/ do |arg1|
59
+ APP.add_menu arg1.to_label.to_sym
60
+ end
61
+
62
+ Если /^в набор элементов "(.*?)" ввести данные типа "(.*?)"$/ do |arg1, arg2|
63
+ APP.add_eset arg1.to_label.to_sym, arg2.to_label.to_sym
64
+ end
65
+
66
+ Если /^на форме "(.*?)" ввести данные типа "(.*?)"$/ do |arg1, arg2|
67
+ APP.add_eset arg1.to_label.to_sym, arg2.to_label.to_sym
68
+ end
69
+
70
+ Если /^в поле "(.*?)" ввести значение "(.*?)"$/ do |arg1, arg2|
71
+ APP.add_input arg1.to_label.to_sym
72
+ end
73
+
74
+ # press_steps
75
+ Допустим /^была нажата ссылка "(.*?)"$/ do |arg1|
76
+ APP.add_link arg1.to_label.to_sym
77
+ end
78
+
79
+ Допустим /^была нажата кнопка "(.*?)"$/ do |arg1|
80
+ APP.add_button arg1.to_label.to_sym
81
+ end
82
+
83
+ Допустим /^был нажат элемент "(.*?)"$/ do |arg1|
84
+ APP.add_element arg1.to_label.to_sym
85
+ end
86
+
87
+ Если /^нажать ссылку "(.*?)"$/ do |arg1|
88
+ APP.add_link arg1.to_label.to_sym
89
+ end
90
+
91
+ Если /^нажать кнопку "(.*?)"$/ do |arg1|
92
+ APP.add_button arg1.to_label.to_sym
93
+ end
94
+
95
+ Если /^нажать на элемент "(.*?)"$/ do |arg1|
96
+ APP.add_element arg1.to_label.to_sym
97
+ end
98
+
99
+ # table_steps
100
+ Допустим /^в таблице "(.*?)" была выбрана ячейка колонки "(.*?)" с "(.*?)" равным "(.*?)"$/ do |arg1, arg2, arg3, arg4|
101
+ t = APP.add_table arg1.to_label.to_sym
102
+ t.add_column arg2.to_label.to_sym
103
+ end
104
+
105
+ Допустим /^в таблице "(.*?)" была выбрана ячейка колонки "(.*?)" с "(.*?)" похожим на "(.*?)"$/ do |arg1, arg2, arg3, arg4|
106
+ t = APP.add_table arg1.to_label.to_sym
107
+ t.add_column arg2.to_label.to_sym
108
+ end
109
+
110
+ Допустим /^в таблице "(.*?)" была выбрана ячейка с "(.*?)" похожим на "(.*?)"$/ do |arg1, arg2, arg3|
111
+ t = APP.add_table arg1.to_label.to_sym
112
+ t.add_column arg2.to_label.to_sym
113
+ end
114
+
115
+ Допустим /^в таблице "(.*?)" была выбрана ячейка с "(.*?)" равным "(.*?)"$/ do |arg1, arg2, arg3|
116
+ t = APP.add_table arg1.to_label.to_sym
117
+ t.add_column arg2.to_label.to_sym
118
+ end
119
+
120
+ Допустим /^в таблице "(.*?)" был выбран элемент колонки "(.*?)"$/ do |arg1, arg2|
121
+ t = APP.add_table arg1.to_label.to_sym
122
+ t.add_column arg2.to_label.to_sym
123
+ end
124
+
125
+ Допустим /^в таблице "(.*?)" был выбран элемент колонки "(.*?)" из "(.*?)" строки$/ do |arg1, arg2, arg3|
126
+ t = APP.add_table arg1.to_label.to_sym
127
+ t.add_column arg2.to_label.to_sym
128
+ end
129
+
130
+ Если /^в таблице "(.*?)" выбрать ячейку колонки "(.*?)" с "(.*?)" равным "(.*?)"$/ do |arg1, arg2, arg3, arg4|
131
+ t = APP.add_table arg1.to_label.to_sym
132
+ t.add_column arg2.to_label.to_sym
133
+ end
134
+
135
+ Если /^в таблице "(.*?)" выбрать ячейку с "(.*?)" похожим на "(.*?)"$/ do |arg1, arg2, arg3|
136
+ t = APP.add_table arg1.to_label.to_sym
137
+ t.add_column arg2.to_label.to_sym
138
+ end
139
+
140
+ Если /^в таблице "(.*?)" выбрать ячейку с "(.*?)" равным "(.*?)"$/ do |arg1, arg2, arg3|
141
+ t = APP.add_table arg1.to_label.to_sym
142
+ t.add_column arg2.to_label.to_sym
143
+ end
144
+
145
+ Если /^в таблице "(.*?)" выбрать элемент колонки "(.*?)"$/ do |arg1, arg2|
146
+ t = APP.add_table arg1.to_label.to_sym
147
+ t.add_column arg2.to_label.to_sym
148
+ end
149
+
150
+ Если /^в таблице "(.*?)" выбрать элемент колонки "(.*?)" из "(.*?)" строки$/ do |arg1, arg2, arg3|
151
+ t = APP.add_table arg1.to_label.to_sym
152
+ t.add_column arg2.to_label.to_sym
153
+ end
154
+ # pagination_steps
155
+ Допустим /^открыта "(.*?)" страница пагинации$/ do |arg1|
156
+ APP.add_pagination
157
+ end
158
+
159
+ Допустим /^на каждой странице пагинации выполнить действие "(.*?)"$/ do |arg1|
160
+ APP.add_pagination
161
+ APP.add_action arg1.to_label.to_sym
162
+ end
163
+
164
+ Допустим /^на первых "(.*?)" страницах пагинации выполнить действие "(.*?)"$/ do |arg1, arg2|
165
+ APP.add_pagination
166
+ APP.add_action arg2.to_label.to_sym
167
+ end
168
+
169
+ Допустим /^перейти на "(.*?)" страницу пагинации$/ do |arg1|
170
+ APP.add_pagination
171
+ end
172
+
173
+ # validation_steps
174
+ Тогда(/^открывается страница "(.*?)"$/) do |arg1|
175
+ APP.add_page arg1.to_label.to_sym
176
+ end
177
+
178
+ Тогда(/^проверка "(.*?)" вернет "(.*?)"$/) do |arg1, arg2|
179
+ APP.add_validator arg1.to_label.to_sym
180
+ end
181
+
182
+ Тогда(/^действие "(.*?)" вернет "(.*?)"$/) do |arg1, arg2|
183
+ APP.add_action arg1.to_label.to_sym
184
+ end
185
+
186
+ Тогда(/^выполнение действия "(.*?)" с параметрами "(.*?)" вернет "(.*?)"$/) do |arg1, arg2, arg3|
187
+ args = arg2.to_params.keys
188
+ APP.add_action arg1.to_label.to_sym, args
189
+ end
190
+
191
+ Тогда(/^в "(.*?)" строке колонки "(.*?)" таблицы "(.*?)" содержится "(.*?)"$/) do |arg1, arg2, arg3, arg4|
192
+ t = APP.add_table arg3.to_label.to_sym
193
+ t.add_column arg2.to_label.to_sym
194
+ end
195
+
196
+ Тогда(/^в колонке "(.*?)" таблицы "(.*?)" с "(.*?)" равным "(.*?)" содержится "(.*?)"$/) do |arg1, arg2, arg3, arg4, arg5|
197
+ t = APP.add_table arg2.to_label.to_sym
198
+ t.add_column arg1.to_label.to_sym
199
+ end
200
+
201
+ Тогда(/^в колонке "(.*?)" таблицы "(.*?)" с "(.*?)" похожим на "(.*?)" содержится "(.*?)"$/) do |arg1, arg2, arg3, arg4, arg5|
202
+ t = APP.add_table arg2.to_label.to_sym
203
+ t.add_column arg1.to_label.to_sym
204
+ end
205
+