Fixing error 500 when importing two milestones with the same name
parent
42ec2dd09a
commit
991e5a7f42
|
@ -296,6 +296,23 @@ class MilestoneExportSerializer(serializers.ModelSerializer):
|
|||
watchers = UserRelatedField(many=True, required=False)
|
||||
modified_date = serializers.DateTimeField(required=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
project = kwargs.pop('project', None)
|
||||
super(MilestoneExportSerializer, self).__init__(*args, **kwargs)
|
||||
if project:
|
||||
self.project = project
|
||||
|
||||
def validate_name(self, attrs, source):
|
||||
"""
|
||||
Check the milestone name is not duplicated in the project
|
||||
"""
|
||||
name = attrs[source]
|
||||
qs = self.project.milestones.filter(name=name)
|
||||
if qs.exists():
|
||||
raise serializers.ValidationError("Name duplicated for the project")
|
||||
|
||||
return attrs
|
||||
|
||||
class Meta:
|
||||
model = milestones_models.Milestone
|
||||
exclude = ('id', 'project')
|
||||
|
|
|
@ -185,7 +185,7 @@ def store_task(project, task):
|
|||
|
||||
|
||||
def store_milestone(project, milestone):
|
||||
serialized = serializers.MilestoneExportSerializer(data=milestone)
|
||||
serialized = serializers.MilestoneExportSerializer(data=milestone, project=project)
|
||||
if serialized.is_valid():
|
||||
serialized.object.project = project
|
||||
serialized.object._importing = True
|
||||
|
|
|
@ -637,3 +637,21 @@ def test_valid_milestone_import(client):
|
|||
response = client.post(url, json.dumps(data), content_type="application/json")
|
||||
assert response.status_code == 201
|
||||
response_data = json.loads(response.content.decode("utf-8"))
|
||||
|
||||
def test_milestone_import_duplicated_milestone(client):
|
||||
user = f.UserFactory.create()
|
||||
project = f.ProjectFactory.create(owner=user)
|
||||
client.login(user)
|
||||
|
||||
url = reverse("importer-milestone", args=[project.pk])
|
||||
data = {
|
||||
"name": "Imported milestone",
|
||||
"estimated_start": "2014-10-10",
|
||||
"estimated_finish": "2014-10-20",
|
||||
}
|
||||
# We create twice the same milestone
|
||||
response = client.post(url, json.dumps(data), content_type="application/json")
|
||||
response = client.post(url, json.dumps(data), content_type="application/json")
|
||||
assert response.status_code == 400
|
||||
response_data = json.loads(response.content.decode("utf-8"))
|
||||
assert response_data["milestones"][0]["name"][0] == "Name duplicated for the project"
|
||||
|
|
Loading…
Reference in New Issue