# Copyright (c) 2016
#
# All rights reserved.
#
# This file is distributed under the Clear BSD license.
# The full text can be found in LICENSE in the root directory.
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

from boardfarm import lib
from boardfarm.devices import prompt
from boardfarm.tests import rootfs_boot
from selenium.webdriver import ActionChains


class WebTest(rootfs_boot.RootFSBootTest):
    '''Login to LuCI'''
    def setUp(self):
        board = self.dev.board
        lan = self.dev.lan

        ip = "192.168.1.1"

        super(WebTest, self).setUp()
        if not lan:
            msg = 'No LAN Device defined, skipping web test.'
            lib.common.test_msg(msg)
            self.skipTest(msg)

        # Set password, just to be sure
        board.sendline("passwd")
        board.expect("New password:", timeout=8)
        board.sendline("password")
        board.expect("Retype password:")
        board.sendline("password")
        board.expect(prompt)

        # Create a driver
        self.driver = lib.common.phantom_webproxy_driver('http://' + lan.name +
                                                         ':8080')
        self.driver.get("http://%s/cgi-bin/luci" % ip)
        self.assertIn(ip, self.driver.current_url)
        self.assertIn('LuCI', self.driver.title)
        self.driver.find_element_by_name('luci_password').send_keys('password')
        self.driver.find_element_by_class_name('cbi-button-apply').submit()
        self.driver.find_element_by_xpath(
            "//ul/li/a[contains(text(),'Status')]")


class WebOverview(WebTest):
    '''Check overview page'''
    def runTest(self):
        print('Checking overview page')
        action_chains = ActionChains(self.driver)
        status_menu = self.driver.find_element_by_xpath(
            "//ul/li/a[contains(text(),'Status')]")
        overview_menu = self.driver.find_element_by_xpath(
            "//ul/li/a[contains(text(),'Overview')]")
        action_chains.move_to_element(status_menu).click(
            overview_menu).perform()
        self.assertIn('Overview', self.driver.title)
        print('Managed to switch to overview page')
        for i in ['System', 'Memory', 'Network', 'DHCP Leases']:
            self.driver.find_element_by_xpath(
                "//fieldset/legend[contains(text(),'" + i + "')]")
            print(' * overview page contains section ' + i)
