/ ui / service / tests / smoke.spec.ts
smoke.spec.ts
  1  import { expect, test } from '@playwright/test'
  2  
  3  test('Has title', async ({ page }) => {
  4    await page.goto('/')
  5  
  6    await expect(page).toHaveTitle(/Evidently/)
  7  })
  8  
  9  // We don't need this since visual testing enabled
 10  test.skip('Can view Snapshot', async ({ page }) => {
 11    await page.goto('/')
 12    await page.getByRole('link', { name: 'Demo project - Bikes' }).click()
 13    await page.getByText('Bike Rental Demand Forecast').click()
 14    await page.getByRole('tab', { name: 'Reports' }).click()
 15  
 16    await expect(page.getByRole('columnheader', { name: 'Report ID' })).toBeVisible()
 17    await expect(page.getByRole('columnheader', { name: 'Tags' })).toBeVisible()
 18    await expect(page.getByRole('columnheader', { name: 'Timestamp' })).toBeVisible()
 19    await expect(page.getByRole('columnheader', { name: 'Actions' })).toBeVisible()
 20  
 21    await page.getByRole('link', { name: 'View' }).first().click()
 22    await expect(page.getByText('Dataset Summary', { exact: true })).toBeVisible()
 23  })
 24  
 25  test('Download reports', async ({ page }) => {
 26    await page.goto('/')
 27    await page.getByRole('link', { name: 'Demo project - Bikes' }).click()
 28  
 29    await page.waitForLoadState('domcontentloaded')
 30  
 31    for (const tab of ['Reports']) {
 32      await page.getByRole('tab', { name: tab }).click()
 33  
 34      for (const downloadType of ['Download HTML', 'Download JSON']) {
 35        await page.getByText('Download').first().click()
 36  
 37        const downloadPromise = page.waitForEvent('download')
 38  
 39        await page.getByRole('menuitem', { name: downloadType }).click()
 40  
 41        const download = await downloadPromise
 42  
 43        expect(await download.failure()).toBeNull()
 44      }
 45    }
 46  })
 47  
 48  test('Filter Reports by tags', async ({ page }) => {
 49    await page.goto('/')
 50    await page.getByRole('link', { name: 'Demo project - Bikes' }).click()
 51  
 52    for (const [tab, columnName] of [['Reports', 'Report ID']]) {
 53      await page.getByRole('tab', { name: tab }).click()
 54      await expect(page.getByRole('columnheader', { name: columnName })).toBeVisible()
 55  
 56      const rowsNumberBeforeFiltration = await page.getByRole('row').count()
 57  
 58      await page
 59        .getByRole('button', { name: /high_seasonality|production_critical|tabular_data/ })
 60        .first()
 61        .click()
 62  
 63      const rowsNumberAfterFiltration = await page.getByRole('row').count()
 64  
 65      // console.log(
 66      //   'rowsNumberBeforeFiltration, rowsNumberAfterFiltration',
 67      //   rowsNumberBeforeFiltration,
 68      //   rowsNumberAfterFiltration
 69      // )
 70  
 71      expect(rowsNumberBeforeFiltration).toBeGreaterThan(rowsNumberAfterFiltration)
 72    }
 73  })
 74  
 75  test('Altering project title and description', async ({ page }) => {
 76    await page.goto('/')
 77  
 78    await expect(page.getByText('Project List')).toBeVisible()
 79  
 80    await page.getByRole('link', { name: 'Demo project - Bikes' }).hover()
 81  
 82    await page
 83      .getByText('Demo project - BikesA toy demo project using Bike Demand forecasting dataset')
 84      .getByTestId('EditIcon')
 85      .click()
 86  
 87    await page.locator('input[name="name"]').fill('Bikes new title')
 88    await page.locator('input[name="description"]').fill('Bikes new description')
 89  
 90    await page.getByText('Save').click()
 91  
 92    await page.waitForLoadState('domcontentloaded')
 93  
 94    await expect(page.getByText('Bikes new title')).toBeVisible()
 95    await expect(page.getByText('Bikes new description')).toBeVisible()
 96  
 97    await page.getByRole('link', { name: 'Bikes new title' }).hover()
 98  
 99    await page.getByText('Bikes new titleBikes new description').getByTestId('EditIcon').click()
100  
101    await page.locator('input[name="name"]').fill('Demo project - Bikes')
102    await page
103      .locator('input[name="description"]')
104      .fill('A toy demo project using Bike Demand forecasting dataset')
105  
106    await page.getByText('Save').click()
107  
108    await page.waitForLoadState('domcontentloaded')
109  })