Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
gitlab-ce
Commits
e364c118
Commit
e364c118
authored
Jun 26, 2017
by
Shinya Maeda
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement variables_attributes create/update cases
parent
507fedf3
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
315 additions
and
298 deletions
+315
-298
app/controllers/projects/pipeline_schedules_controller.rb
app/controllers/projects/pipeline_schedules_controller.rb
+3
-2
app/models/ci/pipeline_schedule.rb
app/models/ci/pipeline_schedule.rb
+0
-10
app/services/ci/create_pipeline_schedule_service.rb
app/services/ci/create_pipeline_schedule_service.rb
+28
-2
spec/controllers/projects/pipeline_schedules_controller_spec.rb
...ontrollers/projects/pipeline_schedules_controller_spec.rb
+284
-284
No files found.
app/controllers/projects/pipeline_schedules_controller.rb
View file @
e364c118
...
@@ -33,7 +33,8 @@ class Projects::PipelineSchedulesController < Projects::ApplicationController
...
@@ -33,7 +33,8 @@ class Projects::PipelineSchedulesController < Projects::ApplicationController
end
end
def
update
def
update
if
schedule
.
update
(
schedule_params
)
if
Ci
::
CreatePipelineScheduleService
.
new
(
@project
,
current_user
,
schedule_params
).
update
(
schedule
)
redirect_to
namespace_project_pipeline_schedules_path
(
@project
.
namespace
.
becomes
(
Namespace
),
@project
)
redirect_to
namespace_project_pipeline_schedules_path
(
@project
.
namespace
.
becomes
(
Namespace
),
@project
)
else
else
render
:edit
render
:edit
...
@@ -67,6 +68,6 @@ class Projects::PipelineSchedulesController < Projects::ApplicationController
...
@@ -67,6 +68,6 @@ class Projects::PipelineSchedulesController < Projects::ApplicationController
def
schedule_params
def
schedule_params
params
.
require
(
:schedule
)
params
.
require
(
:schedule
)
.
permit
(
:description
,
:cron
,
:cron_timezone
,
:ref
,
:active
,
.
permit
(
:description
,
:cron
,
:cron_timezone
,
:ref
,
:active
,
variables_attributes:
[
:
key
,
:value
]
)
variables_attributes:
[
:
id
,
:key
,
:value
,
:_destroy
]
)
end
end
end
end
app/models/ci/pipeline_schedule.rb
View file @
e364c118
...
@@ -15,7 +15,6 @@ module Ci
...
@@ -15,7 +15,6 @@ module Ci
validates
:cron_timezone
,
cron_timezone:
true
,
presence:
{
unless: :importing?
}
validates
:cron_timezone
,
cron_timezone:
true
,
presence:
{
unless: :importing?
}
validates
:ref
,
presence:
{
unless: :importing?
}
validates
:ref
,
presence:
{
unless: :importing?
}
validates
:description
,
presence:
true
validates
:description
,
presence:
true
validates_associated
:variables
before_save
:set_next_run_at
before_save
:set_next_run_at
...
@@ -24,15 +23,6 @@ module Ci
...
@@ -24,15 +23,6 @@ module Ci
accepts_nested_attributes_for
:variables
,
allow_destroy:
true
accepts_nested_attributes_for
:variables
,
allow_destroy:
true
before_validation
(
on: :update
)
do
# TODO: if validation failed, restore the deleted_obj
deleted_obj
=
Ci
::
PipelineScheduleVariable
.
where
(
pipeline_schedule_id:
self
).
destroy_all
end
after_validation
(
on: :update
)
do
# TODO: if validation failed, restore the deleted_obj
end
def
owned_by?
(
current_user
)
def
owned_by?
(
current_user
)
owner
==
current_user
owner
==
current_user
end
end
...
...
app/services/ci/create_pipeline_schedule_service.rb
View file @
e364c118
module
Ci
module
Ci
class
CreatePipelineScheduleService
<
BaseService
class
CreatePipelineScheduleService
<
BaseService
def
execute
def
execute
project
.
pipeline_schedules
.
create
(
pipeline_schedule_params
)
pipeline_schedule
=
project
.
pipeline_schedules
.
build
(
pipeline_schedule_params
)
if
variable_keys_duplicated?
pipeline_schedule
.
errors
.
add
(
'variables.key'
,
"keys are duplicated"
)
return
pipeline_schedule
end
pipeline_schedule
.
save
pipeline_schedule
end
def
update
(
pipeline_schedule
)
if
variable_keys_duplicated?
pipeline_schedule
.
errors
.
add
(
'variables.key'
,
"keys are duplicated"
)
return
false
end
pipeline_schedule
.
update
(
pipeline_schedule_params
)
end
end
private
private
def
pipeline_schedule_params
def
pipeline_schedule_params
params
.
merge
(
owner:
current_user
)
@pipeline_schedule_params
||=
params
.
merge
(
owner:
current_user
)
end
def
variable_keys_duplicated?
attributes
=
pipeline_schedule_params
[
'variables_attributes'
]
return
false
unless
attributes
.
is_a?
(
Array
)
attributes
.
map
{
|
v
|
v
[
'key'
]
}.
uniq
.
length
!=
attributes
.
length
end
end
end
end
end
end
spec/controllers/projects/pipeline_schedules_controller_spec.rb
View file @
e364c118
require
'spec_helper'
require
'spec_helper'
describe
Projects
::
PipelineSchedulesController
do
describe
Projects
::
PipelineSchedulesController
do
include
AccessMatchersForController
set
(
:project
)
{
create
(
:empty_project
,
:public
)
}
set
(
:project
)
{
create
(
:empty_project
,
:public
)
}
let!
(
:pipeline_schedule
)
{
create
(
:ci_pipeline_schedule
,
project:
project
)
}
let!
(
:pipeline_schedule
)
{
create
(
:ci_pipeline_schedule
,
project:
project
)
}
...
@@ -19,14 +17,6 @@ describe Projects::PipelineSchedulesController do
...
@@ -19,14 +17,6 @@ describe Projects::PipelineSchedulesController do
expect
(
response
).
to
render_template
(
:index
)
expect
(
response
).
to
render_template
(
:index
)
end
end
it
'avoids N + 1 queries'
do
control_count
=
ActiveRecord
::
QueryRecorder
.
new
{
visit_pipelines_schedules
}.
count
create_list
(
:ci_pipeline_schedule
,
2
,
project:
project
)
expect
{
visit_pipelines_schedules
}.
not_to
exceed_query_limit
(
control_count
)
end
context
'when the scope is set to active'
do
context
'when the scope is set to active'
do
let
(
:scope
)
{
'active'
}
let
(
:scope
)
{
'active'
}
...
@@ -47,12 +37,12 @@ describe Projects::PipelineSchedulesController do
...
@@ -47,12 +37,12 @@ describe Projects::PipelineSchedulesController do
end
end
describe
'GET #new'
do
describe
'GET #new'
do
set
(
:user
)
{
create
(
:user
)
}
before
do
before
do
create
(
:user
).
tap
do
|
user
|
project
.
add_developer
(
user
)
project
.
add_developer
(
user
)
sign_in
(
user
)
sign_in
(
user
)
end
end
end
it
'initializes a pipeline schedule model'
do
it
'initializes a pipeline schedule model'
do
get
:new
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
get
:new
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
...
@@ -63,23 +53,24 @@ describe Projects::PipelineSchedulesController do
...
@@ -63,23 +53,24 @@ describe Projects::PipelineSchedulesController do
end
end
describe
'POST #create'
do
describe
'POST #create'
do
describe
'functionality'
do
set
(
:user
)
{
create
(
:user
)
}
before
do
before
do
create
(
:user
).
tap
do
|
user
|
project
.
add_developer
(
user
)
project
.
add_developer
(
user
)
sign_in
(
user
)
sign_in
(
user
)
end
end
end
let
(
:basic_param
)
do
let
(
:basic_param
)
do
{
description:
'aaaaaaaa'
,
cron:
'0 4 * * *'
,
cron_timezone:
'UTC'
,
ref:
'master'
,
active:
'1'
}
{
description:
'aaaaaaaa'
,
cron:
'0 4 * * *'
,
cron_timezone:
'UTC'
,
ref:
'master'
,
active:
'1'
}
end
end
context
'when variables_attributes is empty'
do
context
'when variables_attributes is empty'
do
let
(
:schedule
)
{
basic_param
}
let
(
:schedule
)
do
basic_param
end
it
'creates a new schedule'
do
it
'creates a new schedule'
do
expect
{
go
}
expect
{
post
:create
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
schedule:
schedule
}
.
to
change
{
Ci
::
PipelineSchedule
.
count
}.
by
(
1
)
.
to
change
{
Ci
::
PipelineSchedule
.
count
}.
by
(
1
)
.
and
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
0
)
.
and
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
0
)
...
@@ -90,12 +81,12 @@ describe Projects::PipelineSchedulesController do
...
@@ -90,12 +81,12 @@ describe Projects::PipelineSchedulesController do
context
'when variables_attributes has one variable'
do
context
'when variables_attributes has one variable'
do
let
(
:schedule
)
do
let
(
:schedule
)
do
basic_param
.
merge
({
basic_param
.
merge
({
variables_attributes:
[{
key:
'AAA'
,
value:
'AAA123'
}
]
variables_attributes:
[
{
key:
'AAA'
,
value:
'AAA123'
}
]
})
})
end
end
it
'creates a new schedule'
do
it
'creates a new schedule'
do
expect
{
go
}
expect
{
post
:create
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
schedule:
schedule
}
.
to
change
{
Ci
::
PipelineSchedule
.
count
}.
by
(
1
)
.
to
change
{
Ci
::
PipelineSchedule
.
count
}.
by
(
1
)
.
and
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
1
)
.
and
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
1
)
...
@@ -106,7 +97,7 @@ describe Projects::PipelineSchedulesController do
...
@@ -106,7 +97,7 @@ describe Projects::PipelineSchedulesController do
context
'when the same key has already been persisted'
do
context
'when the same key has already been persisted'
do
it
'returns an error that the key of variable is invaild'
do
it
'returns an error that the key of variable is invaild'
do
go
post
:create
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
schedule:
schedule
pipeline_schedule_variable
=
build
(
:ci_pipeline_schedule_variable
,
key:
'AAA'
,
pipeline_schedule:
assigns
(
:schedule
))
pipeline_schedule_variable
=
build
(
:ci_pipeline_schedule_variable
,
key:
'AAA'
,
pipeline_schedule:
assigns
(
:schedule
))
expect
(
pipeline_schedule_variable
).
to
be_invalid
expect
(
pipeline_schedule_variable
).
to
be_invalid
...
@@ -117,12 +108,12 @@ describe Projects::PipelineSchedulesController do
...
@@ -117,12 +108,12 @@ describe Projects::PipelineSchedulesController do
context
'when variables_attributes has one variable and key is empty'
do
context
'when variables_attributes has one variable and key is empty'
do
let
(
:schedule
)
do
let
(
:schedule
)
do
basic_param
.
merge
({
basic_param
.
merge
({
variables_attributes:
[{
key:
''
,
value:
'AAA123'
}
]
variables_attributes:
[
{
key:
''
,
value:
'AAA123'
}
]
})
})
end
end
it
'returns an error that the key of variable is invaild'
do
it
'returns an error that the key of variable is invaild'
do
expect
{
go
}
expect
{
post
:create
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
schedule:
schedule
}
.
to
change
{
Ci
::
PipelineSchedule
.
count
}.
by
(
0
)
.
to
change
{
Ci
::
PipelineSchedule
.
count
}.
by
(
0
)
.
and
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
0
)
.
and
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
0
)
...
@@ -133,12 +124,12 @@ describe Projects::PipelineSchedulesController do
...
@@ -133,12 +124,12 @@ describe Projects::PipelineSchedulesController do
context
'when variables_attributes has two variables and unique'
do
context
'when variables_attributes has two variables and unique'
do
let
(
:schedule
)
do
let
(
:schedule
)
do
basic_param
.
merge
({
basic_param
.
merge
({
variables_attributes:
[{
key:
'AAA'
,
value:
'AAA123'
},
{
key:
'BBB'
,
value:
'BBB123'
}
]
variables_attributes:
[
{
key:
'AAA'
,
value:
'AAA123'
},
{
key:
'BBB'
,
value:
'BBB123'
}
]
})
})
end
end
it
'creates a new schedule'
do
it
'creates a new schedule'
do
expect
{
go
}
expect
{
post
:create
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
schedule:
schedule
}
.
to
change
{
Ci
::
PipelineSchedule
.
count
}.
by
(
1
)
.
to
change
{
Ci
::
PipelineSchedule
.
count
}.
by
(
1
)
.
and
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
2
)
.
and
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
2
)
...
@@ -153,12 +144,12 @@ describe Projects::PipelineSchedulesController do
...
@@ -153,12 +144,12 @@ describe Projects::PipelineSchedulesController do
context
'when variables_attributes has two variables and duplicted'
do
context
'when variables_attributes has two variables and duplicted'
do
let
(
:schedule
)
do
let
(
:schedule
)
do
basic_param
.
merge
({
basic_param
.
merge
({
variables_attributes:
[{
key:
'AAA'
,
value:
'AAA123'
},
{
key:
'AAA'
,
value:
'BBB123'
}
]
variables_attributes:
[
{
key:
'AAA'
,
value:
'AAA123'
},
{
key:
'AAA'
,
value:
'BBB123'
}
]
})
})
end
end
it
'returns an error that the keys of variable are duplicated'
do
it
'returns an error that the keys of variable are duplicated'
do
expect
{
go
}
expect
{
post
:create
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
schedule:
schedule
}
.
to
change
{
Ci
::
PipelineSchedule
.
count
}.
by
(
0
)
.
to
change
{
Ci
::
PipelineSchedule
.
count
}.
by
(
0
)
.
and
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
0
)
.
and
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
0
)
...
@@ -167,47 +158,28 @@ describe Projects::PipelineSchedulesController do
...
@@ -167,47 +158,28 @@ describe Projects::PipelineSchedulesController do
end
end
end
end
describe
'security'
do
let
(
:schedule
)
{
{
description:
'aaaaaaaa'
,
cron:
'0 4 * * *'
,
cron_timezone:
'UTC'
,
ref:
'master'
,
active:
'1'
}
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:admin
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:owner
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:master
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:developer
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:reporter
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:guest
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:user
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:external
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:visitor
)
}
end
def
go
post
:create
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
schedule:
schedule
end
end
describe
'PUT #update'
do
describe
'PUT #update'
do
describe
'functionality'
do
set
(
:user
)
{
create
(
:user
)
}
let!
(
:pipeline_schedule
)
{
create
(
:ci_pipeline_schedule
,
project:
project
,
owner:
user
)
}
before
do
before
do
create
(
:user
).
tap
do
|
user
|
project
.
add_developer
(
user
)
project
.
add_developer
(
user
)
sign_in
(
user
)
sign_in
(
user
)
end
end
end
context
'when a pipeline schedule has no variables'
do
let
(
:basic_param
)
do
let
(
:basic_param
)
do
{
description:
'updated_desc'
,
cron:
'0 1 * * *'
,
cron_timezone:
'UTC'
,
ref:
'patch-x'
,
active:
'1'
}
{
description:
'updated_desc'
,
cron:
'0 1 * * *'
,
cron_timezone:
'UTC'
,
ref:
'patch-x'
,
active:
'1'
}
end
end
context
'when a pipeline schedule has no variables'
do
context
'when params do not include variables'
do
context
'when params do not include variables'
do
let
(
:schedule
)
{
basic_param
}
let
(
:schedule
)
{
basic_param
}
it
'updates only scheduled pipeline attributes'
do
it
'updates only scheduled pipeline attributes'
do
go
put
:update
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
,
schedule:
schedule
pipeline_schedule
.
reload
pipeline_schedule
.
reload
expect
(
response
).
to
have_http_status
(
:found
)
expect
(
response
).
to
have_http_status
(
:found
)
expect
(
pipeline_schedule
.
description
).
to
eq
(
'updated_desc'
)
expect
(
pipeline_schedule
.
description
).
to
eq
(
'updated_desc'
)
expect
(
pipeline_schedule
.
cron
).
to
eq
(
'0 1 * * *'
)
expect
(
pipeline_schedule
.
cron
).
to
eq
(
'0 1 * * *'
)
...
@@ -221,14 +193,18 @@ describe Projects::PipelineSchedulesController do
...
@@ -221,14 +193,18 @@ describe Projects::PipelineSchedulesController do
context
'when params include one variable'
do
context
'when params include one variable'
do
let
(
:schedule
)
do
let
(
:schedule
)
do
basic_param
.
merge
({
basic_param
.
merge
({
variables_attributes:
[{
key:
'AAA'
,
value:
'AAA123'
}
]
variables_attributes:
[
{
key:
'AAA'
,
value:
'AAA123'
}
]
})
})
end
end
it
'inserts new variable to the pipeline schedule'
do
it
'inserts new variable to the pipeline schedule'
do
expect
{
go
}.
to
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
1
)
expect
do
put
:update
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
,
schedule:
schedule
end
.
to
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
1
)
pipeline_schedule
.
reload
pipeline_schedule
.
reload
expect
(
response
).
to
have_http_status
(
:found
)
expect
(
response
).
to
have_http_status
(
:found
)
expect
(
pipeline_schedule
.
variables
.
last
.
key
).
to
eq
(
'AAA'
)
expect
(
pipeline_schedule
.
variables
.
last
.
key
).
to
eq
(
'AAA'
)
expect
(
pipeline_schedule
.
variables
.
last
.
value
).
to
eq
(
'AAA123'
)
expect
(
pipeline_schedule
.
variables
.
last
.
value
).
to
eq
(
'AAA123'
)
...
@@ -238,14 +214,18 @@ describe Projects::PipelineSchedulesController do
...
@@ -238,14 +214,18 @@ describe Projects::PipelineSchedulesController do
context
'when params include two unique variables'
do
context
'when params include two unique variables'
do
let
(
:schedule
)
do
let
(
:schedule
)
do
basic_param
.
merge
({
basic_param
.
merge
({
variables_attributes:
[{
key:
'AAA'
,
value:
'AAA123'
},
{
key:
'BBB'
,
value:
'BBB123'
}
]
variables_attributes:
[
{
key:
'AAA'
,
value:
'AAA123'
},
{
key:
'BBB'
,
value:
'BBB123'
}
]
})
})
end
end
it
'inserts two new variables to the pipeline schedule'
do
it
'inserts two new variables to the pipeline schedule'
do
expect
{
go
}.
to
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
2
)
expect
do
put
:update
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
,
schedule:
schedule
end
.
to
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
2
)
pipeline_schedule
.
reload
pipeline_schedule
.
reload
expect
(
response
).
to
have_http_status
(
:found
)
expect
(
response
).
to
have_http_status
(
:found
)
expect
(
pipeline_schedule
.
variables
.
first
.
key
).
to
eq
(
'AAA'
)
expect
(
pipeline_schedule
.
variables
.
first
.
key
).
to
eq
(
'AAA'
)
expect
(
pipeline_schedule
.
variables
.
first
.
value
).
to
eq
(
'AAA123'
)
expect
(
pipeline_schedule
.
variables
.
first
.
value
).
to
eq
(
'AAA123'
)
...
@@ -257,7 +237,7 @@ describe Projects::PipelineSchedulesController do
...
@@ -257,7 +237,7 @@ describe Projects::PipelineSchedulesController do
context
'when params include two duplicated variables'
do
context
'when params include two duplicated variables'
do
let
(
:schedule
)
do
let
(
:schedule
)
do
basic_param
.
merge
({
basic_param
.
merge
({
variables_attributes:
[{
key:
'AAA'
,
value:
'AAA123'
},
{
key:
'AAA'
,
value:
'BBB123'
}
]
variables_attributes:
[
{
key:
'AAA'
,
value:
'AAA123'
},
{
key:
'AAA'
,
value:
'BBB123'
}
]
})
})
end
end
...
@@ -271,22 +251,20 @@ describe Projects::PipelineSchedulesController do
...
@@ -271,22 +251,20 @@ describe Projects::PipelineSchedulesController do
end
end
context
'when a pipeline schedule has one variable'
do
context
'when a pipeline schedule has one variable'
do
let
(
:basic_param
)
do
{
description:
'updated_desc'
,
cron:
'0 1 * * *'
,
cron_timezone:
'UTC'
,
ref:
'patch-x'
,
active:
'1'
}
end
let!
(
:pipeline_schedule_variable
)
do
let!
(
:pipeline_schedule_variable
)
do
create
(
:ci_pipeline_schedule_variable
,
create
(
:ci_pipeline_schedule_variable
,
key:
'CCC'
,
key:
'CCC'
,
pipeline_schedule:
pipeline_schedule
)
pipeline_schedule:
pipeline_schedule
)
end
end
context
'when params do not include variables'
do
context
'when params do not include variables'
do
let
(
:schedule
)
{
basic_param
}
let
(
:schedule
)
{
basic_param
}
it
'updates only scheduled pipeline attributes'
do
it
'updates only scheduled pipeline attributes'
do
go
put
:update
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
,
schedule:
schedule
pipeline_schedule
.
reload
pipeline_schedule
.
reload
expect
(
response
).
to
have_http_status
(
:found
)
expect
(
response
).
to
have_http_status
(
:found
)
expect
(
pipeline_schedule
.
description
).
to
eq
(
'updated_desc'
)
expect
(
pipeline_schedule
.
description
).
to
eq
(
'updated_desc'
)
expect
(
pipeline_schedule
.
cron
).
to
eq
(
'0 1 * * *'
)
expect
(
pipeline_schedule
.
cron
).
to
eq
(
'0 1 * * *'
)
...
@@ -302,14 +280,16 @@ describe Projects::PipelineSchedulesController do
...
@@ -302,14 +280,16 @@ describe Projects::PipelineSchedulesController do
context
'when adds a new variable'
do
context
'when adds a new variable'
do
let
(
:schedule
)
do
let
(
:schedule
)
do
basic_param
.
merge
({
basic_param
.
merge
({
variables_attributes:
[
{
key:
'AAA'
,
value:
'AAA123'
}]
variables_attributes:
[
{
key:
'AAA'
,
value:
'AAA123'
}]
})
})
end
end
it
'adds the new variable'
do
it
'adds the new variable'
do
expect
{
go
}.
to
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
1
)
expect
do
put
:update
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
,
schedule:
schedule
end
.
to
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
1
)
pipeline_schedule
.
reload
expect
(
pipeline_schedule
.
variables
.
last
.
key
).
to
eq
(
'AAA'
)
expect
(
pipeline_schedule
.
variables
.
last
.
key
).
to
eq
(
'AAA'
)
end
end
end
end
...
@@ -317,14 +297,18 @@ describe Projects::PipelineSchedulesController do
...
@@ -317,14 +297,18 @@ describe Projects::PipelineSchedulesController do
context
'when updates a variable'
do
context
'when updates a variable'
do
let
(
:schedule
)
do
let
(
:schedule
)
do
basic_param
.
merge
({
basic_param
.
merge
({
variables_attributes:
[{
id:
pipeline_schedule_variable
.
id
,
value:
'new_value'
}
]
variables_attributes:
[
{
id:
pipeline_schedule_variable
.
id
,
value:
'new_value'
}
]
})
})
end
end
it
'updates the variable'
do
it
'updates the variable'
do
expect
{
go
}.
not_to
change
{
Ci
::
PipelineScheduleVariable
.
count
}
expect
do
put
:update
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
,
schedule:
schedule
end
.
not_to
change
{
Ci
::
PipelineScheduleVariable
.
count
}
pipeline_schedule_variable
.
reload
pipeline_schedule_variable
.
reload
expect
(
pipeline_schedule_variable
.
value
).
to
eq
(
'new_value'
)
expect
(
pipeline_schedule_variable
.
value
).
to
eq
(
'new_value'
)
end
end
end
end
...
@@ -332,145 +316,161 @@ describe Projects::PipelineSchedulesController do
...
@@ -332,145 +316,161 @@ describe Projects::PipelineSchedulesController do
context
'when deletes a variable'
do
context
'when deletes a variable'
do
let
(
:schedule
)
do
let
(
:schedule
)
do
basic_param
.
merge
({
basic_param
.
merge
({
variables_attributes:
[{
id:
pipeline_schedule_variable
.
id
,
_destroy:
true
}
]
variables_attributes:
[
{
id:
pipeline_schedule_variable
.
id
,
_destroy:
true
}
]
})
})
end
end
it
'delete the existsed variable'
do
it
'delete the existsed variable'
do
expect
{
go
}.
to
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
-
1
)
expect
do
put
:update
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
,
schedule:
schedule
end
.
to
change
{
Ci
::
PipelineScheduleVariable
.
count
}.
by
(
-
1
)
end
end
end
end
end
end
end
end
end
end
describe
'security'
do
describe
'GET edit'
do
let
(
:schedule
)
{
{
description:
'updated_desc'
}
}
context
'TODO: integrate to bottom'
do
let
(
:user
)
{
create
(
:user
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:admin
)
}
before
do
it
{
expect
{
go
}.
to
be_allowed_for
(
:owner
).
of
(
project
)
}
project
.
add_master
(
user
)
it
{
expect
{
go
}.
to
be_allowed_for
(
:master
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:developer
).
of
(
project
).
own
([
pipeline_schedule
])
}
sign_in
(
user
)
it
{
expect
{
go
}.
to
be_denied_for
(
:reporter
).
of
(
project
)
}
end
it
{
expect
{
go
}.
to
be_denied_for
(
:guest
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:user
)
}
it
'loads the pipeline schedule'
do
it
{
expect
{
go
}.
to
be_denied_for
(
:external
)
}
get
:edit
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
.
id
it
{
expect
{
go
}.
to
be_denied_for
(
:visitor
)
}
expect
(
response
).
to
have_http_status
(
:ok
)
expect
(
assigns
(
:schedule
)).
to
eq
(
pipeline_schedule
)
end
end
context
'when a developer created a pipeline schedule'
do
context
'when a developer created a pipeline schedule'
do
let
(
:developer_1
)
{
create
(
:user
)
}
context
'when the developer edits'
do
let!
(
:pipeline_schedule
)
{
create
(
:ci_pipeline_schedule
,
project:
project
,
owner:
developer_1
)
}
it
'can edit variables'
do
# TODO:
end
end
before
do
context
'when other developers edit'
do
project
.
add_developer
(
developer_1
)
it
'can not edit variables'
do
# TODO:
end
end
end
it
{
expect
{
go
}.
to
be_allowed_for
(
developer_1
)
}
context
'when a master edits'
do
it
{
expect
{
go
}.
to
be_denied_for
(
:developer
).
of
(
project
)
}
it
'can edit variables'
do
it
{
expect
{
go
}.
to
be_allowed_for
(
:master
).
of
(
project
)
}
# TODO:
end
end
end
end
context
'when a master created a pipeline schedule'
do
context
'when a master created a pipeline schedule'
do
let
(
:master_1
)
{
create
(
:user
)
}
context
'when the master edits'
do
let!
(
:pipeline_schedule
)
{
create
(
:ci_pipeline_schedule
,
project:
project
,
owner:
master_1
)
}
it
'can edit variables'
do
# TODO:
before
do
end
project
.
add_master
(
master_1
)
end
end
it
{
expect
{
go
}.
to
be_allowed_for
(
master_1
)
}
context
'when other masters edit'
do
it
{
expect
{
go
}.
to
be_allowed_for
(
:master
).
of
(
project
)
}
it
'can edit variables'
do
it
{
expect
{
go
}.
to
be_denied_for
(
:developer
).
of
(
project
)
}
# TODO:
end
end
end
end
def
go
context
'when developers edit'
do
put
:update
,
namespace_id:
project
.
namespace
.
to_param
,
it
'can not edit variables'
do
project_id:
project
,
id:
pipeline_schedule
,
# TODO:
schedule:
schedule
end
end
end
end
end
end
describe
'GET #edit'
do
describe
'DELETE #destroy'
do
describe
'functionality'
do
set
(
:user
)
{
create
(
:user
)
}
let
(
:user
)
{
create
(
:user
)
}
context
'when a developer makes the request'
do
before
do
project
.
add_developer
(
user
)
sign_in
(
user
)
delete
:destroy
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
.
id
end
it
'does not delete the pipeline schedule'
do
expect
(
response
).
not_to
have_http_status
(
:ok
)
end
end
context
'when a master makes the request'
do
before
do
before
do
project
.
add_master
(
user
)
project
.
add_master
(
user
)
sign_in
(
user
)
sign_in
(
user
)
end
end
it
'loads the pipeline schedule'
do
it
'destroys the pipeline schedule'
do
get
:edit
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
.
id
expect
do
delete
:destroy
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
.
id
end
.
to
change
{
project
.
pipeline_schedules
.
count
}.
by
(
-
1
)
expect
(
response
).
to
have_http_status
(
:ok
)
expect
(
response
).
to
have_http_status
(
302
)
expect
(
assigns
(
:schedule
)).
to
eq
(
pipeline_schedule
)
end
end
end
end
end
describe
'security'
do
describe
'security'
do
include
AccessMatchersForController
describe
'GET edit'
do
it
{
expect
{
go
}.
to
be_allowed_for
(
:admin
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:admin
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:owner
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:owner
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:master
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:master
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:developer
).
of
(
project
)
.
own
([
pipeline_schedule
])
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:developer
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:reporter
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:reporter
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:guest
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:guest
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:user
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:user
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:external
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:external
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:visitor
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:visitor
)
}
end
def
go
def
go
get
:edit
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
.
id
get
:edit
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
.
id
end
end
end
end
describe
'GET #take_ownership'
do
describe
'GET take_ownership'
do
describe
'security'
do
it
{
expect
{
go
}.
to
be_allowed_for
(
:admin
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:admin
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:owner
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:owner
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:master
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:master
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:developer
).
of
(
project
)
.
own
([
pipeline_schedule
])
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:developer
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:reporter
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:reporter
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:guest
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:guest
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:user
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:user
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:external
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:external
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:visitor
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:visitor
)
}
end
def
go
def
go
post
:take_ownership
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
.
id
post
:take_ownership
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
.
id
end
end
end
end
describe
'DELETE #destroy'
do
describe
'PUT update'
do
set
(
:user
)
{
create
(
:user
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:admin
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:owner
).
of
(
project
)
}
context
'when a developer makes the request'
do
it
{
expect
{
go
}.
to
be_allowed_for
(
:master
).
of
(
project
)
}
before
do
it
{
expect
{
go
}.
to
be_allowed_for
(
:developer
).
of
(
project
)
}
project
.
add_developer
(
user
)
it
{
expect
{
go
}.
to
be_denied_for
(
:reporter
).
of
(
project
)
}
sign_in
(
user
)
it
{
expect
{
go
}.
to
be_denied_for
(
:guest
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:user
)
}
delete
:destroy
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
.
id
it
{
expect
{
go
}.
to
be_denied_for
(
:external
)
}
end
it
{
expect
{
go
}.
to
be_denied_for
(
:visitor
)
}
it
'does not delete the pipeline schedule'
do
expect
(
response
).
not_to
have_http_status
(
:ok
)
end
end
context
'when a master makes the request'
do
before
do
project
.
add_master
(
user
)
sign_in
(
user
)
end
it
'destroys the pipeline schedule'
do
expect
do
delete
:destroy
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
.
id
end
.
to
change
{
project
.
pipeline_schedules
.
count
}.
by
(
-
1
)
expect
(
response
).
to
have_http_status
(
302
)
def
go
put
:update
,
namespace_id:
project
.
namespace
.
to_param
,
project_id:
project
,
id:
pipeline_schedule
.
id
,
schedule:
{
description:
'a'
}
end
end
end
end
end
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment