def test_persist_clone_positive(self): self.assertEquals(2, self.concept1.num_versions) self.assertEquals( self.concept_version, ConceptVersion.get_latest_version_of(self.concept1)) source_version = SourceVersion.get_latest_version_of(self.source1) source_version.update_concept_version(self.concept_version) self.assertEquals(1, len(source_version.concepts)) self.assertEquals(self.concept_version.id, source_version.concepts[0]) version2 = self.concept_version.clone() errors = ConceptVersion.persist_clone(version2, self.user1) self.assertEquals(0, len(errors)) self.assertEquals(3, self.concept1.num_versions) self.assertEquals(version2, ConceptVersion.get_latest_version_of(self.concept1)) self.assertEquals(self.concept_version.public_access, version2.public_access) self.assertEquals(self.concept_version, version2.previous_version) self.assertEquals(self.concept_version.root_version, version2.root_version) self.assertEquals(self.concept_version.external_id, version2.external_id) self.assertEquals(self.user1.username, version2.version_created_by) source_version.update_concept_version(version2) self.assertEquals(1, len(source_version.concepts)) self.assertEquals(version2.id, source_version.concepts[0])
def test_persist_clone_positive(self): self.assertEquals(2, self.concept1.num_versions) self.assertEquals(self.concept_version, ConceptVersion.get_latest_version_of(self.concept1)) source_version = SourceVersion.get_latest_version_of(self.source1) source_version.update_concept_version(self.concept_version) self.assertEquals(1, len(source_version.concepts)) self.assertEquals(self.concept_version.id, source_version.concepts[0]) version2 = self.concept_version.clone() errors = ConceptVersion.persist_clone(version2, self.user1) self.assertEquals(0, len(errors)) self.assertEquals(3, self.concept1.num_versions) self.assertEquals(version2, ConceptVersion.get_latest_version_of(self.concept1)) self.assertEquals(self.concept_version.public_access, version2.public_access) self.assertEquals(self.concept_version, version2.previous_version) self.assertEquals(self.concept_version.root_version, version2.root_version) self.assertEquals(self.concept_version.external_id, version2.external_id) self.assertEquals(self.user1.username, version2.version_created_by) source_version.update_concept_version(version2) self.assertEquals(1, len(source_version.concepts)) self.assertEquals(version2.id, source_version.concepts[0])
def delete(self, request, *args, **kwargs): if self.key in self.extras: del self.extras[self.key] self.parent_resource_version.update_comment = 'Deleted extra %s.' % self.key errors = ConceptVersion.persist_clone(self.parent_resource_version, request.user) if errors: return Response(errors, status=status.HTTP_400_BAD_REQUEST) return Response(status=status.HTTP_204_NO_CONTENT) return Response({"detail": "Not found."}, status.HTTP_404_NOT_FOUND)
def update(self, request, *args, **kwargs): value = request.DATA.get(self.key) if not value: return Response( ['Must specify %s param in body.' % self.key], status=status.HTTP_400_BAD_REQUEST) self.extras[self.key] = value self.parent_resource_version.update_comment = 'Updated extras: %s=%s.' % (self.key, value) errors = ConceptVersion.persist_clone(self.parent_resource_version, request.user) if errors: return Response(errors, status=status.HTTP_400_BAD_REQUEST) return Response({self.key: self.extras[self.key]})
def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.DATA, files=request.FILES) if serializer.is_valid(): new_version = self.parent_resource_version.clone() labels = getattr(new_version, self.parent_list_attribute) labels.append(serializer.object) new_version.update_comment = 'Added to %s: %s.' % (self.parent_list_attribute, serializer.object.name) errors = ConceptVersion.persist_clone(new_version, request.user) if errors: return Response(errors, status=status.HTTP_400_BAD_REQUEST) headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, *args, **kwargs): obj = self.get_object() index_to_remove = -1 labels = getattr(self.parent_resource_version, self.parent_list_attribute) for i, label in enumerate(labels): if label.uuid == obj.uuid: index_to_remove = i break if index_to_remove >= 0: del labels[index_to_remove] self.parent_resource_version.update_comment = 'Deleted %s from %s.' % (obj.name, self.parent_list_attribute) errors = ConceptVersion.persist_clone(self.parent_resource_version, request.user) if errors: return Response(errors, status=status.HTTP_400_BAD_REQUEST) return Response(status=status.HTTP_204_NO_CONTENT)
def update(self, request, *args, **kwargs): partial = True self.object = self.get_object() success_status_code = status.HTTP_200_OK serializer = self.get_serializer(self.object, data=request.DATA, files=request.FILES, partial=partial) if serializer.is_valid(): self.parent_resource_version.update_comment = 'Updated %s in %s.' % (self.object.name, self.parent_list_attribute) errors = ConceptVersion.persist_clone(self.parent_resource_version, request.user) if errors: return Response(errors, status=status.HTTP_400_BAD_REQUEST) return Response(serializer.data, status=success_status_code) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def test_persist_clone_negative__no_user(self): self.assertEquals(2, self.concept1.num_versions) self.assertEquals( self.concept_version, ConceptVersion.get_latest_version_of(self.concept1)) source_version = SourceVersion.get_latest_version_of(self.source1) source_version.update_concept_version(self.concept_version) self.assertEquals(1, len(source_version.concepts)) self.assertEquals(self.concept_version.id, source_version.concepts[0]) version2 = self.concept_version.clone() errors = ConceptVersion.persist_clone(version2) self.assertEquals(1, len(errors)) self.assertTrue('version_created_by' in errors) self.assertEquals(2, self.concept1.num_versions) self.assertEquals( self.concept_version, ConceptVersion.get_latest_version_of(self.concept1))
def test_persist_clone_negative__no_user(self): self.assertEquals(2, self.concept1.num_versions) self.assertEquals(self.concept_version, ConceptVersion.get_latest_version_of(self.concept1)) source_version = SourceVersion.get_latest_version_of(self.source1) source_version.update_concept_version(self.concept_version) self.assertEquals(1, len(source_version.concepts)) self.assertEquals(self.concept_version.id, source_version.concepts[0]) version2 = self.concept_version.clone() errors = ConceptVersion.persist_clone(version2) self.assertEquals(1, len(errors)) self.assertTrue('version_created_by' in errors) self.assertEquals(2, self.concept1.num_versions) self.assertEquals(self.concept_version, ConceptVersion.get_latest_version_of(self.concept1))
def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.DATA, files=request.FILES) if serializer.is_valid(): new_version = self.parent_resource_version.clone() # get the current labels from the object labels = getattr(new_version, self.parent_list_attribute) # If labels are None then we would want to initialize the labels in new_version if labels is None: setattr(new_version, self.parent_list_attribute, []) labels = getattr(new_version, self.parent_list_attribute) # update the labels with input object labels.append(serializer.object) new_version.update_comment = 'Added to %s: %s.' % (self.parent_list_attribute, serializer.object.name) # save updated ConceptVersion into database errors = ConceptVersion.persist_clone(new_version, request.user) if errors: return Response(errors, status=status.HTTP_400_BAD_REQUEST) headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def save_object(self, obj, **kwargs): user = self.context['request'].user errors = ConceptVersion.persist_clone(obj, user, **kwargs) self._errors.update(errors)