Blob Blame History Raw
#!/usr/bin/python3

# checkpoint:
# 1. check default source
# 2. add new source

import composerlib
import testlib


@testlib.nondestructive
class TestSource(composerlib.ComposerCase):

    def testBasic(self):
        b = self.browser
        m = self.machine

        # new repo info
        repo_url = "https://download.copr.fedorainfracloud.org/results" \
            "/xiaofwan/sway-copr/fedora-31-x86_64"
        repo_name = "sway-copr"

        self.login_and_go("/composer", superuser=True)
        b.wait_present("#main")

        # open manage sources dialog
        drop_down_sel = ".toolbar-pf-action-right #dropdownKebab"
        b.click(drop_down_sel)
        b.wait_attr(drop_down_sel, "aria-expanded", "true")
        b.click("a:contains('Manage Sources')")
        b.wait_attr(drop_down_sel, "aria-expanded", "false")
        b.wait_present("#cmpsr-modal-manage-sources")

        # check default loaded sources
        sources = m.execute("composer-cli sources list").split()
        for source in sources:
            b.wait_present("div[data-source={}]".format(source))

        # add new source
        b.click("input[value='Add Source']")

        # can't add srouce if type is empty
        b.set_input_text("#textInput1-modal-source", repo_name)
        b.set_input_text("#textInput2-modal-source", repo_url)
        b.wait_attr("button:contains('Add Source')", "disabled", "")
        b.click("button:contains('Cancel')")
        # new source
        b.click("input[value='Add Source']")
        b.set_input_text("#textInput1-modal-source", repo_name)
        b.set_input_text("#textInput2-modal-source", repo_url)
        # group actions for select from dropdown menu
        dropdown_menu_sel = "#textInput3-modal-source"
        b.wait_visible(dropdown_menu_sel)
        test_selector = "{} option[value='yum-baseurl']".format(dropdown_menu_sel)
        b.wait_present(test_selector)
        value_id = b.attr(test_selector, "value")
        b.set_val(dropdown_menu_sel, value_id)
        b.wait_val(dropdown_menu_sel, value_id)
        # groups action done
        b.click("button:contains('Add Source')")

        # HACK: workaround issue https://github.com/osbuild/cockpit-composer/issues/989
        # open manage source again to continue running test
        if b.cdp.browser == "firefox":
            # open manage sources dialog
            b.wait_not_present("#cmpsr-modal-manage-sources")
            b.click(drop_down_sel)
            b.wait_attr(drop_down_sel, "aria-expanded", "true")
            b.click("a:contains('Manage Sources')")
            b.wait_attr(drop_down_sel, "aria-expanded", "false")
            b.wait_present("#cmpsr-modal-manage-sources")

        # endit new source to enable check SSL certificate and GPG key
        b.click("button[aria-label='Edit Source {}']".format(repo_name))
        # SSL certificate
        b.click("#checkboxInput4-modal-source")
        # GPG key
        b.click("#checkboxInput5-modal-source")
        b.click("button:contains('Update Source')")

        # package from new added repo is here already
        b.click("button:contains('Close')")
        b.click("li[data-blueprint=openssh-server] a:contains('Edit Packages')")
        # wait for all available compontents visible
        with b.wait_timeout(300):
            b.wait_present("ul[data-list=inputs]")
        # search for kanshi which exists in added repo only
        b.set_input_text("#cmpsr-blueprint-input-filter", "kanshi")
        b.key_press("\r")
        with b.wait_timeout(120):
            b.wait_text("#kanshi-input", "kanshi")
        # new added reop works, go back
        # click back to blueprint link
        b.click("a:contains('Back to Blueprints')")
        # go to manage source
        b.click(drop_down_sel)
        b.wait_attr(drop_down_sel, "aria-expanded", "true")
        b.click("a:contains('Manage Sources')")
        b.wait_attr(drop_down_sel, "aria-expanded", "false")
        b.wait_present("#cmpsr-modal-manage-sources")

        # duplicated source can't be added
        b.click("input[value='Add Source']")
        b.set_input_text("#textInput2-modal-source", repo_url)
        b.wait_text("#textInput2-modal-source-help", "This source path already exists.")
        b.click("button:contains('Cancel')")

        # delete added source
        delete_drop_down_sel = "button[aria-label='Source Actions {}']".format(repo_name)
        b.click(delete_drop_down_sel)
        b.wait_attr(delete_drop_down_sel, "aria-expanded", "true")
        b.click("a:contains('Remove Source')")
        b.wait_not_present("div[data-source={}]".format(repo_name))

        # close manage source dialog
        b.click("#cmpsr-modal-manage-sources .close")
        b.wait_not_present("#cmpsr-modal-manage-sources")

        # collect code coverage result
        self.check_coverage()


if __name__ == '__main__':
    testlib.test_main()