mangroveorg/datawinners

View on GitHub
func_tests/pages/reminderpage/reminder_settings_page.py

Summary

Maintainability
D
1 day
Test Coverage
from framework.utils.data_fetcher import from_, fetch_
from pages.AutomaticReplySmsPage.automatic_reply_sms_page import AutomaticReplySmsPage
from pages.page import Page
from pages.reminderpage.all_reminder_locator import WARNING_MESSAGE_LABEL, SENT_REMINDERS_LINK
from pages.reminderpage.reminder_settings_locator import *
from datawinners.project.models import Reminder
from tests.remindertests.reminder_data import *
from tests.testsettings import UI_TEST_TIMEOUT
from framework.exception import CouldNotLocateElementException

REPLY_SMS_LINK = by_css('#reply_sms_tab')

class ReminderSettingsPage(Page):
    def __init__(self, driver):
        Page.__init__(self, driver)
        self.enable_reminder = {BEFORE_DEADLINE: self.enable_before_deadline_reminder,
                           ON_DEADLINE: self.enable_on_deadline_reminder,
                           AFTER_DEADLINE: self.enable_after_deadline_reminder}
        self.disable_reminder_dict = {BEFORE_DEADLINE: self.disable_before_deadline_reminder,
                                 ON_DEADLINE: self.disable_on_deadline_reminder,
                           AFTER_DEADLINE: self.disable_after_deadline_reminder}
    def get_frequency(self):
        self.driver.wait_for_element(UI_TEST_TIMEOUT, FREQUENCY_PERIOD_DD, True)
        return self.driver.find_drop_down(FREQUENCY_PERIOD_DD).get_selected()

    def set_frequency(self, frequency):
        self.driver.wait_for_element(UI_TEST_TIMEOUT, FREQUENCY_PERIOD_DD, True)
        self.driver.find_drop_down(FREQUENCY_PERIOD_DD).set_selected_by_text(frequency)

    def get_deadline_type_for_week(self):
        return self.driver.find_drop_down(WEEK_DEADLINE_TYPE_DD).get_selected()

    # def set_deadline_type_for_week(self, deadline_type):
    #     self.driver.find_drop_down(WEEK_DEADLINE_TYPE_DD).set_selected_by_text(deadline_type)

    def set_deadline_type_for_month(self, deadline_type):
        self.driver.find_drop_down(MONTH_DEADLINE_TYPE_DD).set_selected_by_text(deadline_type)

    def get_week_day(self):
        return self.driver.find_drop_down(DAYS_OF_WEEK_DD).get_selected()

    def set_week_day(self, day_name):
        self.driver.find_drop_down(DAYS_OF_WEEK_DD).set_selected_by_text(day_name)

    def set_month_day(self, day_of_the_month):
        self.driver.find_drop_down(DAYS_OF_MONTH_DD).set_selected_by_text(day_of_the_month)

    def get_example_text(self):
        return self.driver.find(DEADLINE_EXAMPLE_LABEL).text

    def enable_before_deadline_reminder(self):
        try:
           self.driver.find(SWITCH_ENABLED_BEFORE_DEADLINE)

        except CouldNotLocateElementException:
           self.driver.find(SWITCH_DISABLED_BEFORE_DEADLINE).click()

    def enable_after_deadline_reminder(self):
        try:
           self.driver.find(SWITCH_ENABLED_AFTER_DEADLINE)

        except CouldNotLocateElementException:
           self.driver.find(SWITCH_DISABLED_AFTER_DEADLINE).click()

    def enable_on_deadline_reminder(self):
        try:
           self.driver.find(SWITCH_ENABLED_ON_DEADLINE)

        except CouldNotLocateElementException:
           self.driver.find(SWITCH_DISABLED_ON_DEADLINE).click()

    def send_reminder_only_ds_not_submitted_data(self):
        checkbox =  self.driver.find(ONLY_DATASENDERS_NOT_SUBMITTED_CB)
        if not checkbox.is_selected():
            checkbox.click()

    def disable_before_deadline_reminder(self):
        checkbox =  self.driver.find(BEFORE_DEADLINE_REMINDER_CB)
        if checkbox.is_selected():
            checkbox.click()

    def disable_on_deadline_reminder(self):
        checkbox =  self.driver.find(ON_DEADLINE_REMINDER_CB)
        if checkbox.is_selected():
            checkbox.click()

    def disable_after_deadline_reminder(self):
        checkbox =  self.driver.find(AFTER_DEADLINE_REMINDER_CB)
        if checkbox.is_selected():
            checkbox.click()

    def send_reminder_to_all(self):
        checkbox =  self.driver.find(ONLY_DATASENDERS_NOT_SUBMITTED_CB)
        if checkbox.is_selected():
            checkbox.click()

    def send_reminder_to_defaulters(self):
        checkbox =  self.driver.find(ONLY_DATASENDERS_NOT_SUBMITTED_CB)
        if not checkbox.is_selected():
            checkbox.click()

    def set_message_for_before_deadline_reminder(self, message):
        textBox = self.driver.find_text_box(BEFORE_DEADLINE_REMINDER_TB).enter_text(message)

    def get_message_of_before_deadline_reminder(self, message):
        return self.driver.find_text_box(BEFORE_DEADLINE_REMINDER_TB).text

    def set_days_for_before_deadline_reminder(self, message):
        self.driver.find_text_box(NUMBER_OF_DAYS_BEFORE_DEADLINE_TB).enter_text(message)

    def get_days_of_before_deadline_reminder(self, message):
        self.driver.find_text_box(NUMBER_OF_DAYS_BEFORE_DEADLINE_TB).text

    def set_message_for_after_deadline_reminder(self, message):
        textBox = self.driver.find_text_box(AFTER_DEADLINE_REMINDER_TB).enter_text(message)

    def get_message_of_after_deadline_reminder(self, message):
        return self.driver.find_text_box(AFTER_DEADLINE_REMINDER_TB).text

    def set_days_for_after_deadline_reminder(self, message):
        self.driver.find_text_box(NUMBER_OF_DAYS_AFTER_DEADLINE_TB).enter_text(message)

    def get_days_of_after_deadline_reminder(self, message):
        return self.driver.find_text_box(NUMBER_OF_DAYS_AFTER_DEADLINE_TB).text

    def set_message_for_on_deadline_reminder(self, message):
        textBox = self.driver.find_text_box(ON_DEADLINE_REMINDER_TB).enter_text(message)

    def get_message_of_on_deadline_reminder(self, message):
        return self.driver.find_text_box(ON_DEADLINE_REMINDER_TB).text

    def save_reminders(self):
        self.driver.find(SAVE_BUTTON).click()

    def navigate_to_automatic_reply_sms_page(self):
        self.driver.find(REPLY_SMS_LINK).click()
        return AutomaticReplySmsPage(self.driver)

    def get_success_message(self):
        return self.driver.find(SUCCESS_MESSAGE_LABEL).text

    def get_reminders_of_project(self, project_id):
        reminder =  Reminder.objects.filter(project_id = project_id)
        reminders = reminder.values("day","message","reminder_mode")
        return reminders

    def get_project_id(self):
        current_url = self.driver.current_url
        values = current_url.split("/")
        return values[values.__len__() - 2]

    def set_reminder(self, reminder_data):
        deadline = fetch_(REMINDER_DEADLINE, from_(reminder_data))
        self.enable_reminder[deadline]()
        if deadline != ON_DEADLINE:
            getattr(self, "set_days_for_%s_reminder" % deadline)(fetch_(DAY, from_(reminder_data)))
        getattr(self, "set_message_for_%s_reminder" % deadline)(fetch_(MESSAGE, from_(reminder_data)))

    def disable_reminder(self, reminder_data):
        deadline = fetch_(REMINDER_DEADLINE, from_(reminder_data))
        self.disable_reminder_dict[deadline]()


    def get_reminder(self, deadline):
        days = "0" if deadline == ON_DEADLINE else getattr(self, "get_days_of_%s_reminder" % deadline)()
        message = getattr(self, "get_message_of_%s_reminder" % deadline)()
        return  {DAY: days, MESSAGE: message, REMINDER_DEADLINE: deadline}

    def set_whom_to_send(self, whom_to_send):
        getattr(self, "send_reminder_to_%s" % whom_to_send)()

    def get_sms_text_length_for_a_reminder_type(self, reminder_type):
        return int(self.driver.find(by_id(SMS_TEXT_COUNTER % reminder_type)).text)

    def set_deadline_by_week(self, deadline):
        self.set_frequency(fetch_(FREQUENCY, from_(deadline)))
        self.set_week_day(fetch_(DAY, from_(deadline)))

    def get_warning_message(self):
        return self.driver.find(WARNING_MESSAGE_LABEL).text

    def click_sent_reminder_tab(self):
        self.driver.find(SENT_REMINDERS_LINK).click()

    @property
    def is_disabled(self):
        elements = self.driver.find_elements_(by_css("input,select"))
        for element in elements:

            if element.is_displayed() and not element.is_enabled():
                return True
        return False