class AturPengeluaranTest(BaseTest):
    def test_search_data_found(self):
        """
        Test case untuk mencari data atur pengeluaran dengan account number yang ada
        """
        # membuat objek loginpage
        self.loginpage = LoginPage(self.driver)

        # Step 1 - login
        self.loginpage.login_admin_success()

        # membuat objek dashboard page
        self.dashboardpage = DashboardPage(self.driver)

        # Step 2 - Click menu cashflow and choose atur pengengeluaran
        self.dashboardpage.redirect_to_atur_pengeluaran_page()

        # membuat objek atur pengeluaran page
        self.aturpengeluaranpage = AturPengeluaranPage(self.driver)

        # Step 3 - input no rekening di search bar
        self.aturpengeluaranpage.search_data_atur_pengeluaran_found()

        # Step 4 - Assertion
        element_text = self.aturpengeluaranpage.get_text(
            Locators.ATUR_PENGELUARAN_INFORMATION_COUNT_DATA)
        self.assertNotEqual('Menampilkan semua "0 atur pengeluaran"',
                            element_text)

    def test_serach_data_not_found(self):
        """
        Test case untuk mencari data atur pengeluaran dengan account number yang tidak ada
        """
        # membuat objek loginpage
        self.loginpage = LoginPage(self.driver)

        # Step 1 - login
        self.loginpage.login_admin_success()

        # membuat objek dashboard page
        self.dashboardpage = DashboardPage(self.driver)

        # Step 2 - Click menu cashflow and choose atur pengengeluaran
        self.dashboardpage.redirect_to_atur_pengeluaran_page()

        # membuat objek atur pengeluaran page
        self.aturpengeluaranpage = AturPengeluaranPage(self.driver)

        # Step 3 - input no rekening di search bar
        self.aturpengeluaranpage.search_data_atur_pengeluaran_not_found()

        # Step 4 - Assertion
        element_text = self.aturpengeluaranpage.get_text(
            Locators.ATUR_PENGELUARAN_INFORMATION_COUNT_DATA)
        self.assertEqual('Menampilkan semua "0 atur pengeluaran"',
                         element_text)
class AturPengeluaranTest(BaseTest):
    def test_search_data_found(self):
        """
        Test case to search data with registered account number
        """

        # create Login page object
        self.loginpage = LoginPage(self.driver)

        # Step 1 - Login
        self.loginpage.login_admin_success()

        # create Dashboard page object
        self.dashboardpage = DashboardPage(self.driver)

        # Step 2 - Click menu Cashflow and choose 'Atur Pengeluaran'
        self.dashboardpage.redirect_to_atur_pengeluaran_page()

        # create 'Atur Pengeluaran' page object
        self.aturpengeluaranpage = AturPengeluaranPage(self.driver)

        # Step 3 - Input registered account number on the search bar
        self.aturpengeluaranpage.search_data_atur_pengeluaran_found()

        # Step 4 - Assertion : The data is presented
        element_text = self.aturpengeluaranpage.get_text(Locators.ATUR_PENGELUARAN_INFORMATION_COUNT_DATA)
        self.assertNotEqual('Menampilkan semua "0 atur pengeluaran"', element_text)

    def test_search_data_not_found(self):
        """
        Test case to search data with unregistered account number
        """

        # create Login page object
        self.loginpage = LoginPage(self.driver)

        # Step 1 - Login
        self.loginpage.login_admin_success()

        # create Dashboard page object
        self.dashboardpage = DashboardPage(self.driver)

        # Step 2 - Click menu Cashflow and choose 'Atur Pengeluaran'
        self.dashboardpage.redirect_to_atur_pengeluaran_page()

        # create 'Atur Pengeluaran' page object
        self.aturpengeluaranpage = AturPengeluaranPage(self.driver)

        # Step 3 - Input unregistered account number on the search bar
        self.aturpengeluaranpage.search_data_atur_pengeluaran_not_found()

        # Step 4 - Assertion : No data is presented
        element_text = self.aturpengeluaranpage.get_text(Locators.ATUR_PENGELUARAN_INFORMATION_COUNT_DATA)
        self.assertEqual('Menampilkan semua "0 atur pengeluaran"', element_text)
class LoginDashboardTest(BaseTest):
    def test_login_superadmin_success(self):
        """
        Test case untuk berhasil login sebagai superadmin

        """
        # membuat objek loginpage
        self.loginpage = LoginPage(self.driver)

        # Step 1 - input username dan password sebagai superadmin kemudian klik login
        self.loginpage.login_superadmin_success()

        # membuat objek dashboard page
        self.dashboardpage = DashboardPage(self.driver)

        # Step 2 - Assertion
        self.dashboardpage.is_visible(Locators.LOGO_DASHBOARD_HEADER)
        self.dashboardpage.is_visible(Locators.ADMIN_MANAGEMENT_MENU_SIDER)

    def test_login_admin_success(self):
        """
        Test case untuk berhasil login sebagai admin

        """
        # membuat objek loginpage
        self.loginpage = LoginPage(self.driver)

        # Step 1 - input username dan password sebagai admiin kemudian klik login
        self.loginpage.login_admin_success()

        # membuat objek dashboard page
        self.dashboardpage = DashboardPage(self.driver)

        # Step 2 - Assertion
        self.dashboardpage.is_visible(Locators.LOGO_DASHBOARD_HEADER)

    def test_login_failed_wrong_username(self):
        """
        Test case untuk memastikan bahwa login akan gagal kemudian muncul toast alert jika username salah

        """
        # membuat objek loginpage
        self.loginpage = LoginPage(self.driver)

        # Step 1 - input wrong username, input password kemudian klik tombol login
        self.loginpage.login_failed_if_wrong_username()

        # Step 2 - Assertion
        self.loginpage.is_visible(Locators.LOGIN_ALERT_TOAST)

    def test_login_failed_wrong_password(self):
        """
        Test case untuk memastikan bahwa login akan gagal kemudian muncul toast alert jika password salah

        """
        # membuat objek loginpage
        self.loginpage = LoginPage(self.driver)

        # Step 1 - input  username, input wrong password kemudian klik tombol login
        self.loginpage.login_failed_if_wrong_password()

        # Step 2 - Assertion
        self.loginpage.is_visible(Locators.LOGIN_ALERT_TOAST)

    def test_login_failed_no_fill_username_password(self):
        """
        Test case untuk memastikan bahwa login akan gagal kemudian mucul warning alert jika tidak menginput username dan password
        """
        # membuat objek loginpage
        self.loginpage = LoginPage(self.driver)

        # Step 1 - no fill username and password, click login button
        self.loginpage.login_login_failed_if_no_fill_username_password()

        # Step 2 - Assertion
        element_text = self.loginpage.get_text(
            Locators.LOGIN_ERROR_ALERT_USERNAME)
        element_text1 = self.loginpage.get_text(
            Locators.LOGIN_ERROR_ALERT_PASSWORD)
        self.assertEqual("Mohon masukkan username", element_text)
        self.assertEqual("Mohon masukkan password", element_text1)
class LoginDashboardTest(BaseTest):
    def test_login_superadmin_success(self):
        """
        Test case Login success as a Super Admin
        """

        # create Login page object
        self.loginpage = LoginPage(self.driver)

        # Step 1 - Input username and password as a Super Admin then click Login button
        self.loginpage.login_superadmin_success()

        # create Dashboard page object
        self.dashboardpage = DashboardPage(self.driver)

        # Step 2 - Assertion : Admin Management side menu is visible
        self.dashboardpage.is_visible(Locators.ADMIN_MANAGEMENT_MENU_SIDE)

    def test_login_admin_success(self):
        """
        Test case Login success as an Admin
        """

        # create Login page object
        self.loginpage = LoginPage(self.driver)

        # Step 1 - Input username and password as an admin then click Login button
        self.loginpage.login_admin_success()

        # create Dashboard page object
        self.dashboardpage = DashboardPage(self.driver)

        # Step 2 - Assertion : Admin Management side menu is not visible
        self.dashboardpage.is_invisible(Locators.ADMIN_MANAGEMENT_MENU_SIDE)

    def test_login_failed_wrong_username(self):
        """
        Test case Login failed with wrong username
        """

        # create Login page object
        self.loginpage = LoginPage(self.driver)

        # Step 1 - Input wrong username, input correct password then click Login button
        self.loginpage.login_failed_if_wrong_username()

        # Step 2 - Assertion : Toast alert is visible
        self.loginpage.is_visible(Locators.LOGIN_ALERT_TOAST)

    def test_login_failed_wrong_password(self):
        """
        Test case Login failed with wrong password
        """

        # create Login page object
        self.loginpage = LoginPage(self.driver)

        # Step 1 - Input correct username, input wrong password then click Login button
        self.loginpage.login_failed_if_wrong_password()

        # Step 2 - Assertion : Toast alert is visible
        self.loginpage.is_visible(Locators.LOGIN_ALERT_TOAST)

    def test_login_failed_no_fill_username_password(self):
        """
        Test case Login failed with no input
        """

        # create Login page object
        self.loginpage = LoginPage(self.driver)

        # Step 1 - Fill no username and password, then click Login button
        self.loginpage.login_login_failed_if_no_fill_username_password()

        # Step 2 - Assertion : Alert message is visible
        element_text1 = self.loginpage.get_text(Locators.LOGIN_ERROR_ALERT_USERNAME)
        element_text2 = self.loginpage.get_text(Locators.LOGIN_ERROR_ALERT_PASSWORD)
        self.assertEqual("Mohon masukkan username", element_text1)
        self.assertEqual("Mohon masukkan password", element_text2)