File tree 6 files changed +62
-17
lines changed
specs/features/browser_ui/3_create/merge_request
6 files changed +62
-17
lines changed Original file line number Diff line number Diff line change @@ -116,23 +116,13 @@ def self.evaluator
116
116
end
117
117
private_class_method :evaluator
118
118
119
- def self . dynamic_attributes
120
- const_get ( :DynamicAttributes )
121
- rescue NameError
122
- mod = const_set ( :DynamicAttributes , Module . new )
123
-
124
- include mod
125
-
126
- mod
127
- end
128
-
129
119
class DSL
130
120
def initialize ( base )
131
121
@base = base
132
122
end
133
123
134
124
def attribute ( name , &block )
135
- @base . dynamic_attributes . module_eval do
125
+ @base . module_eval do
136
126
attr_writer ( name )
137
127
138
128
define_method ( name ) do
Original file line number Diff line number Diff line change 3
3
module QA
4
4
module Resource
5
5
class Fork < Base
6
+ attribute :project do
7
+ Resource ::Project . fabricate! do |resource |
8
+ resource . name = push . project . name
9
+ resource . path_with_namespace = "#{ user . name } /#{ push . project . name } "
10
+ end
11
+ end
12
+
6
13
attribute :push do
7
14
Repository ::ProjectPush . fabricate!
8
15
end
@@ -37,6 +44,8 @@ def fabricate!
37
44
Page ::Layout ::Banner . perform do |page |
38
45
page . has_notice? ( 'The project was successfully forked.' )
39
46
end
47
+
48
+ populate ( :project )
40
49
end
41
50
end
42
51
end
Original file line number Diff line number Diff line change @@ -11,7 +11,7 @@ class MergeRequestFromFork < MergeRequest
11
11
12
12
attribute :push do
13
13
Repository ::ProjectPush . fabricate! do |resource |
14
- resource . project = fork
14
+ resource . project = fork . project
15
15
resource . branch_name = fork_branch
16
16
resource . file_name = 'file2.txt'
17
17
resource . user = fork . user
Original file line number Diff line number Diff line change @@ -12,6 +12,10 @@ class Project < Base
12
12
Group . fabricate!
13
13
end
14
14
15
+ attribute :path_with_namespace do
16
+ "#{ group . sandbox . path } /#{ group . path } /#{ name } " if group
17
+ end
18
+
15
19
attribute :repository_ssh_location do
16
20
Page ::Project ::Show . perform do |page |
17
21
page . repository_clone_ssh_location
@@ -46,8 +50,14 @@ def fabricate!
46
50
end
47
51
end
48
52
53
+ def fabricate_via_api!
54
+ resource_web_url ( api_get )
55
+ rescue ResourceNotFoundError
56
+ super
57
+ end
58
+
49
59
def api_get_path
50
- "/projects/#{ name } "
60
+ "/projects/#{ CGI . escape ( path_with_namespace ) } "
51
61
end
52
62
53
63
def api_post_path
Original file line number Diff line number Diff line change @@ -5,18 +5,18 @@ module QA
5
5
describe 'Merge request creation from fork' do
6
6
it 'user forks a project, submits a merge request and maintainer merges it' do
7
7
Runtime ::Browser . visit ( :gitlab , Page ::Main ::Login )
8
- Page ::Main ::Login . act { sign_in_using_credentials }
8
+ Page ::Main ::Login . perform ( & : sign_in_using_credentials)
9
9
10
10
merge_request = Resource ::MergeRequestFromFork . fabricate! do |merge_request |
11
11
merge_request . fork_branch = 'feature-branch'
12
12
end
13
13
14
- Page ::Main ::Menu . perform { | main | main . sign_out }
15
- Page ::Main ::Login . perform { | login | login . sign_in_using_credentials }
14
+ Page ::Main ::Menu . perform ( & : sign_out)
15
+ Page ::Main ::Login . perform ( & : sign_in_using_credentials)
16
16
17
17
merge_request . visit!
18
18
19
- Page ::MergeRequest ::Show . perform { | show | show . merge! }
19
+ Page ::MergeRequest ::Show . perform ( & : merge!)
20
20
21
21
expect ( page ) . to have_content ( 'The changes were merged' )
22
22
end
Original file line number Diff line number Diff line change @@ -213,6 +213,42 @@ def self.current_url
213
213
. to raise_error ( described_class ::NoValueError , "No value was computed for no_block of #{ resource . class . name } ." )
214
214
end
215
215
end
216
+
217
+ context 'when multiple resources have the same attribute name' do
218
+ let ( :base ) do
219
+ Class . new ( QA ::Resource ::Base ) do
220
+ def fabricate!
221
+ 'any'
222
+ end
223
+
224
+ def self . current_url
225
+ 'http://stub'
226
+ end
227
+ end
228
+ end
229
+ let ( :first_resource ) do
230
+ Class . new ( base ) do
231
+ attribute :test do
232
+ 'first block'
233
+ end
234
+ end
235
+ end
236
+ let ( :second_resource ) do
237
+ Class . new ( base ) do
238
+ attribute :test do
239
+ 'second block'
240
+ end
241
+ end
242
+ end
243
+
244
+ it 'has unique attribute values' do
245
+ first_result = first_resource . fabricate! ( resource : first_resource . new )
246
+ second_result = second_resource . fabricate! ( resource : second_resource . new )
247
+
248
+ expect ( first_result . test ) . to eq 'first block'
249
+ expect ( second_result . test ) . to eq 'second block'
250
+ end
251
+ end
216
252
end
217
253
218
254
describe '#web_url' do
You can’t perform that action at this time.
0 commit comments