mirror of
https://github.com/open-webui/open-webui
synced 2025-04-16 21:42:50 +00:00
enh: add e2e tests for document list
This commit is contained in:
parent
7e03624408
commit
c6eba8c0a1
cypress
src/lib/components
46
cypress/e2e/documents.cy.ts
Normal file
46
cypress/e2e/documents.cy.ts
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
// eslint-disable-next-line @typescript-eslint/triple-slash-reference
|
||||||
|
/// <reference path="../support/index.d.ts" />
|
||||||
|
|
||||||
|
describe('Documents', () => {
|
||||||
|
const timestamp = Date.now();
|
||||||
|
|
||||||
|
before(() => {
|
||||||
|
cy.uploadTestDocument(timestamp);
|
||||||
|
});
|
||||||
|
|
||||||
|
after(() => {
|
||||||
|
cy.deleteTestDocument(timestamp);
|
||||||
|
});
|
||||||
|
|
||||||
|
context('Admin', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
// Login as the admin user
|
||||||
|
cy.loginAdmin();
|
||||||
|
// Visit the home page
|
||||||
|
cy.visit('/workspace/documents');
|
||||||
|
cy.get('button').contains('#cypress-test').click();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can see documents', () => {
|
||||||
|
cy.get('div').contains(`document-test-initial-${timestamp}.txt`).should('have.length', 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can see edit button', () => {
|
||||||
|
cy.get('div')
|
||||||
|
.contains(`document-test-initial-${timestamp}.txt`)
|
||||||
|
.get("button[aria-label='Edit Doc']")
|
||||||
|
.should('exist');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can see delete button', () => {
|
||||||
|
cy.get('div')
|
||||||
|
.contains(`document-test-initial-${timestamp}.txt`)
|
||||||
|
.get("button[aria-label='Delete Doc']")
|
||||||
|
.should('exist');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can see upload button', () => {
|
||||||
|
cy.get("button[aria-label='Add Docs']").should('exist');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
@ -1,4 +1,6 @@
|
|||||||
/// <reference types="cypress" />
|
/// <reference types="cypress" />
|
||||||
|
// eslint-disable-next-line @typescript-eslint/triple-slash-reference
|
||||||
|
/// <reference path="../support/index.d.ts" />
|
||||||
|
|
||||||
export const adminUser = {
|
export const adminUser = {
|
||||||
name: 'Admin User',
|
name: 'Admin User',
|
||||||
@ -10,6 +12,9 @@ const login = (email: string, password: string) => {
|
|||||||
return cy.session(
|
return cy.session(
|
||||||
email,
|
email,
|
||||||
() => {
|
() => {
|
||||||
|
// Make sure to test against us english to have stable tests,
|
||||||
|
// regardless on local language preferences
|
||||||
|
localStorage.setItem('locale', 'en-US');
|
||||||
// Visit auth page
|
// Visit auth page
|
||||||
cy.visit('/auth');
|
cy.visit('/auth');
|
||||||
// Fill out the form
|
// Fill out the form
|
||||||
@ -68,6 +73,50 @@ Cypress.Commands.add('register', (name, email, password) => register(name, email
|
|||||||
Cypress.Commands.add('registerAdmin', () => registerAdmin());
|
Cypress.Commands.add('registerAdmin', () => registerAdmin());
|
||||||
Cypress.Commands.add('loginAdmin', () => loginAdmin());
|
Cypress.Commands.add('loginAdmin', () => loginAdmin());
|
||||||
|
|
||||||
|
Cypress.Commands.add('uploadTestDocument', (suffix: any) => {
|
||||||
|
// Login as admin
|
||||||
|
cy.loginAdmin();
|
||||||
|
// upload example document
|
||||||
|
cy.visit('/workspace/documents');
|
||||||
|
// Create a document
|
||||||
|
cy.get("button[aria-label='Add Docs']").click();
|
||||||
|
cy.readFile('cypress/data/example-doc.txt').then((text) => {
|
||||||
|
// select file
|
||||||
|
cy.get('#upload-doc-input').selectFile(
|
||||||
|
{
|
||||||
|
contents: Cypress.Buffer.from(text + Date.now()),
|
||||||
|
fileName: `document-test-initial-${suffix}.txt`,
|
||||||
|
mimeType: 'text/plain',
|
||||||
|
lastModified: Date.now()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
force: true
|
||||||
|
}
|
||||||
|
);
|
||||||
|
// open tag input
|
||||||
|
cy.get("button[aria-label='Add Tag']").click();
|
||||||
|
cy.get("input[placeholder='Add a tag']").type('cypress-test');
|
||||||
|
cy.get("button[aria-label='Save Tag']").click();
|
||||||
|
|
||||||
|
// submit to upload
|
||||||
|
cy.get("button[type='submit']").click();
|
||||||
|
|
||||||
|
// wait for upload to finish
|
||||||
|
cy.get('button').contains('#cypress-test').should('exist');
|
||||||
|
cy.get('div').contains(`document-test-initial-${suffix}.txt`).should('exist');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
Cypress.Commands.add('deleteTestDocument', (suffix: any) => {
|
||||||
|
cy.loginAdmin();
|
||||||
|
cy.visit('/workspace/documents');
|
||||||
|
// clean up uploaded documents
|
||||||
|
cy.get('div')
|
||||||
|
.contains(`document-test-initial-${suffix}.txt`)
|
||||||
|
.find("button[aria-label='Delete Doc']")
|
||||||
|
.click();
|
||||||
|
});
|
||||||
|
|
||||||
before(() => {
|
before(() => {
|
||||||
cy.registerAdmin();
|
cy.registerAdmin();
|
||||||
});
|
});
|
||||||
|
2
cypress/support/index.d.ts
vendored
2
cypress/support/index.d.ts
vendored
@ -7,5 +7,7 @@ declare namespace Cypress {
|
|||||||
register(name: string, email: string, password: string): Chainable<Element>;
|
register(name: string, email: string, password: string): Chainable<Element>;
|
||||||
registerAdmin(): Chainable<Element>;
|
registerAdmin(): Chainable<Element>;
|
||||||
loginAdmin(): Chainable<Element>;
|
loginAdmin(): Chainable<Element>;
|
||||||
|
uploadTestDocument(suffix: any): Chainable<Element>;
|
||||||
|
deleteTestDocument(suffix: any): Chainable<Element>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
{/each}
|
{/each}
|
||||||
</datalist>
|
</datalist>
|
||||||
|
|
||||||
<button type="button" on:click={addTagHandler}>
|
<button type="button" aria-label={$i18n.t('Save Tag')} on:click={addTagHandler}>
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
viewBox="0 0 16 16"
|
viewBox="0 0 16 16"
|
||||||
@ -63,6 +63,7 @@
|
|||||||
<button
|
<button
|
||||||
class=" cursor-pointer self-center p-0.5 flex h-fit items-center dark:hover:bg-gray-700 rounded-full transition border dark:border-gray-600 border-dashed"
|
class=" cursor-pointer self-center p-0.5 flex h-fit items-center dark:hover:bg-gray-700 rounded-full transition border dark:border-gray-600 border-dashed"
|
||||||
type="button"
|
type="button"
|
||||||
|
aria-label={$i18n.t('Add Tag')}
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showTagInput = !showTagInput;
|
showTagInput = !showTagInput;
|
||||||
}}
|
}}
|
||||||
|
@ -244,6 +244,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<button
|
<button
|
||||||
class=" px-2 py-2 rounded-xl border border-gray-200 dark:border-gray-600 dark:border-0 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 transition font-medium text-sm flex items-center space-x-1"
|
class=" px-2 py-2 rounded-xl border border-gray-200 dark:border-gray-600 dark:border-0 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 transition font-medium text-sm flex items-center space-x-1"
|
||||||
|
aria-label={$i18n.t('Add Docs')}
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showAddDocModal = true;
|
showAddDocModal = true;
|
||||||
}}
|
}}
|
||||||
@ -446,6 +447,7 @@
|
|||||||
<button
|
<button
|
||||||
class="self-center w-fit text-sm z-20 px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
|
class="self-center w-fit text-sm z-20 px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
|
||||||
type="button"
|
type="button"
|
||||||
|
aria-label={$i18n.t('Edit Doc')}
|
||||||
on:click={async (e) => {
|
on:click={async (e) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
showEditDocModal = !showEditDocModal;
|
showEditDocModal = !showEditDocModal;
|
||||||
@ -493,6 +495,7 @@
|
|||||||
<button
|
<button
|
||||||
class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
|
class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
|
||||||
type="button"
|
type="button"
|
||||||
|
aria-label={$i18n.t('Delete Doc')}
|
||||||
on:click={(e) => {
|
on:click={(e) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user