Skip to content

Commit

Permalink
Add support to explore directory tree (#47)
Browse files Browse the repository at this point in the history
* Add support to explore directory tree

* explore sub directory and download files

* Upload to subdir

* Add cypress test

* edit unit test titles

* Add i18n
  • Loading branch information
dtrouillet authored Sep 24, 2020
1 parent 97d3356 commit 596088b
Show file tree
Hide file tree
Showing 20 changed files with 340 additions and 40 deletions.
102 changes: 102 additions & 0 deletions cypress/integration/ebad/explore-files.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
context('Folders', () => {
before(function () {
cy.server();
// cy.route({
// method: 'GET',
// url: '/ebad/applications/gestion*',
// }).as('searchApplication');
});

beforeEach(function () {
cy.visit('http://localhost:4200');
cy.fixture('login.json').then((login) => {
this.login = login;
});
});

it('Add a folder', function () {
cy.login({login: this.login.admin.login, password: this.login.admin.password})
.addNorme({name: 'myNorme', interpreteur: '$1', shellFolder: 'shell', fileDate: 'date.txt'})
.addApplication({codeAppli: 'AA0', name: 'APP0', parmPattern: 'yyyyMMdd', filePattern: 'yyyyMMdd'})
.addUserToApplication({codeAppli: 'AA0', nameAppli: 'APP0',firstname: this.login.admin.firstname, login: this.login.admin.login})
.addManagerToApplication({codeAppli: 'AA0', nameAppli: 'APP0',firstname: this.login.admin.firstname, login: this.login.admin.login})
.addEnvironnement({applicationName: 'APP0', name:'myEnv', host:'localhost', login:'root', homePath:'/root', prefix:'P', norme: 'myNorme'})
.addFolder({appliName:'APP0', envName: 'myEnv', directoryName: 'myFolder', path: 'myPath'});
cy.get('.toast-body').should('contains.text', 'Le répertoire myFolder a bien été ajouté');
});

it('Show content folder', function(){
cy.login({login: this.login.admin.login, password: this.login.admin.password})
.selectFolder({appliName: 'APP0', envName: 'myEnv', directoryName: 'myFolder'});
});

it('Delete folder', function(){
cy.login({login: this.login.admin.login, password: this.login.admin.password})
.deleteFolder({appliName: 'APP0', envName: 'myEnv', directoryName: 'myFolder'})
.deleteApplication({codeAppli: 'AA0', name: 'APP0'})
.deleteNorme({name: 'myNorme'});
});

// it('Supprimer une application', function () {
// cy.login({login: this.login.admin.login, password: this.login.admin.password})
// .deleteApplication({codeAppli: 'AT1', name: 'ApplicationTest1'});
// cy.get('.toast-body').should('have.text', '\nL\'application a été supprimée\n');
// });
//
// it('Lister les applications', function () {
// cy.server();
// cy.route({
// method: 'GET',
// url: '/ebad/applications/gestion?page=0&size=10&sort=name,asc&name=ApplicationTest',
// }).as('searchApplicationTest');
//
// cy.login({login: this.login.admin.login, password: this.login.admin.password});
// cy.addApplication({codeAppli: 'AT1', name: 'ApplicationTest1', parmPattern: 'yyyyMMdd', filePattern: 'yyyyMMdd'});
// cy.addApplication({codeAppli: 'AT2', name: 'ApplicationTest2', parmPattern: 'ddMMyyyy', filePattern: 'ddMMyyyy'});
//
// cy.visit('http://localhost:4200');
// cy.get('#administrationMenu').click();
// cy.get('#applicationMenu').click();
// cy.get('input[type="search"]').type('ApplicationTest');
//
// cy.wait('@searchApplicationTest');
//
// cy.get('#listApplications > tbody > tr').not('.odd').as('lines');
// cy.get('@lines').should('have.length', 2);
//
// cy.get('@lines').eq(0).children('td').as('line1');
// cy.get('@line1').eq(0).should('contain.text', 'AT1');
// cy.get('@line1').eq(1).should('contain.text', 'ApplicationTest1');
// cy.get('@line1').eq(2).should('contain.text', 'yyyyMMdd');
// cy.get('@line1').eq(3).should('contain.text', 'yyyyMMdd');
//
// cy.get('@lines').eq(1).children('td').as('line2');
// cy.get('@line2').eq(0).should('contain.text', 'AT2');
// cy.get('@line2').eq(1).should('contain.text', 'ApplicationTest2');
// cy.get('@line2').eq(2).should('contain.text', 'ddMMyyyy');
// cy.get('@line2').eq(3).should('contain.text', 'ddMMyyyy');
//
//
// cy.deleteApplication({codeAppli: 'AT1', name: 'ApplicationTest1'});
// cy.deleteApplication({codeAppli: 'AT2', name: 'ApplicationTest2'});
//
// });
//
// it('Modifier une application', function () {
// cy.login({login: this.login.admin.login, password: this.login.admin.password})
// .addApplication({codeAppli: 'AT1', name: 'ApplicationTest1', parmPattern: 'yyyyMMdd', filePattern: 'yyyyMMdd'});
//
// cy.updateApplication({
// codeAppliToUpdate: 'AT1',
// nameToUpdate: 'ApplicationTest1',
// codeAppli: 'AT2',
// name: 'ApplicationTest2',
// parmPattern: 'yyyyMMdd',
// filePattern: 'yyyyMMdd'
// });
// cy.getAttached('.toast-body').should('contains.text', 'L\'application ApplicationTest2 a bien été modifiée');
//
// cy.deleteApplication({codeAppli: 'AT2', name: 'ApplicationTest2'});
// cy.getAttached('.toast-body').should('contains.text', 'L\'application a été supprimée');
// });
});
10 changes: 5 additions & 5 deletions cypress/integration/ebad/manage-application.spec.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
context('Gestion Application', () => {
context('Applications', () => {
before(function () {
cy.server();
cy.route({
Expand All @@ -14,19 +14,19 @@ context('Gestion Application', () => {
});
});

it('Ajouter une application', function () {
it('Add application', function () {
cy.login({login: this.login.admin.login, password: this.login.admin.password})
.addApplication({codeAppli: 'AT1', name: 'ApplicationTest1', parmPattern: 'yyyyMMdd', filePattern: 'yyyyMMdd'});
cy.get('.toast-body').should('contains.text', 'L\'application ApplicationTest1 a bien été ajoutée');
});

it('Supprimer une application', function () {
it('Delete application', function () {
cy.login({login: this.login.admin.login, password: this.login.admin.password})
.deleteApplication({codeAppli: 'AT1', name: 'ApplicationTest1'});
cy.get('.toast-body').should('have.text', '\nL\'application a été supprimée\n');
});

it('Lister les applications', function () {
it('List applications', function () {
cy.server();
cy.route({
method: 'GET',
Expand Down Expand Up @@ -65,7 +65,7 @@ context('Gestion Application', () => {

});

it('Modifier une application', function () {
it('Edit application', function () {
cy.login({login: this.login.admin.login, password: this.login.admin.password})
.addApplication({codeAppli: 'AT1', name: 'ApplicationTest1', parmPattern: 'yyyyMMdd', filePattern: 'yyyyMMdd'});

Expand Down
24 changes: 18 additions & 6 deletions cypress/support/application.commands.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,14 @@ Cypress.Commands.add("addUserToApplication", ({codeAppli, nameAppli,firstname, l
cy.server();
cy.route({
method: 'GET',
url: '/ebad/applications/gestion*',
url: '/ebad/applications/gestion?page=0&size=10&sort=name,asc&name='+nameAppli,
}).as('searchApplication');

cy.route({
method: 'GET',
url: '/ebad/users?page=0&size=20&login='+firstname,
}).as('searchUser');

cy.get('#administrationMenu').click();
cy.get('#applicationMenu').click();
cy.get('input[type="search"]').clear();
Expand All @@ -90,27 +95,34 @@ Cypress.Commands.add("addUserToApplication", ({codeAppli, nameAppli,firstname, l

cy.get('#actionUser-' + codeAppli).click();
cy.get('#user').type(firstname);
cy.get('button').find('('+login+')').click();
cy.wait('@searchUser');
cy.get('button').contains(login).click();
cy.get('#addUserBtn').click();
cy.get('#closeBtn').click();
});

Cypress.Commands.add("addManagerToApplication", ({codeAppli, nameAppli,user}) => {
Cypress.Commands.add("addManagerToApplication", ({codeAppli, nameAppli, firstname, login}) => {
cy.server();
cy.route({
method: 'GET',
url: '/ebad/applications/gestion*',
url: '/ebad/applications/gestion?page=0&size=10&sort=name,asc&name='+nameAppli,
}).as('searchApplication');

cy.route({
method: 'GET',
url: '/ebad/managers?page=0&size=20&login='+firstname,
}).as('searchUser');

cy.get('#administrationMenu').click();
cy.get('#applicationMenu').click();
cy.get('input[type="search"]').clear();
cy.get('input[type="search"]').type(nameAppli);
cy.wait('@searchApplication');

cy.get('#actionManager-' + codeAppli).click();
cy.get('#user').type(user.firstname);
cy.get('[ng-reflect-result="'+user.firstname+' '+user.lastname+' ('+user.login+')"]').click();
cy.get('#user').type(firstname);
cy.wait('@searchUser');
cy.get('button').contains(login).click();
cy.get('#addUserBtn').click();
cy.get('#closeBtn').click();
});
111 changes: 111 additions & 0 deletions cypress/support/files.commands.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
/////////// FOLDER ///////////////
Cypress.Commands.add("selectFolder", ({appliName, envName, directoryName}) => {
cy.server();
cy.route({
method: 'GET',
url: '/ebad/applications?page=0&size=100',
}).as('getApplications');

cy.route({
method: 'GET',
url: '/ebad/environments?applicationId=**&page=0&size=100&sort=name,asc',
}).as('getEnvironments');

cy.route({
method: 'GET',
url: '/ebad/directories/env/**',
}).as('getDirectories');

cy.get('#functionMenu').click();
cy.get('#functionFolderMenu').click();
cy.wait('@getApplications');

cy.get('#selectApplication').select(appliName);
cy.wait('@getEnvironments');

cy.get('#selectEnvironnement').select(envName);
cy.wait('@getDirectories');

cy.get("#selectDirectory").type(directoryName);

});

Cypress.Commands.add("addFolder", ({appliName, envName, directoryName, path}) => {
cy.server();
cy.route({
method: 'GET',
url: '/ebad/applications/write?page=0&size=100',
}).as('getApplications');

cy.route({
method: 'GET',
url: '/ebad/environments?applicationId=**&page=0&size=100&sort=name,asc',
}).as('getEnvironments');

cy.route({
method: 'PUT',
url: '/ebad/directories',
}).as('addFolder');

cy.get('#managementMenu').click();
cy.get('#folderManageMenu').click();
cy.wait('@getApplications');

cy.get('#selectApplication').select(appliName);
cy.wait('@getEnvironments');

cy.get('#selectEnvironnement').select(envName);

cy.get('#addFolder').click();
cy.get('#name').type(directoryName)
cy.get('#path').type(path)
cy.get('#addDirectoryForm').submit();

cy.wait('@addFolder');
});

Cypress.Commands.add("deleteFolder", ({appliName, envName, directoryName}) => {
cy.server();
cy.route({
method: 'GET',
url: '/ebad/applications/write?page=0&size=100',
}).as('getApplications');

cy.route({
method: 'GET',
url: '/ebad/environments?applicationId=**&page=0&size=100&sort=name,asc',
}).as('getEnvironments');

cy.route({
method: 'GET',
url: '/ebad/directories/env/**',
}).as('getDirectories');

cy.route({
method: 'POST',
url: '/ebad/directories/delete',
}).as('deleteFolder');

cy.route({
method: 'GET',
url: '/ebad/directories/env/**?page=0&size=10&sort=id,asc&name='+directoryName,
}).as('searchFolder');

cy.get('#managementMenu').click();
cy.get('#folderManageMenu').click();
cy.wait('@getApplications');

cy.get('#selectApplication').select(appliName);
cy.wait('@getEnvironments');

cy.get('#selectEnvironnement').select(envName);
cy.wait('@getDirectories');

cy.get('input[type="search"]').clear();
cy.get('input[type="search"]').type(directoryName);
cy.wait('@searchFolder');

cy.get('#actionDelete-' + directoryName).click();
cy.get('#deleteBtn').click();
cy.wait('@deleteFolder');
});
1 change: 1 addition & 0 deletions cypress/support/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import './application.commands'
import './norme.commands'
import './environnement.commands'
import './batch.commands'
import './files.commands'

// Alternatively you can use CommonJS syntax:
// require('./commands')
14 changes: 11 additions & 3 deletions cypress/support/norme.commands.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,19 @@ Cypress.Commands.add("addNorme", ({name, interpreteur, shellFolder, fileDate}) =
});

Cypress.Commands.add("deleteNorme", ({name}) => {
cy.server();
cy.route({
method: 'GET',
url: '/ebad/norms?page=0&size=10&sort=name,asc&name='+name,
}).as('searchNorme');

cy.get('#administrationMenu').click();
cy.get('#normMenu').click();
cy.get('tr').contains('td > span', name).parent('td').parent('tr').within(() => {
cy.get('button[name="actionDelete"]').click();
});
cy.get('input[type="search"]').clear();
cy.get('input[type="search"]').type(name);
cy.wait('@searchNorme');

cy.get('#actionDelete-'+name).click();
cy.get('#deleteBtn').click();
});

Expand Down
4 changes: 2 additions & 2 deletions src/app/admin-norms/admin-norms.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ <h2 id="tableTitle" class="page-title">
{{norm.ctrlMDate}}
</td>
<td class="text-center">
<a (click)="editNorm(norm)" href="javascript:void(0)" class="btn btn-secondary btn-sm">Edit</a>
<a (click)="deleteNorm(norm)" href="javascript:void(0)" class="btn btn-secondary btn-sm">Delete</a>
<a id="actionEdit-{{norm.name}}" (click)="editNorm(norm)" href="javascript:void(0)" class="btn btn-secondary btn-sm">Edit</a>
<a id="actionDelete-{{norm.name}}" (click)="deleteNorm(norm)" href="javascript:void(0)" class="btn btn-secondary btn-sm">Delete</a>
</td>
</tr>
</tbody>
Expand Down
1 change: 1 addition & 0 deletions src/app/core/models/directory.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ export interface Directory extends Audit {
name: string;
path: string;
canWrite: boolean;
canExplore: boolean;
environnement: Environment;
}
2 changes: 2 additions & 0 deletions src/app/core/models/file.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@ export interface File {
name: string;
updateDate: Date;
createDate: Date;
folder: boolean;
subDirectory: string;
}
13 changes: 10 additions & 3 deletions src/app/core/services/files.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,12 @@ export class FilesService {
return this.apiService.post(`/directories/delete`, directory);
}

getAllFilesFromDirectory(slug): Observable<File[]> {
return this.apiService.get(`/directories/files/${slug}`);
getAllFilesFromDirectory(slug, subDir?: string): Observable<File[]> {
let param;
if(subDir && subDir != ''){
param = {'subDirectory': subDir}
}
return this.apiService.get(`/directories/files/${slug}`, param);
}

deleteFile(file): Observable<void> {
Expand All @@ -41,10 +45,13 @@ export class FilesService {
return this.apiService.postFile(`/directories/files/read`, file, {responseType: 'arraybuffer'});
}

uploadFile(file, name, idDirectory): Observable<any> {
uploadFile(file, name, idDirectory, subDirectory?): Observable<any> {
const formData = new FormData();
formData.append('directory', idDirectory);
formData.append('file', file, name);
if(subDirectory) {
formData.append('subDirectory', subDirectory);
}
return this.apiService.postFile(`/directories/files/upload`, formData);
}
}
Loading

0 comments on commit 596088b

Please sign in to comment.