diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/web/static/tests/helpers/test_utils_control_panel.js | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/web/static/tests/helpers/test_utils_control_panel.js')
| -rw-r--r-- | addons/web/static/tests/helpers/test_utils_control_panel.js | 351 |
1 files changed, 351 insertions, 0 deletions
diff --git a/addons/web/static/tests/helpers/test_utils_control_panel.js b/addons/web/static/tests/helpers/test_utils_control_panel.js new file mode 100644 index 00000000..2dda1980 --- /dev/null +++ b/addons/web/static/tests/helpers/test_utils_control_panel.js @@ -0,0 +1,351 @@ +odoo.define('web.test_utils_control_panel', function (require) { + "use strict"; + + const { click, findItem, getNode, triggerEvent } = require('web.test_utils_dom'); + const { editInput, editSelect, editAndTrigger } = require('web.test_utils_fields'); + + //------------------------------------------------------------------------- + // Exported functions + //------------------------------------------------------------------------- + + /** + * @param {EventTarget} el + * @param {(number|string)} menuFinder + * @returns {Promise} + */ + async function toggleMenu(el, menuFinder) { + const menu = findItem(el, `.o_dropdown > button`, menuFinder); + await click(menu); + } + + /** + * @param {EventTarget} el + * @param {(number|string)} itemFinder + * @returns {Promise} + */ + async function toggleMenuItem(el, itemFinder) { + const item = findItem(el, `.o_menu_item > a`, itemFinder); + await click(item); + } + + /** + * @param {EventTarget} el + * @param {(number|string)} itemFinder + * @param {(number|string)} optionFinder + * @returns {Promise} + */ + async function toggleMenuItemOption(el, itemFinder, optionFinder) { + const item = findItem(el, `.o_menu_item > a`, itemFinder); + const option = findItem(item.parentNode, '.o_item_option > a', optionFinder); + await click(option); + } + + /** + * @param {EventTarget} el + * @param {(number|string)} itemFinder + * @returns {boolean} + */ + function isItemSelected(el, itemFinder) { + const item = findItem(el, `.o_menu_item > a`, itemFinder); + return item.classList.contains('selected'); + } + + /** + * @param {EventTarget} el + * @param {(number|string)} itemuFinder + * @param {(number|string)} optionFinder + * @returns {boolean} + */ + function isOptionSelected(el, itemFinder, optionFinder) { + const item = findItem(el, `.o_menu_item > a`, itemFinder); + const option = findItem(item.parentNode, '.o_item_option > a', optionFinder); + return option.classList.contains('selected'); + } + + /** + * @param {EventTarget} el + * @returns {string[]} + */ + function getMenuItemTexts(el) { + return [...getNode(el).querySelectorAll(`.o_dropdown ul .o_menu_item`)].map( + e => e.innerText.trim() + ); + } + + /** + * @param {EventTarget} el + * @returns {HTMLButtonElement[]} + */ + function getButtons(el) { + return [...getNode(el).querySelector((`div.o_cp_bottom div.o_cp_buttons`)).children]; + } + + /** + * @param {EventTarget} el + * @returns {Promise} + */ + async function toggleFilterMenu(el) { + await click(getNode(el).querySelector(`.o_filter_menu button`)); + } + + /** + * @param {EventTarget} el + * @returns {Promise} + */ + async function toggleAddCustomFilter(el) { + await click(getNode(el).querySelector(`button.o_add_custom_filter`)); + } + + /** + * @param {EventTarget} el + * @returns {Promise} + */ + async function applyFilter(el) { + await click(getNode(el).querySelector(`div.o_add_filter_menu > button.o_apply_filter`)); + } + + /** + * @param {EventTarget} el + * @returns {Promise} + */ + async function toggleGroupByMenu(el) { + await click(getNode(el).querySelector(`.o_group_by_menu button`)); + } + + /** + * @param {EventTarget} el + * @returns {Promise} + */ + async function toggleAddCustomGroup(el) { + await click(getNode(el).querySelector(`button.o_add_custom_group_by`)); + } + + /** + * @param {EventTarget} el + * @param {string} fieldName + * @returns {Promise} + */ + async function selectGroup(el, fieldName) { + await editSelect( + getNode(el).querySelector(`select.o_group_by_selector`), + fieldName + ); + } + + /** + * @param {EventTarget} el + * @returns {Promise} + */ + async function applyGroup(el) { + await click(getNode(el).querySelector(`div.o_add_group_by_menu > button.o_apply_group_by`)); + } + + /** + * @param {EventTarget} el + * @returns {Promise} + */ + async function toggleFavoriteMenu(el) { + await click(getNode(el).querySelector(`.o_favorite_menu button`)); + } + + /** + * @param {EventTarget} el + * @returns {Promise} + */ + async function toggleSaveFavorite(el) { + await click(getNode(el).querySelector(`.o_favorite_menu .o_add_favorite button`)); + } + + /** + * @param {EventTarget} el + * @param {string} name + * @returns {Promise} + */ + async function editFavoriteName(el, name) { + await editInput(getNode(el).querySelector(`.o_favorite_menu .o_add_favorite input[type="text"]`), name); + } + + /** + * @param {EventTarget} el + * @returns {Promise} + */ + async function saveFavorite(el) { + await click(getNode(el).querySelector(`.o_favorite_menu .o_add_favorite button.o_save_favorite`)); + } + + /** + * @param {EventTarget} el + * @param {(string|number)} favoriteFinder + * @returns {Promise} + */ + async function deleteFavorite(el, favoriteFinder) { + const favorite = findItem(el, `.o_favorite_menu .o_menu_item`, favoriteFinder); + await click(favorite.querySelector('i.fa-trash-o')); + } + + /** + * @param {EventTarget} el + * @returns {Promise} + */ + async function toggleComparisonMenu(el) { + await click(getNode(el).querySelector(`div.o_comparison_menu > button`)); + } + + /** + * @param {EventTarget} el + * @returns {Promise} + */ + function getFacetTexts(el) { + return [...getNode(el).querySelectorAll(`.o_searchview .o_searchview_facet`)].map( + facet => facet.innerText.trim() + ); + } + + /** + * @param {EventTarget} el + * @param {(string|number)} facetFinder + * @returns {Promise} + */ + async function removeFacet(el, facetFinder = 0) { + const facet = findItem(el, `.o_searchview .o_searchview_facet`, facetFinder); + await click(facet.querySelector('.o_facet_remove')); + } + + /** + * @param {EventTarget} el + * @param {string} value + * @returns {Promise} + */ + async function editSearch(el, value) { + await editInput(getNode(el).querySelector(`.o_searchview_input`), value); + } + + /** + * @param {EventTarget} el + * @returns {Promise} + */ + async function validateSearch(el) { + await triggerEvent( + getNode(el).querySelector(`.o_searchview_input`), + 'keydown', { key: 'Enter' } + ); + } + + /** + * @param {EventTarget} el + * @param {string} [menuFinder="Action"] + * @returns {Promise} + */ + async function toggleActionMenu(el, menuFinder = "Action") { + const dropdown = findItem(el, `.o_cp_action_menus button`, menuFinder); + await click(dropdown); + } + + /** + * @param {EventTarget} el + * @returns {Promise} + */ + async function pagerPrevious(el) { + await click(getNode(el).querySelector(`.o_pager button.o_pager_previous`)); + } + + /** + * @param {EventTarget} el + * @returns {Promise} + */ + async function pagerNext(el) { + await click(getNode(el).querySelector(`.o_pager button.o_pager_next`)); + } + + /** + * @param {EventTarget} el + * @returns {string} + */ + function getPagerValue(el) { + const pagerValue = getNode(el).querySelector(`.o_pager_counter .o_pager_value`); + switch (pagerValue.tagName) { + case 'INPUT': + return pagerValue.value; + case 'SPAN': + return pagerValue.innerText.trim(); + } + } + + /** + * @param {EventTarget} el + * @returns {string} + */ + function getPagerSize(el) { + return getNode(el).querySelector(`.o_pager_counter span.o_pager_limit`).innerText.trim(); + } + + /** + * @param {EventTarget} el + * @param {string} value + * @returns {Promise} + */ + async function setPagerValue(el, value) { + let pagerValue = getNode(el).querySelector(`.o_pager_counter .o_pager_value`); + if (pagerValue.tagName === 'SPAN') { + await click(pagerValue); + } + pagerValue = getNode(el).querySelector(`.o_pager_counter input.o_pager_value`); + if (!pagerValue) { + throw new Error("Pager value is being edited and cannot be changed."); + } + await editAndTrigger(pagerValue, value, ['change', 'blur']); + } + + /** + * @param {EventTarget} el + * @param {string} viewType + * @returns {Promise} + */ + async function switchView(el, viewType) { + await click(getNode(el).querySelector(`button.o_switch_view.o_${viewType}`)); + } + + return { + // Generic interactions + toggleMenu, + toggleMenuItem, + toggleMenuItemOption, + isItemSelected, + isOptionSelected, + getMenuItemTexts, + // Button interactions + getButtons, + // FilterMenu interactions + toggleFilterMenu, + toggleAddCustomFilter, + applyFilter, + // GroupByMenu interactions + toggleGroupByMenu, + toggleAddCustomGroup, + selectGroup, + applyGroup, + // FavoriteMenu interactions + toggleFavoriteMenu, + toggleSaveFavorite, + editFavoriteName, + saveFavorite, + deleteFavorite, + // ComparisonMenu interactions + toggleComparisonMenu, + // SearchBar interactions + getFacetTexts, + removeFacet, + editSearch, + validateSearch, + // Action menus interactions + toggleActionMenu, + // Pager interactions + pagerPrevious, + pagerNext, + getPagerValue, + getPagerSize, + setPagerValue, + // View switcher + switchView, + }; +}); |
