def test_edit_self(self): #------------------------------------------------- # You have to be logged in to edit yourself #------------------------------------------------- self.assertState( 'GET/POST', EDIT_SELF_PATH, [ causes.person_not_logged_in, causes.valid_domain, ], [ effects.redirected('/person/login/', ssl = True), ] ) #------------------------------------------------- # You have to be using an account to edit yourself. #------------------------------------------------- self.assertState( 'GET/POST', EDIT_SELF_PATH, [ causes.invalid_domain, ], [ effects.status(404) ] ) #------------------------------------------------- # Show the form #------------------------------------------------- self.assertState( 'GET', EDIT_SELF_PATH, [ causes.person_logged_in, causes.valid_domain, ], [ effects.rendered('account/person_form.html'), effects.context('form', type = forms.BaseForm), effects.status(200), ] ) #------------------------------------------------- # Submitting invalid data shows the form #------------------------------------------------- self.assertState( 'POST', EDIT_SELF_PATH, [ causes.person_logged_in, causes.valid_domain, causes.params( first_name = 'mary', last_name = 'sue', email = '---', ), ], [ effects.rendered('account/person_form.html'), effects.context('form', type = forms.BaseForm), effects.status(200), ] ) #------------------------------------------------- # Submitting valid data changes the record. # But if you're not an admin, you can't edit your roles. #------------------------------------------------- self.assertState( 'POST', EDIT_SELF_PATH, [ causes.person_logged_in, causes.valid_domain, causes.params( first_name = 'mary', last_name = 'sue', email = '*****@*****.**', role_set = ['1', '13'], ), ], [ effects.person_has_password(1, 'password'), effects.person_does_not_have_role('account_admin', pk=1), effects.person_does_not_have_role('consultant', pk=1), effects.rendered('account/person_form.html'), effects.context('form', type = forms.BaseForm), effects.status(200), ] ) #------------------------------------------------- # Submitting valid data changes the record. # If your're an admin, you CAN edit your roles # with the exception that you CAN NOT remove your # own admin priveledges. #------------------------------------------------- self.assertState( 'POST', EDIT_SELF_PATH, [ causes.owner_logged_in, causes.valid_domain, causes.params( username = "******", first_name = 'mary', last_name = 'sue', email = '*****@*****.**', role_set = ['14'], ), ], [ effects.person_has_password(2, 'password'), effects.person_has_role('janitor', pk=2), effects.person_has_role('account_admin', pk=2), effects.redirected('/person/'), ] ) #------------------------------------------------- # If the user provides a new password, it will be changed #------------------------------------------------- self.assertState( 'POST', EDIT_SELF_PATH, [ causes.person_logged_in, causes.valid_domain, causes.params( username = '******', first_name = 'starr', last_name = 'horne', email = '*****@*****.**', new_password = '******', new_password_confirm = 'newone', ), ], [ effects.person_has_password(1, 'newone'),
def test_edit(self): security.check(self, EDIT_PATH) #------------------------------------------------- # Show the form #------------------------------------------------- self.assertState( 'GET', EDIT_PATH, [ causes.owner_logged_in, causes.valid_domain, ], [ effects.rendered('account/person_form.html'), effects.context('form', type = forms.BaseForm), effects.status(200), ] ) #------------------------------------------------- # If the person does not exist, 404 #------------------------------------------------- self.assertState( 'GET/POST', EDIT_PATH_INVALID, [ causes.owner_logged_in, causes.valid_domain, ], [ effects.status(404), ] ) #------------------------------------------------- # If the person does not belong to the account 404 #------------------------------------------------- self.assertState( 'GET/POST', EDIT_PATH_MISMATCH, [ causes.owner_logged_in, causes.valid_domain, ], [ effects.status(404), ] ) #------------------------------------------------- # If invalid input, show form #------------------------------------------------- self.assertState( 'POST', EDIT_PATH, [ causes.owner_logged_in, causes.valid_domain, causes.invalid_create_person_parameters, ], [ effects.rendered('account/person_form.html'), effects.context('form', type = forms.BaseForm), effects.form_errors('form'), effects.status(200), ] ) #------------------------------------------------- # If valid, save changes #------------------------------------------------- self.assertState( 'POST', EDIT_PATH, [ causes.alters(Person), causes.owner_logged_in, causes.valid_domain, causes.params( username = '******', new_password = '', new_password_confirm = '', first_name = 'bob', last_name = 'jones', email = '*****@*****.**', ), ], [ effects.field_value(Person, {'pk':1}, first_name = 'bob'), effects.person_has_password(1, 'password'), effects.redirected('/person/list/'), ] ) #------------------------------------------------- # If valid, save changes #------------------------------------------------- self.assertState( 'POST', EDIT_PATH, [ causes.alters(Person), causes.owner_logged_in, causes.valid_domain, causes.params( username = '******', new_password = '******', new_password_confirm = 'anewpassword', first_name = 'bob', last_name = 'jones', email = '*****@*****.**', ), ], [ effects.person_has_password(1, 'anewpassword'), effects.field_value(Person, {'pk':1}, first_name = 'bob'), effects.redirected('/person/list/'), ] ) #------------------------------------------------- # Edit does not require pasword, does not change # if one is not provided. #------------------------------------------------- self.assertState( 'POST', EDIT_PATH, [ causes.alters(Person), causes.owner_logged_in, causes.valid_domain, causes.params( username = '******', new_password = '', new_password_confirm = '', first_name = 'bob', last_name = 'jones', email = '*****@*****.**', ), ], [ effects.person_has_password(1, 'anewpassword'), effects.field_value(Person, {'pk':1}, first_name = 'bob'), effects.redirected('/person/list/'), ] ) #------------------------------------------------- # If passwords didn't match, show form #------------------------------------------------- self.assertState( 'POST', EDIT_PATH, [ causes.alters(Person), causes.owner_logged_in, causes.valid_domain, causes.params( username = '******', new_password = '******', new_password_confirm = 'does_not_match', first_name = 'bob', last_name = 'jones', email = '*****@*****.**', ), ], [ effects.rendered('account/person_form.html'), effects.context('form', type = forms.BaseForm), effects.form_errors('form'), effects.status(200),