# -*- coding: utf-8 -*-

import unittest2
from login_page import LoginPage
from datacenters_page import DataCentersPage
from selenium import webdriver


class SanityTests(unittest2.TestCase):

    @classmethod
    def setUpClass(self):
        driver = webdriver.Firefox()
        self.page = LoginPage(driver)
        self.page.login()
        self.page.Navigate('Project:Windows Data Centers')
        self.page = DataCentersPage(driver)

    @classmethod
    def tearDownClass(self):
        self.page.driver.close()

    def test_01_create_data_center(self):
        self.page.create_data_center('dc1')
        assert self.page.Link('dc1').isPresented()

    def test_02_delete_data_center(self):
        self.page.delete_data_center('dc1')
        assert not self.page.Link('dc1').isPresented()

    def test_03_create_data_centers(self):
        for i in range(1, 10):
            name = 'datacenter' + str(i)
            self.page.create_data_center(name)
            assert self.page.Link(name).isPresented()

    def test_04_delete_data_centers(self):
        self.page.delete_data_center('datacenter1')
        self.page.delete_data_center('datacenter9')
        assert not self.page.Link('datacenter1').isPresented()
        assert not self.page.Link('datacenter9').isPresented()

        for i in range(2, 9):
            name = 'datacenter' + str(i)
            assert self.page.Link(name).isPresented()

    def test_05_create_service_ad(self):
        name = 'dc001.local'
        self.page.Navigate('Windows Data Centers')
        self.page.create_data_center('test05')
        self.page = self.page.select_data_center('test05')

        ad_parameters = {'1-dc_name': name,
                         '1-dc_count': 1,
                         '1-adm_password': 'AkvareL707!',
                         '1-recovery_password': 'AkvareL707!'}
        self.page.create_service('Active Directory', ad_parameters)

        assert self.page.Link(name).isPresented()

    def test_06_create_service_ad_two_instances(self):
        name = 'dc002.local'
        self.page.Navigate('Windows Data Centers')
        self.page.create_data_center('test06')
        self.page = self.page.select_data_center('test06')

        ad_parameters = {'1-dc_name': name,
                         '1-dc_count': 2,
                         '1-adm_password': 'P@ssw0rd2',
                         '1-recovery_password': 'P@ssw0rd'}
        self.page.create_service('Active Directory', ad_parameters)

        assert self.page.Link(name).isPresented()

    def test_07_create_service_ad_with_iis(self):
        ad_name = 'dc003.local'
        self.page.Navigate('Windows Data Centers')
        self.page.create_data_center('test07')
        self.page = self.page.select_data_center('test07')

        ad_parameters = {'1-dc_name': ad_name,
                         '1-dc_count': 3,
                         '1-adm_password': 'P@ssw0rd',
                         '1-recovery_password': 'P@ssw0rd2'}
        self.page.create_service('Active Directory', ad_parameters)

        assert self.page.Link(ad_name).isPresented()

        iis_name = 'iis_server1'
        iis_parameters = {'1-iis_name': iis_name,
                          '1-adm_password': 'P@ssw0rd',
                          '1-iis_domain': 'dc003.local',
                          '1-domain_user_name': 'Administrator',
                          '1-domain_user_password': 'P@ssw0rd'}
        self.page.create_service('Internet Information Services',
                                 iis_parameters)

        assert self.page.Link(iis_name).isPresented()

        iis_name = 'iis_server2'
        iis_parameters = {'1-iis_name': iis_name,
                          '1-adm_password': 'P@ssw0rd',
                          '1-iis_domain': 'dc003.local',
                          '1-domain_user_name': 'Administrator',
                          '1-domain_user_password': 'P@ssw0rd'}
        self.page.create_service('Internet Information Services',
                                 iis_parameters)

        assert self.page.Link(iis_name).isPresented()

        iis_name = 'iis_server3'
        iis_parameters = {'1-iis_name': iis_name,
                          '1-adm_password': 'P@ssw0rd',
                          '1-iis_domain': 'dc003.local',
                          '1-domain_user_name': 'Administrator',
                          '1-domain_user_password': 'P@ssw0rd'}
        self.page.create_service('Internet Information Services',
                                 iis_parameters)

        assert self.page.Link(iis_name).isPresented()

    def test_08_deploy_data_center(self):
        ad_name = 'AD.net'
        self.page.Navigate('Windows Data Centers')
        self.page.create_data_center('test08')
        self.page = self.page.select_data_center('test08')

        ad_parameters = {'1-dc_name': ad_name,
                         '1-dc_count': 2,
                         '1-adm_password': 'P@ssw0rd',
                         '1-recovery_password': 'P@ssw0rd2'}
        self.page.create_service('Active Directory', ad_parameters)

        assert self.page.Link(ad_name).isPresented()

        iis_parameters = {'1-iis_name': 'iis_server',
                          '1-adm_password': 'P@ssw0rd',
                          '1-iis_domain': 'AD.net',
                          '1-domain_user_name': 'Administrator',
                          '1-domain_user_password': 'P@ssw0rd'}
        self.page.create_service('Internet Information Services',
                                 iis_parameters)

        assert self.page.Link('iis_server').isPresented()

        self.page.Navigate('Windows Data Centers')
        self.page = DataCentersPage(self.page.driver)
        self.page.deploy_data_center('test08')

        status = self.page.get_datacenter_status('test08')
        assert 'Deploy in progress' in status


if __name__ == '__main__':
    unittest2.main()