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
b01c8aa3
Commit
b01c8aa3
authored
Jun 03, 2016
by
Enrico Zini
Browse files
Tested process_assign_am
parent
fb6d5d4b
Changes
6
Hide whitespace changes
Inline
Side-by-side
process/models.py
View file @
b01c8aa3
...
@@ -37,6 +37,7 @@ class ProcessVisitorPermissions(bmodels.PersonVisitorPermissions):
...
@@ -37,6 +37,7 @@ class ProcessVisitorPermissions(bmodels.PersonVisitorPermissions):
self
.
process_frozen
=
self
.
process
.
frozen_by
is
not
None
self
.
process_frozen
=
self
.
process
.
frozen_by
is
not
None
self
.
process_approved
=
self
.
process
.
approved_by
is
not
None
self
.
process_approved
=
self
.
process
.
approved_by
is
not
None
self
.
process_has_am_ok
=
self
.
process
.
requirements
.
filter
(
type
=
"am_ok"
).
exists
()
self
.
current_am_assignment
=
self
.
process
.
current_am_assignment
self
.
current_am_assignment
=
self
.
process
.
current_am_assignment
if
self
.
current_am_assignment
is
not
None
:
if
self
.
current_am_assignment
is
not
None
:
self
.
is_current_am
=
self
.
current_am_assignment
.
am
.
person
==
self
.
visitor
self
.
is_current_am
=
self
.
current_am_assignment
.
am
.
person
==
self
.
visitor
...
@@ -54,6 +55,11 @@ class ProcessVisitorPermissions(bmodels.PersonVisitorPermissions):
...
@@ -54,6 +55,11 @@ class ProcessVisitorPermissions(bmodels.PersonVisitorPermissions):
if
not
self
.
process
.
closed
:
if
not
self
.
process
.
closed
:
if
not
self
.
process_frozen
:
if
not
self
.
process_frozen
:
self
.
add
(
"proc_freeze"
)
self
.
add
(
"proc_freeze"
)
if
self
.
process_has_am_ok
:
if
self
.
current_am_assignment
:
self
.
add
(
"am_unassign"
)
else
:
self
.
add
(
"am_assign"
)
elif
self
.
process_approved
:
elif
self
.
process_approved
:
self
.
add
(
"proc_unapprove"
)
self
.
add
(
"proc_unapprove"
)
else
:
else
:
...
@@ -72,6 +78,8 @@ class ProcessVisitorPermissions(bmodels.PersonVisitorPermissions):
...
@@ -72,6 +78,8 @@ class ProcessVisitorPermissions(bmodels.PersonVisitorPermissions):
if
self
.
is_current_am
:
if
self
.
is_current_am
:
self
.
add
(
"fd_comments"
)
self
.
add
(
"fd_comments"
)
self
.
add
(
"view_private_log"
)
self
.
add
(
"view_private_log"
)
if
not
self
.
process_frozen
:
self
.
add
(
"am_unassign"
)
class
RequirementVisitorPermissions
(
ProcessVisitorPermissions
):
class
RequirementVisitorPermissions
(
ProcessVisitorPermissions
):
...
...
process/tests/test_amassign.py
0 → 100644
View file @
b01c8aa3
# coding: utf8
from
__future__
import
print_function
from
__future__
import
absolute_import
from
__future__
import
division
from
__future__
import
unicode_literals
from
django.test
import
TestCase
from
django.core.urlresolvers
import
reverse
from
django.utils.timezone
import
now
from
backend
import
const
from
backend
import
models
as
bmodels
from
backend.unittest
import
PersonFixtureMixin
import
process.models
as
pmodels
from
mock
import
patch
from
.common
import
ProcessFixtureMixin
class
TestProcessAMAssign
(
ProcessFixtureMixin
,
TestCase
):
@
classmethod
def
setUpClass
(
cls
):
super
(
TestProcessAMAssign
,
cls
).
setUpClass
()
cls
.
persons
.
create
(
"app"
,
status
=
const
.
STATUS_DC
)
cls
.
processes
.
create
(
"app"
,
person
=
cls
.
persons
.
app
,
applying_for
=
const
.
STATUS_DD_U
,
fd_comment
=
"test"
)
cls
.
persons
.
create
(
"am"
,
status
=
const
.
STATUS_DD_NU
)
cls
.
ams
.
create
(
"am"
,
person
=
cls
.
persons
.
am
)
cls
.
visitor
=
cls
.
persons
.
dc
def
test_success
(
self
):
with
patch
.
object
(
pmodels
.
Requirement
,
"permissions_of"
,
return_value
=
{
"am_assign"
}):
client
=
self
.
make_test_client
(
self
.
visitor
)
response
=
client
.
get
(
reverse
(
"process_assign_am"
,
args
=
[
self
.
processes
.
app
.
pk
]))
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
processes
.
app
.
refresh_from_db
()
self
.
assertIsNone
(
self
.
processes
.
app
.
current_am_assignment
)
response
=
client
.
post
(
reverse
(
"process_assign_am"
,
args
=
[
self
.
processes
.
app
.
pk
]),
data
=
{
"am"
:
self
.
persons
.
am
.
lookup_key
})
self
.
assertRedirectMatches
(
response
,
reverse
(
"process_req_am_ok"
,
args
=
[
self
.
processes
.
app
.
pk
]))
self
.
processes
.
app
.
refresh_from_db
()
assignment
=
self
.
processes
.
app
.
current_am_assignment
self
.
assertIsNotNone
(
assignment
)
self
.
assertEqual
(
assignment
.
process
,
self
.
processes
.
app
)
self
.
assertEqual
(
assignment
.
am
,
self
.
ams
.
am
)
self
.
assertEqual
(
assignment
.
paused
,
False
)
self
.
assertEqual
(
assignment
.
assigned_by
,
self
.
visitor
)
self
.
assertIsNotNone
(
assignment
.
assigned_time
)
self
.
assertIsNone
(
assignment
.
unassigned_by
)
self
.
assertIsNone
(
assignment
.
unassigned_time
)
def
test_forbidden
(
self
):
with
patch
.
object
(
pmodels
.
Requirement
,
"permissions_of"
,
return_value
=
set
()):
client
=
self
.
make_test_client
(
self
.
visitor
)
response
=
client
.
get
(
reverse
(
"process_assign_am"
,
args
=
[
self
.
processes
.
app
.
pk
]))
self
.
assertPermissionDenied
(
response
)
self
.
processes
.
app
.
refresh_from_db
()
self
.
assertIsNone
(
self
.
processes
.
app
.
current_am_assignment
)
response
=
client
.
post
(
reverse
(
"process_assign_am"
,
args
=
[
self
.
processes
.
app
.
pk
]),
data
=
{
"am"
:
self
.
persons
.
am
.
lookup_key
})
self
.
assertPermissionDenied
(
response
)
self
.
processes
.
app
.
refresh_from_db
()
self
.
assertIsNone
(
self
.
processes
.
app
.
current_am_assignment
)
process/tests/test_perms.py
View file @
b01c8aa3
...
@@ -27,7 +27,7 @@ class ProcExpected(object):
...
@@ -27,7 +27,7 @@ class ProcExpected(object):
self
.
proc
.
set
(
"app dd_nu dd_u activeam fd dam"
,
"update_keycheck view_person_audit_log"
)
self
.
proc
.
set
(
"app dd_nu dd_u activeam fd dam"
,
"update_keycheck view_person_audit_log"
)
self
.
proc
.
patch
(
"activeam fd dam app"
,
"+edit_bio +edit_ldap +view_mbox +view_private_log"
)
self
.
proc
.
patch
(
"activeam fd dam app"
,
"+edit_bio +edit_ldap +view_mbox +view_private_log"
)
self
.
proc
.
patch
(
"fd dam app"
,
"+request_new_status"
)
self
.
proc
.
patch
(
"fd dam app"
,
"+request_new_status"
)
self
.
proc
.
patch
(
"fd dam"
,
"+proc_freeze +fd_comments"
)
self
.
proc
.
patch
(
"fd dam"
,
"+proc_freeze +fd_comments
+am_assign
"
)
self
.
proc
.
patch
(
"dc dc_ga dm dm_ga dd_nu dd_u dd_e dd_r activeam fd dam app"
,
"+add_log"
)
self
.
proc
.
patch
(
"dc dc_ga dm dm_ga dd_nu dd_u dd_e dd_r activeam fd dam app"
,
"+add_log"
)
self
.
intent
.
patch
(
"fd dam app"
,
"+edit_statements"
)
self
.
intent
.
patch
(
"fd dam app"
,
"+edit_statements"
)
self
.
intent
.
patch
(
"activeam fd dam dd_nu dd_u"
,
"+req_approve"
)
self
.
intent
.
patch
(
"activeam fd dam dd_nu dd_u"
,
"+req_approve"
)
...
@@ -46,12 +46,13 @@ class ProcExpected(object):
...
@@ -46,12 +46,13 @@ class ProcExpected(object):
self
.
am_ok
.
patch
(
"fd dam"
,
"+edit_statements +req_approve"
)
self
.
am_ok
.
patch
(
"fd dam"
,
"+edit_statements +req_approve"
)
def
patch_generic_process_am_assigned
(
self
):
def
patch_generic_process_am_assigned
(
self
):
self
.
proc
.
patch
(
"am"
,
"+fd_comments"
)
self
.
proc
.
patch
(
"fd dam"
,
"-am_assign +am_unassign"
)
self
.
proc
.
patch
(
"am"
,
"+fd_comments +am_unassign"
)
self
.
am_ok
.
patch
(
"am"
,
"+edit_statements"
)
self
.
am_ok
.
patch
(
"am"
,
"+edit_statements"
)
self
.
am_ok
.
patch
(
"activeam"
,
"+req_approve"
)
self
.
am_ok
.
patch
(
"activeam"
,
"+req_approve"
)
def
patch_generic_process_frozen
(
self
):
def
patch_generic_process_frozen
(
self
):
self
.
proc
.
patch
(
"fd dam"
,
"-proc_freeze +proc_unfreeze +proc_approve"
)
self
.
proc
.
patch
(
"fd dam"
,
"-proc_freeze +proc_unfreeze +proc_approve
-am_assign -am_unassign
"
)
self
.
proc
.
patch
(
"activeam app"
,
"-edit_bio -edit_ldap"
)
self
.
proc
.
patch
(
"activeam app"
,
"-edit_bio -edit_ldap"
)
self
.
intent
.
patch
(
"app"
,
"-edit_statements"
)
self
.
intent
.
patch
(
"app"
,
"-edit_statements"
)
self
.
intent
.
patch
(
"activeam dd_nu dd_u"
,
"-req_approve"
)
self
.
intent
.
patch
(
"activeam dd_nu dd_u"
,
"-req_approve"
)
...
@@ -63,7 +64,7 @@ class ProcExpected(object):
...
@@ -63,7 +64,7 @@ class ProcExpected(object):
if
self
.
keycheck
is
not
None
:
if
self
.
keycheck
is
not
None
:
pass
pass
if
self
.
am_ok
is
not
None
:
if
self
.
am_ok
is
not
None
:
self
.
proc
.
patch
(
"am"
,
"-edit_bio -edit_ldap"
)
self
.
proc
.
patch
(
"am"
,
"-edit_bio -edit_ldap
-am_unassign
"
)
self
.
intent
.
patch
(
"am"
,
"-req_approve"
)
self
.
intent
.
patch
(
"am"
,
"-req_approve"
)
self
.
sc_dmup
.
patch
(
"am"
,
"-req_approve"
)
self
.
sc_dmup
.
patch
(
"am"
,
"-req_approve"
)
self
.
advocate
.
patch
(
"am"
,
"-edit_statements -req_approve"
)
self
.
advocate
.
patch
(
"am"
,
"-edit_statements -req_approve"
)
...
@@ -157,7 +158,7 @@ class TestVisitApplicant(ProcessFixtureMixin, TestCase):
...
@@ -157,7 +158,7 @@ class TestVisitApplicant(ProcessFixtureMixin, TestCase):
self
.
processes
.
create
(
"app"
,
person
=
self
.
persons
.
app
,
applying_for
=
const
.
STATUS_DC_GA
)
self
.
processes
.
create
(
"app"
,
person
=
self
.
persons
.
app
,
applying_for
=
const
.
STATUS_DC_GA
)
expected
.
patch_generic_process_started
()
expected
.
patch_generic_process_started
()
expected
.
starts
.
patch
(
"-dc_ga"
)
expected
.
starts
.
patch
(
"-dc_ga"
)
expected
.
proc
.
patch
(
"fd dam"
,
"+edit_ldap"
)
expected
.
proc
.
patch
(
"fd dam"
,
"+edit_ldap
-am_assign
"
)
expected
.
proc
.
patch
(
"app"
,
"+edit_ldap"
)
expected
.
proc
.
patch
(
"app"
,
"+edit_ldap"
)
expected
.
advocate
.
patch
(
"dm dm_ga"
,
"+edit_statements"
)
expected
.
advocate
.
patch
(
"dm dm_ga"
,
"+edit_statements"
)
self
.
assertPerms
(
expected
)
self
.
assertPerms
(
expected
)
...
@@ -195,7 +196,7 @@ class TestVisitApplicant(ProcessFixtureMixin, TestCase):
...
@@ -195,7 +196,7 @@ class TestVisitApplicant(ProcessFixtureMixin, TestCase):
self
.
processes
.
create
(
"app"
,
person
=
self
.
persons
.
app
,
applying_for
=
const
.
STATUS_DM_GA
)
self
.
processes
.
create
(
"app"
,
person
=
self
.
persons
.
app
,
applying_for
=
const
.
STATUS_DM_GA
)
expected
.
patch_generic_process_started
()
expected
.
patch_generic_process_started
()
expected
.
starts
.
patch
(
"-dm_ga"
)
expected
.
starts
.
patch
(
"-dm_ga"
)
expected
.
proc
.
patch
(
"fd dam"
,
"+edit_ldap"
)
expected
.
proc
.
patch
(
"fd dam"
,
"+edit_ldap
-am_assign
"
)
expected
.
proc
.
patch
(
"app"
,
"+edit_ldap"
)
expected
.
proc
.
patch
(
"app"
,
"+edit_ldap"
)
self
.
assertPerms
(
expected
)
self
.
assertPerms
(
expected
)
...
@@ -230,7 +231,7 @@ class TestVisitApplicant(ProcessFixtureMixin, TestCase):
...
@@ -230,7 +231,7 @@ class TestVisitApplicant(ProcessFixtureMixin, TestCase):
self
.
processes
.
create
(
"app"
,
person
=
self
.
persons
.
app
,
applying_for
=
const
.
STATUS_DM
)
self
.
processes
.
create
(
"app"
,
person
=
self
.
persons
.
app
,
applying_for
=
const
.
STATUS_DM
)
expected
.
patch_generic_process_started
()
expected
.
patch_generic_process_started
()
expected
.
starts
.
patch
(
"-dm"
)
expected
.
starts
.
patch
(
"-dm"
)
expected
.
proc
.
patch
(
"fd dam"
,
"+edit_ldap"
)
expected
.
proc
.
patch
(
"fd dam"
,
"+edit_ldap
-am_assign
"
)
expected
.
proc
.
patch
(
"app"
,
"+edit_ldap"
)
expected
.
proc
.
patch
(
"app"
,
"+edit_ldap"
)
self
.
assertPerms
(
expected
)
self
.
assertPerms
(
expected
)
...
...
process/tests/test_statements.py
View file @
b01c8aa3
...
@@ -144,7 +144,3 @@ class TestProcessStatementRaw(ProcessFixtureMixin, TestCase):
...
@@ -144,7 +144,3 @@ class TestProcessStatementRaw(ProcessFixtureMixin, TestCase):
response
=
client
.
get
(
reverse
(
"process_statement_raw"
,
args
=
[
self
.
processes
.
app
.
pk
,
req_type
,
statement
.
pk
]))
response
=
client
.
get
(
reverse
(
"process_statement_raw"
,
args
=
[
self
.
processes
.
app
.
pk
,
req_type
,
statement
.
pk
]))
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
content
,
test_fpr1_signed_valid_text
)
self
.
assertEqual
(
response
.
content
,
test_fpr1_signed_valid_text
)
# TODO: url(r'^(?P<pk>\d+)/(?P<type>[^/]+)/statement/create$', views.StatementCreate.as_view(), name="process_statement_create"),
# TODO: url(r'^(?P<pk>\d+)/(?P<type>[^/]+)/statement/(?P<st>\d+)/delete$', views.StatementDelete.as_view(), name="process_statement_delete"),
# TODO: url(r'^(?P<pk>\d+)/(?P<type>[^/]+)/statement/(?P<st>\d+)/raw$', views.StatementRaw.as_view(), name="process_statement_raw"),
process/urls.py
View file @
b01c8aa3
...
@@ -20,7 +20,7 @@ urlpatterns = [
...
@@ -20,7 +20,7 @@ urlpatterns = [
url
(
r
'^(?P<pk>\d+)/(?P<type>[^/]+)/statement/create$'
,
views
.
StatementCreate
.
as_view
(),
name
=
"process_statement_create"
),
url
(
r
'^(?P<pk>\d+)/(?P<type>[^/]+)/statement/create$'
,
views
.
StatementCreate
.
as_view
(),
name
=
"process_statement_create"
),
url
(
r
'^(?P<pk>\d+)/(?P<type>[^/]+)/statement/(?P<st>\d+)/delete$'
,
views
.
StatementDelete
.
as_view
(),
name
=
"process_statement_delete"
),
url
(
r
'^(?P<pk>\d+)/(?P<type>[^/]+)/statement/(?P<st>\d+)/delete$'
,
views
.
StatementDelete
.
as_view
(),
name
=
"process_statement_delete"
),
url
(
r
'^(?P<pk>\d+)/(?P<type>[^/]+)/statement/(?P<st>\d+)/raw$'
,
views
.
StatementRaw
.
as_view
(),
name
=
"process_statement_raw"
),
url
(
r
'^(?P<pk>\d+)/(?P<type>[^/]+)/statement/(?P<st>\d+)/raw$'
,
views
.
StatementRaw
.
as_view
(),
name
=
"process_statement_raw"
),
url
(
r
'^(?P<pk>\d+)/assign_am$'
,
views
.
AssignAM
.
as_view
(),
name
=
"process_assign_am"
),
# TODO: test
url
(
r
'^(?P<pk>\d+)/assign_am$'
,
views
.
AssignAM
.
as_view
(),
name
=
"process_assign_am"
),
url
(
r
'^(?P<pk>\d+)/unassign_am$'
,
views
.
UnassignAM
.
as_view
(),
name
=
"process_unassign_am"
),
# TODO: test
url
(
r
'^(?P<pk>\d+)/unassign_am$'
,
views
.
UnassignAM
.
as_view
(),
name
=
"process_unassign_am"
),
# TODO: test
url
(
r
'^(?P<pk>\d+)/mailbox/download$'
,
views
.
MailArchive
.
as_view
(),
name
=
"process_mailbox_download"
),
# TODO: test
url
(
r
'^(?P<pk>\d+)/mailbox/download$'
,
views
.
MailArchive
.
as_view
(),
name
=
"process_mailbox_download"
),
# TODO: test
url
(
r
'^(?P<pk>\d+)/mailbox$'
,
views
.
DisplayMailArchive
.
as_view
(),
name
=
"process_mailbox_show"
),
# TODO: test
url
(
r
'^(?P<pk>\d+)/mailbox$'
,
views
.
DisplayMailArchive
.
as_view
(),
name
=
"process_mailbox_show"
),
# TODO: test
...
...
process/views.py
View file @
b01c8aa3
...
@@ -209,6 +209,7 @@ class ReqAM(RequirementMixin, TemplateView):
...
@@ -209,6 +209,7 @@ class ReqAM(RequirementMixin, TemplateView):
class
AssignAM
(
RequirementMixin
,
TemplateView
):
class
AssignAM
(
RequirementMixin
,
TemplateView
):
require_visit_perms
=
"am_assign"
type
=
"am_ok"
type
=
"am_ok"
template_name
=
"process/assign_am.html"
template_name
=
"process/assign_am.html"
...
@@ -246,6 +247,7 @@ class AssignAM(RequirementMixin, TemplateView):
...
@@ -246,6 +247,7 @@ class AssignAM(RequirementMixin, TemplateView):
class
UnassignAM
(
RequirementMixin
,
View
):
class
UnassignAM
(
RequirementMixin
,
View
):
require_visit_perms
=
"am_unassign"
type
=
"am_ok"
type
=
"am_ok"
def
post
(
self
,
request
,
*
args
,
**
kw
):
def
post
(
self
,
request
,
*
args
,
**
kw
):
current
=
self
.
process
.
current_am_assignment
current
=
self
.
process
.
current_am_assignment
...
...
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