TT#43813 build: add refresh_projects

If the list of projects has changed after the creation of the
BuildRelease object

Change-Id: I68c31adbb7e465ea4253a85da9d2be3c29af5c90
changes/39/38439/1
Victor Seva 6 years ago
parent 4db45a4594
commit 17709467f0

@ -100,6 +100,10 @@ class BuildRelease(models.Model):
def __str__(self):
return "%s[%s]" % (self.release, self.uuid)
def refresh_projects(self):
self.projects = ",".join(self.config.projects)
self.save()
@property
def projects_list(self):
return [x.strip() for x in self.projects.split(",")]

@ -182,3 +182,35 @@ class TestBuildDeleteRest(APIAuthenticatedTestCase):
).count(),
0,
)
@override_settings(DEBUG=True)
class TestBuildPatchRest(APIAuthenticatedTestCase):
fixtures = [
"test_models",
]
release = "release-mr8.1"
release_uuid = "dbe569f7-eab6-4532-a6d1-d31fb559649b"
def test_refresh(self):
br = models.BuildRelease.objects.get(uuid=self.release_uuid)
self.assertEqual(br.projects, "kamailio,lua-ngcp-kamailio,ngcp-panel")
data = {"action": "refresh"}
url = reverse("build:detail", args=[br.id])
response = self.client.patch(url, data, format="json")
self.assertEqual(response.status_code, status.HTTP_200_OK)
br = models.BuildRelease.objects.get(uuid=self.release_uuid)
self.assertNotEqual(
br.projects, "kamailio,lua-ngcp-kamailio,ngcp-panel"
)
self.assertEqual(len(br.projects_list), 73)
def test_no_action(self):
br = models.BuildRelease.objects.get(uuid=self.release_uuid)
self.assertEqual(br.projects, "kamailio,lua-ngcp-kamailio,ngcp-panel")
data = {}
url = reverse("build:detail", args=[br.id])
response = self.client.patch(url, data, format="json")
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
br = models.BuildRelease.objects.get(uuid=self.release_uuid)
self.assertEqual(br.projects, "kamailio,lua-ngcp-kamailio,ngcp-panel")

@ -61,6 +61,15 @@ class BuildReleaseDetail(generics.RetrieveDestroyAPIView):
models.BuildRelease.objects.jbi(instance.uuid).delete()
instance.delete()
def patch(self, request, *args, **kwargs):
action = request.data.get("action")
if action == "refresh":
instance = self.get_object()
instance.refresh_projects()
serializer = self.get_serializer(instance)
return Response(serializer.data)
return JsonResponse({"error": "Action unknown"}, status=400)
class BuildProject(APIView):
permission_classes = (BuildAccess,)

@ -43,8 +43,12 @@
<tr class="success build_release" id="br_{{ br.id }}">
<td><a href="{% url 'panel:release-uuid' _uuid=br.uuid %}">{{ br.uuid }}</a></td>
<td>{{ br.start_date }}</td>
<td><button type="button"
onclick="click_delete(event, '{{ br.id }}')" class="btn btn-danger">Delete</button>
<td>
<button type="button" id="refresh_{{ br.id }}"
onclick="click_refresh_projects(event, '{{ br.id }}')"
class="btn btn-primary">Refresh projects</button>
<button type="button"
onclick="click_delete(event, '{{ br.id }}')" class="btn btn-danger">Delete</button>
</td>
</tr>
{% endfor %}
@ -107,5 +111,42 @@ function delete_build_release( id ) {
error: errorFunc
} );
}
function click_refresh_projects(e, id) {
refresh_release_projects(id);
e.preventDefault();
}
function refresh_release_projects( id ) {
function successFunc( _data, _textStatus, _jqXHR ) {
$("#refresh_" + id).attr("disabled", "disabled");
}
function errorFunc( _jqXHR, _status, error ) {
$( "#error" ).html( error );
}
var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val();
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
$.ajax( {
url: "/build/" + id + "/?format=json",
data: JSON.stringify({ action: "refresh" }),
method: "PATCH",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: successFunc,
error: errorFunc
} );
}
</script>
{% endblock %}
Loading…
Cancel
Save