use base "installedtest";
use strict;
use testapi;
use utils;
use packagetest;
use cockpit;

sub run {
    my $self = shift;

    my $cockdate = "0";
    # Remove a package, disable repositories and enable test repositories, install the package
    # from that repository to make the system outdated and verify that that package was
    # correctly installed.
    prepare_test_packages;
    verify_installed_packages;

    # Start Cockpit
    start_cockpit(login => 1);
    # Navigate to update screen
    select_cockpit_update();


    # Install the rest of the updates, or any updates
    # that have not been previously installed.
    assert_and_click 'cockpit_updates_all_install';
    my $run = 0;
    while ($run < 40) {
        # When Cockpit packages are also included in the updates
        # the user is forced to reconnect, i.e. to restart the Web Application
        # and relog for further interaction. We will check if reconnection is
        # needed and if so, we will restart Firefox and login again. We do
        # *not* need to gain admin privs again, trying to do so will fail.
        #
        last if (check_screen("cockpit_updates_updated"));
        if (check_screen("cockpit_updates_reconnect", 1)) {
            quit_firefox;
            start_cockpit(login => 1, admin => 0);
            select_cockpit_update();
            last;

        }
        # Ignore rebooting the system because we want to finish the test instead.
        elsif (check_screen('cockpit_updates_restart_ignore', 1)) {
            assert_and_click 'cockpit_updates_restart_ignore';
            last;
        }
        else {
            sleep 10;
            $run = $run + 1;
        }
    }
    # Check that the system is updated
    assert_screen 'cockpit_updates_updated';

    # Switch off Cockpit
    quit_firefox;

    # Verify that the test package was updated correctly.
    verify_updated_packages;
}

sub test_flags {
    return {always_rollback => 1};
}

1;

# vim: set sw=4 et: