diff --git a/landingzones/static/landingzones/js/landingzones.js b/landingzones/static/landingzones/js/landingzones.js index 3a8bf51d..90fd16f6 100644 --- a/landingzones/static/landingzones/js/landingzones.js +++ b/landingzones/static/landingzones/js/landingzones.js @@ -12,7 +12,6 @@ var updateZoneStatus = function() { var trId = $(this).attr('id'); var zoneTr = $('#' + trId); var zoneUuid = $(this).attr('data-zone-uuid'); - var sampleUrl = $(this).attr('data-sample-url'); var statusTd = zoneTr.find('td#sodar-lz-zone-status-' + zoneUuid); if (statusTd.text() !== 'MOVED' && statusTd.text() !== 'DELETED') { @@ -21,102 +20,104 @@ var updateZoneStatus = function() { }); // Make the POST request to retrieve zone statuses - $.ajax({ - url: zoneStatusUrl, - method: 'POST', - dataType: 'json', - data: { - zone_uuids: zoneUuids - } - }).done(function(data) { - $('.sodar-lz-zone-tr-existing').each(function() { - var zoneUuid = $(this).attr('data-zone-uuid'); - var zoneTr = $('#' + $(this).attr('id')); - var statusTd = zoneTr.find('td#sodar-lz-zone-status-' + zoneUuid); - var statusInfoSpan = zoneTr.find('span#sodar-lz-zone-status-info-' + zoneUuid); - var statusStyles = { - 'CREATING': 'bg-warning', - 'NOT CREATED': 'bg-danger', - 'ACTIVE': 'bg-info', - 'PREPARING': 'bg-warning', - 'VALIDATING': 'bg-warning', - 'MOVING': 'bg-warning', - 'MOVED': 'bg-success', - 'FAILED': 'bg-danger', - 'DELETING': 'bg-warning', - 'DELETED': 'bg-secondary' - }; - - if (data[zoneUuid]) { - var zoneStatus = data[zoneUuid].status; - var zoneStatusInfo = data[zoneUuid].status_info; - - if ( - statusTd.text() !== zoneStatus || - statusInfoSpan.text() !== zoneStatusInfo - ) { - statusTd.text(zoneStatus); - statusTd.removeClass(); - statusTd.addClass(statusStyles[zoneStatus] + ' text-white'); - statusInfoSpan.text(zoneStatusInfo); + if (zoneUuids.length > 0) { + $.ajax({ + url: zoneStatusUrl, + method: 'POST', + dataType: 'JSON', + data: { + zone_uuids: zoneUuids + } + }).done(function(data) { + $('.sodar-lz-zone-tr-existing').each(function() { + var zoneUuid = $(this).attr('data-zone-uuid'); + var zoneTr = $('#' + $(this).attr('id')); + var statusTd = zoneTr.find('td#sodar-lz-zone-status-' + zoneUuid); + var statusInfoSpan = zoneTr.find('span#sodar-lz-zone-status-info-' + zoneUuid); + var statusStyles = { + 'CREATING': 'bg-warning', + 'NOT CREATED': 'bg-danger', + 'ACTIVE': 'bg-info', + 'PREPARING': 'bg-warning', + 'VALIDATING': 'bg-warning', + 'MOVING': 'bg-warning', + 'MOVED': 'bg-success', + 'FAILED': 'bg-danger', + 'DELETING': 'bg-warning', + 'DELETED': 'bg-secondary' + }; - if (['PREPARING', 'VALIDATING', 'MOVING', 'DELETING'].includes(zoneStatus)) { - statusTd.append( - '' - ); - } + if (data[zoneUuid]) { + var zoneStatus = data[zoneUuid].status; + var zoneStatusInfo = data[zoneUuid].status_info; - if (['CREATING', 'NOT CREATED', 'MOVED', 'DELETED'].includes(zoneStatus)) { - zoneTr.find('p#sodar-lz-zone-stats-container-' + zoneUuid).hide(); + if ( + statusTd.text() !== zoneStatus || + statusInfoSpan.text() !== zoneStatusInfo + ) { + statusTd.text(zoneStatus); + statusTd.removeClass(); + statusTd.addClass(statusStyles[zoneStatus] + ' text-white'); + statusInfoSpan.text(zoneStatusInfo); - if (zoneStatus === 'MOVED') { - var statusMovedSpan = zoneTr.find( - 'span#sodar-lz-zone-status-moved-' + zoneUuid - ); - statusMovedSpan.html( - '

' + - ' ' + - 'Browse files in sample sheet

' + if (['PREPARING', 'VALIDATING', 'MOVING', 'DELETING'].includes(zoneStatus)) { + statusTd.append( + '' ); } - } - // Button modification - if (zoneStatus !== 'ACTIVE' && zoneStatus !== 'FAILED' && isSuperuser) {} - else if (zoneStatus !== 'ACTIVE' && zoneStatus !== 'FAILED') { - zoneTr.find('td.sodar-lz-zone-title').addClass('text-muted'); - zoneTr.find('td.sodar-lz-zone-assay').addClass('text-muted'); - zoneTr.find('td.sodar-lz-zone-status-info').addClass('text-muted'); - zoneTr.find('.btn').each(function() { - if ($(this).is('button')) { - $(this).attr('disabled', 'disabled'); - } else if ($(this).is('a')) { - $(this).addClass('disabled'); - } - $(this).tooltip('disable'); - }); - zoneTr.find('.sodar-list-dropdown').addClass('disabled'); - } else { - zoneTr.find('td.sodar-lz-zone-title').removeClass('text-muted'); - zoneTr.find('td.sodar-lz-zone-assay').removeClass('text-muted'); - zoneTr.find('td.sodar-lz-zone-status-info').removeClass('text-muted'); - zoneTr.find('p#sodar-lz-zone-stats-container-' + zoneUuid).show(); - zoneTr.find('.btn').each(function() { - if ($(this).is('button')) { - $(this).removeAttr('disabled'); + if (['CREATING', 'NOT CREATED', 'MOVED', 'DELETED'].includes(zoneStatus)) { + zoneTr.find('p#sodar-lz-zone-stats-container-' + zoneUuid).hide(); + + if (zoneStatus === 'MOVED') { + var statusMovedSpan = zoneTr.find( + 'span#sodar-lz-zone-status-moved-' + zoneUuid + ); + statusMovedSpan.html( + '

' + + ' ' + + 'Browse files in sample sheet

' + ); } - $(this).removeClass('disabled'); - $(this).tooltip('enable'); - }); - zoneTr.find('.sodar-list-dropdown').removeClass('disabled'); + } + + // Button modification + if (zoneStatus !== 'ACTIVE' && zoneStatus !== 'FAILED' && isSuperuser) {} + else if (zoneStatus !== 'ACTIVE' && zoneStatus !== 'FAILED') { + zoneTr.find('td.sodar-lz-zone-title').addClass('text-muted'); + zoneTr.find('td.sodar-lz-zone-assay').addClass('text-muted'); + zoneTr.find('td.sodar-lz-zone-status-info').addClass('text-muted'); + zoneTr.find('.btn').each(function() { + if ($(this).is('button')) { + $(this).attr('disabled', 'disabled'); + } else if ($(this).is('a')) { + $(this).addClass('disabled'); + } + $(this).tooltip('disable'); + }); + zoneTr.find('.sodar-list-dropdown').addClass('disabled'); + } else { + zoneTr.find('td.sodar-lz-zone-title').removeClass('text-muted'); + zoneTr.find('td.sodar-lz-zone-assay').removeClass('text-muted'); + zoneTr.find('td.sodar-lz-zone-status-info').removeClass('text-muted'); + zoneTr.find('p#sodar-lz-zone-stats-container-' + zoneUuid).show(); + zoneTr.find('.btn').each(function() { + if ($(this).is('button')) { + $(this).removeAttr('disabled'); + } + $(this).removeClass('disabled'); + $(this).tooltip('enable'); + }); + zoneTr.find('.sodar-list-dropdown').removeClass('disabled'); + } } } - } + }); + window.zoneStatusUpdated = true; }); - window.zoneStatusUpdated = true; - }); + } }; $(document).ready(function() { diff --git a/landingzones/tests/test_views_ajax.py b/landingzones/tests/test_views_ajax.py index 6fe059fc..396cacbc 100644 --- a/landingzones/tests/test_views_ajax.py +++ b/landingzones/tests/test_views_ajax.py @@ -26,3 +26,16 @@ def test_post(self): } } self.assertEquals(response.data, expected) + + def test_post_no_zone(self): + """Test POST request for getting a landing zone status with no zones""" + with self.login(self.user): + response = self.client.post( + reverse( + 'landingzones:ajax_status', + kwargs={'project': self.project.sodar_uuid}, + ), + data={'zone_uuids[]': []}, + ) + self.assertEqual(response.status_code, 200) + self.assertEquals(response.data, {})