Files
electerm--electerm/test/e2e/0091.file-info-modal.spec.js
2026-07-13 12:46:20 +08:00

170 lines
6.3 KiB
JavaScript

const { _electron: electron } = require('@playwright/test')
const { test: it, expect } = require('@playwright/test')
const { describe } = it
it.setTimeout(100000)
const delay = require('./common/wait')
const nanoid = require('./common/uid')
const appOptions = require('./common/app-options')
const extendClient = require('./common/client-extend')
const { setupSftpConnection } = require('./common/common')
describe('file info modal', function () {
it('should open window and basic file info modal works for both local and remote', async function () {
const electronApp = await electron.launch(appOptions)
const client = await electronApp.firstWindow()
extendClient(client, electronApp)
await delay(3500)
// Create SSH connection
await setupSftpConnection(client)
// Test local file info modal
await testFileInfoModal(client, 'local', 'click')
await electronApp.close().catch(console.log)
})
it('should test edit permission functionality for both local and remote files', async function () {
const electronApp = await electron.launch(appOptions)
const client = await electronApp.firstWindow()
extendClient(client, electronApp)
await delay(3500)
// Create SSH connection
await setupSftpConnection(client)
// Test local file edit permission
await testEditFolderPermission(client, 'local')
// Test remote file edit permission
await testEditFolderPermission(client, 'remote')
await electronApp.close().catch(console.log)
})
})
async function testEditFolderPermission (client, folderType) {
const folderName = `${folderType}-test-folder-${nanoid()}`
// Create a new folder
await client.rightClick(`.session-current .file-list.${folderType} .parent-file-item`, 10, 10)
await delay(500)
await client.click('.ant-dropdown:not(.ant-dropdown-hidden) .ant-dropdown-menu-item:has-text("New Folder")')
await delay(200)
await client.setValue('.session-current .sftp-item input', folderName)
await client.click('.session-current .sftp-panel-title')
await delay(2500)
// Right-click on the folder and select "Edit Permission"
await client.rightClick(`.session-current .file-list.${folderType} .sftp-item[title="${folderName}"]`, 10, 10)
await delay(500)
await client.click('.ant-dropdown:not(.ant-dropdown-hidden) .ant-dropdown-menu-item:has-text("Edit Permission")')
await delay(1000)
// Verify that the edit permission modal is open
await client.hasElem('.custom-modal-container')
// Check if the modal title is "Edit Folder Permission"
const modalTitle = await client.getText('.custom-modal-title')
expect(modalTitle).toBe('Edit Folder Permission')
// Change a specific permission (e.g., 'other' 'write')
const targetGroup = 'other'
const targetPermission = 'write'
const buttonSelector = `.custom-modal-container .pd1b:has-text("${targetGroup}") .ant-btn:has-text("${targetPermission}")`
const initialClass = await client.getAttribute(buttonSelector, 'class')
const initiallyActive = initialClass.includes('ant-btn-primary')
await client.click(buttonSelector)
await delay(200)
const newClass = await client.getAttribute(buttonSelector, 'class')
const nowActive = newClass.includes('ant-btn-primary')
console.log(`${targetGroup} ${targetPermission}: Initial: ${initiallyActive}, Now: ${nowActive}`)
expect(nowActive).not.toBe(initiallyActive)
// Save the changes
await client.click('.custom-modal-footer .ant-btn-primary')
await delay(2000)
// Verify that the modal is closed
await client.hasElem('.custom-modal-container', false)
// Open folder properties to check if permissions were updated
await client.rightClick(`.session-current .file-list.${folderType} .sftp-item[title="${folderName}"]`, 10, 10)
await delay(500)
await client.click('.ant-dropdown:not(.ant-dropdown-hidden) .anticon-info-circle')
await delay(1200)
// Verify that the specific permission was updated in the folder properties
const infoButtonClass = await client.getAttribute(buttonSelector, 'class')
const infoButtonActive = infoButtonClass.includes('ant-btn-primary')
expect(infoButtonActive).toBe(nowActive)
// Close the folder properties modal
await client.click('.custom-modal-close')
await delay(300)
// Clean up - delete the test folder
await client.click(`.session-current .file-list.${folderType} .sftp-item[title="${folderName}"]`)
await delay(400)
await client.keyboard.press('Delete')
await delay(400)
await client.keyboard.press('Enter')
await delay(2500)
// Verify folder is deleted
await client.hasElem(`.session-current .file-list.${folderType} .sftp-item[title="${folderName}"]`, false)
}
async function testFileInfoModal (client, fileType, closeMethod) {
const fname = `${fileType}-test-electerm-${nanoid()}`
// Create a new folder
await client.rightClick(`.session-current .file-list.${fileType} .real-file-item`, 10, 10)
await delay(500)
await client.click('.ant-dropdown:not(.ant-dropdown-hidden) .anticon-folder-add')
await delay(200)
await client.setValue('.session-current .sftp-item input', fname)
await client.click('.session-current .sftp-panel-title')
await delay(2500)
// Verify folder was created
await client.hasElem(`.session-current .file-list.${fileType} .sftp-item[title="${fname}"]`)
// Open info modal
await client.rightClick(`.session-current .file-list.${fileType} .sftp-item[title="${fname}"]`, 10, 10)
await delay(200)
await client.click('.ant-dropdown:not(.ant-dropdown-hidden) .anticon-info-circle')
await delay(1200)
// Verify modal content and visibility
await client.hasElem('.custom-modal-container')
await client.hasElem('.custom-modal-container')
await client.hasElem('.custom-modal-wrap .file-props')
// Close modal using different methods
if (closeMethod === 'click') {
await client.click('.custom-modal-close')
} else {
await client.keyboard.press('Escape')
}
await delay(300)
// Verify modal is closed
await client.hasElem('.custom-modal-container', false)
// Delete the test folder
await client.click(`.session-current .file-list.${fileType} .sftp-item[title="${fname}"]`)
await delay(400)
await client.keyboard.press('Delete')
await delay(400)
await client.keyboard.press('Enter')
await delay(2500)
// Verify folder is deleted
await client.hasElem(`.session-current .file-list.${fileType} .sftp-item[title="${fname}"]`, false)
}