feat: Redesign workspace join (#10507)

* Redesign workspace join

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Login rename

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Fix UI tests

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Fix unstable tests

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Minor fixes

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Clean up

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Fix translations

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Redesign join

Signed-off-by: Artem Savchenko <armisav@gmail.com>

---------

Signed-off-by: Artem Savchenko <armisav@gmail.com>
This commit is contained in:
Artyom Savchenko
2026-02-16 16:07:18 +07:00
committed by GitHub
parent 850e15fc05
commit bb54748716
21 changed files with 514 additions and 44 deletions
+25 -4
View File
@@ -12,13 +12,34 @@ export class SignInJoinPage extends CommonPage {
inputEmail = (): Locator => this.page.locator('input[name="email"]')
inputPassword = (): Locator => this.page.locator('//div[text()="Password"]/../input')
buttonJoin = (): Locator => this.page.locator('button', { hasText: 'Join' })
buttonSubmit = (): Locator => this.page.locator('button[data-id="join-form-submit"]')
buttonToggle = (): Locator => this.page.locator('button[data-id="join-form-toggle"]')
buttonJoinWithThisAccount = (): Locator => this.page.locator('button[data-id="join-with-this-account"]')
buttonUseDifferentAccount = (): Locator => this.page.locator('button[data-id="join-use-different-account"]')
async join (data: Pick<SignUpData, 'email' | 'password'>): Promise<void> {
await this.buttonJoin().click()
await Promise.race([
this.buttonSubmit().waitFor({ state: 'visible', timeout: 10000 }),
this.buttonJoinWithThisAccount().waitFor({ state: 'visible', timeout: 10000 })
])
const submitBtn = this.buttonSubmit()
const toggleBtn = this.buttonToggle()
const joinWithAccountBtn = this.buttonJoinWithThisAccount()
if (await joinWithAccountBtn.isVisible({ timeout: 2000 }).catch(() => false)) {
await this.buttonUseDifferentAccount().click()
await this.inputEmail().waitFor({ state: 'visible', timeout: 5000 })
}
const submitText = await submitBtn.textContent().catch(() => '')
if (submitText != null && submitText.toLowerCase().includes('sign up')) {
await toggleBtn.click()
await this.inputEmail().waitFor({ state: 'visible', timeout: 5000 })
}
await this.inputEmail().fill(data.email)
await this.inputPassword().fill(data.password)
expect(await this.buttonJoin().isEnabled()).toBe(true)
await this.buttonJoin().click()
await expect(this.buttonSubmit()).toBeEnabled()
await this.buttonSubmit().click()
}
}