import QtQuick 2.15 import QtQuick.Controls 2.15 import QtTest 1.15 import AppLayouts.Wallet.panels 1.0 import Storybook 1.0 import Models 1.0 Item { id: root width: 600 height: 400 ManageCollectiblesModel { id: collectiblesModel } Component { id: componentUnderTest ManageCollectiblesPanel { id: showcasePanel width: 500 baseModel: collectiblesModel } } TestCase { name: "ManageCollectiblesPanel" when: windowShown property ManageCollectiblesPanel controlUnderTest: null function findDelegateIndexWithTitle(listview, title) { waitForItemPolished(listview) const count = listview.count for (let i = 0; i < count; i++) { const item = listview.itemAtIndex(i) if (!!item && item.visible && item.title === title) return i } return -1 } function findDelegateMenuAction(listview, index, actionName, isGroup=false) { const token = findChild(listview, "manageTokens%2Delegate-%1".arg(index).arg(isGroup ? "Group" : "")) verify(!!token) const delegateBtn = findChild(token, "btnManageTokenMenu-%1".arg(index)) verify(!!delegateBtn) mouseClick(delegateBtn) const btnMenuLoader = findChild(delegateBtn, "manageTokensContextMenuLoader") verify(!!btnMenuLoader) tryCompare(btnMenuLoader, "active", true) const btnMenu = btnMenuLoader.item verify(!!btnMenu) verify(btnMenu.open) return findChild(btnMenu, actionName) } function triggerDelegateMenuAction(listview, index, actionName, isGroup=false) { const action = findDelegateMenuAction(listview, index, actionName, isGroup) verify(!!action) action.trigger() } function init() { controlUnderTest = createTemporaryObject(componentUnderTest, root) } function test_showHideToken() { verify(!controlUnderTest.dirty) const lvHidden = findChild(controlUnderTest, "lvHiddenTokens") verify(!!lvHidden) verify(lvHidden.count === 0) const lvRegular = findChild(controlUnderTest, "lvRegularTokens") verify(!!lvRegular) const lvRegularCount = lvRegular.count verify(lvRegularCount === 7) const delegate0 = findChild(lvRegular, "manageTokensDelegate-0") verify(!!delegate0) const title = delegate0.title triggerDelegateMenuAction(lvRegular, 0, "miHideToken") verify(controlUnderTest.dirty) // verify we now have +1 hidden and -1 regular tokens after the "hide" operation waitForItemPolished(lvHidden) tryCompare(lvHidden, "count", 1) tryCompare(lvRegular, "count", lvRegularCount-1) // verify it's the same item we've just hidden const hiddenToken = findChild(lvHidden, "manageTokensDelegate-0") compare(hiddenToken.title, title) // trigger the "show" action triggerDelegateMenuAction(lvHidden, 0, "miShowToken") // verify the counts are back to original waitForItemPolished(lvHidden) compare(lvHidden.count, 0) compare(lvRegular.count, lvRegularCount) // verify we got appended to the regular list by checking we have the same title of the delegate const delegateN = findChild(lvRegular, "manageTokensDelegate-%1".arg(lvRegular.count-1)) verify(!!delegateN) const titleN = delegateN.title compare(title, titleN) verify(controlUnderTest.dirty) } function test_showHideCommunityGroup() { verify(!controlUnderTest.dirty) const loaderCommunityTokens = findChild(controlUnderTest, "loaderCommunityTokens") verify(!!loaderCommunityTokens) tryCompare(loaderCommunityTokens, "active", true) const switchArrangeByCommunity = findChild(controlUnderTest, "switchArrangeByCommunity") verify(!!switchArrangeByCommunity) switchArrangeByCommunity.toggle() const lvCommunityTokenGroups = findChild(loaderCommunityTokens, "lvCommunityTokenGroups") verify(!!lvCommunityTokenGroups) // verify we have 2 community collectible groups tryCompare(lvCommunityTokenGroups, "count", 3) triggerDelegateMenuAction(lvCommunityTokenGroups, 0, "miHideTokenGroup", true) verify(controlUnderTest.dirty) // verify we have one less group waitForItemPolished(lvCommunityTokenGroups) tryCompare(lvCommunityTokenGroups, "count", 2) const lvHidden = findChild(controlUnderTest, "lvHiddenTokens") verify(!!lvHidden) tryCompare(lvHidden, "count", 4) // we've just hidden 4 collectibles coming from this group verify(controlUnderTest.dirty) // verify hidden items are not draggable const hiddenToken = findChild(lvHidden, "manageTokensDelegate-0") verify(!!hiddenToken) compare(hiddenToken.dragEnabled, false) const hiddenDraggable = findChild(hiddenToken, "draggableDelegate") verify(!!hiddenDraggable) mousePress(hiddenToken) tryCompare(hiddenDraggable, "dragActive", false) mouseRelease(hiddenToken) // now show one of the 4 hidden tokens waitForItemPolished(lvHidden) triggerDelegateMenuAction(lvHidden, 0, "miShowToken") verify(controlUnderTest.dirty) // verify we again have 3 community groups, and one less hidden token tryCompare(lvCommunityTokenGroups, "count", 3) tryCompare(lvHidden, "count", 3) verify(controlUnderTest.dirty) // now mass show tokens from this group, verify we have 0 hidden tokens and 2 visible groups triggerDelegateMenuAction(lvHidden, 0, "miShowTokenGroup") waitForItemPolished(lvHidden) tryCompare(lvHidden, "count", 0) tryCompare(lvCommunityTokenGroups, "count", 3) verify(controlUnderTest.dirty) } function test_dnd() { verify(!controlUnderTest.dirty) const lvRegular = findChild(controlUnderTest, "lvRegularTokens") verify(!!lvRegular) verify(lvRegular.count !== 0) const delegate0 = findChild(lvRegular, "manageTokensDelegate-0") verify(!!delegate0) const title0 = delegate0.title verify(!!title0) const title1 = findChild(lvRegular, "manageTokensDelegate-1").title verify(!!title1) // DND one item down (~80px in height) mouseDrag(delegate0, delegate0.width/2, delegate0.height/2, 0, 80) // cross compare the titles tryCompare(findChild(lvRegular, "manageTokensDelegate-0"), "title", title1) tryCompare(findChild(lvRegular, "manageTokensDelegate-1"), "title", title0) verify(controlUnderTest.dirty) } function test_group_dnd() { verify(!controlUnderTest.dirty) const switchArrangeByCommunity = findChild(controlUnderTest, "switchArrangeByCommunity") verify(!!switchArrangeByCommunity) mouseClick(switchArrangeByCommunity) const switchCollapseCommunityGroups = findChild(controlUnderTest, "switchCollapseCommunityGroups") verify(!!switchCollapseCommunityGroups) mouseClick(switchCollapseCommunityGroups) const loaderCommunityTokens = findChild(controlUnderTest, "loaderCommunityTokens") verify(!!loaderCommunityTokens) tryCompare(loaderCommunityTokens, "active", true) const lvCommunityTokenGroups = findChild(loaderCommunityTokens, "lvCommunityTokenGroups") verify(!!lvCommunityTokenGroups) waitForItemPolished(lvCommunityTokenGroups) tryCompare(lvCommunityTokenGroups, "count", 3) const group0 = findChild(lvCommunityTokenGroups, "manageTokensGroupDelegate-0") const title0 = group0.title verify(!!title0) const title1 = findChild(lvCommunityTokenGroups, "manageTokensGroupDelegate-1").title verify(!!title1) verify(title0 !== title1) // DND one group down (~80px in height) mouseDrag(group0, group0.width/2, group0.height/2, 0, 80) // cross compare the titles tryCompare(findChild(lvCommunityTokenGroups, "manageTokensGroupDelegate-0"), "title", title1) tryCompare(findChild(lvCommunityTokenGroups, "manageTokensGroupDelegate-1"), "title", title0) verify(controlUnderTest.dirty) } function test_group_move_hide_show_community_token() { verify(!controlUnderTest.dirty) const titleToTest = "Bearz" const switchArrangeByCommunity = findChild(controlUnderTest, "switchArrangeByCommunity") verify(!!switchArrangeByCommunity) mouseClick(switchArrangeByCommunity) const loaderCommunityTokens = findChild(controlUnderTest, "loaderCommunityTokens") verify(!!loaderCommunityTokens) tryCompare(loaderCommunityTokens, "active", true) const lvCommunityTokenGroups = findChild(loaderCommunityTokens, "lvCommunityTokenGroups") verify(!!lvCommunityTokenGroups) waitForItemPolished(lvCommunityTokenGroups) tryCompare(lvCommunityTokenGroups, "count", 3) // get the "Bearz" group at index 1 var bearzGroupTokenDelegate = findChild(lvCommunityTokenGroups, "manageTokensGroupDelegate-1") const bearzTitle = bearzGroupTokenDelegate.title compare(bearzTitle, titleToTest) verify(!!bearzGroupTokenDelegate) waitForItemPolished(bearzGroupTokenDelegate) // get the Bearz child listview const bearzChildLV = findChild(bearzGroupTokenDelegate, "manageTokensGroupListView") verify(!!bearzChildLV) // find the 2385 delegate from the Bearz group and hide it const bear2385DelegateIdx = findDelegateIndexWithTitle(bearzChildLV, "KILLABEAR #2385") verify(bear2385DelegateIdx !== -1) triggerDelegateMenuAction(bearzChildLV, bear2385DelegateIdx, "miHideCommunityToken") verify(controlUnderTest.dirty) // verify the hidden section now has 1 item and it's the one we just hid const lvHidden = findChild(controlUnderTest, "lvHiddenTokens") verify(!!lvHidden) waitForItemPolished(lvHidden) verify(lvHidden.count === 1) tryCompare(findChild(lvHidden, "manageTokensDelegate-0"), "title", "KILLABEAR #2385") // now move the Bearz group up so that it's first (ends up at index 0) waitForItemPolished(controlUnderTest) triggerDelegateMenuAction(lvCommunityTokenGroups, 1, "miMoveUp", true) verify(controlUnderTest.dirty) bearzGroupTokenDelegate = findChild(lvCommunityTokenGroups, "manageTokensGroupDelegate-0") verify(!!bearzGroupTokenDelegate) // get one of the other group's (Pandas) tokens and hide it const pandasGroupTokenDelegate = findChild(lvCommunityTokenGroups, "manageTokensGroupDelegate-1") verify(!!pandasGroupTokenDelegate) const pandasChildLV = findChild(pandasGroupTokenDelegate, "manageTokensGroupListView") verify(!!pandasChildLV) const panda909DelegateIdx = findDelegateIndexWithTitle(pandasChildLV, "Frenly Panda #909") triggerDelegateMenuAction(pandasChildLV, panda909DelegateIdx, "miHideCommunityToken") verify(controlUnderTest.dirty) // finally verify that the Bearz group is still at top waitForItemPolished(lvCommunityTokenGroups) tryCompare(findChild(lvCommunityTokenGroups, "manageTokensGroupDelegate-0"), "title", titleToTest) } function test_moveOperations() { verify(!controlUnderTest.dirty) const lvRegular = findChild(controlUnderTest, "lvRegularTokens") verify(!!lvRegular) verify(lvRegular.count !== 0) var delegate0 = findChild(lvRegular, "manageTokensDelegate-0") verify(!!delegate0) const title = delegate0.title // verify moveUp and moveToTop is not available for the first item const moveUpAction = findDelegateMenuAction(lvRegular, 0, "miMoveUp") tryCompare(moveUpAction, "enabled", false) const moveTopAction = findDelegateMenuAction(lvRegular, 0, "miMoveToTop") tryCompare(moveTopAction, "enabled", false) // trigger move to bottom triggerDelegateMenuAction(lvRegular, 0, "miMoveToBottom") waitForItemPolished(lvRegular) verify(controlUnderTest.dirty) // verify the previous first and current last are actually the same item const delegateN = findChild(lvRegular, "manageTokensDelegate-%1".arg(lvRegular.count-1)) verify(!!delegateN) const titleN = delegateN.title compare(title, titleN) // verify move down and to bottom is not available for the last item const moveDownAction = findDelegateMenuAction(lvRegular, lvRegular.count-1, "miMoveDown") tryCompare(moveDownAction, "enabled", false) const moveBottomAction = findDelegateMenuAction(lvRegular, lvRegular.count-1, "miMoveToBottom") tryCompare(moveBottomAction, "enabled", false) // trigger move to top and verify we got the same title (item) again triggerDelegateMenuAction(lvRegular, lvRegular.count-1, "miMoveToTop") waitForItemPolished(lvRegular) tryCompare(findChild(lvRegular, "manageTokensDelegate-0"), "title", title) // trigger move down and verify we got the same title (item) again triggerDelegateMenuAction(lvRegular, 0, "miMoveDown") tryCompare(findChild(lvRegular, "manageTokensDelegate-1"), "title", title) // trigger move up and verify we got the same title (item) again triggerDelegateMenuAction(lvRegular, 1, "miMoveUp") tryCompare(findChild(lvRegular, "manageTokensDelegate-0"), "title", title) } function test_saveLoad() { // start with clear settings controlUnderTest.clearSettings() controlUnderTest.revert() verify(!controlUnderTest.dirty) const titleToTest = "Big Kitty" const lvRegular = findChild(controlUnderTest, "lvRegularTokens") verify(!!lvRegular) const bigKittyIndex = findDelegateIndexWithTitle(lvRegular, titleToTest) verify(bigKittyIndex !== -1) const title0 = findChild(lvRegular, "manageTokensDelegate-0").title verify(!!title0) verify(title0 !== titleToTest) // trigger move to top and verify we got the correct title triggerDelegateMenuAction(lvRegular, bigKittyIndex, "miMoveToTop") waitForItemPolished(lvRegular) tryCompare(findChild(lvRegular, "manageTokensDelegate-0"), "title", titleToTest) // save verify(controlUnderTest.dirty) controlUnderTest.saveSettings() verify(!controlUnderTest.dirty) // load the settings and check BigKitty is still on top controlUnderTest.revert() verify(!controlUnderTest.dirty) waitForItemPolished(lvRegular) tryCompare(findChild(lvRegular, "manageTokensDelegate-0"), "title", titleToTest) } } }