import pytest import allure from assertpy import assert_that from src.data.entities_data import entity_types @allure.description("As user I want to add artist to category and remove it") @pytest.mark.usefixtures("app") class TestSaveEntityToCategory: @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-222") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-239") @allure.title("Add entity to Category (no existing categories)") @pytest.mark.regression @pytest.mark.parametrize('entity_type', entity_types) def test_add_entity_to_new_category(self, entity_type): entity = self.app.api.get_random_entity(entity_type) entity_id = entity['id'] entity_name = entity['name'] self.app.go_to(f"/{entity_type}/{entity_id}") self.artist_page.btn_add_to_category.click() self.common_page.modal_lb_add_to_category.exists() self.common_page.modal_btn_create_and_save.is_enabled(False) category_name = f"Cat for {entity_name}" self.common_page.placeholder_category_title.input_text(category_name) self.common_page.modal_btn_create_and_save.click() alert_msg = self.common_page.alert_msg.get_text() assert_that(alert_msg).is_equal_to( f'{entity_name}  is added to the {category_name} category.') # Check Category is created and artist is saved in it category = [cat for cat in self.app.api.get_user_categories() if cat['name'] == category_name] category_entities = self.app.api.get_category_entities(category[0]['id']) saved_to_category_item = category_entities[0] assert_that(saved_to_category_item["entity_type"]).is_equal_to(entity_type) assert_that(saved_to_category_item["id"]).is_equal_to(entity_id) assert_that(saved_to_category_item["name"]).is_equal_to(entity_name) # Check category label on the page self.artist_page.entity_category.get_by(1).contain_text(category_name) self.artist_page.entity_category.get_by(1).click() self.category_page.is_page_loaded() @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-223") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-240") @allure.title("Add entity to Category (many existing categories)") @pytest.mark.regression @pytest.mark.parametrize('entity_type', entity_types) def test_add_entity_to_existent_category(self, entity_type): category_name_home = f"autotest {entity_type} cat home" category_name_2 = f"autotest {entity_type} cat aaa" category_name_3 = f"autotest {entity_type} cat bbb" self.app.api.insert_category(category_name_home, True) self.app.api.insert_category(category_name_2, False) self.app.api.insert_category(category_name_3, False) entity = self.app.api.get_random_entity(entity_type) entity_id = entity['id'] entity_name = entity['name'] self.app.go_to(f"/{entity_type}/{entity_id}") # Add Artist to category self.artist_page.btn_add_to_category.click() self.common_page.modal_lb_add_to_category.exists() self.common_page.modal_category_dropdown.select_option(category_name_3) self.common_page.modal_btn_save.click() alert_msg = self.common_page.alert_msg.get_text() assert_that(alert_msg).is_equal_to( f'{entity_name}  is added to the {category_name_3} category.') # Check artist is saved in appropriate category category_3 = [cat for cat in self.app.api.get_user_categories() if cat['name'] == category_name_3] category_entities = self.app.api.get_category_entities(category_3[0]['id']) saved_to_category_item = category_entities[0] print(saved_to_category_item) assert_that(saved_to_category_item["entity_type"]).is_equal_to(entity_type) assert_that(saved_to_category_item["id"]).is_equal_to(entity_id) assert_that(saved_to_category_item["name"]).is_equal_to(entity_name) # Check others categories are empty category_2 = [cat for cat in self.app.api.get_user_categories() if cat['name'] == category_name_2] category_2_entities = self.app.api.get_category_entities(category_2[0]['id']) assert_that(category_2_entities).is_none() category_home = [cat for cat in self.app.api.get_user_categories() if cat['name'] == category_name_home] category_home_entities = self.app.api.get_category_entities(category_home[0]['id']) assert_that(category_home_entities).is_none() # Save to 1 more category self.artist_page.btn_add_to_category.click() self.common_page.modal_category_dropdown.select_option(category_name_2) self.common_page.modal_btn_save.click() # Check categories label on the page self.artist_page.entity_category.get_by(1).contain_text(category_name_2) self.artist_page.entity_category.get_by(2).contain_text(category_name_3) self.artist_page.entity_category.get_by(1).click() self.category_page.is_page_loaded() @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-228") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-241") @allure.title("Remove entity from the category") @pytest.mark.regression @pytest.mark.parametrize('entity_type', entity_types) def test_remove_entity_from_category(self, entity_type): entity = self.app.api.get_random_entity(entity_type) entity_id = entity['id'] entity_name = entity['name'] # Insert artist to several categories category_name_1 = f'cat1 for {entity_name}' category_name_2 = f'cat2 for {entity_name}' category_id_1 = self.app.api.insert_category(category_name_1) category_id_2 = self.app.api.insert_category(category_name_2) self.app.api.insert_entity_to_category(category_id_1, entity_id, entity_type) self.app.api.insert_entity_to_category(category_id_2, entity_id, entity_type) self.app.go_to(f"/{entity_type}/{entity_id}") # Check categories label on the page self.artist_page.entity_category.get_by(1).contain_text(category_name_1) self.artist_page.entity_category.get_by(2).contain_text(category_name_2) # Remove 1 category - cancel self.artist_page.btn_remove_entity_category.get_by(1).click() self.common_page.modal_lb_remove_from_category.exists() self.common_page.modal_btn_cancel.click() self.artist_page.entity_category.get_by(1).contain_text(category_name_1) self.artist_page.entity_category.get_by(2).contain_text(category_name_2) # Remove 1 category - remove self.artist_page.btn_remove_entity_category.get_by(1).click() self.common_page.modal_btn_remove.click() self.artist_page.entity_category.get_by(1).contain_text(category_name_2)