Skip to content

Commit

Permalink
fix ZoneStatusRetrieveAjaxView getlist() crash (#1752)
Browse files Browse the repository at this point in the history
  • Loading branch information
gromdimon committed Aug 21, 2023
1 parent 8a8cf9a commit d93a00b
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 87 deletions.
175 changes: 88 additions & 87 deletions landingzones/static/landingzones/js/landingzones.js
Original file line number Diff line number Diff line change
Expand Up @@ -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') {
Expand All @@ -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(
'<span class="pull-right"><i class="iconify" data-icon="mdi:lock"></i></span>'
);
}
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(
'<p class="mb-0"><a href="' +
sampleUrl +
'">' +
'<i class="iconify" data-icon="mdi:arrow-right-circle"></i> ' +
'Browse files in sample sheet</a></p>'
if (['PREPARING', 'VALIDATING', 'MOVING', 'DELETING'].includes(zoneStatus)) {
statusTd.append(
'<span class="pull-right"><i class="iconify" data-icon="mdi:lock"></i></span>'
);
}
}

// 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(
'<p class="mb-0"><a href="' +
sampleUrl +
'">' +
'<i class="iconify" data-icon="mdi:arrow-right-circle"></i> ' +
'Browse files in sample sheet</a></p>'
);
}
$(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() {
Expand Down
13 changes: 13 additions & 0 deletions landingzones/tests/test_views_ajax.py
Original file line number Diff line number Diff line change
Expand Up @@ -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, {})

0 comments on commit d93a00b

Please sign in to comment.