diff --git a/tests/sanity/tests/chat/chat.spec.ts b/tests/sanity/tests/chat/chat.spec.ts index ba11307d4d..5b10abea87 100644 --- a/tests/sanity/tests/chat/chat.spec.ts +++ b/tests/sanity/tests/chat/chat.spec.ts @@ -352,7 +352,7 @@ test.describe('channel tests', () => { await chunterPage.createPrivateChannel(data.channelName, false) await channelPage.checkIfChannelDefaultExist(true, data.channelName) await channelPage.clickOnOpenChannelDetails() - await channelPage.changeChannelPrivacyOrAutoJoin('N/A', 'Yes', 'Yes') + await channelPage.changeChannelPrivacyOrAutoJoin('N/A', 'Yes', 'Yes', true) }) test('Check if the user can be added through preview tab', async ({ browser, page }) => { diff --git a/tests/sanity/tests/model/channel-page.ts b/tests/sanity/tests/model/channel-page.ts index c951cb2088..48c49e445a 100644 --- a/tests/sanity/tests/model/channel-page.ts +++ b/tests/sanity/tests/model/channel-page.ts @@ -14,10 +14,10 @@ export class ChannelPage { readonly channelTab = (): Locator => this.page.getByRole('link', { name: 'Channels' }).getByRole('button') readonly channelTable = (): Locator => this.page.getByRole('table') readonly channel = (channel: string): Locator => this.page.getByRole('button', { name: channel }) - readonly chooseChannel = (channel: string): Locator => this.page.getByRole('link', { name: channel }) + readonly chooseChannel = (channel: string): Locator => this.page.getByRole('button', { name: channel }) readonly closePopupWindow = (): Locator => this.page.locator('.root > div > .antiButton').first() readonly openAddMemberToChannel = (userName: string): Locator => this.page.getByRole('button', { name: userName }) - readonly addMemberToChannelButton = (userName: string): Locator => this.page.getByRole('button', { name: userName }) + readonly addMemberToChannelButton = (userName: string): Locator => this.page.getByText(userName) readonly joinChannelButton = (): Locator => this.page.getByRole('button', { name: 'Join' }) readonly addEmojiButton = (): Locator => this.page.locator('.root > button').first() readonly selectEmoji = (emoji: string): Locator => this.page.getByText(emoji) @@ -37,7 +37,15 @@ export class ChannelPage { readonly updateButton = (): Locator => this.page.getByRole('button', { name: 'Update' }) readonly openChannelDetails = (): Locator => this.page.locator('.ac-header > .antiButton') readonly changeChannelNameConfirm = (): Locator => this.page.locator('.ml-2 > .antiButton') - readonly privateOrPublicChangeButton = (change: string): Locator => this.page.getByRole('button', { name: change }) + readonly privateOrPublicChangeButton = (change: string, autoJoin: boolean): Locator => + this.page + .locator('span.labelOnPanel', { hasText: autoJoin ? 'Auto join' : 'Private' }) + .locator('xpath=following-sibling::div[1]') + .locator('button', { hasText: change }) + + readonly privateOrPublicPopupButton = (change: string): Locator => + this.page.locator('div.popup div.menu-item', { hasText: change }) + readonly userAdded = (user: string): Locator => this.page.getByText(user) private readonly addMemberPreview = (): Locator => this.page.getByRole('button', { name: 'Add members' }) private readonly addButtonPreview = (): Locator => this.page.getByRole('button', { name: 'Add', exact: true }) @@ -61,11 +69,16 @@ export class ChannelPage { await this.changeChannelNameConfirm().click() } - async changeChannelPrivacyOrAutoJoin (change: string, YesNo: string, changed: string): Promise { - await this.privateOrPublicChangeButton(change).click() + async changeChannelPrivacyOrAutoJoin ( + change: string, + YesNo: string, + changed: string, + autoJoin: boolean = false + ): Promise { + await this.privateOrPublicChangeButton(change, autoJoin).click() await this.page.waitForTimeout(200) - await this.page.getByText(YesNo).click() - await expect(this.privateOrPublicChangeButton(changed)).toBeVisible() + await this.privateOrPublicPopupButton(YesNo).click() + await expect(this.privateOrPublicChangeButton(changed, autoJoin)).toBeVisible() } async clickDeleteMessageButton (): Promise { diff --git a/tests/sanity/tests/model/planning/planning-page.ts b/tests/sanity/tests/model/planning/planning-page.ts index be51c290ec..5f785f1dc7 100644 --- a/tests/sanity/tests/model/planning/planning-page.ts +++ b/tests/sanity/tests/model/planning/planning-page.ts @@ -13,6 +13,7 @@ export class PlanningPage extends CalendarPage { private readonly popup = (): Locator => this.page.locator('div.popup') private readonly panel = (): Locator => this.page.locator('div.hulyModal-container') private readonly toDosContainer = (): Locator => this.page.locator('div.toDos-container') + private readonly schedule = (): Locator => this.page.locator('div.hulyComponent.modal') readonly pageHeader = (): Locator => this.page.locator('div[class*="navigator"] div[class*="header"]', { hasText: 'Planning' }) @@ -30,6 +31,10 @@ export class PlanningPage extends CalendarPage { readonly buttonPanelCreatePriority = (): Locator => this.panel().locator('button#priorityButton') readonly buttonPopupCreateVisible = (): Locator => this.popup().locator('button#visibleButton') readonly buttonPanelCreateVisible = (): Locator => this.panel().locator('button#visibleButton') + readonly buttonPopupVisibleToEveryone = (): Locator => + this.popup().getByRole('button', { name: 'Visible to everyone' }) + + readonly buttonPopupSave = (): Locator => this.popup().getByRole('button', { name: 'Save' }) readonly buttonPopupCreateAddLabel = (): Locator => this.popup().locator('button.antiButton', { hasText: 'Add label' }) @@ -66,6 +71,29 @@ export class PlanningPage extends CalendarPage { readonly buttonPopupSelectDateNextMonth = (): Locator => this.popup().locator('div.header > div:last-child > button:last-child') + readonly selectInputToDo = (): Locator => this.toDosContainer().getByPlaceholder('Add todo, press Enter to save') + readonly selectTomorrow = (time: string): Locator => + this.schedule().locator(`div.time-cell:text-is('${time}')`).locator('xpath=following::div[2]') + + readonly eventInSchedule = (title: string): Locator => + this.schedule().locator('div.event-container', { hasText: title }) + + async dragdropTomorrow (title: string, time: string): Promise { + await this.toDosContainer().getByRole('button', { name: title }).hover() + await this.page.mouse.down() + const boundingBox = await this.selectTomorrow(time).boundingBox() + expect(boundingBox).toBeTruthy() + if (boundingBox != null) { + await this.page.mouse.move(boundingBox.x + 10, boundingBox.y + 10) + await this.page.mouse.move(boundingBox.x + 10, boundingBox.y + 20) + await this.page.mouse.up() + } + } + + async checkInSchedule (title: string): Promise { + await expect(this.eventInSchedule(title)).toBeVisible() + } + async clickButtonCreateAddSlot (): Promise { await this.buttonPanelCreateAddSlot().click({ force: true }) } diff --git a/tests/sanity/tests/planning/plan.spec.ts b/tests/sanity/tests/planning/plan.spec.ts index 43359b81e6..e0a9e25617 100644 --- a/tests/sanity/tests/planning/plan.spec.ts +++ b/tests/sanity/tests/planning/plan.spec.ts @@ -1,5 +1,5 @@ import { test } from '@playwright/test' -import { PlatformSetting, PlatformURI } from '../utils' +import { generateId, PlatformSetting, PlatformURI } from '../utils' import { PlanningPage } from '../model/planning/planning-page' import { NewToDo } from '../model/planning/types' import { PlanningNavigationMenuPage } from '../model/planning/planning-navigation-menu-page' @@ -159,4 +159,23 @@ test.describe('Planning ToDo tests', () => { await planningPage.checkTimeSlotEndDate(0, dateEndToday.getDate().toString()) await planningPage.checkTimeSlotEndDate(1, dateEndTomorrow.getDate().toString()) }) + + test("Drag'n'drop added Todo", async ({ page }) => { + let hour = new Date().getHours() + const ampm = hour < 13 ? 'am' : 'pm' + hour = hour < 1 ? 1 : hour >= 11 && hour < 13 ? 11 : hour >= 22 ? 10 : hour > 12 ? hour - 12 : hour + const time = `${hour}${ampm}` + const title = `Drag and drop ToDo ${generateId()}` + + const planningNavigationMenuPage = new PlanningNavigationMenuPage(page) + await planningNavigationMenuPage.clickOnButtonToDoAll() + const planningPage = new PlanningPage(page) + await planningPage.selectInputToDo().fill(title) + await planningPage.selectInputToDo().press('Enter') + await planningPage.dragdropTomorrow(title, time) + await planningPage.eventInSchedule(title).click() + await planningPage.buttonPopupCreateVisible().click() + await planningPage.buttonPopupVisibleToEveryone().click() + await planningPage.buttonPopupSave().click() + }) })