Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Debian New Member Process
nm.debian.org
Commits
74255108
Commit
74255108
authored
Jun 03, 2016
by
Enrico Zini
Browse files
Converted test_process_req to mocking permissions
parent
75d2c6aa
Changes
1
Hide whitespace changes
Inline
Side-by-side
process/tests/test_process_req.py
View file @
74255108
...
@@ -10,28 +10,35 @@ from backend import const
...
@@ -10,28 +10,35 @@ from backend import const
from
backend
import
models
as
bmodels
from
backend
import
models
as
bmodels
from
backend.unittest
import
PersonFixtureMixin
,
ExpectedSets
,
TestSet
,
PageElements
from
backend.unittest
import
PersonFixtureMixin
,
ExpectedSets
,
TestSet
,
PageElements
import
process.models
as
pmodels
import
process.models
as
pmodels
from
mock
import
patch
from
.common
import
(
ProcessFixtureMixin
,
get_all_process_types
,
from
.common
import
(
ProcessFixtureMixin
,
get_all_process_types
,
test_fingerprint1
,
test_fpr1_signed_valid_text
,
test_fingerprint1
,
test_fpr1_signed_valid_text
,
test_fingerprint2
,
test_fpr2_signed_valid_text
,
test_fingerprint2
,
test_fpr2_signed_valid_text
,
test_fingerprint3
,
test_fpr3_signed_valid_text
)
test_fingerprint3
,
test_fpr3_signed_valid_text
)
class
TestProcessReq
(
ProcessFixtureMixin
,
TestCase
):
class
TestProcessReqMixin
(
ProcessFixtureMixin
):
@
classmethod
req_type
=
None
def
__add_extra_tests__
(
cls
):
for
src
,
tgt
in
get_all_process_types
():
want_am
=
"am_ok"
in
pmodels
.
Process
.
objects
.
compute_requirements
(
src
,
tgt
)
visitors
=
[
None
,
"pending"
,
"dc"
,
"dc_ga"
,
"dm"
,
"dm_ga"
,
"dd_nu"
,
"dd_u"
,
"dd_e"
,
"dd_r"
,
"activeam"
,
"fd"
,
"dam"
,
"app"
]
if
want_am
:
visitors
.
append
(
"am"
)
for
visitor
in
visitors
:
if
want_am
:
cls
.
_add_method
(
cls
.
_test_perms
,
src
,
tgt
,
visitor
,
am
=
"dd_nu"
)
else
:
cls
.
_add_method
(
cls
.
_test_perms
,
src
,
tgt
,
visitor
)
@
classmethod
@
classmethod
def
setUpClass
(
cls
):
def
setUpClass
(
cls
):
super
(
TestProcessReq
,
cls
).
setUpClass
()
super
(
TestProcessReqMixin
,
cls
).
setUpClass
()
# Create a process with all requirements
cls
.
persons
.
create
(
"app"
,
status
=
const
.
STATUS_DC
)
cls
.
fingerprints
.
create
(
"app"
,
person
=
cls
.
persons
.
app
,
fpr
=
test_fingerprint1
,
is_active
=
True
,
audit_skip
=
True
)
cls
.
fingerprints
.
create
(
"dd_nu"
,
person
=
cls
.
persons
.
dd_nu
,
fpr
=
test_fingerprint2
,
is_active
=
True
,
audit_skip
=
True
)
cls
.
persons
.
create
(
"am"
,
status
=
const
.
STATUS_DD_NU
)
cls
.
fingerprints
.
create
(
"am"
,
person
=
cls
.
persons
.
am
,
fpr
=
test_fingerprint3
,
is_active
=
True
,
audit_skip
=
True
)
cls
.
ams
.
create
(
"am"
,
person
=
cls
.
persons
.
am
)
cls
.
processes
.
create
(
"app"
,
person
=
cls
.
persons
.
app
,
applying_for
=
const
.
STATUS_DD_U
,
fd_comment
=
"test"
)
pmodels
.
Statement
.
objects
.
create
(
requirement
=
cls
.
processes
.
app
.
requirements
.
get
(
type
=
"intent"
),
fpr
=
cls
.
fingerprints
.
app
,
statement
=
test_fpr1_signed_valid_text
,
uploaded_by
=
cls
.
persons
.
app
,
uploaded_time
=
now
())
pmodels
.
Statement
.
objects
.
create
(
requirement
=
cls
.
processes
.
app
.
requirements
.
get
(
type
=
"sc_dmup"
),
fpr
=
cls
.
fingerprints
.
app
,
statement
=
test_fpr1_signed_valid_text
,
uploaded_by
=
cls
.
persons
.
app
,
uploaded_time
=
now
())
pmodels
.
Statement
.
objects
.
create
(
requirement
=
cls
.
processes
.
app
.
requirements
.
get
(
type
=
"advocate"
),
fpr
=
cls
.
fingerprints
.
dd_nu
,
statement
=
test_fpr2_signed_valid_text
,
uploaded_by
=
cls
.
persons
.
dd_nu
,
uploaded_time
=
now
())
pmodels
.
Statement
.
objects
.
create
(
requirement
=
cls
.
processes
.
app
.
requirements
.
get
(
type
=
"am_ok"
),
fpr
=
cls
.
fingerprints
.
am
,
statement
=
test_fpr3_signed_valid_text
,
uploaded_by
=
cls
.
persons
.
am
,
uploaded_time
=
now
())
cls
.
visitor
=
cls
.
persons
.
dc
cls
.
page_elements
=
PageElements
()
cls
.
page_elements
=
PageElements
()
cls
.
page_elements
.
add_id
(
"log_public"
)
cls
.
page_elements
.
add_id
(
"log_public"
)
cls
.
page_elements
.
add_id
(
"log_private"
)
cls
.
page_elements
.
add_id
(
"log_private"
)
...
@@ -45,72 +52,65 @@ class TestProcessReq(ProcessFixtureMixin, TestCase):
...
@@ -45,72 +52,65 @@ class TestProcessReq(ProcessFixtureMixin, TestCase):
cls
.
page_elements_bytype
[
"am_ok"
].
add_id
(
"am_assign"
)
cls
.
page_elements_bytype
[
"am_ok"
].
add_id
(
"am_assign"
)
cls
.
page_elements_bytype
[
"am_ok"
].
add_id
(
"am_unassign"
)
cls
.
page_elements_bytype
[
"am_ok"
].
add_id
(
"am_unassign"
)
def
assertPageElements
(
self
,
response
,
visit_perms
):
cls
.
req
=
cls
.
processes
.
app
.
requirements
.
get
(
type
=
cls
.
req_type
)
def
assertPageElements
(
self
,
response
):
visit_perms
=
self
.
req
.
permissions_of
(
self
.
visitor
)
# Check page elements based on visit_perms
# Check page elements based on visit_perms
wanted
=
[]
wanted
=
[]
if
"add_log"
in
visit_perms
:
if
"add_log"
in
visit_perms
:
wanted
+=
[
"log_public"
,
"log_private"
]
wanted
+=
[
"log_public"
,
"log_private"
]
for
el
in
(
"req_approve"
,
"req_unapprove"
):
for
el
in
(
"req_approve"
,
"req_unapprove"
):
if
el
in
visit_perms
:
wanted
.
append
(
el
)
if
el
in
visit_perms
:
wanted
.
append
(
el
)
if
"edit_statements"
in
visit_perms
:
if
"edit_statements"
in
visit_perms
and
self
.
req
.
type
!=
"keycheck"
:
wanted
.
append
(
"statement_add"
)
wanted
.
append
(
"statement_add"
)
wanted
.
append
(
"statement_delete"
)
wanted
.
append
(
"statement_delete"
)
self
.
assertContainsElements
(
response
,
self
.
page_elements
,
*
wanted
)
self
.
assertContainsElements
(
response
,
self
.
page_elements
,
*
wanted
)
def
_test_requirement_generic
(
self
,
req
,
visitor
):
def
tryVisitingWithPerms
(
self
,
perms
):
client
=
self
.
make_test_client
(
visitor
)
client
=
self
.
make_test_client
(
self
.
visitor
)
response
=
client
.
get
(
req
.
get_absolute_url
())
with
patch
.
object
(
pmodels
.
Requirement
,
"permissions_of"
,
return_value
=
perms
):
self
.
assertEqual
(
response
.
status_code
,
200
)
response
=
client
.
get
(
self
.
req
.
get_absolute_url
())
visit_perms
=
req
.
permissions_of
(
self
.
persons
[
visitor
])
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertPageElements
(
response
,
visit_perms
)
self
.
assertPageElements
(
response
)
def
_test_requirement_intent
(
self
,
visitor
):
def
test_none
(
self
):
req
=
pmodels
.
Requirement
.
objects
.
get
(
process
=
self
.
processes
.
app
,
type
=
"intent"
)
self
.
tryVisitingWithPerms
(
set
())
pmodels
.
Statement
.
objects
.
create
(
requirement
=
req
,
fpr
=
self
.
fingerprints
.
app
,
statement
=
test_fpr1_signed_valid_text
,
uploaded_by
=
self
.
persons
.
app
,
uploaded_time
=
now
())
pmodels
.
AMAssignment
.
objects
.
create
(
process
=
self
.
processes
.
app
,
am
=
self
.
ams
.
am
,
assigned_by
=
self
.
persons
[
"fd"
],
assigned_time
=
now
())
self
.
_test_requirement_generic
(
req
,
visitor
)
self
.
tryVisitingWithPerms
(
set
())
def
_test_requirement_sc_dmup
(
self
,
visitor
):
def
test_add_log
(
self
):
req
=
pmodels
.
Requirement
.
objects
.
get
(
process
=
self
.
processes
.
app
,
type
=
"sc_dmup"
)
self
.
tryVisitingWithPerms
(
set
([
"add_log"
]))
pmodels
.
Statement
.
objects
.
create
(
requirement
=
req
,
fpr
=
self
.
fingerprints
.
app
,
statement
=
test_fpr1_signed_valid_text
,
uploaded_by
=
self
.
persons
.
app
,
uploaded_time
=
now
())
pmodels
.
AMAssignment
.
objects
.
create
(
process
=
self
.
processes
.
app
,
am
=
self
.
ams
.
am
,
assigned_by
=
self
.
persons
[
"fd"
],
assigned_time
=
now
())
self
.
_test_requirement_generic
(
req
,
visitor
)
self
.
tryVisitingWithPerms
(
set
([
"add_log"
]))
def
_test_requirement_advocate
(
self
,
visitor
):
def
test_req_approve
(
self
):
req
=
pmodels
.
Requirement
.
objects
.
get
(
process
=
self
.
processes
.
app
,
type
=
"advocate"
)
self
.
tryVisitingWithPerms
(
set
([
"req_approve"
]))
pmodels
.
Statement
.
objects
.
create
(
requirement
=
req
,
fpr
=
self
.
fingerprints
.
dd_nu
,
statement
=
test_fpr2_signed_valid_text
,
uploaded_by
=
self
.
persons
.
dd_nu
,
uploaded_time
=
now
())
pmodels
.
AMAssignment
.
objects
.
create
(
process
=
self
.
processes
.
app
,
am
=
self
.
ams
.
am
,
assigned_by
=
self
.
persons
[
"fd"
],
assigned_time
=
now
())
self
.
_test_requirement_generic
(
req
,
visitor
)
self
.
tryVisitingWithPerms
(
set
([
"req_approve"
]))
def
_test_requirement_keycheck
(
self
,
visitor
):
def
test_req_unapprove
(
self
):
req
=
pmodels
.
Requirement
.
objects
.
get
(
process
=
self
.
processes
.
app
,
type
=
"keycheck"
)
self
.
tryVisitingWithPerms
(
set
([
"req_unapprove"
]))
self
.
_test_requirement_generic
(
req
,
visitor
)
pmodels
.
AMAssignment
.
objects
.
create
(
process
=
self
.
processes
.
app
,
am
=
self
.
ams
.
am
,
assigned_by
=
self
.
persons
[
"fd"
],
assigned_time
=
now
())
self
.
tryVisitingWithPerms
(
set
([
"req_unapprove"
]))
def
_test_requirement_am_ok
(
self
,
visitor
):
req
=
pmodels
.
Requirement
.
objects
.
get
(
process
=
self
.
processes
.
app
,
type
=
"am_ok"
)
def
test_edit_statements
(
self
):
pmodels
.
Statement
.
objects
.
create
(
requirement
=
req
,
fpr
=
self
.
fingerprints
.
am
,
statement
=
test_fpr3_signed_valid_text
,
uploaded_by
=
self
.
persons
.
am
,
uploaded_time
=
now
())
self
.
tryVisitingWithPerms
(
set
([
"edit_statements"
]))
self
.
_test_requirement_generic
(
req
,
visitor
)
pmodels
.
AMAssignment
.
objects
.
create
(
process
=
self
.
processes
.
app
,
am
=
self
.
ams
.
am
,
assigned_by
=
self
.
persons
[
"fd"
],
assigned_time
=
now
())
self
.
tryVisitingWithPerms
(
set
([
"edit_statements"
]))
def
_test_perms
(
self
,
src
,
tgt
,
visitor
,
am
=
None
):
# Create process
self
.
persons
.
create
(
"app"
,
status
=
src
)
class
TestProcessReqIntent
(
TestProcessReqMixin
,
TestCase
):
self
.
fingerprints
.
create
(
"app"
,
person
=
self
.
persons
.
app
,
fpr
=
test_fingerprint1
,
is_active
=
True
,
audit_skip
=
True
)
req_type
=
"intent"
self
.
processes
.
create
(
"app"
,
person
=
self
.
persons
.
app
,
applying_for
=
tgt
,
fd_comment
=
"test"
)
self
.
fingerprints
.
create
(
"dd_nu"
,
person
=
self
.
persons
.
dd_nu
,
fpr
=
test_fingerprint2
,
is_active
=
True
,
audit_skip
=
True
)
class
TestProcessReqScDmup
(
TestProcessReqMixin
,
TestCase
):
if
am
is
not
None
:
req_type
=
"sc_dmup"
self
.
persons
.
create
(
"am"
,
status
=
am
)
self
.
fingerprints
.
create
(
"am"
,
person
=
self
.
persons
.
am
,
fpr
=
test_fingerprint3
,
is_active
=
True
,
audit_skip
=
True
)
class
TestProcessReqAdvocate
(
TestProcessReqMixin
,
TestCase
):
self
.
ams
.
create
(
"am"
,
person
=
self
.
persons
.
am
)
req_type
=
"advocate"
reqs
=
pmodels
.
Process
.
objects
.
compute_requirements
(
src
,
tgt
)
class
TestProcessReqAmOk
(
TestProcessReqMixin
,
TestCase
):
if
"intent"
in
reqs
:
self
.
_test_requirement_intent
(
visitor
)
req_type
=
"am_ok"
if
"sc_dmup"
in
reqs
:
self
.
_test_requirement_sc_dmup
(
visitor
)
if
"advocate"
in
reqs
:
self
.
_test_requirement_advocate
(
visitor
)
class
TestProcessReqKeycheck
(
TestProcessReqMixin
,
TestCase
):
if
"keycheck"
in
reqs
:
self
.
_test_requirement_keycheck
(
visitor
)
req_type
=
"keycheck"
if
"am_ok"
in
reqs
:
self
.
_test_requirement_am_ok
(
visitor
)
# Assign am and repeat visit
if
am
:
pmodels
.
AMAssignment
.
objects
.
create
(
process
=
self
.
processes
.
app
,
am
=
self
.
ams
.
am
,
assigned_by
=
self
.
persons
[
"fd"
],
assigned_time
=
now
())
if
"intent"
in
reqs
:
self
.
_test_requirement_intent
(
visitor
)
if
"sc_dmup"
in
reqs
:
self
.
_test_requirement_sc_dmup
(
visitor
)
if
"advocate"
in
reqs
:
self
.
_test_requirement_advocate
(
visitor
)
if
"keycheck"
in
reqs
:
self
.
_test_requirement_keycheck
(
visitor
)
if
"am_ok"
in
reqs
:
self
.
_test_requirement_am_ok
(
visitor
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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