def test_make_child_embargoed_registration_public_asks_all_admins_in_tree( self, mock_ask): # Initiate and approve embargo node = NodeFactory(creator=self.user) c1 = AuthUserFactory() child = NodeFactory(parent=node, creator=c1) c2 = AuthUserFactory() NodeFactory(parent=child, creator=c2) registration = RegistrationFactory(project=node) registration.embargo_registration( self.user, timezone.now() + datetime.timedelta(days=10)) for user_id, embargo_tokens in registration.embargo.approval_state.iteritems( ): approval_token = embargo_tokens['approval_token'] registration.embargo.approve_embargo(User.load(user_id), approval_token) self.registration.save() res = self.app.post(registration.api_url_for('project_set_privacy', permissions='public'), auth=self.user.auth) assert_equal(res.status_code, 200) asked_admins = [(admin._id, n._id) for admin, n in mock_ask.call_args[0][0]] for admin, node in registration.get_admin_contributors_recursive(): assert_in((admin._id, node._id), asked_admins)
def configure_test_preconditions( registration_status='public', reviews_workflow=DEFAULT_REVIEWS_WORKFLOW, schema_response_state=DEFAULT_SCHEMA_RESPONSE_STATE, role='admin'): '''Create and Configure a RegistrationProvider, Registration, SchemaResponse, and User.''' provider = RegistrationProviderFactory() provider.update_group_permissions() provider.reviews_workflow = reviews_workflow provider.save() registration = RegistrationFactory(provider=provider, schema=get_default_test_schema()) if registration_status == 'public': registration.is_public = True elif registration_status == 'private': registration.is_public = False # set moderation state to a realistic value for a private # registration with an approved response registration.moderation_state = 'embargo' elif registration_status == 'withdrawn': registration.moderation_state = 'withdrawn' elif registration_status == 'deleted': registration.deleted = timezone.now() registration.save() schema_response = registration.schema_responses.last() schema_response.approvals_state_machine.set_state(schema_response_state) schema_response.save() # Set the required fields on the schema response for block in schema_response.response_blocks.all(): block.set_response(DEFAULT_SCHEMA_RESPONSES.get(block.schema_key)) auth = configure_user_auth(registration, role) # Do this step after configuring auth to ensure any new admin user, gets added if schema_response_state is ApprovalStates.UNAPPROVED: schema_response.pending_approvers.add(*[ user for user, _ in registration.get_admin_contributors_recursive() ]) if schema_response_state is ApprovalStates.IN_PROGRESS: # need valid changes for submission validations schema_response.update_responses({'q1': 'update for submission'}) schema_response.revision_justification = 'has for valid revision_justification for submission' schema_response.save() return auth, schema_response, registration, provider
def test_make_child_embargoed_registration_public_asks_all_admins_in_tree(self, mock_ask): # Initiate and approve embargo node = NodeFactory(creator=self.user) c1 = AuthUserFactory() child = NodeFactory(parent=node, creator=c1) c2 = AuthUserFactory() NodeFactory(parent=child, creator=c2) registration = RegistrationFactory(project=node) registration.embargo_registration( self.user, timezone.now() + datetime.timedelta(days=10) ) for user_id, embargo_tokens in registration.embargo.approval_state.iteritems(): approval_token = embargo_tokens['approval_token'] registration.embargo.approve_embargo(OSFUser.load(user_id), approval_token) self.registration.save() registration.set_privacy('public', Auth(self.registration.creator)) asked_admins = [(admin._id, n._id) for admin, n in mock_ask.call_args[0][0]] for admin, node in registration.get_admin_contributors_recursive(): assert_in((admin._id, node._id), asked_admins)