11// Copyright (c) 2025 IOTA Stiftung
22// SPDX-License-Identifier: Apache-2.0
33
4+ import { normalizeIotaName } from '@iota/iota-names-sdk' ;
45import { formatAddress } from '@iota/iota-sdk/utils' ;
56import { expect } from '@playwright/test' ;
67
@@ -27,8 +28,66 @@ test.describe.serial('Purchase Name Tests', () => {
2728 sharedState . wallet . mnemonic = mnemonic ;
2829 } ) ;
2930
31+ test ( 'Can purchase a name' , async ( { appPage : page , context } ) => {
32+ const nameToPurchase = `e2e-test-name` ;
33+
34+ await page . getByPlaceholder ( 'Search for your IOTA name' ) . filter ( { visible : true } ) . click ( ) ;
35+
36+ await page . getByPlaceholder ( 'Check name availability' ) . fill ( nameToPurchase ) ;
37+ const purchaseCardLocator = page . getByTestId ( 'purchase-name-card' ) ;
38+
39+ await purchaseCardLocator . waitFor ( ) ;
40+ await expect ( purchaseCardLocator ) . toBeVisible ( ) ;
41+
42+ await purchaseCardLocator . hover ( ) ;
43+ await purchaseCardLocator . getByRole ( 'button' , { name : 'Buy' } ) . click ( { timeout : 10_000 } ) ;
44+ await expect ( page . getByTestId ( 'name-purchase-title' ) ) . toContainText ( '@' + nameToPurchase ) ;
45+
46+ await page . getByRole ( 'button' , { name : 'Buy' } ) . click ( { timeout : 10_000 } ) ;
47+ ( await context . waitForEvent ( 'page' ) ) . getByRole ( 'button' , { name : 'Approve' } ) . click ( ) ;
48+
49+ const normalizedName = normalizeIotaName ( nameToPurchase + '.iota' , 'at' , {
50+ truncateLongParts : true ,
51+ } ) ;
52+ await expect ( page . getByText ( `Successfully registered name ${ normalizedName } ` ) ) . toBeVisible ( {
53+ timeout : 30_000 ,
54+ } ) ;
55+
56+ await page . bringToFront ( ) ;
57+ } ) ;
58+
59+ test ( 'Availability Dialog opens from all UI elements' , async ( { appPage : page } ) => {
60+ await page . goto ( '/' , { waitUntil : 'domcontentloaded' } ) ;
61+
62+ await page . getByPlaceholder ( 'Search for your IOTA name' ) . filter ( { visible : true } ) . click ( ) ;
63+
64+ expect ( page . getByRole ( 'dialog' ) . getByPlaceholder ( 'Check name availability' ) ) . toBeVisible ( {
65+ timeout : 5_000 ,
66+ } ) ;
67+
68+ await page . goto ( '/auctions' , { waitUntil : 'domcontentloaded' } ) ;
69+
70+ await page
71+ . getByTestId ( 'top-navbar' )
72+ . getByPlaceholder ( 'Search for your IOTA name' )
73+ . filter ( { visible : true } )
74+ . click ( ) ;
75+
76+ expect ( page . getByRole ( 'dialog' ) . getByPlaceholder ( 'Check name availability' ) ) . toBeVisible ( {
77+ timeout : 5_000 ,
78+ } ) ;
79+
80+ await page . goto ( '/my-names' , { waitUntil : 'domcontentloaded' } ) ;
81+
82+ await page . getByRole ( 'button' , { name : 'Name' , exact : true } ) . click ( ) ;
83+
84+ expect ( page . getByRole ( 'dialog' ) . getByPlaceholder ( 'Check name availability' ) ) . toBeVisible ( {
85+ timeout : 5_000 ,
86+ } ) ;
87+ } ) ;
88+
3089 test ( 'Unavailable shows up for already purchased name' , async ( { appPage : page } ) => {
31- // Name bought when initializing localnet with scripts/tests/register-name.ts
90+ // Name registered when initializing localnet with scripts/tests/register-name.ts
3291 const targetName = 'test.iota' ;
3392 const denormalizedName = denormalizeName ( targetName ) ;
3493
0 commit comments