Exemplo n.º 1
0
    def role_update(self, companyname, rolename, valuedict, expectation="pass"):

        self.start_test(locals())

        companyname, rolename, key, value, expectation = self.process_update_input(companyname=companyname,
                                                                                                rolename=rolename,
                                                                                                valuedict=valuedict,
                                                                                                expectation=expectation)
        self.login_company_admin()

        self.choose_company(companyname=companyname)

        self.role_manage_enter()

        found_role = self.role_search(rolename=rolename)
        if found_role == {}:
            self.assertTrue(False, "Cannot find role: " + rolename)

        found_correct = found_role["rolename"] == rolename
        print("Found info: \n" + str(found_role))
        self.assert_true(found_correct,
                         "Found info doesn't match \n" + "Try to find: " + rolename + "\n But find " + str(
                             found_role))

        edit_selector = str(found_role["edit_selector"])
        self.role_update_start(edit_selector)

        role_entity = Role()
        role = rolename
        service_list = None
        user_list = None
        if "rolename" in key:
            role = str(value["rolename"])
            self.role_create_update_set_rolename(role)

        if "service" in key:
            service_list = str(value["service"])
            service_list = utilities.str_to_list(service_list)
            fail_msg = None
            self.role_create_update_set_service_list(service_list=service_list, fail_msg=fail_msg, expectation=expectation)

        if "user" in key:
            user_list = str(value["user"])
            user_list = utilities.str_to_list(user_list)
            fail_msg = None
            self.role_create_update_set_user_list(user_list=user_list, fail_msg=fail_msg, expectation=expectation)

        self.role_create_update_submit(expectation)

        if expectation == "pass":
            time.sleep(10)  # Too slowly to refresh record in page
            self.verify_role_info(role, service_list, user_list)

        self.logout(COMPANYADMIN_ACCOUNT)

        self.end_test(self._testMethodName)
Exemplo n.º 2
0
    def get_flat_authority_info(self, column="site"):

        df = self.df[["email", "company", column]]

        #print("Original df: " + str(df))
        flat_authority_df = pd.DataFrame(columns=["company", column, "email"])
        for index, row in df.iterrows():
            email = row["email"]
            company_list = utilities.str_to_list(row["company"])
            site_dict = utilities.str_to_dict(row[column])
            if company_list is None or company_list == []:
                continue
            for company in company_list:
                to_append_list = ["", "", ""]
                to_append_list[0] = company
                to_append_list[2] = email
                if site_dict is None or site_dict == {}:
                    continue
                site_list = site_dict[company]
                for site in site_list:
                    to_append_list[1] = site
                    flat_authority_df = flat_authority_df.append(
                        pd.Series(to_append_list,
                                  index=['company', column, 'email']),
                        ignore_index=True)

        return flat_authority_df
Exemplo n.º 3
0
    def update_authority_list_value_column(self,
                                           email,
                                           column,
                                           value: list,
                                           action="add"):
        if value is None:
            return False

        existing_value = utilities.str_to_list(
            list(self.df.loc[self.df.email == email, column])[0])
        if existing_value is None:
            existing_value = []
        print("existing_value: " + str(existing_value))
        print("value to process: " + str(value))
        if action == "add":
            existing_value.extend(value)
            dest_value = existing_value
            print(dest_value)
            dest_value = list(set(dest_value))
        elif action == "remove":
            dest_value = list(set(existing_value) - set(value))
        else:
            print("Wrong action")
            return False

        dest_value = utilities.list_to_str(dest_value)
        self.df.loc[self.df.email == email, column] = dest_value
        return True
Exemplo n.º 4
0
    def replace_any_with_specific_site(self, flat_authority_df):
        entity = Entity()
        entity_df = entity.df
        columns = flat_authority_df.keys()
        dest_flat_authority_df = pd.DataFrame(columns=columns)
        for index, row in flat_authority_df.iterrows():
            to_append_list = ["", "", ""]
            if row["site"] == SITE_ANY_SITE:
                #print("get site record")
                #print(list(entity_df[entity_df["company"] == row["company"]]))
                site_value = list(
                    entity_df[entity_df["company"] == row["company"]]["site"])
                if site_value != [] and site_value is not None:
                    site_list = utilities.str_to_list(site_value[0])
                    if site_list is not None and len(site_list) > 0:
                        for site in site_list:
                            to_append_list[0] = row["company"]
                            to_append_list[1] = site
                            to_append_list[2] = row["email"]
                            dest_flat_authority_df = dest_flat_authority_df.append(
                                pd.Series(to_append_list, index=columns),
                                ignore_index=True)
            else:
                dest_flat_authority_df = dest_flat_authority_df.append(
                    pd.Series(row, index=columns), ignore_index=True)

        #print("anysite_processed_flat_authority_df: " + str(dest_flat_authority_df))
        return dest_flat_authority_df
Exemplo n.º 5
0
    def update_entity_key_list_value_column(self, company, column, value: dict, action="add"):

        if value is None:
            return False

        print("Start update_entity_profile_key_list_value_column")
        print(locals())

        existing_key_value = list(self.df.loc[self.df.company == company, column])[0]
        print("existing_key_value from df: " + str(existing_key_value))
        if existing_key_value is None:
            existing_key_value = {}
        else:
            existing_key_value = eval(existing_key_value)
        print("existing_key_value from df: " + str(existing_key_value))
        for ex_key, ex_value in existing_key_value.items():
            existing_key_value[ex_key] = utilities.str_to_list(str(ex_value))
        print("existing_key_value_list: " + str(existing_key_value))

        print("value to process: " + str(value))
        (to_key, to_value), = dict(value).items()

        if existing_key_value == {}:
            if action == "add":
                dest_key_value = dict(value)
            if action == "remove":
                dest_key_value = existing_key_value

        if (existing_key_value != {}) and (to_key not in existing_key_value.keys()):
            if action == "add":
                dest_key_value = {**existing_key_value, **dict(value)}
            if action == "remove":
                dest_key_value = existing_key_value

        if (existing_key_value != {}) and (to_key in existing_key_value.keys()):
            for ex_key, ex_value in existing_key_value.items():
                if ex_key == to_key:
                    if action == "add":
                        ex_value.extend(to_value)
                        existing_key_value[ex_key] = list(set(ex_value))
                    if action == "remove":
                        existing_key_value[ex_key] = list(set(ex_value) - set(to_value))
            dest_key_value = existing_key_value

        print("dest_key_value: " + str(dest_key_value))

        dest_value = utilities.dict_to_str(dest_key_value)
        print("dest_value: " + str(dest_value))

        self.df.loc[self.df.company == company, column] = dest_value
        print(self.df)

        return True
Exemplo n.º 6
0
    def get_user_info(self, email, column):

        if column not in AUTHORITY_COLUMNS:
            return None

        info = list(self.df[self.df["email"] == email][column])
        if len(info) > 0:
            if column in AUTHORITY_SINGLE_VALUE_COLUMNS:
                return str(info[0])
            if column in AUTHORITY_LIST_VALUE_COLUMNS:
                return utilities.str_to_list(str(info[0]))
            if column in AUTHORITY_KEY_LIST_VALUE_COLUMNS:
                return utilities.str_to_dict(str(info[0]))
    def verify_company_info(self, companyname, status, email_list):
        print("Start to verify company info")
        print(locals())

        found_company = self.company_search(companyname)
        if found_company == {}:
            self.assertTrue(False, "Cannot find company: " + companyname)
        correct_info = found_company["companyname"] == companyname
        if correct_info and status != None:
            correct_info = correct_info and found_company["status"] == status
        if correct_info and email_list != None:
            companyadmin_list = found_company["companyadmin"]
            companyadmin_list = utilities.str_to_list(companyadmin_list)
            email_list = list(set(email_list))
            correct_info = correct_info and sorted(companyadmin_list) == sorted(email_list)

        # print(found_company)
        if not correct_info:
            print("Company info doesn't match")
            print("Expected: " + companyname + "   " + str(status) + "    " + str(email_list))
            print("Got: " + str(found_company))
        self.assertTrue(correct_info, "Company info doesn't match \n" + "Expected: " + companyname + "   " + str(status) + "    " + str(email_list) + "\n" + "Got: " + str(found_company))
Exemplo n.º 8
0
    def get_email_list(self, bycolumn=None, value=None, company=None):

        print("In Authority get_email_list")
        print(locals())

        df = pd.DataFrame(columns=self.df.keys())
        for id, row in self.df.iterrows():
            if company in row["company"]:
                df = df.append(row)

        if bycolumn not in AUTHORITY_COLUMNS:
            return None

        if bycolumn is None and value is None:
            email_list = list(df["email"])

        if bycolumn in AUTHORITY_SINGLE_VALUE_COLUMNS:
            email_list = list(df[df[bycolumn] == value]["email"])

        if bycolumn in AUTHORITY_LIST_VALUE_COLUMNS:
            email_list = []
            for index, item in df.iterrows():
                if value in utilities.str_to_list(item[bycolumn]):
                    email_list.append(item["email"])

        if bycolumn in AUTHORITY_KEY_LIST_VALUE_COLUMNS:
            email_list = []
            for index, item in df.iterrows():
                print("Content of item: " + str(item))
                info_dict = utilities.str_to_dict(item[bycolumn])
                for info_key, info_value in info_dict.items():
                    print("item['email']: " + str(item["email"]))
                    print("info_value in item: " + str(info_value))
                    if value in info_value:
                        email_list.append(item["email"])

        return email_list
    def user_search(self, username):
        # Only return one user with latest date
        #Todo: use option selector

        print("Search: " + username)
        total_selector = "#pane-2 > div > div:nth-child(2) > div:nth-child(2) > div > span.el-pagination__total"
        total, perpage, pages, next_page_selector_str, previous_page_selector_str = self.get_page_navigation_info(
            total_selector)

        if username == "":
            return {}

        info_dict = {}
        max_date = "Jan 01, 2020"
        dest_page = 0

        for i in range(pages):
            page = i + 1
            if page > 1:
                self.click(next_page_selector_str)
            print("Start search in page: " + str(page))

            if page == pages:
                rows = total % perpage
                if rows == 0:
                    rows = perpage
            else:
                rows = perpage
            print("In page: " + str(page) + " " + str(rows) + " rows exist")
            """
            '//*[@id="pane-2"]/div/div[2]/div[1]/div[1]/div[3]/table/tbody/tr[1]/td[1]/div'
            '//*[@id="pane-2"]/div/div[2]/div[1]/div[1]/div[3]/table/tbody/tr[1]/td[2]/div'
            '//*[@id="pane-2"]/div/div[2]/div[1]/div[1]/div[3]/table/tbody/tr[2]/td[1]/div'
            '//*[@id="pane-2"]/div/div[2]/div[1]/div[1]/div[3]/table/tbody/tr[2]/td[1]/div'
            '//*[@id="pane-2"]/div/div[2]/div[1]/div[1]/div[3]/table/tbody/tr[1]/td[7]/div/button[1]/span'
            '//*[@id="pane-2"]/div/div[2]/div[1]/div[1]/div[3]/table/tbody/tr[1]/td[7]/div/button[2]/span'
            """
            selector_str_1 = '//*[@id="pane-2"]/div/div[2]/div[1]/div[1]/div[3]/table/tbody/tr['
            selector_str_2 = ']/td['
            selector_str_3 = ']/div'
            for r in range(rows):
                date_selector_str = selector_str_1 + str(
                    r + 1) + selector_str_2 + '1' + selector_str_3
                name_selector_str = selector_str_1 + str(
                    r + 1) + selector_str_2 + '2' + selector_str_3
                display_name_selector_str = selector_str_1 + str(
                    r + 1) + selector_str_2 + '3' + selector_str_3
                status_selector_str = selector_str_1 + str(
                    r + 1) + selector_str_2 + '4' + selector_str_3
                site_selector_str = selector_str_1 + str(
                    r + 1) + selector_str_2 + '5' + selector_str_3
                role_selector_str = selector_str_1 + str(
                    r + 1) + selector_str_2 + '6' + selector_str_3
                edit_selector_str = selector_str_1 + str(
                    r + 1
                ) + selector_str_2 + '7' + selector_str_3 + "/button[1]/span"
                # edit_selector_str = '//*[@id="pane-2"]/div/div[2]/div[1]/div[1]/div[3]/table/tbody/tr[' + str(r+1) + ']/td[7]/div/button[1]/span'
                delete_selector_str = selector_str_1 + str(
                    r + 1
                ) + selector_str_2 + '7' + selector_str_3 + "/button[2]/span"
                # delete_selector_str = '//*[@id="pane-2"]/div/div[2]/div[1]/div[1]/div[3]/table/tbody/tr[' + str(r+1) + ']/td[7]/div/button[2]/span'

                if self.is_element_present(name_selector_str):
                    row_date = self.get_text(date_selector_str)
                    row_username = self.get_text(name_selector_str)

                    print("In row: " + str(r + 1) + " username: "******" date: " + row_date)
                    if row_username == username and datetime.datetime.strptime(
                            str(row_date),
                            '%b %d, %Y').date() > datetime.datetime.strptime(
                                str(max_date), '%b %d, %Y').date():
                        max_date = row_date
                        dest_page = page
                        print("Got one match max_date:  " + max_date +
                              "   dest_page:  " + str(dest_page))

                        info_dict["date"] = row_date
                        info_dict["username"] = row_username
                        info_dict["display_name"] = self.get_text(
                            display_name_selector_str)
                        info_dict["status"] = self.get_text(
                            status_selector_str)
                        info_dict["site_list"] = utilities.str_to_list(
                            self.get_text(site_selector_str))
                        info_dict["role_list"] = utilities.str_to_list(
                            self.get_text(role_selector_str))
                        info_dict["edit_selector"] = edit_selector_str
                        info_dict["delete_selector"] = delete_selector_str
                        info_dict["name_selector"] = name_selector_str
                        info_dict["date_selector"] = date_selector_str
                else:
                    print("Selector str doesn't match")
        if int(dest_page) > 0:
            for i in range(pages - dest_page):
                # self.type(".el-pagination__editor > .el-input__inner", str(dest_page) + Keys.ENTER)
                self.click(previous_page_selector_str)
                # self.wait_for_ready_state_complete()
                print("Go to page:  " + str(pages - i - 1))
        print("Finally got max_date:  " + max_date + "   dest_page:  " +
              str(dest_page))

        print("return info_dict: " + str(info_dict))
        return info_dict
Exemplo n.º 10
0
    def company_update(self, companyname, valuedict, expectation):

        self.start_test(locals())

        companyname, key, value, expectation = self.process_update_input(
            companyname, valuedict, expectation)

        self.login_sysadmin()

        found_company = self.company_search(companyname)
        if found_company == {}:
            self.assertTrue(False, "Cannot find company: " + companyname)

        found_correct = found_company["companyname"] == companyname \
                        and self.get_text(found_company["name_selector"]) == found_company["companyname"] \
                        and self.get_text(found_company["id_selector"]) == found_company["id"]
        print("Found info: \n" + str(found_company))
        self.assert_true(
            found_correct,
            "Found info doesn't match what show on user interface \n" +
            "Try to find: " + companyname + "\n But find " +
            str(found_company))

        edit_selector = str(found_company["edit_selector"])

        if True:
            self.company_update_start(edit_selector)
            authority = Authority()

            company = companyname
            if "companyname" in key:
                company = str(value["companyname"])
                self.company_create_update_set_companyname(company)
                email_list = authority.get_email_list(bycolumn="company",
                                                      value=companyname)
                for email in email_list:
                    authority.update_authority_list_value_column(
                        email=email,
                        column="company",
                        value=[companyname],
                        action="remove")
                    authority.update_authority_list_value_column(
                        email=email,
                        column="company",
                        value=[company],
                        action="add")

            if "status" in key:
                status = str(value["status"])
                self.company_create_update_set_status(status)
            else:
                status = None

            if "email" in key:
                email_list = str(value["email"])
                email_list = utilities.str_to_list(email_list)
                if expectation == "illegal_email_msg":
                    fail_msg = "The email address is invalid"
                else:
                    fail_msg = None
                self.company_create_update_set_email(email_list=email_list,
                                                     fail_msg=fail_msg,
                                                     expectation=expectation)

                # deal with user profile
                # email list connected with target company
                existing_connected_email_list = authority.get_email_list(
                    bycolumn="company", value=company)

                to_add_connection_email_list = [
                    i for i in email_list
                    if i not in existing_connected_email_list
                ]
                print("To_add_connection_email_list:   " +
                      str(to_add_connection_email_list))
                for email in to_add_connection_email_list:
                    authority.add_authority(email=email, company=[company])

                to_delete_email_list = [
                    i for i in existing_connected_email_list
                    if i not in email_list
                ]
                print("To_delete_email_list:   " +
                      str(to_delete_email_list))  #remove connection
                for email in to_delete_email_list:
                    authority.update_authority_list_value_column(
                        email=email,
                        column="company",
                        value=[company],
                        action="remove")
            else:
                email_list = None

            self.company_create_update_submit(expectation)

            if expectation == "pass":
                self.verify_company_info(company, status, email_list)
                print("start to update user profile with: \n" +
                      str(authority.df))
                authority.commit()

        self.logout()

        self.end_test(self._testMethodName)
    def role_search(self, rolename):
        # Only return one role with latest date
        # Todo: use option selector

        print("Search: " + rolename)

        if rolename == "":
            return {}

        total_selector = "#pane-1 > div > div:nth-child(2) > div:nth-child(2) > div > span.el-pagination__total"
        total, perpage, pages, next_page_selector_str, previous_page_selector_str = self.get_page_navigation_info(
            total_selector)
        info_dict = {}
        max_date = "Jan 01, 2020"
        dest_page = 0

        for i in range(pages):
            page = i + 1
            if page > 1:
                self.click(next_page_selector_str)
            print("Start search in page: " + str(page))

            if page == pages:
                rows = total % perpage
                if rows == 0:
                    rows = perpage
            else:
                rows = perpage
            print("In page: " + str(page) + " " + str(rows) + " rows exist")

            source = self.get_page_source()
            soup = self.get_beautiful_soup(source)
            tables = soup.find_all(name="table", class_="el-table__body")
            # print("Get " + str(len(tables)) + " tables") table for site admin, role admin, user admin are together
            table = tables[1]
            tr = table.find('tr')

            for r in range(rows):
                tds = tr.find_all('td', recursive=False)
                #print(tds[0].get_text(separator=';'))
                #print(tds[1].get_text(separator=';'))
                #print(tds[2].get_text(separator=';'))
                #print(tds[3].get_text(separator=';'))
                #print(tds[4].get_text(separator=';'))
                row_date = tds[0].get_text(separator=';').strip()
                row_rolename = tds[1].get_text(separator=';').strip()
                print("In row: " + str(r + 1) + " rolename: " + row_rolename +
                      " date: " + row_date)

                if row_rolename == rolename and datetime.datetime.strptime(
                        str(row_date),
                        '%b %d, %Y').date() > datetime.datetime.strptime(
                            str(max_date), '%b %d, %Y').date():
                    max_date = row_date
                    dest_page = page
                    print("Got one match max_date:  " + max_date +
                          "   dest_page:  " + str(dest_page))

                    info_dict["rolename"] = row_rolename
                    info_dict["date"] = row_date
                    info_dict["preset"] = tds[2].get_text(
                        separator=';').strip()
                    info_dict["service_list"] = utilities.str_to_list(
                        tds[3].get_text(separator=';').strip())
                    info_dict["user_list"] = utilities.str_to_list(
                        tds[4].get_text(separator=';').strip())
                    edit_selector_str = ".el-table__row:nth-child(" + str(
                        r + 1) + ") .el-button:nth-child(1) > span"
                    delete_selector_str = ".el-table__row:nth-child(" + str(
                        r + 1) + ") .el-button:nth-child(2) > span"
                    info_dict["edit_selector"] = edit_selector_str
                    info_dict["delete_selector"] = delete_selector_str
                    info_dict["name_selector"] = None
                    info_dict["date_selector"] = None

                tr = tr.find_next_sibling()

        if int(dest_page) > 0:
            for i in range(pages - dest_page):
                # self.type(".el-pagination__editor > .el-input__inner", str(dest_page) + Keys.ENTER)
                self.click(previous_page_selector_str)
                # self.wait_for_ready_state_complete()
                print("Go to page:  " + str(pages - i - 1))
        print("Finally got max_date:  " + max_date + "   dest_page:  " +
              str(dest_page))
        print("Got info_dict: " + str(info_dict))
        return info_dict
Exemplo n.º 12
0
    def site_search(self, sitename):
        # Only return one site with latest date
        #Todo: use option selector

        print("Search: " + sitename)
        total_selector = "#pane-0 > div > div:nth-child(2) > div:nth-child(2) > div > span.el-pagination__total"
        total, perpage, pages, next_page_selector_str, previous_page_selector_str = self.get_page_navigation_info(
            total_selector)

        if sitename == "":
            return {}

        info_dict = {}
        max_date = "Jan 01, 2020"
        dest_page = 0

        for i in range(pages):
            page = i + 1
            if page > 1:
                self.click(next_page_selector_str)
            print("Start search in page: " + str(page))

            if page == pages:
                rows = total % perpage
                if rows == 0:
                    rows = perpage
            else:
                rows = perpage
            print("In page: " + str(page) + " " + str(rows) + " rows exist")

            for r in range(rows):
                date_selector_str = "//tr[" + str(r + 1) + "]/td[1]/div"
                name_selector_str = "//tr[" + str(r + 1) + "]/td[2]/div"
                address_selector_str = "//tr[" + str(r + 1) + "]/td[3]/div"
                label_selector_str = "//tr[" + str(r + 1) + "]/td[4]/div"
                user_selector_str = "//tr[" + str(r + 1) + "]/td[5]/div"
                # user_selector_str = '//*[@id="pane-0"]/div/div[2]/div[1]/div[1]/div[3]/table/tbody/tr[' + str(r + 1) + ']/td[5]/div/table'
                edit_selector_str = ".el-table__row:nth-child(" + str(
                    r + 1) + ") .el-button:nth-child(1) > span"
                # edit_selector_str = "/tr[" + str(r+1) +"]/td[7]/div/button[1]/span"
                delete_selector_str = ".el-table__row:nth-child(" + str(
                    r + 1) + ") .el-button:nth-child(2) > span"
                # delete_selector_str = "/tr[" + str(r+1) +"]/td[7]/div/button[2]/span"

                if self.is_element_present(name_selector_str):
                    row_sitename = self.get_text(name_selector_str)
                    row_date = self.get_text(date_selector_str)
                    print("In row: " + str(r + 1) + " sitename: " +
                          row_sitename + " date: " + row_date)
                    if row_sitename == sitename and datetime.datetime.strptime(
                            str(row_date),
                            '%b %d, %Y').date() > datetime.datetime.strptime(
                                str(max_date), '%b %d, %Y').date():
                        max_date = row_date
                        dest_page = page
                        print("Got one match max_date:  " + max_date +
                              "   dest_page:  " + str(dest_page))

                        info_dict["sitename"] = row_sitename
                        info_dict["date"] = row_date
                        info_dict["address"] = self.get_text(
                            address_selector_str)
                        info_dict["label_list"] = utilities.str_to_list(
                            self.get_text(label_selector_str))
                        if not self.is_element_present(user_selector_str):
                            time.sleep(10)
                        print("Got user list from page: " +
                              self.get_text(user_selector_str))
                        info_dict["user_list"] = utilities.str_to_list(
                            self.get_text(user_selector_str))
                        info_dict["edit_selector"] = edit_selector_str
                        info_dict["delete_selector"] = delete_selector_str
                        info_dict["name_selector"] = name_selector_str
                        info_dict["date_selector"] = date_selector_str
        if int(dest_page) > 0:
            for i in range(pages - dest_page):
                # self.type(".el-pagination__editor > .el-input__inner", str(dest_page) + Keys.ENTER)
                self.click(previous_page_selector_str)
                # self.wait_for_ready_state_complete()
                print("Go to page:  " + str(pages - i - 1))
        print("Finally got max_date:  " + max_date + "   dest_page:  " +
              str(dest_page))
        return info_dict