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)
|
watchers = UserRelatedField(many=True, required=False)
|
||||||
modified_date = serializers.DateTimeField(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:
|
class Meta:
|
||||||
model = milestones_models.Milestone
|
model = milestones_models.Milestone
|
||||||
exclude = ('id', 'project')
|
exclude = ('id', 'project')
|
||||||
|
|
|
@ -185,7 +185,7 @@ def store_task(project, task):
|
||||||
|
|
||||||
|
|
||||||
def store_milestone(project, milestone):
|
def store_milestone(project, milestone):
|
||||||
serialized = serializers.MilestoneExportSerializer(data=milestone)
|
serialized = serializers.MilestoneExportSerializer(data=milestone, project=project)
|
||||||
if serialized.is_valid():
|
if serialized.is_valid():
|
||||||
serialized.object.project = project
|
serialized.object.project = project
|
||||||
serialized.object._importing = True
|
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")
|
response = client.post(url, json.dumps(data), content_type="application/json")
|
||||||
assert response.status_code == 201
|
assert response.status_code == 201
|
||||||
response_data = json.loads(response.content.decode("utf-8"))
|
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