def restore_object(self, attrs, instance=None): if instance: metadata = JsonField.to_json(attrs.get('metadata')) owner = attrs.get('organization') if self.partial and metadata: if not isinstance(instance.metadata, dict): instance.metadata = {} instance.metadata.update(metadata) attrs['metadata'] = instance.metadata if self.partial and owner: # give the new owner permissions set_owners_permission(owner, instance) # clear cache safe_delete('{}{}'.format(PROJ_PERM_CACHE, self.object.pk)) return super(ProjectSerializer, self).restore_object(attrs, instance) if 'request' in self.context: created_by = self.context['request'].user return Project( name=attrs.get('name'), organization=attrs.get('organization'), created_by=created_by, metadata=attrs.get('metadata'), ) return attrs
def test_publish_to_public_project_public_form(self): public_project = Project(name='demo', shared=True, metadata=json.dumps({'description': ''}), created_by=self.user, organization=self.user) public_project.save() self.project = public_project data = { 'owner': 'http://testserver/api/v1/users/%s' % self.project.organization.username, 'public': True, 'public_data': True, 'description': u'transportation_2011_07_25', 'downloadable': True, 'allows_sms': False, 'encrypted': False, 'sms_id_string': u'transportation_2011_07_25', 'id_string': u'transportation_2011_07_25', 'title': u'transportation_2011_07_25', 'bamboo_dataset': u'' } self._publish_xls_form_to_project(publish_data=data, merge=False) self.assertEquals(self.xform.shared, True) self.assertEquals(self.xform.shared_data, True)
def test_set_project_perms_to_xform(self): """ Test set_project_perms_to_xform(xform, project) """ self._publish_transportation_form() # Alice has data entry role to default project alice = self._create_user('alice', 'alice', create_profile=True) DataEntryRole.add(alice, self.project) set_project_perms_to_xform(self.xform, self.project) self.assertTrue(DataEntryRole.user_has_role(alice, self.xform)) self.assertTrue(self.project.pk, self.xform.project_id) # Create other project and transfer xform to new project project_b = Project(name='Project B', created_by=self.user, organization=self.user) project_b.save() self.xform.project = project_b self.xform.save() self.xform.refresh_from_db() self.assertTrue(self.project.pk, self.xform.project_id) # set permissions for new project set_project_perms_to_xform(self.xform, project_b) # Alice should have no data entry role to transfered form self.assertFalse(DataEntryRole.user_has_role(alice, self.xform))
def restore_object(self, attrs, instance=None): if instance: metadata = JsonField.to_json(attrs.get('metadata')) if self.partial and metadata: if not isinstance(instance.metadata, dict): instance.metadata = {} instance.metadata.update(metadata) attrs['metadata'] = instance.metadata return super(ProjectSerializer, self).restore_object(attrs, instance) if 'request' in self.context: created_by = self.context['request'].user return Project( name=attrs.get('name'), organization=attrs.get('organization'), created_by=created_by, metadata=attrs.get('metadata'), ) return attrs
def test_publish_to_public_project(self): public_project = Project(name='demo', shared=True, metadata=json.dumps({'description': ''}), created_by=self.user, organization=self.user) public_project.save() self.project = public_project self._publish_xls_form_to_project(public=True) self.assertEquals(self.xform.shared, True) self.assertEquals(self.xform.shared_data, True)
def test_user_can_view_public_projects(self): public_project = Project(name='demo', shared=True, metadata=json.dumps({'description': ''}), created_by=self.user, organization=self.user) public_project.save() alice_data = {'username': '******', 'email': '*****@*****.**'} self._login_user_and_profile(alice_data) view = ProjectViewSet.as_view({'get': 'retrieve'}) request = self.factory.get('/', **self.extra) response = view(request, pk=public_project.pk) self.assertEqual(response.status_code, 200) self.assertEqual(response.data['public'], True) self.assertEqual(response.data['projectid'], public_project.pk) self.assertEqual(response.data['name'], 'demo')
def test_public_form_private_project(self): self.project = Project(name='demo', shared=False, metadata=json.dumps({'description': ''}), created_by=self.user, organization=self.user) self.project.save() self._publish_xls_form_to_project() self.assertFalse(self.xform.shared) self.assertFalse(self.xform.shared_data) self.assertFalse(self.project.shared) # when xform.shared is true, project settings does not override self.xform.shared = True self.xform.save() self.project.save() self.xform.reload() self.project.reload() self.assertTrue(self.xform.shared) self.assertFalse(self.xform.shared_data) self.assertFalse(self.project.shared) # when xform.shared_data is true, project settings does not override self.xform.shared = False self.xform.shared_data = True self.xform.save() self.project.save() self.xform.reload() self.project.reload() self.assertFalse(self.xform.shared) self.assertTrue(self.xform.shared_data) self.assertFalse(self.project.shared) # when xform.shared is true, submissions are made, # project settings does not override self.xform.shared = True self.xform.shared_data = False self.xform.save() self.project.save() self._make_submissions() self.xform.reload() self.project.reload() self.assertTrue(self.xform.shared) self.assertFalse(self.xform.shared_data) self.assertFalse(self.project.shared)
def test_upload_to_with_project_and_xform_instance(self): model_instance = Project(created_by=self.user) metadata = MetaData(data_type="media") metadata.content_object = model_instance filename = "filename" self.assertEquals(upload_to(metadata, filename), "{}/{}/{}".format(self.user.username, 'formid-media', filename)) model_instance = XForm(user=self.user, created_by=self.user) metadata = MetaData(data_type="media") metadata.content_object = model_instance filename = "filename" self.assertEquals(upload_to(metadata, filename), "{}/{}/{}".format(self.user.username, 'formid-media', filename))