blob: 239f87407330c8912a85abc322e5897787b07752 [file]
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { test, expect } from '@playwright/test';
import { HomePage } from '../../../models/home-page';
import { NoteCreateModal } from '../../../models/note-create-modal';
import { addPageAnnotationBeforeEach, PAGES, waitForZeppelinReady } from '../../../utils';
test.describe('Note Create Modal', () => {
let homePage: HomePage;
let noteCreateModal: NoteCreateModal;
addPageAnnotationBeforeEach(PAGES.SHARE.NOTE_CREATE);
test.beforeEach(async ({ page }) => {
homePage = new HomePage(page);
noteCreateModal = new NoteCreateModal(page);
await page.goto('/');
await waitForZeppelinReady(page);
await homePage.clickCreateNewNote();
await page.waitForSelector('input[name="noteName"]');
});
test('Given user clicks Create New Note, When modal opens, Then modal should display all required elements', async () => {
await expect(noteCreateModal.modal).toBeVisible();
await expect(noteCreateModal.noteNameInput).toBeVisible();
await expect(noteCreateModal.createButton).toBeVisible();
await expect(noteCreateModal.interpreterDropdown).toBeVisible();
await expect(noteCreateModal.folderInfoAlert).toBeVisible();
await expect(noteCreateModal.folderInfoAlert).toContainText('/');
});
test('Given Create Note modal is open, When checking default note name, Then auto-generated name should follow pattern', async () => {
const noteName = await noteCreateModal.getNoteName();
expect(noteName).toMatch(/Untitled Note \d+/);
});
test('Given Create Note modal is open, When entering custom note name and creating, Then new note should be created successfully', async ({
page
}) => {
const uniqueName = `Test Note ${Date.now()}`;
await noteCreateModal.setNoteName(uniqueName);
await noteCreateModal.clickCreate();
// Wait for modal to disappear
await expect(noteCreateModal.modal).not.toBeVisible();
await expect(page).toHaveURL(/notebook\//);
// Verify the note was created with the correct name
const notebookTitle = page.locator('[data-testid="notebook-title"]');
await expect(notebookTitle).toContainText(uniqueName);
// Verify in the navigation tree if available
await page.goto('/#/');
await waitForZeppelinReady(page);
await page.locator('zeppelin-node-list').waitFor({ state: 'visible', timeout: 15000 });
const noteInTree = page.getByRole('link', { name: uniqueName });
await expect(noteInTree).toBeVisible();
});
test('Given Create Note modal is open, When entering note name with folder path, Then note should be created in folder', async ({
page
}) => {
const folderPath = `/TestFolder/SubFolder`;
const noteName = `Note ${Date.now()}`;
const fullPath = `${folderPath}/${noteName}`;
await noteCreateModal.setNoteName(fullPath);
await noteCreateModal.clickCreate();
// Wait for modal to disappear
await expect(noteCreateModal.modal).not.toBeVisible();
await expect(page).toHaveURL(/notebook\//);
// Verify the note was created with the correct name (without folder path)
const notebookTitle = page.locator('[data-testid="notebook-title"]');
await expect(notebookTitle).toContainText(noteName);
// Verify the folder structure was created
await page.goto('/#/');
await waitForZeppelinReady(page);
await page.locator('zeppelin-node-list').waitFor({ state: 'visible', timeout: 15000 });
await expect(page.locator('a.name[data-testid="folder-TestFolder"]')).toBeVisible();
});
test('Given Create Note modal is open, When clicking close button, Then modal should close', async () => {
await noteCreateModal.close();
await expect(noteCreateModal.modal).not.toBeVisible();
});
test('Given Create Note modal is open, When viewing folder info alert, Then alert should contain folder creation instructions', async () => {
await expect(noteCreateModal.folderInfoAlert).toBeVisible();
await expect(noteCreateModal.folderInfoAlert).toContainText("Use '/' to create folders");
});
});