Skip to content

Commit cafeded

Browse files
authored
Merge pull request #1238 from mito-ds/xlsx-import-tests
Add xlsx import tests
2 parents cc4aba2 + 3f8f044 commit cafeded

File tree

10 files changed

+160
-30
lines changed

10 files changed

+160
-30
lines changed

mitosheet/mitosheet/api/get_csv_files_metadata.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from typing import Any, Dict
99

1010
import pandas as pd
11-
from mitosheet.code_chunks.step_performers.import_steps.simple_import_code_chunk import DEFAULT_DECIMAL, DEFAULT_DELIMETER, DEFAULT_ENCODING, DEFAULT_SKIPROWS
11+
from mitosheet.code_chunks.step_performers.import_steps.simple_import_code_chunk import DEFAULT_DECIMAL, DEFAULT_DELIMITER, DEFAULT_ENCODING, DEFAULT_SKIPROWS
1212
from mitosheet.step_performers.import_steps.simple_import import read_csv_get_delimiter_and_encoding
1313
from mitosheet.types import StepsManagerType
1414

@@ -33,7 +33,7 @@ def get_csv_files_metadata(params: Dict[str, Any], steps_manager: StepsManagerTy
3333
encodings.append(encoding)
3434
except:
3535
# The default values displayed in the UI
36-
delimeters.append(DEFAULT_DELIMETER)
36+
delimeters.append(DEFAULT_DELIMITER)
3737
encodings.append(DEFAULT_ENCODING)
3838

3939
# We don't have a good way to guess these params, so we always use the defaults

mitosheet/mitosheet/code_chunks/step_performers/import_steps/simple_import_code_chunk.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
# Note: These defaults must be the same as the pandas.read_csv defaults
1818
DEFAULT_ENCODING = 'utf-8'
19-
DEFAULT_DELIMETER = ','
19+
DEFAULT_DELIMITER = ','
2020
DEFAULT_DECIMAL = '.'
2121
DEFAULT_SKIPROWS = 0
2222
DEFAULT_ERROR_BAD_LINES = True
@@ -26,7 +26,7 @@ def get_read_csv_params(delimeter: str, encoding: str, decimal: Optional[str], s
2626

2727
if encoding != DEFAULT_ENCODING:
2828
params['encoding'] = encoding
29-
if delimeter != DEFAULT_DELIMETER:
29+
if delimeter != DEFAULT_DELIMITER:
3030
params['sep'] = delimeter
3131
if decimal is not None and decimal != DEFAULT_DECIMAL:
3232
params['decimal'] = decimal

mitosheet/mitosheet/step_performers/import_steps/simple_import.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
from mitosheet.code_chunks.code_chunk import CodeChunk
1515
from mitosheet.code_chunks.step_performers.import_steps.simple_import_code_chunk import (
16-
DEFAULT_DECIMAL, DEFAULT_DELIMETER, DEFAULT_ENCODING,
16+
DEFAULT_DECIMAL, DEFAULT_DELIMITER, DEFAULT_ENCODING,
1717
DEFAULT_ERROR_BAD_LINES, DEFAULT_SKIPROWS, SimpleImportCodeChunk)
1818
from mitosheet.errors import (make_file_not_found_error,
1919
make_invalid_simple_import_error,
@@ -158,7 +158,7 @@ def read_csv_get_delimiter_and_encoding(file_name: str) -> Tuple[pd.DataFrame, s
158158
return the df, delimeter, decimal separator, and encoding of the file
159159
"""
160160
encoding = DEFAULT_ENCODING
161-
delimeter = DEFAULT_DELIMETER
161+
delimeter = DEFAULT_DELIMITER
162162

163163
if is_url_to_file(file_name):
164164
df = pd.read_csv(file_name)

mitosheet/mitosheet/tests/step_performers/import_steps/test_simple_import_step.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import pytest
1010
import pandas as pd
1111
import os
12-
from mitosheet.code_chunks.step_performers.import_steps.simple_import_code_chunk import DEFAULT_DECIMAL, DEFAULT_DELIMETER, DEFAULT_ENCODING, DEFAULT_SKIPROWS
12+
from mitosheet.code_chunks.step_performers.import_steps.simple_import_code_chunk import DEFAULT_DECIMAL, DEFAULT_DELIMITER, DEFAULT_ENCODING, DEFAULT_SKIPROWS
1313

1414
from mitosheet.tests.test_utils import create_mito_wrapper
1515
from mitosheet.utils import is_prev_version
@@ -451,11 +451,11 @@ def test_skip_invalid_lines():
451451
Henrik,Sedin,VAN,C,33,1,1980-09-26""")
452452

453453
mito = create_mito_wrapper()
454-
mito.simple_import([TEST_FILE_PATHS[0]], [DEFAULT_DELIMETER], [DEFAULT_ENCODING], [DEFAULT_DECIMAL], [DEFAULT_SKIPROWS], [True])
454+
mito.simple_import([TEST_FILE_PATHS[0]], [DEFAULT_DELIMITER], [DEFAULT_ENCODING], [DEFAULT_DECIMAL], [DEFAULT_SKIPROWS], [True])
455455

456456
assert len(mito.dfs) == 0
457457

458-
mito.simple_import([TEST_FILE_PATHS[0]], [DEFAULT_DELIMETER], [DEFAULT_ENCODING], [DEFAULT_DECIMAL], [DEFAULT_SKIPROWS], [False])
458+
mito.simple_import([TEST_FILE_PATHS[0]], [DEFAULT_DELIMITER], [DEFAULT_ENCODING], [DEFAULT_DECIMAL], [DEFAULT_SKIPROWS], [False])
459459

460460

461461
from io import StringIO
@@ -485,7 +485,7 @@ def test_comma_decimal():
485485
df_comma.to_csv(TEST_FILE_PATHS[0], index=False)
486486

487487
mito = create_mito_wrapper()
488-
mito.simple_import([TEST_FILE_PATHS[0]], [DEFAULT_DELIMETER], [DEFAULT_ENCODING], [','], [DEFAULT_SKIPROWS], [True])
488+
mito.simple_import([TEST_FILE_PATHS[0]], [DEFAULT_DELIMITER], [DEFAULT_ENCODING], [','], [DEFAULT_SKIPROWS], [True])
489489

490490
assert mito.dfs[0].equals(df_result)
491491

@@ -499,7 +499,7 @@ def test_can_import_with_skiprows():
499499
# Create with no dataframes
500500
mito = create_mito_wrapper()
501501
# And then import just a test file
502-
mito.simple_import([TEST_FILE_PATHS[0]], [DEFAULT_DELIMETER], [DEFAULT_ENCODING], [DEFAULT_DECIMAL], [1], [True])
502+
mito.simple_import([TEST_FILE_PATHS[0]], [DEFAULT_DELIMITER], [DEFAULT_ENCODING], [DEFAULT_DECIMAL], [1], [True])
503503

504504
assert len(mito.dfs) == 1
505505
assert mito.dfs[0].equals(pd.DataFrame({
@@ -517,7 +517,7 @@ def test_can_import_with_invalid_name():
517517
# Create with no dataframes
518518
mito = create_mito_wrapper()
519519
# And then import just a test file
520-
mito.simple_import([file_path], [DEFAULT_DELIMETER], [DEFAULT_ENCODING], [DEFAULT_DECIMAL], [1], [True])
520+
mito.simple_import([file_path], [DEFAULT_DELIMITER], [DEFAULT_ENCODING], [DEFAULT_DECIMAL], [1], [True])
521521

522522
assert len(mito.dfs) == 1
523523
assert mito.dfs[0].equals(pd.DataFrame({

mitosheet/mitosheet/tests/test_ts_types.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# Copyright (c) Saga Inc.
55
# Distributed under the terms of the GPL License.
66
from typing import Any, List, Dict
7-
from mitosheet.code_chunks.step_performers.import_steps.simple_import_code_chunk import DEFAULT_DECIMAL, DEFAULT_DELIMETER, DEFAULT_ENCODING, DEFAULT_ERROR_BAD_LINES, DEFAULT_SKIPROWS
7+
from mitosheet.code_chunks.step_performers.import_steps.simple_import_code_chunk import DEFAULT_DECIMAL, DEFAULT_DELIMITER, DEFAULT_ENCODING, DEFAULT_ERROR_BAD_LINES, DEFAULT_SKIPROWS
88
from mitosheet.enterprise.mito_config import DEFAULT_MITO_CONFIG_SUPPORT_EMAIL, MEC_VERSION_KEYS, MitoConfig
99
from mitosheet.state import (
1010
DATAFRAME_SOURCE_DUPLICATED,
@@ -324,7 +324,7 @@ def test_pivot_column_transformation_type_defined():
324324

325325

326326
def test_update_events_default_import_decimal():
327-
default_delimiter = get_constant_from_ts_file("./src/mito/components/import/CSVImportConfigScreen.tsx", "DEFAULT_DELIMETER")
327+
default_delimiter = get_constant_from_ts_file("./src/mito/components/import/CSVImportConfigScreen.tsx", "DEFAULT_DELIMITER")
328328
default_encoding = get_constant_from_ts_file("./src/mito/components/import/CSVImportConfigScreen.tsx", "DEFAULT_ENCODING")
329329
_default_decimal = get_constant_from_ts_file("./src/mito/components/import/CSVImportConfigScreen.tsx", "DEFAULT_DECIMAL")
330330
default_skiprows = get_constant_from_ts_file("./src/mito/components/import/CSVImportConfigScreen.tsx", "DEFAULT_SKIPROWS")
@@ -334,7 +334,7 @@ def test_update_events_default_import_decimal():
334334
decimalEnum = get_enum_from_ts_file("./src/mito/components/import/CSVImportConfigScreen.tsx", "Decimal")
335335
default_decimal = decimalEnum[_default_decimal.split('.')[1]]
336336

337-
assert default_delimiter == f'"{DEFAULT_DELIMETER}"'
337+
assert default_delimiter == f'"{DEFAULT_DELIMITER}"'
338338
assert default_encoding == f'"{DEFAULT_ENCODING}"'
339339
assert default_decimal == f'{DEFAULT_DECIMAL}'
340340
assert int(default_skiprows) == DEFAULT_SKIPROWS

mitosheet/src/mito/components/import/CSVImportConfigScreen.tsx

+12-12
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,13 @@ export const decimalCharToTitle: Record<Decimal, string> = {
130130
[Decimal.COMMA]: 'comma'
131131
}
132132

133-
export const DELIMETER_TOOLTIP = 'The seperator that seperates one column from another.'
133+
export const DELIMITER_TOOLTIP = 'The seperator that seperates one column from another.'
134134
export const ENCODING_TOOLTIP = 'The encoding used to save this file.' // I can't think of anything better lol
135135
export const DECIMAL_TOOLTIP = 'The character used to separate the decimal places in numbers.'
136136
export const SKIP_ROWS_TOOLTIP = 'The number of rows at the top of the file to skip when reading data into the dataframe.'
137137
export const ERROR_BAD_LINES_TOOLTIP = 'Turn on to skip any lines that error when being read in.'
138138

139-
export const DEFAULT_DELIMETER = ",";
139+
export const DEFAULT_DELIMITER = ",";
140140
export const DEFAULT_ENCODING = "utf-8";
141141
export const DEFAULT_DECIMAL = Decimal.PERIOD;
142142
export const DEFAULT_SKIPROWS = 0;
@@ -211,7 +211,7 @@ function CSVImportConfigScreen(props: CSVImportConfigScreenProps): JSX.Element {
211211
props.setParams(prevParams => {
212212
return {
213213
...prevParams,
214-
delimeters: loadedData?.delimeters || [DEFAULT_DELIMETER],
214+
delimeters: loadedData?.delimeters || [DEFAULT_DELIMITER],
215215
encodings: loadedData?.encodings || [DEFAULT_ENCODING],
216216
decimals: loadedData?.decimals || [DEFAULT_DECIMAL],
217217
skiprows: loadedData?.skiprows || [DEFAULT_SKIPROWS],
@@ -226,7 +226,7 @@ function CSVImportConfigScreen(props: CSVImportConfigScreenProps): JSX.Element {
226226
props.setParams(prevParams => {
227227
return {
228228
...prevParams,
229-
delimeters: fileMetadata?.delimeters || [DEFAULT_DELIMETER],
229+
delimeters: fileMetadata?.delimeters || [DEFAULT_DELIMITER],
230230
encodings: fileMetadata?.encodings || [DEFAULT_ENCODING],
231231
decimals: fileMetadata?.decimals || [DEFAULT_DECIMAL],
232232
skiprows: fileMetadata?.skiprows || [DEFAULT_SKIPROWS],
@@ -249,7 +249,7 @@ function CSVImportConfigScreen(props: CSVImportConfigScreenProps): JSX.Element {
249249
const skiprows = props.params.skiprows;
250250
const error_bad_lines = props.params.error_bad_lines;
251251

252-
const currentDelimeter = delimeters !== undefined ? delimeters[0] : DEFAULT_DELIMETER;
252+
const currentDelimiter = delimeters !== undefined ? delimeters[0] : DEFAULT_DELIMITER;
253253
const currentEncoding = encodings !== undefined ? encodings[0] : DEFAULT_ENCODING;
254254
const currentDecimal = decimals !== undefined ? decimals[0] : DEFAULT_DECIMAL
255255
const currentSkiprows = skiprows !== undefined ? skiprows[0] : DEFAULT_SKIPROWS
@@ -267,22 +267,22 @@ function CSVImportConfigScreen(props: CSVImportConfigScreenProps): JSX.Element {
267267
{props.error !== undefined &&
268268
<p className='text-color-error'> {props.error} </p>
269269
}
270-
<Row justify='space-between' align='center' title={DELIMETER_TOOLTIP}>
270+
<Row justify='space-between' align='center' title={DELIMITER_TOOLTIP}>
271271
<Col>
272-
<LabelAndTooltip tooltip={DELIMETER_TOOLTIP}>
273-
Delimeter
272+
<LabelAndTooltip tooltip={DELIMITER_TOOLTIP}>
273+
Delimiter
274274
</LabelAndTooltip>
275275
</Col>
276276
<Col>
277277
<Input
278278
width='medium'
279-
value={currentDelimeter}
279+
value={currentDelimiter}
280280
onChange={(e) => {
281-
const newDelimeter = e.target.value;
281+
const newDelimiter = e.target.value;
282282
props.setParams(prevParams => {
283283
return {
284284
...prevParams,
285-
delimeters: [newDelimeter]
285+
delimeters: [newDelimiter]
286286
}
287287
})
288288
}}
@@ -294,7 +294,7 @@ function CSVImportConfigScreen(props: CSVImportConfigScreenProps): JSX.Element {
294294
const delimeters = prevParams.delimeters;
295295
return {
296296
...prevParams,
297-
delimeters: [(delimeters !== undefined ? delimeters[0] : DEFAULT_DELIMETER) + '\t']
297+
delimeters: [(delimeters !== undefined ? delimeters[0] : DEFAULT_DELIMITER) + '\t']
298298
}
299299
})
300300
}

mitosheet/src/mito/components/taskpanes/FileImport/CSVImportConfigTaskpane.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import React from 'react';
44
import useSendEditOnClick from '../../../hooks/useSendEditOnClick';
55
import { MitoAPI } from '../../../api/api';
66
import { AnalysisData, StepType, UIState } from '../../../types';
7-
import CSVImportConfigScreen, { CSVImportParams, DEFAULT_DELIMETER, DEFAULT_ENCODING, DEFAULT_ERROR_BAD_LINES } from '../../import/CSVImportConfigScreen';
7+
import CSVImportConfigScreen, { CSVImportParams, DEFAULT_DELIMITER, DEFAULT_ENCODING, DEFAULT_ERROR_BAD_LINES } from '../../import/CSVImportConfigScreen';
88
import { ImportState } from './FileImportTaskpane';
99

1010
interface CSVImportConfigTaskpaneProps {
@@ -23,7 +23,7 @@ interface CSVImportConfigTaskpaneProps {
2323
export const getDefaultCSVParams = (filePath: string): CSVImportParams => {
2424
return {
2525
file_names: [filePath],
26-
delimeters: [DEFAULT_DELIMETER],
26+
delimeters: [DEFAULT_DELIMITER],
2727
encodings: [DEFAULT_ENCODING],
2828
error_bad_lines: [DEFAULT_ERROR_BAD_LINES]
2929
}

tests/data/semicolon-delimiter.csv

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Column1;Column2;Column3
2+
1,000;2,100;3,20
3+
4,123;5,02;6,01
4+
7,456;8;9
5+
10,303;11,101;12,600

tests/data/test.xlsx

9.95 KB
Binary file not shown.

tests/streamlit_ui_tests/taskpanes/file_import.spec.ts

+126-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11

22
import { expect, test } from '@playwright/test';
3-
import { checkOpenTaskpane, clickButtonAndAwaitResponse, clickTab, getMitoFrame, getMitoFrameWithTestCSV } from '../utils';
3+
import { checkColumnCellsHaveExpectedValues, checkOpenTaskpane, clickButtonAndAwaitResponse, clickTab, getMitoFrame, getMitoFrameWithTestCSV } from '../utils';
44

5+
const openImportTaskpaneAndSelectData = async (mito: any, file: string) => {
6+
await mito.locator('.mito-toolbar-button', { hasText: 'Import' }).click();
7+
await mito.locator('.mito-dropdown-item', { hasText: 'Import Files' }).click();
8+
await mito.getByText(file, { exact: true }).dblclick();
9+
}
510

611
test.describe('File Import Taskpane', () => {
712

@@ -34,4 +39,124 @@ test.describe('File Import Taskpane', () => {
3439
await mito.getByRole('button', { name: 'Change Imports', exact: true }).click();
3540
await mito.getByText('Successfully replayed analysis on new data').click();
3641
});
42+
43+
test('Import XLSX file with multiple sheets', async ({ page }) => {
44+
const mito = await getMitoFrame(page);
45+
await mito.locator('.mito-toolbar-button', { hasText: 'Import' }).click();
46+
await mito.locator('.mito-dropdown-item', { hasText: 'Import Files' }).click();
47+
await mito.getByText('test.xlsx').dblclick();
48+
49+
await mito.getByText('Import 2 Selected Sheets').click();
50+
51+
await expect(mito.locator('.tab', { hasText: 'Sheet1' })).toBeVisible();
52+
await expect(mito.locator('.tab', { hasText: 'Sheet2' })).toBeVisible();
53+
await expect(mito.locator('.endo-column-header-text', { hasText: 'Column4' })).toBeVisible();
54+
});
55+
56+
test('Import XLSX file with single sheet', async ({ page }) => {
57+
const mito = await getMitoFrame(page);
58+
await openImportTaskpaneAndSelectData(mito, 'test.xlsx')
59+
await mito.getByText('Sheet1').click();
60+
61+
await mito.getByText('Import 1 Selected Sheet').click();
62+
63+
await expect(mito.locator('.tab', { hasText: 'Sheet1' })).not.toBeVisible();
64+
await expect(mito.locator('.tab', { hasText: 'Sheet2' })).toBeVisible();
65+
await expect(mito.locator('.endo-column-header-text', { hasText: 'Column4' })).toBeVisible();
66+
});
67+
68+
test('Import XLSX file with configurations', async ({ page }) => {
69+
const mito = await getMitoFrame(page);
70+
await openImportTaskpaneAndSelectData(mito, 'test.xlsx')
71+
72+
// Turn 'Has Header Row' off
73+
await mito.locator('.spacing-row', { hasText: 'Has Header Row'}).locator('.select-text').click();
74+
await mito.locator('.mito-dropdown-item', { hasText: 'No' }).click();
75+
76+
await mito.locator('.spacing-row', { hasText: 'Rows to Skip'}).locator('input').fill('2');
77+
await mito.getByText('Import 2 Selected Sheets').click();
78+
79+
// Check that the configurations are applied
80+
await expect(mito.locator('.tab', { hasText: 'Sheet1' })).toBeVisible();
81+
await expect(mito.locator('.tab', { hasText: 'Sheet2' })).toBeVisible();
82+
await checkColumnCellsHaveExpectedValues(mito, 0, ['lmnop', 'wxyz'])
83+
await expect(mito.locator('.endo-column-header-text', { hasText: '0' })).toBeVisible();
84+
85+
// Check that the configurations are applied to the other sheet
86+
await mito.locator('.tab', { hasText: 'Sheet1'}).click();
87+
await expect(mito.locator('.endo-column-header-text', { hasText: '0' })).toBeVisible();
88+
await checkColumnCellsHaveExpectedValues(mito, 0, ['2', '3', '4', '5'])
89+
});
90+
91+
test('Range Import with one sheet selected', async ({ page }) => {
92+
const mito = await getMitoFrame(page);
93+
await openImportTaskpaneAndSelectData(mito, 'test.xlsx');
94+
await mito.getByText('Sheet1').click();
95+
96+
// Click on Range Import
97+
await mito.getByText('Click here to import multiple ranges.').click();
98+
99+
// Fill in the range and name
100+
await mito.locator('.spacing-row', { hasText: 'Name' }).locator('input').fill('Range Test')
101+
await mito.locator('.spacing-row', { hasText: 'Excel Range' }).locator('input').fill('B2:C3');
102+
await mito.getByText('Import Ranges').click();
103+
104+
await expect(mito.locator('.tab', { hasText: 'Range_Test' })).toBeVisible();
105+
await checkColumnCellsHaveExpectedValues(mito, 0, ['qrs'])
106+
await checkColumnCellsHaveExpectedValues(mito, 1, ['tuv'])
107+
});
108+
109+
test('Import multiple ranges', async ({ page }) => {
110+
const mito = await getMitoFrame(page);
111+
await openImportTaskpaneAndSelectData(mito, 'test.xlsx');
112+
await mito.getByText('Sheet1').click();
113+
114+
// Click on Range Import
115+
await mito.getByText('Click here to import multiple ranges.').click();
116+
117+
// Fill in the range and name
118+
await mito.locator('.spacing-row', { hasText: 'Name' }).locator('input').fill('Range Test')
119+
await mito.locator('.spacing-row', { hasText: 'Excel Range' }).locator('input').fill('B2:C3');
120+
121+
// Add the second range
122+
await mito.getByText('Add').click();
123+
await mito.locator('.spacing-row', { hasText: 'Name' }).locator('input').fill('Other Range')
124+
await mito.locator('.spacing-row', { hasText: 'Locate By' }).locator('.select-text').click();
125+
await mito.getByText('Dynamic', { exact: true }).click();
126+
await mito.locator('.spacing-row', { hasText: 'Value' }).locator('input').fill('lmnop');
127+
128+
await mito.getByText('Import Ranges').click();
129+
130+
// Check that the tabs appear
131+
await expect(mito.locator('.tab', { hasText: 'Range_Test' })).toBeVisible();
132+
await expect(mito.locator('.tab', { hasText: 'Other_Range' })).toBeVisible();
133+
134+
// Check the first range (the Other_Range will automatically open)
135+
await checkColumnCellsHaveExpectedValues(mito, 0, ['wxyz'])
136+
await checkColumnCellsHaveExpectedValues(mito, 1, ['123'])
137+
await checkColumnCellsHaveExpectedValues(mito, 2, ['456'])
138+
139+
// Check the second range
140+
await mito.getByText('Range_Test').click();
141+
await checkColumnCellsHaveExpectedValues(mito, 0, ['qrs'])
142+
await checkColumnCellsHaveExpectedValues(mito, 1, ['tuv'])
143+
});
144+
145+
test('Configure CSV imports', async ({ page }) => {
146+
const mito = await getMitoFrame(page);
147+
148+
// Open the configure taskpane for the csv with special delimiters
149+
await mito.getByText('Import Files').click();
150+
await mito.getByText('semicolon-delimiter.csv').click();
151+
await mito.getByText('Configure').click();
152+
153+
// Change the delimiter to a semicolon
154+
await mito.locator('.spacing-row', { hasText: 'Delimiter' }).locator('input').fill(';');
155+
await mito.locator('.spacing-row', { hasText: 'Decimal Separator' }).locator('.select-text').click();
156+
await mito.getByText('Comma').click();
157+
158+
// Click the import button and check that the data is correct
159+
await mito.locator('button', { hasText: 'Import semicolon-delimiter.csv' }).click();
160+
await checkColumnCellsHaveExpectedValues(mito, 0, [1.00, 4.12, 7.46, 10.30])
161+
});
37162
});

0 commit comments

Comments
 (0)