Skip to content

Commit

Permalink
Add loading indicator to the test liveview
Browse files Browse the repository at this point in the history
This PR removes the empty box which was visible in the webui before liveview content is received by the responsible canvas element.
It also adds a loading animation indicating that the liveview is being loaded.
Test cases are also added to confirm the elements are displayed and hidden as expected.

Related Issue: https://progress.opensuse.org/issues/134840
  • Loading branch information
r-richardson committed Oct 24, 2024
1 parent 9a22ad5 commit 8781582
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 1 deletion.
13 changes: 12 additions & 1 deletion assets/javascripts/running.js
Original file line number Diff line number Diff line change
Expand Up @@ -321,18 +321,29 @@ var last_event;
function loadCanvas(canvas, dataURL) {
var context = canvas.getContext('2d');

// load image from data url
// load image from data URL
var scrn = new Image();
scrn.onload = function () {
canvas.width = this.width;
canvas.height = this.height;
context.clearRect(0, 0, this.width, this.width);
context.drawImage(this, 0, 0);

// hide loading animation after the first image is loaded
var loadingElement = document.getElementById('liveview-loading');
if (loadingElement) {
loadingElement.style.display = 'none';
}
};
scrn.src = dataURL;
}

function initLivestream() {
// show the loading animation when initializing the live stream
var loadingElement = document.getElementById('liveview-loading');
if (loadingElement) {
loadingElement.style.display = 'block';
}
// setup callback for livestream
const livestream = document.getElementById('livestream');
const servicePortDelta = Number.parseInt(document.getElementById('developer-panel').dataset.servicePortDelta);
Expand Down
44 changes: 44 additions & 0 deletions t/ui/18-tests-details.t
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,50 @@ subtest 'running job' => sub {
# waiting for the periodic call anyways
$driver->execute_script('window.enableStatusUpdates = false');

subtest 'liveview loading animation is displayed' => sub {
$driver->find_element_by_link_text('Details')->click();
like(current_tab, qr/details/i, 'switched to details tab');

$driver->find_element_by_link_text('Live View')->click();
like(current_tab, qr/live/i, 'switched back to live tab');

my $loading_element = $driver->find_element('#liveview-loading', 'css');
ok($loading_element, 'liveview-loading element exists after tab switch');

ok($loading_element->is_displayed(), 'liveview-loading is visible after tab switch');
};
subtest 'liveview loading animation hides after live view starts' => sub {
my $loading_element = $driver->find_element('#liveview-loading');
ok($loading_element->is_displayed(), 'liveview-loading is initially visible');

# simulate the live view starting
$driver->execute_script(
q{
var canvas = document.getElementById('livestream');
var dataURL = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNgYAAAAAMAAWgmWQ0AAAAASUVORK5CYII=';
loadCanvas(canvas, dataURL);
}
);
# wait until the loading animation is hidden
wait_until sub {
my $loading_element = $driver->find_element('#liveview-loading');
!$loading_element->is_displayed();
}, 'liveview-loading is hidden after live view starts', 5;
# verify that the canvas is now displayed
my $canvas = $driver->find_element('#livestream');
ok($canvas->is_displayed(), 'livestream canvas is displayed');

$driver->find_element_by_link_text('Details')->click();
like(current_tab, qr/details/i, 'switched to details tab');

$driver->find_element_by_link_text('Live View')->click();
like(current_tab, qr/live/i, 'switched back to live tab');

$loading_element = $driver->find_element('#liveview-loading', 'css');
ok($loading_element, 'liveview-loading element exists after tab switch');

ok(!$loading_element->is_displayed(), 'liveview-loading is still hidden after tab switch');
};
subtest 'info panel contents' => sub {
like(
$driver->find_element('#assigned-worker')->get_text,
Expand Down
7 changes: 7 additions & 0 deletions templates/webapi/test/live.html.ep
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,13 @@
</div>

<div id="canholder">
<div id="liveview-loading">
<div class="d-flex justify-content-center">
<i class="fa fa-circle-o-notch fa-spin fa-4x" role="status">
<span class="sr-only">Loading…</span>
</i>
</div>
</div>
<canvas id="livestream" data-url="/liveviewhandler/tests/<%= $testid %>/streaming">
</canvas>
</div>
Expand Down

0 comments on commit 8781582

Please sign in to comment.