Compare commits

...
18 Commits
Author SHA1 Message Date
Ketevani KvirikashviliandKetevani Kvirikashvili 83df643133 unit tests are added for using date fields as visibility conditions (#6478)
Co-authored-by: Ketevani Kvirikashvili <ketevani@Ketevanis-MacBook-Pro.local>
2020-12-23 11:27:03 +00:00
Pablo Martinez Garcia 529ca40e6c AAE-3869 Update simpleapp adding custom model forms (#6476) 2020-12-22 15:37:32 +01:00
dhrn 02aad08070 [ADF-5281][ADF] Can't go through a form with date/dateTime widgets only with Tab (#6365)
* [ADF-5281][ADF] Can't go through a form with date/dateTime widgets only with Tab

* * update datetime library

* Update date-time.widget.html
2020-12-18 09:48:28 +00:00
Francesco Corti 5216d3a541 Duplicated tutorial (because of the renaming) (#6469)
Duplicated tutorial (because of the renaming)
2020-12-17 13:07:28 +00:00
Thomas Hunter 044b6a8d0f ACA-4176 & ACA-4177 Show number of groups, sites and files during environment scan (#6461)
* ACA-4176 & ACA-4177 Show number of groups, sites and files during environment scan

* ACA-4176 & ACA-4177 Removed unnecessary call to main()
2020-12-17 09:57:10 +00:00
dependabot[bot] ddc3c18c3c Bump commander from 6.1.0 to 6.2.1 (#6457)
Bumps [commander](https://github.com/tj/commander.js) from 6.1.0 to 6.2.1.
- [Release notes](https://github.com/tj/commander.js/releases)
- [Changelog](https://github.com/tj/commander.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/tj/commander.js/compare/v6.1.0...v6.2.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-17 07:10:35 +00:00
dependabot[bot] f9be352983 Bump snyk from 1.431.2 to 1.437.2 (#6468)
Bumps [snyk](https://github.com/snyk/snyk) from 1.431.2 to 1.437.2.
- [Release notes](https://github.com/snyk/snyk/releases)
- [Changelog](https://github.com/snyk/snyk/blob/master/.releaserc)
- [Commits](https://github.com/snyk/snyk/compare/v1.431.2...v1.437.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-17 07:10:02 +00:00
dependabot[bot] 5c757611eb Bump markdownlint-cli from 0.25.0 to 0.26.0 (#6464)
Bumps [markdownlint-cli](https://github.com/igorshubovych/markdownlint-cli) from 0.25.0 to 0.26.0.
- [Release notes](https://github.com/igorshubovych/markdownlint-cli/releases)
- [Commits](https://github.com/igorshubovych/markdownlint-cli/compare/v0.25.0...v0.26.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-17 07:09:41 +00:00
dependabot[bot] 8e8fe0f5cd Bump highlight.js from 10.2.0 to 10.4.1 (#6467)
Bumps [highlight.js](https://github.com/highlightjs/highlight.js) from 10.2.0 to 10.4.1.
- [Release notes](https://github.com/highlightjs/highlight.js/releases)
- [Changelog](https://github.com/highlightjs/highlight.js/blob/master/CHANGES.md)
- [Commits](https://github.com/highlightjs/highlight.js/compare/10.2.0...10.4.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-17 07:09:22 +00:00
1c51b2a1a6 Use hash strategy in demo shell as the other apps (#6402)
* hash startegy

* use hash in e2e

* trigger build

* fix

* fix

* remove children router overwrite crazynes

* Update login.module.ts

* revert not needed changes

* some fixes

* fix

* remove fdescribe

* fix

* fix

* Update share-file.e2e.ts

* Update lock-file.e2e.ts

* Update share-file.e2e.ts

* some fix

* some other fixes

* username as id

* fix after rebase

* username

* fix usernamee

* Fix the errorComponent

* Attempt to fix unit test - to check

* * Fixed circular dependency error while building adf-testing package

* * Fixed failing UT

* fix

* use username

* some fixes

* some fix

* fix

Co-authored-by: Maurizio Vitale <maurizio.vitale@alfresco.com>
Co-authored-by: Vito Albano <vitoalbano@vitoalbano-mbp-0120.local>
Co-authored-by: sivakumar414ram <siva.kumar@muraai.com>
2020-12-16 18:46:56 +00:00
Mark Hulbert 3734151338 Remove escaped characters (#6451) 2020-12-11 16:37:49 +00:00
Thomas Hunter b405da8312 ACA-4175 Show number of user's home folders during environment scan (#6446)
* ACA-4175 Show number of user's home folders during environment scan

* ACA-4175 Simplified the retrieval of the number of user's home folders

* ACA-4175 Added a constant for the User's home folders path
2020-12-11 15:32:56 +00:00
Denys Vuika cf54477408 remove old context menu (#6424) 2020-12-10 11:51:55 +00:00
Silviu Popa 8a285f2f15 [ACA-4218] - fix tomorrow date range filter (#6438)
* [ACA-4218] - fix tomorrow date range filter

* revert unnecesary change

* fix unit test
2020-12-09 18:20:21 +00:00
dependabot[bot] 6c68650848 Bump @alfresco/js-api from 4.1.0 to 4.2.0 (#6440)
Bumps [@alfresco/js-api](https://github.com/Alfresco/alfresco-js-api) from 4.1.0 to 4.2.0.
- [Release notes](https://github.com/Alfresco/alfresco-js-api/releases)
- [Commits](https://github.com/Alfresco/alfresco-js-api/compare/4.1.0...4.2.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-09 15:20:12 +00:00
Francesco Corti 38c10fcdef Removed the TODO placeholders. (#6442)
Ok to bring this into the next version of ADF.
2020-12-09 15:19:33 +00:00
Eugenio Romano e2b88ddab0 move audit and license file 2020-12-08 16:36:19 +00:00
Eugenio Romano a978e97e8c bump 4.2.0 2020-12-08 16:31:26 +00:00
237 changed files with 2627 additions and 2160 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "Alfresco-ADF-Angular-Demo",
"description": "Demo shell for Alfresco Angular components",
"version": "4.1.0",
"version": "4.2.0",
"author": "Alfresco Software, Ltd.",
"repository": {
"type": "git",
+1 -1
View File
@@ -21,7 +21,7 @@
"silentLogin": true,
"redirectSilentIframeUri": "{protocol}//{hostname}{:port}/assets/silent-refresh.html",
"redirectUri": "/",
"redirectUriLogout": "/logout",
"redirectUriLogout": "#/logout",
"publicUrls": [
"**/preview/s/*",
"**/settings",
+9 -2
View File
@@ -23,7 +23,14 @@ import { ChartsModule } from 'ng2-charts';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { TranslateModule } from '@ngx-translate/core';
import { AppConfigService, TRANSLATION_PROVIDER, DebugAppConfigService, CoreModule, CoreAutomationService, AuthBearerInterceptor } from '@alfresco/adf-core';
import {
AppConfigService,
TRANSLATION_PROVIDER,
DebugAppConfigService,
CoreModule,
CoreAutomationService,
AuthBearerInterceptor
} from '@alfresco/adf-core';
import { ExtensionsModule } from '@alfresco/adf-extensions';
import { AppComponent } from './app.component';
import { MaterialModule } from './material.module';
@@ -127,7 +134,7 @@ registerLocaleData(localeSv);
BrowserModule,
environment.e2e ? NoopAnimationsModule : BrowserAnimationsModule,
ReactiveFormsModule,
RouterModule.forRoot(appRoutes, { initialNavigation: true }),
RouterModule.forRoot(appRoutes, { useHash: true }),
FormsModule,
HttpClientModule,
MaterialModule,
@@ -497,8 +497,6 @@
</div>
</div>
<adf-context-menu-holder></adf-context-menu-holder>
<div *ngIf="processId">
<adf-start-process
[values]="formValues"
@@ -26,7 +26,7 @@ import { LogService } from '@alfresco/adf-core';
})
export class LoginComponent {
customSuccessRouteURI = '';
customSuccessRouteURI = '/home';
customLogoImageURL = './assets/images/alfresco-logo.svg';
disableCsrf = false;
@@ -7,7 +7,7 @@
<div class="app-logout-login">
<a mat-raised-button class="app-logout-docs-button adf-primary-color"
href="/login">{{ 'APP.LOGOUT.LOGIN' | translate}}</a>
href="#/login">{{ 'APP.LOGOUT.LOGIN' | translate}}</a>
</div>
<div class="app-logout-home">
<a mat-raised-button class="app-logout-docs-button adf-primary-color"
+8 -1
View File
@@ -3,8 +3,15 @@
<head>
<meta charset="utf-8">
<!-- Important: cache busting for index.html -->
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
<title>ACS APS ADF Application with Angular CLI</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/png" href="favicon-96x96.png" sizes="96x96">
@@ -126,7 +126,7 @@ Beside the template context's **isMenuMinimized** variable, another way to liste
| Name | Type | Default | Description |
| -------------- | ----------------------------------------------------------------------------- | ------- | ----------------------------------------------- |
| menuOpenState$ | [`Observable`](http://reactivex.io/documentation/observable.html)\<boolean> | true | Another way to listen to menu open/closed state |
| menuOpenState$ | [`Observable`](http://reactivex.io/documentation/observable.html)&lt;boolean> | true | Another way to listen to menu open/closed state |
Every time the menu state is changed, the following values are emitted:
@@ -1,7 +1,7 @@
---
Title: Context Menu directive
Added: v2.0.0
Status: Active
Status: Deprecated
Last reviewed: 2018-11-20
---
+2 -2
View File
@@ -52,8 +52,8 @@ If the search string contain spaces then each section between the spaces will
be treated as a separate item to highlight. For example, you could use this to
highlight all occurrences of words in a list.
The highlighting works by adding an HTML \<span> element around the
selected text. The \<span> includes a CSS class; this defaults to
The highlighting works by adding an HTML &lt;span> element around the
selected text. The &lt;span> includes a CSS class; this defaults to
"adf-highlight" but you can supply your own class using the `adf-highlight-class`
property:
+2 -2
View File
@@ -73,7 +73,7 @@ some cases by viewing it directly in the browser via a special URL that referenc
the [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob). For example, you could use the [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) interface to construct an image in the
[PNG format](https://en.wikipedia.org/wiki/Portable_Network_Graphics). Since
PNG is a format the browser can display, you could use the [Blob's](https://developer.mozilla.org/en-US/docs/Web/API/Blob) URL in an
\<img> element to view the image within the page. Alternatively, you could let
&lt;img> element to view the image within the page. Alternatively, you could let
the user download it as a PNG file.
The `downloadBlob` method starts a download of the [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) data to the `filename`
@@ -85,7 +85,7 @@ for details of how a [Blob's](https://developer.mozilla.org/en-US/docs/Web/API/B
Use `createdTrustedUrl` to generate a URL string for a [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob). The URL refers to
the [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) as though it were a file but it is actually an object stored in memory,
so it does not persist across browser sessions. This URL can be used much like any
other, so you could use it for the `src` attribute of an \<img> element or the
other, so you could use it for the `src` attribute of an &lt;img> element or the
`href` of a download link. Note that while the URL is 'trusted', the data it contains
is not necessarily trustworthy unless you can vouch for it yourself; be careful that
the data doesn't expose your app to
@@ -26,10 +26,10 @@ A typical use case for this service is to display the results from a search engi
An excerpt of a retrieved document can be shown with the matching search terms
highlighted to indicate where they were found.
The service works by adding HTML \<span> elements around all sections of text
The service works by adding HTML &lt;span> elements around all sections of text
that match the `search` string. You can specify multiple search strings at once by
separating them with spaces, so passing "Apple Banana Cherry" in `search` will
highlight any of those words individually. The \<span> element includes a
highlight any of those words individually. The &lt;span> element includes a
`class` attribute which defaults to "highlight" but you can pass any class name
you like using the `wrapperClass` parameter.
+8 -8
View File
@@ -23,13 +23,13 @@ Accesses and manipulates sites from a Content Services repository.
Create a site membership for group
* *siteId:* `string` - The identifier of a site.
* *siteMembershipBodyCreate:* [`SiteMembershipBodyCreate`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteMembershipBodyCreate.md) - The Group to add and its role
* **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteGroupEntry`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteGroupEntry.md)`>` - Observable\<SiteGroupEntry>
* **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteGroupEntry`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteGroupEntry.md)`>` - Observable&lt;SiteGroupEntry>
* **createSiteMembership**(siteId: `string`, siteMembershipBodyCreate: [`SiteMembershipBodyCreate`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteMembershipBodyCreate.md), opts?: `any`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteMemberEntry`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteMemberEntry.md)`>`<br/>
Creates a site membership for person **personId** on site **siteId**.
* *siteId:* `string` - The identifier of a site
* *siteMembershipBodyCreate:* [`SiteMembershipBodyCreate`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteMembershipBodyCreate.md) - The person to add and their role
* *opts:* `any` - (Optional) Optional parameters
* **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteMemberEntry`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteMemberEntry.md)`>` - Observable\<SiteMemberEntry>
* **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteMemberEntry`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteMemberEntry.md)`>` - Observable&lt;SiteMemberEntry>
* **deleteSite**(siteId: `string`, permanentFlag: `boolean` = `true`): [`Observable`](http://reactivex.io/documentation/observable.html)`<any>`<br/>
Deletes a site.
* *siteId:* `string` - Site to delete
@@ -39,7 +39,7 @@ Accesses and manipulates sites from a Content Services repository.
Delete a group membership for site
* *siteId:* `string` - The identifier of a site.
* *groupId:* `string` - The authorityId of a group.
* **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<void>` - Observable\<void>
* **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<void>` - Observable&lt;void>
* **deleteSiteMembership**(siteId: `string`, personId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<void>`<br/>
Delete a site membership
* *siteId:* `string` - The identifier of a site.
@@ -61,7 +61,7 @@ Accesses and manipulates sites from a Content Services repository.
Get information about site membership of group
* *siteId:* `string` - The identifier of a site.
* *groupId:* `string` - The authorityId of a group.
* **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteGroupEntry`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteGroupEntry.md)`>` - Observable\<SiteGroupEntry>
* **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteGroupEntry`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteGroupEntry.md)`>` - Observable&lt;SiteGroupEntry>
* **getSiteMembers**(siteId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteEntry`](https://github.com/Alfresco/alfresco-js-api/blob/master/src/alfresco-core-rest-api/docs/SiteEntry.md)`|Function>`<br/>
Gets a list of all a site's members.
* *siteId:* `string` - ID of the target site
@@ -82,12 +82,12 @@ Accesses and manipulates sites from a Content Services repository.
List group membership for site
* *siteId:* `string` - The identifier of a site.
* *opts:* `any` - (Optional) Options supported by JS-API
* **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteGroupPaging`](../../../lib/cli/node_modules/@alfresco/js-api/src/api/content-rest-api/model/siteGroupPaging.ts)`>` - Observable\<SiteGroupPaging>
* **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteGroupPaging`](../../../lib/cli/node_modules/@alfresco/js-api/src/api/content-rest-api/model/siteGroupPaging.ts)`>` - Observable&lt;SiteGroupPaging>
* **listSiteMemberships**(siteId: `string`, opts: `any`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteMemberPaging`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteMemberPaging.md)`>`<br/>
Gets a list of all a site's members.
* *siteId:* `string` - ID of the target site
* *opts:* `any` - Optional parameters supported by JS-API
* **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteMemberPaging`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteMemberPaging.md)`>` - Observable\<SiteMemberPaging>
* **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteMemberPaging`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteMemberPaging.md)`>` - Observable&lt;SiteMemberPaging>
* **rejectSiteMembershipRequest**(siteId: `string`, inviteeId: `string`, opts?: `any`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteMembershipRequestWithPersonPaging`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteMembershipRequestWithPersonPaging.md)`>`<br/>
Reject site membership requests.
* *siteId:* `string` - The identifier of a site.
@@ -99,14 +99,14 @@ Accesses and manipulates sites from a Content Services repository.
* *siteId:* `string` - The identifier of a site.
* *groupId:* `string` - The authorityId of a group.
* *siteMembershipBodyUpdate:* [`SiteMembershipBodyUpdate`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteMembershipBodyUpdate.md) - The group new role
* **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteGroupEntry`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteGroupEntry.md)`>` - Observable\<SiteGroupEntry>
* **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteGroupEntry`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteGroupEntry.md)`>` - Observable&lt;SiteGroupEntry>
* **updateSiteMembership**(siteId: `string`, personId: `string`, siteMembershipBodyUpdate: [`SiteMembershipBodyUpdate`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteMembershipBodyUpdate.md), opts?: `any`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteMemberEntry`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteMemberEntry.md)`>`<br/>
Update a site membership
* *siteId:* `string` - The identifier of a site.
* *personId:* `string` - The identifier of a person.
* *siteMembershipBodyUpdate:* [`SiteMembershipBodyUpdate`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteMembershipBodyUpdate.md) - The persons new role
* *opts:* `any` - (Optional) Optional parameters
* **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteMemberEntry`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteMemberEntry.md)`>` - Observable\<SiteMemberEntry>
* **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteMemberEntry`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/SiteMemberEntry.md)`>` - Observable&lt;SiteMemberEntry>
## Details
+1 -1
View File
@@ -53,7 +53,7 @@ and icons is shown in the table below:
### Mat-icon
All the ADF icons for MIME types are now registered into the [`MatIconRegistry`](https://material.angular.io/components/icon/api), so you can use all
the icons via the \<mat-icon> tag:
the icons via the &lt;mat-icon> tag:
```javascript
import { ThumbnailService } from '@alfresco/adf-core';
+13 -12
View File
@@ -7,15 +7,16 @@ Github only: true
The pages linked below contain the licenses for all third party dependencies of ADF.
- [ADF v4.1](license-info-4.1.0.md)
- [ADF v4.0](license-info-4.0.0.md)
- [ADF v3.9](license-info-3.9.0.md)
- [ADF v3.8](license-info-3.8.0.md)
- [ADF v3.7](license-info-3.7.0.md)
- [ADF v3.6](license-info-3.6.0.md)
- [ADF v3.5](license-info-3.5.0.md)
- [ADF v3.4](license-info-3.4.0.md)
- [ADF v3.3](license-info-3.3.0.md)
- [ADF v3.2](license-info-3.2.0.md)
- [ADF v3.1](license-info-3.1.0.md)
- [ADF v3.0](license-info-3.0.0.md)
- [ADF 3.0.0](license-info-3.0.0.md)
- [ADF 3.1.0](license-info-3.1.0.md)
- [ADF 3.2.0](license-info-3.2.0.md)
- [ADF 3.3.0](license-info-3.3.0.md)
- [ADF 3.4.0](license-info-3.4.0.md)
- [ADF 3.5.0](license-info-3.5.0.md)
- [ADF 3.6.0](license-info-3.6.0.md)
- [ADF 3.7.0](license-info-3.7.0.md)
- [ADF 3.8.0](license-info-3.8.0.md)
- [ADF 3.9.0](license-info-3.9.0.md)
- [ADF 4.0.0](license-info-4.0.0.md)
- [ADF 4.1.0](license-info-4.1.0.md)
- [ADF 4.2.0](license-info-4.2.0.md)
+494
View File
@@ -0,0 +1,494 @@
---
Title: License info, alfresco-ng2-components 4.2.0
---
# License information for alfresco-ng2-components 4.2.0
This page lists all third party libraries the project depends on.
## Libraries
| Name | Version | License |
| --- | --- | --- |
| [@alfresco/js-api](https://github.com/Alfresco/alfresco-js-api) | 4.2.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@angular/animations](https://github.com/angular/angular) | 10.0.12 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/cdk](https://github.com/angular/components) | 10.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/common](https://github.com/angular/angular) | 10.0.12 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/compiler](https://github.com/angular/angular) | 10.0.12 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/compiler](https://github.com/angular/angular) | 9.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/core](https://github.com/angular/angular) | 10.0.12 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/core](https://github.com/angular/angular) | 9.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/flex-layout](https://github.com/angular/flex-layout) | 10.0.0-beta.32 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/forms](https://github.com/angular/angular) | 10.0.12 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/material-moment-adapter](https://github.com/angular/components) | 10.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/material](https://github.com/angular/components) | 10.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/platform-browser-dynamic](https://github.com/angular/angular) | 10.0.12 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/platform-browser](https://github.com/angular/angular) | 10.0.12 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/router](https://github.com/angular/angular) | 10.0.12 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@babel/code-frame](https://github.com/babel/babel) | 7.10.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@babel/helper-validator-identifier](https://github.com/babel/babel) | 7.10.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@babel/highlight](https://github.com/babel/babel) | 7.10.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@mat-datetimepicker/core](https://github.com/kuhnroyal/mat-datetimepicker) | 5.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@mat-datetimepicker/moment](https://github.com/kuhnroyal/mat-datetimepicker) | 5.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@ngx-translate/core](https://github.com/ngx-translate/core) | 13.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@sindresorhus/is](https://github.com/sindresorhus/is) | 0.14.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@sindresorhus/is](https://github.com/sindresorhus/is) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@snyk/cli-interface](https://github.com/snyk/snyk-cli-interface) | 2.11.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@snyk/cli-interface](https://github.com/snyk/snyk-cli-interface) | 2.9.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@snyk/cocoapods-lockfile-parser](https://github.com/snyk/cocoapods-lockfile-parser) | 3.5.2 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@snyk/composer-lockfile-parser](https://github.com/snyk/composer-lockfile-parser) | 1.4.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@snyk/dep-graph](https://github.com/snyk/dep-graph) | 1.19.4 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@snyk/dep-graph](https://github.com/snyk/dep-graph) | 1.21.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@snyk/docker-registry-v2-client](https://github.com/snyk/docker-registry-v2-client) | 1.13.9 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@snyk/gemfile](https://github.com/snyk/gemfile) | 1.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@snyk/java-call-graph-builder](https://github.com/snyk/java-call-graph-builder) | 1.16.2 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@snyk/java-call-graph-builder](https://github.com/snyk/java-call-graph-builder) | 1.17.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@snyk/rpm-parser](https://github.com/snyk/rpm-parser) | 2.2.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@snyk/snyk-cocoapods-plugin](https://github.com/snyk/snyk-cocoapods-plugin) | 2.5.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@snyk/snyk-docker-pull](https://github.com/snyk/docker-pull) | 3.2.3 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@szmarczak/http-timer](https://github.com/szmarczak/http-timer) | 1.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@szmarczak/http-timer](https://github.com/szmarczak/http-timer) | 4.0.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@types/cacheable-request](https://github.com/DefinitelyTyped/DefinitelyTyped) | 6.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@types/chart.js](https://github.com/DefinitelyTyped/DefinitelyTyped) | 2.9.24 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@types/color-name](https://github.com/DefinitelyTyped/DefinitelyTyped) | 1.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@types/debug](https://github.com/DefinitelyTyped/DefinitelyTyped) | 4.1.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@types/graphlib](https://github.com/DefinitelyTyped/DefinitelyTyped) | 2.1.7 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@types/hosted-git-info](https://github.com/DefinitelyTyped/DefinitelyTyped) | 2.7.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@types/http-cache-semantics](https://github.com/DefinitelyTyped/DefinitelyTyped) | 4.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@types/js-yaml](https://github.com/DefinitelyTyped/DefinitelyTyped) | 3.12.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@types/keyv](https://github.com/DefinitelyTyped/DefinitelyTyped) | 3.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped) | 14.14.8 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped) | 6.14.13 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@types/responselike](https://github.com/DefinitelyTyped/DefinitelyTyped) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@types/semver](https://github.com/DefinitelyTyped/DefinitelyTyped) | 5.5.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@yarnpkg/lockfile](https://github.com/yarnpkg/yarn/blob/master/packages/lockfile) | 1.1.0 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [abbrev](https://github.com/isaacs/abbrev-js) | 1.1.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [adf-tslint-rules](https://github.com/Alfresco/alfresco-ng2-components) | 0.0.7 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [agent-base](https://github.com/TooTallNate/node-agent-base) | 4.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [agent-base](https://github.com/TooTallNate/node-agent-base) | 4.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [alfresco-ng2-components](https://github.com/Alfresco/alfresco-ng2-components) | 4.2.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [ansi-align](https://github.com/nexdrew/ansi-align) | 3.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) | 3.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) | 4.3.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ansi-regex](https://github.com/chalk/ansi-regex) | 4.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ansi-regex](https://github.com/chalk/ansi-regex) | 5.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ansi-styles](https://github.com/chalk/ansi-styles) | 3.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ansi-styles](https://github.com/chalk/ansi-styles) | 4.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ansi-styles](https://github.com/chalk/ansi-styles) | 4.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ansicolors](https://github.com/thlorenz/ansicolors) | 0.3.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [app-root-path](https://github.com/inxilpro/node-app-root-path) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [app-root-path](https://github.com/inxilpro/node-app-root-path) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [archy](https://github.com/substack/node-archy) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [argparse](https://github.com/nodeca/argparse) | 1.0.10 | [MIT](http://www.opensource.org/licenses/MIT) |
| [aria-query](https://github.com/A11yance/aria-query) | 3.0.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [asap](https://github.com/kriskowal/asap) | 2.0.6 | [MIT](http://www.opensource.org/licenses/MIT) |
| [asn1](https://github.com/joyent/node-asn1) | 0.2.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ast-types-flow](https://github.com/kyldvs/ast-types-flow) | 0.0.7 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [ast-types](https://github.com/benjamn/ast-types) | 0.14.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [async](https://github.com/caolan/async) | 3.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [asynckit](https://github.com/alexindigo/asynckit) | 0.4.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [axobject-query](https://github.com/A11yance/axobject-query) | 2.0.2 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [balanced-match](https://github.com/juliangruber/balanced-match) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [base64-js](https://github.com/beatgammit/base64-js) | 1.3.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [bcrypt-pbkdf](https://github.com/joyent/node-bcrypt-pbkdf) | 1.0.2 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [bl](https://github.com/rvagg/bl) | 4.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [boxen](https://github.com/sindresorhus/boxen) | 4.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [brace-expansion](https://github.com/juliangruber/brace-expansion) | 1.1.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [braces](https://github.com/micromatch/braces) | 3.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [browserify-zlib](https://github.com/devongovett/browserify-zlib) | 0.1.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [buffer-from](https://github.com/LinusU/buffer-from) | 1.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [buffer](https://github.com/feross/buffer) | 5.7.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [builtin-modules](https://github.com/sindresorhus/builtin-modules) | 1.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [bytes](https://github.com/visionmedia/bytes.js) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [cacheable-lookup](https://github.com/szmarczak/cacheable-lookup) | 5.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [cacheable-request](https://github.com/lukechilds/cacheable-request) | 6.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [cacheable-request](https://github.com/lukechilds/cacheable-request) | 7.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [camelcase](https://github.com/sindresorhus/camelcase) | 5.3.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [chalk](https://github.com/chalk/chalk) | 2.4.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [chalk](https://github.com/chalk/chalk) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [chalk](https://github.com/chalk/chalk) | 4.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [chardet](https://github.com/runk/node-chardet) | 0.7.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [chart.js](https://github.com/chartjs/Chart.js) | 2.9.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [chartjs-color-string](https://github.com/chartjs/chartjs-color-string) | 0.6.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [chartjs-color](https://github.com/chartjs/chartjs-color) | 2.4.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [child-process](https://github.com/npm/security-holder) | 1.0.2 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [ci-info](https://github.com/watson/ci-info) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [classlist.js](https://github.com/eligrey/classList.js) | 1.1.20150312 | Public Domain |
| [cli-boxes](https://github.com/sindresorhus/cli-boxes) | 2.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [cli-cursor](https://github.com/sindresorhus/cli-cursor) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [cli-spinner](https://github.com/helloIAmPau/node-spinner) | 0.2.10 | [MIT](http://www.opensource.org/licenses/MIT) |
| [cli-width](https://github.com/knownasilya/cli-width) | 3.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [clone-response](https://github.com/lukechilds/clone-response) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [co](https://github.com/tj/co) | 4.6.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [codelyzer](https://github.com/mgechev/codelyzer) | 6.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [color-convert](https://github.com/Qix-/color-convert) | 1.9.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [color-convert](https://github.com/Qix-/color-convert) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [color-name](https://github.com/dfcreative/color-name) | 1.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [color-name](https://github.com/colorjs/color-name) | 1.1.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [combined-stream](https://github.com/felixge/node-combined-stream) | 1.0.8 | [MIT](http://www.opensource.org/licenses/MIT) |
| [commander](https://github.com/tj/commander.js) | 2.20.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [component-emitter](https://github.com/component/emitter) | 1.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [concat-map](https://github.com/substack/node-concat-map) | 0.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [configstore](https://github.com/yeoman/configstore) | 5.0.1 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [cookiejar](https://github.com/bmeck/node-cookiejar) | 2.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [core-util-is](https://github.com/isaacs/core-util-is) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [cross-spawn](https://github.com/moxystudio/node-cross-spawn) | 6.0.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [crypto-random-string](https://github.com/sindresorhus/crypto-random-string) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [css-selector-tokenizer](https://github.com/css-modules/css-selector-tokenizer) | 0.7.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [css-selector-tokenizer](https://github.com/css-modules/css-selector-tokenizer) | 0.7.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [cssauron](https://github.com/chrisdickinson/cssauron) | 1.4.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [cssesc](https://github.com/mathiasbynens/cssesc) | 0.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [cssesc](https://github.com/mathiasbynens/cssesc) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [custom-event-polyfill](https://github.com/kumarharsh/custom-event-polyfill) | 1.0.7 | [MIT](http://www.opensource.org/licenses/MIT) |
| [d](https://github.com/medikoo/d) | 1.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [damerau-levenshtein](https://github.com/tad-lispy/node-damerau-levenshtein) | 1.0.6 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [data-uri-to-buffer](https://github.com/TooTallNate/node-data-uri-to-buffer) | 1.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [debug](https://github.com/visionmedia/debug) | 2.6.9 | [MIT](http://www.opensource.org/licenses/MIT) |
| [debug](https://github.com/visionmedia/debug) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [debug](https://github.com/visionmedia/debug) | 3.2.7 | [MIT](http://www.opensource.org/licenses/MIT) |
| [debug](https://github.com/visionmedia/debug) | 4.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [debug](https://github.com/visionmedia/debug) | 4.3.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [decompress-response](https://github.com/sindresorhus/decompress-response) | 3.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [decompress-response](https://github.com/sindresorhus/decompress-response) | 6.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [deep-extend](https://github.com/unclechu/node-deep-extend) | 0.6.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [deep-is](https://github.com/thlorenz/deep-is) | 0.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [defer-to-connect](https://github.com/szmarczak/defer-to-connect) | 1.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [defer-to-connect](https://github.com/szmarczak/defer-to-connect) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [degenerator](https://github.com/TooTallNate/node-degenerator) | 1.0.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [delayed-stream](https://github.com/felixge/node-delayed-stream) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [depd](https://github.com/dougwilson/nodejs-depd) | 1.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [diff](https://github.com/kpdecker/jsdiff) | 4.0.2 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [docker-modem](https://github.com/apocas/docker-modem) | 2.1.3 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [dockerfile-ast](https://github.com/rcjsuen/dockerfile-ast) | 0.0.30 | [MIT](http://www.opensource.org/licenses/MIT) |
| [dot-prop](https://github.com/sindresorhus/dot-prop) | 5.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [dotnet-deps-parser](https://github.com/snyk/dotnet-deps-parser) | 5.0.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [duplexer3](https://github.com/floatdrop/duplexer3) | 0.1.4 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [duplexify](https://github.com/mafintosh/duplexify) | 3.7.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [elfy](https://github.com/indutny/elfy) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [email-validator](https://github.com/manishsaraan/email-validator) | 2.0.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [emoji-regex](https://github.com/mathiasbynens/emoji-regex) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [emoji-regex](https://github.com/mathiasbynens/emoji-regex) | 8.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [end-of-stream](https://github.com/mafintosh/end-of-stream) | 1.4.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [endian-reader](https://github.com/indutny/endian-reader) | 0.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [es5-ext](https://github.com/medikoo/es5-ext) | 0.10.53 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [es6-iterator](https://github.com/medikoo/es6-iterator) | 2.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [es6-promise](https://github.com/stefanpenner/es6-promise) | 4.2.8 | [MIT](http://www.opensource.org/licenses/MIT) |
| [es6-promisify](https://github.com/digitaldesignlabs/es6-promisify) | 5.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [es6-symbol](https://github.com/medikoo/es6-symbol) | 3.1.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [escape-goat](https://github.com/sindresorhus/escape-goat) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [escape-string-regexp](https://github.com/sindresorhus/escape-string-regexp) | 1.0.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [escodegen](https://github.com/estools/escodegen) | 1.14.3 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [esprima](https://github.com/jquery/esprima) | 3.1.3 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [esprima](https://github.com/jquery/esprima) | 4.0.1 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [estraverse](https://github.com/estools/estraverse) | 4.3.0 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [esutils](https://github.com/estools/esutils) | 2.0.3 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [eve-raphael](https://github.com/tomasAlabes/eve) | 0.5.0 | [Apache](http://www.apache.org/licenses/LICENSE-2.0) |
| [event-emitter](https://github.com/medikoo/event-emitter) | 0.3.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [event-loop-spinner](https://github.com/snyk/eventloop-spinner) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [execa](https://github.com/sindresorhus/execa) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ext](https://github.com/medikoo/es5-ext/tree/ext) | 1.4.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [extend](https://github.com/justmoon/node-extend) | 3.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [external-editor](https://github.com/mrkmg/node-external-editor) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [fast-levenshtein](https://github.com/hiddentao/fast-levenshtein) | 2.0.6 | [MIT](http://www.opensource.org/licenses/MIT) |
| [fast-safe-stringify](https://github.com/davidmarkclements/fast-safe-stringify) | 2.0.7 | [MIT](http://www.opensource.org/licenses/MIT) |
| [fastparse](https://github.com/webpack/fastparse) | 1.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [figures](https://github.com/sindresorhus/figures) | 3.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [file-uri-to-path](https://github.com/TooTallNate/file-uri-to-path) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [fill-range](https://github.com/jonschlinkert/fill-range) | 7.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [form-data](https://github.com/form-data/form-data) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [formidable](https://github.com/node-formidable/formidable) | 1.2.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [fs-constants](https://github.com/mafintosh/fs-constants) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [fs.realpath](https://github.com/isaacs/fs.realpath) | 1.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [ftp](https://github.com/mscdex/node-ftp) | 0.3.10 | [MIT](http://www.opensource.org/licenses/MIT) |
| [get-stream](https://github.com/sindresorhus/get-stream) | 4.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [get-stream](https://github.com/sindresorhus/get-stream) | 5.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [get-uri](https://github.com/TooTallNate/node-get-uri) | 2.0.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [glob](https://github.com/isaacs/node-glob) | 7.1.6 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [global-dirs](https://github.com/sindresorhus/global-dirs) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [got](https://github.com/sindresorhus/got) | 11.4.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [got](https://github.com/sindresorhus/got) | 9.6.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [graceful-fs](https://github.com/isaacs/node-graceful-fs) | 4.2.4 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [graphlib](https://github.com/dagrejs/graphlib) | 2.1.8 | [MIT](http://www.opensource.org/licenses/MIT) |
| [gunzip-maybe](https://github.com/mafintosh/gunzip-maybe) | 1.4.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [has-flag](https://github.com/sindresorhus/has-flag) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [has-flag](https://github.com/sindresorhus/has-flag) | 4.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [has-yarn](https://github.com/sindresorhus/has-yarn) | 2.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [hosted-git-info](https://github.com/npm/hosted-git-info) | 2.8.8 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [hosted-git-info](https://github.com/npm/hosted-git-info) | 3.0.5 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [hosted-git-info](https://github.com/npm/hosted-git-info) | 3.0.7 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) | 4.2.0 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [http-errors](https://github.com/jshttp/http-errors) | 1.7.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [http-proxy-agent](https://github.com/TooTallNate/node-http-proxy-agent) | 2.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [http2-wrapper](https://github.com/szmarczak/http2-wrapper) | 1.0.0-beta.5.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [https-proxy-agent](https://github.com/TooTallNate/node-https-proxy-agent) | 3.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [iconv-lite](https://github.com/ashtuchkin/iconv-lite) | 0.4.24 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ieee754](https://github.com/feross/ieee754) | 1.1.13 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [immediate](https://github.com/calvinmetcalf/immediate) | 3.0.6 | [MIT](http://www.opensource.org/licenses/MIT) |
| [import-lazy](https://github.com/sindresorhus/import-lazy) | 2.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [imurmurhash](https://github.com/jensyt/imurmurhash-js) | 0.1.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [inflight](https://github.com/npm/inflight) | 1.0.6 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [inherits](https://github.com/isaacs/inherits) | 2.0.4 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [ini](https://github.com/isaacs/ini) | 1.3.5 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [inquirer](https://github.com/SBoudrias/Inquirer.js) | 7.3.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ip](https://github.com/indutny/node-ip) | 1.1.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-ci](https://github.com/watson/is-ci) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-deflate](https://github.com/watson/is-deflate) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-docker](https://github.com/sindresorhus/is-docker) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-fullwidth-code-point](https://github.com/sindresorhus/is-fullwidth-code-point) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-fullwidth-code-point](https://github.com/sindresorhus/is-fullwidth-code-point) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-gzip](https://github.com/kevva/is-gzip) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-installed-globally](https://github.com/sindresorhus/is-installed-globally) | 0.3.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-npm](https://github.com/sindresorhus/is-npm) | 4.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-number](https://github.com/jonschlinkert/is-number) | 7.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-obj](https://github.com/sindresorhus/is-obj) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-path-inside](https://github.com/sindresorhus/is-path-inside) | 3.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-stream](https://github.com/sindresorhus/is-stream) | 1.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-typedarray](https://github.com/hughsk/is-typedarray) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-wsl](https://github.com/sindresorhus/is-wsl) | 2.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-yarn-global](https://github.com/LitoMore/is-yarn-global) | 0.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [isarray](https://github.com/juliangruber/isarray) | 0.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [isarray](https://github.com/juliangruber/isarray) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [isexe](https://github.com/isaacs/isexe) | 2.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [js-tokens](https://github.com/lydell/js-tokens) | 4.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [js-yaml](https://github.com/nodeca/js-yaml) | 3.14.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [jsesc](https://github.com/mathiasbynens/jsesc) | 0.5.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [json-buffer](https://github.com/dominictarr/json-buffer) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [json-buffer](https://github.com/dominictarr/json-buffer) | 3.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [jszip](https://github.com/Stuk/jszip) | 3.4.0 | ([MIT](http://www.opensource.org/licenses/MIT) OR [GPL-3.0](http://www.gnu.org/licenses/gpl-3.0-standalone.html)) |
| [jszip](https://github.com/Stuk/jszip) | 3.5.0 | ([MIT](http://www.opensource.org/licenses/MIT) OR [GPL-3.0](http://www.gnu.org/licenses/gpl-3.0-standalone.html)) |
| [keyv](https://github.com/lukechilds/keyv) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [keyv](https://github.com/lukechilds/keyv) | 4.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [latest-version](https://github.com/sindresorhus/latest-version) | 5.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [levn](https://github.com/gkz/levn) | 0.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lie](https://github.com/calvinmetcalf/lie) | 3.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash-es](https://github.com/lodash/lodash) | 4.17.15 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash.assign](https://github.com/lodash/lodash) | 4.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash.assignin](https://github.com/lodash/lodash) | 4.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash.clone](https://github.com/lodash/lodash) | 4.5.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash.clonedeep](https://github.com/lodash/lodash) | 4.5.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash.findkey](https://github.com/lodash/lodash) | 4.6.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash.flatmap](https://github.com/lodash/lodash) | 4.5.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash.flatten](https://github.com/lodash/lodash) | 4.4.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash.get](https://github.com/lodash/lodash) | 4.4.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash.invert](https://github.com/lodash/lodash) | 4.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash.isempty](https://github.com/lodash/lodash) | 4.4.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash.isequal](https://github.com/lodash/lodash) | 4.5.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash.merge](https://github.com/lodash/lodash) | 4.6.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash.set](https://github.com/lodash/lodash) | 4.3.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash.topairs](https://github.com/lodash/lodash) | 4.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash.uniq](https://github.com/lodash/lodash) | 4.5.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash](https://github.com/lodash/lodash) | 4.17.20 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lowercase-keys](https://github.com/sindresorhus/lowercase-keys) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lowercase-keys](https://github.com/sindresorhus/lowercase-keys) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lru-cache](https://github.com/isaacs/node-lru-cache) | 4.1.5 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [lru-cache](https://github.com/isaacs/node-lru-cache) | 5.1.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [lru-cache](https://github.com/isaacs/node-lru-cache) | 6.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [macos-release](https://github.com/sindresorhus/macos-release) | 2.4.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [make-dir](https://github.com/sindresorhus/make-dir) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [methods](https://github.com/jshttp/methods) | 1.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [micromatch](https://github.com/micromatch/micromatch) | 4.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [mime-db](https://github.com/jshttp/mime-db) | 1.44.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [mime-types](https://github.com/jshttp/mime-types) | 2.1.27 | [MIT](http://www.opensource.org/licenses/MIT) |
| [mime](https://github.com/broofa/mime) | 2.4.6 | [MIT](http://www.opensource.org/licenses/MIT) |
| [mimic-fn](https://github.com/sindresorhus/mimic-fn) | 2.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [mimic-response](https://github.com/sindresorhus/mimic-response) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [mimic-response](https://github.com/sindresorhus/mimic-response) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [minimatch-browser](https://github.com/isaacs/minimatch) | 1.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [minimatch](https://github.com/isaacs/minimatch) | 3.0.4 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [minimist](https://github.com/substack/minimist) | 1.2.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [mkdirp](https://github.com/substack/node-mkdirp) | 0.5.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [mkdirp](https://github.com/isaacs/node-mkdirp) | 1.0.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [moment-es6](https://github.com/Agamnentzar/moment-es6) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [moment](https://github.com/moment/moment) | 2.29.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ms](https://github.com/zeit/ms) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ms](https://github.com/zeit/ms) | 2.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [mute-stream](https://github.com/isaacs/mute-stream) | 0.0.8 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [needle](https://github.com/tomas/needle) | 2.5.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [netmask](https://github.com/rs/node-netmask) | 1.0.6 | [MIT](http://www.opensource.org/licenses/MIT) |
| [next-tick](https://github.com/medikoo/next-tick) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ng2-charts](https://github.com/valor-software/ng2-charts) | 2.4.2 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [ngx-monaco-editor](https://github.com/atularen/ngx-monaco-editor) | 8.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [nice-try](https://github.com/electerious/nice-try) | 1.0.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [normalize-url](https://github.com/sindresorhus/normalize-url) | 4.5.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [npm-run-path](https://github.com/sindresorhus/npm-run-path) | 2.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [object-hash](https://github.com/puleos/object-hash) | 2.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [once](https://github.com/isaacs/once) | 1.4.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [onetime](https://github.com/sindresorhus/onetime) | 5.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [open](https://github.com/sindresorhus/open) | 7.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [optionator](https://github.com/gkz/optionator) | 0.8.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [os-name](https://github.com/sindresorhus/os-name) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [os-tmpdir](https://github.com/sindresorhus/os-tmpdir) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [p-cancelable](https://github.com/sindresorhus/p-cancelable) | 1.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [p-cancelable](https://github.com/sindresorhus/p-cancelable) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [p-finally](https://github.com/sindresorhus/p-finally) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [p-map](https://github.com/sindresorhus/p-map) | 2.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pac-proxy-agent](https://github.com/TooTallNate/node-pac-proxy-agent) | 3.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pac-resolver](https://github.com/TooTallNate/node-pac-resolver) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [package-json](https://github.com/sindresorhus/package-json) | 6.5.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pako](https://github.com/nodeca/pako) | 0.2.9 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pako](https://github.com/nodeca/pako) | 1.0.11 | ([MIT](http://www.opensource.org/licenses/MIT) AND [Zlib](http://www.zlib.net/zlib_license.html)) |
| [parse-link-header](https://github.com/thlorenz/parse-link-header) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [parse5](https://github.com/inikulin/parse5) | 5.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [path-is-absolute](https://github.com/sindresorhus/path-is-absolute) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [path-key](https://github.com/sindresorhus/path-key) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [path-parse](https://github.com/jbgutierrez/path-parse) | 1.0.6 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pdfjs-dist](https://github.com/mozilla/pdfjs-dist) | 2.5.207 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [peek-stream](https://github.com/mafintosh/peek-stream) | 1.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [picomatch](https://github.com/micromatch/picomatch) | 2.2.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [prelude-ls](https://github.com/gkz/prelude-ls) | 1.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [prepend-http](https://github.com/sindresorhus/prepend-http) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [process-nextick-args](https://github.com/calvinmetcalf/process-nextick-args) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [progress](https://github.com/visionmedia/node-progress) | 2.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [promise](https://github.com/then/promise) | 7.3.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [proxy-agent](https://github.com/TooTallNate/node-proxy-agent) | 3.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [proxy-from-env](https://github.com/Rob--W/proxy-from-env) | 1.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pseudomap](https://github.com/isaacs/pseudomap) | 1.0.2 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [pump](https://github.com/mafintosh/pump) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pump](https://github.com/mafintosh/pump) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pumpify](https://github.com/mafintosh/pumpify) | 1.5.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pupa](https://github.com/sindresorhus/pupa) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [qs](https://github.com/ljharb/qs) | 6.9.4 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [quick-lru](https://github.com/sindresorhus/quick-lru) | 5.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [raphael](https://github.com/DmitryBaranovskiy/raphael) | 2.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [raw-body](https://github.com/stream-utils/raw-body) | 2.4.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [rc](https://github.com/dominictarr/rc) | 1.2.8 | ([BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) OR [MIT](http://www.opensource.org/licenses/MIT) OR [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0)) |
| [readable-stream](https://github.com/isaacs/readable-stream) | 1.1.14 | [MIT](http://www.opensource.org/licenses/MIT) |
| [readable-stream](https://github.com/nodejs/readable-stream) | 2.3.7 | [MIT](http://www.opensource.org/licenses/MIT) |
| [readable-stream](https://github.com/nodejs/readable-stream) | 3.6.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [regenerate](https://github.com/mathiasbynens/regenerate) | 1.4.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [regexpu-core](https://github.com/mathiasbynens/regexpu-core) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [registry-auth-token](https://github.com/rexxars/registry-auth-token) | 4.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [registry-url](https://github.com/sindresorhus/registry-url) | 5.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [regjsgen](https://github.com/d10/regjsgen) | 0.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [regjsparser](https://github.com/jviereck/regjsparser) | 0.1.5 | [BSD](http://www.opensource.org/licenses/BSD-2-Clause) |
| [resolve-alpn](https://github.com/szmarczak/resolve-alpn) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [resolve](https://github.com/browserify/resolve) | 1.17.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [responselike](https://github.com/lukechilds/responselike) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [responselike](https://github.com/lukechilds/responselike) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [restore-cursor](https://github.com/sindresorhus/restore-cursor) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [rimraf](https://github.com/isaacs/rimraf) | 2.7.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [rimraf](https://github.com/isaacs/rimraf) | 3.0.2 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [run-async](https://github.com/SBoudrias/run-async) | 2.4.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [rxjs](https://github.com/reactivex/rxjs) | 6.6.3 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [safe-buffer](https://github.com/feross/safe-buffer) | 5.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [safe-buffer](https://github.com/feross/safe-buffer) | 5.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [safer-buffer](https://github.com/ChALkeR/safer-buffer) | 2.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [sax](https://github.com/isaacs/sax-js) | 1.2.4 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [semver-diff](https://github.com/sindresorhus/semver-diff) | 3.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [semver-dsl](https://github.com/mgechev/semver-dsl) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [semver](https://github.com/npm/node-semver) | 5.7.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [semver](https://github.com/npm/node-semver) | 6.3.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [semver](https://github.com/npm/node-semver) | 7.3.2 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [set-immediate-shim](https://github.com/sindresorhus/set-immediate-shim) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [setprototypeof](https://github.com/wesleytodd/setprototypeof) | 1.1.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [shebang-command](https://github.com/kevva/shebang-command) | 1.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [shebang-regex](https://github.com/sindresorhus/shebang-regex) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [signal-exit](https://github.com/tapjs/signal-exit) | 3.0.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [smart-buffer](https://github.com/JoshGlazebrook/smart-buffer) | 4.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [snyk-config](https://github.com/snyk/config) | 4.0.0-rc.2 | ([Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) AND [MIT](http://www.opensource.org/licenses/MIT)) |
| [snyk-cpp-plugin](https://github.com/snyk/snyk-cpp-plugin) | 2.2.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-docker-plugin](https://github.com/snyk/snyk-docker-plugin) | 4.12.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-go-parser](https://github.com/snyk/snyk-go-parser) | 1.4.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-go-plugin](https://github.com/snyk/snyk-go-plugin) | 1.16.2 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-gradle-plugin](https://github.com/snyk/snyk-gradle-plugin) | 3.10.3 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-module](https://github.com/snyk/module) | 1.9.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-module](https://github.com/snyk/module) | 2.1.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-module](https://github.com/snyk/module) | 3.1.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-mvn-plugin](https://github.com/snyk/snyk-mvn-plugin) | 2.25.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-nodejs-lockfile-parser](https://github.com/snyk/nodejs-lockfile-parser) | 1.30.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-nuget-plugin](https://github.com/snyk/snyk-nuget-plugin) | 1.19.4 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-paket-parser](https://github.com/snyk/snyk-paket-parser) | 1.6.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-php-plugin](https://github.com/snyk/snyk-php-plugin) | 1.9.2 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-poetry-lockfile-parser](https://github.com/snyk/snyk-poetry-lockfile-parser) | 1.1.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-policy](https://github.com/snyk/policy) | 1.14.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-python-plugin](https://github.com/snyk/snyk-python-plugin) | 1.19.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-resolve-deps](https://github.com/Snyk/resolve-deps) | 4.4.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-resolve](https://github.com/Snyk/resolve-package) | 1.0.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-sbt-plugin](https://github.com/snyk/snyk-sbt-plugin) | 2.11.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-tree](https://github.com/Snyk/tree) | 1.0.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk-try-require](https://github.com/Snyk/try-require) | 1.3.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [snyk](https://github.com/snyk/snyk) | 1.434.2 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [socks-proxy-agent](https://github.com/TooTallNate/node-socks-proxy-agent) | 4.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [socks](https://github.com/JoshGlazebrook/socks) | 2.3.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [source-map-support](https://github.com/evanw/node-source-map-support) | 0.5.19 | [MIT](http://www.opensource.org/licenses/MIT) |
| [source-map](https://github.com/mozilla/source-map) | 0.5.6 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [source-map](https://github.com/mozilla/source-map) | 0.5.7 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [source-map](https://github.com/mozilla/source-map) | 0.6.1 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [split-ca](https://github.com/bushong1/split-ca) | 1.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [sprintf-js](https://github.com/alexei/sprintf.js) | 1.0.3 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [sprintf-js](https://github.com/alexei/sprintf.js) | 1.1.2 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [ssh2-streams](https://github.com/mscdex/ssh2-streams) | 0.4.10 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ssh2](https://github.com/mscdex/ssh2) | 0.8.9 | [MIT](http://www.opensource.org/licenses/MIT) |
| [statuses](https://github.com/jshttp/statuses) | 1.5.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [stream-shift](https://github.com/mafintosh/stream-shift) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [streamsearch](https://github.com/mscdex/streamsearch) | 0.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [string-width](https://github.com/sindresorhus/string-width) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [string-width](https://github.com/sindresorhus/string-width) | 4.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [string_decoder](https://github.com/rvagg/string_decoder) | 0.10.31 | [MIT](http://www.opensource.org/licenses/MIT) |
| [string_decoder](https://github.com/nodejs/string_decoder) | 1.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [string_decoder](https://github.com/nodejs/string_decoder) | 1.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [strip-ansi](https://github.com/chalk/strip-ansi) | 5.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [strip-ansi](https://github.com/chalk/strip-ansi) | 6.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [strip-eof](https://github.com/sindresorhus/strip-eof) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [strip-json-comments](https://github.com/sindresorhus/strip-json-comments) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [superagent](https://github.com/visionmedia/superagent) | 6.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [supports-color](https://github.com/chalk/supports-color) | 5.5.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [supports-color](https://github.com/chalk/supports-color) | 7.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [tar-stream](https://github.com/mafintosh/tar-stream) | 2.1.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [temp-dir](https://github.com/sindresorhus/temp-dir) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [temp-dir](https://github.com/sindresorhus/temp-dir) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [tempfile](https://github.com/sindresorhus/tempfile) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [term-size](https://github.com/sindresorhus/term-size) | 2.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [then-fs](https://github.com/then/fs) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [through2](https://github.com/rvagg/through2) | 2.0.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [through](https://github.com/dominictarr/through) | 2.3.8 | [MIT](http://www.opensource.org/licenses/MIT) |
| [thunkify](https://github.com/visionmedia/node-thunkify) | 2.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [tmp](https://github.com/raszi/node-tmp) | 0.0.33 | [MIT](http://www.opensource.org/licenses/MIT) |
| [tmp](https://github.com/raszi/node-tmp) | 0.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [tmp](https://github.com/raszi/node-tmp) | 0.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [to-readable-stream](https://github.com/sindresorhus/to-readable-stream) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [to-regex-range](https://github.com/micromatch/to-regex-range) | 5.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [toidentifier](https://github.com/component/toidentifier) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [toml](https://github.com/BinaryMuse/toml-node) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [tree-kill](https://github.com/pkrumins/node-tree-kill) | 1.2.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [tslib](https://github.com/Microsoft/tslib) | 1.11.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [tslib](https://github.com/Microsoft/tslib) | 1.13.0 | [0BSD](http://landley.net/toybox/license.html) |
| [tslib](https://github.com/Microsoft/tslib) | 1.14.1 | [0BSD](http://landley.net/toybox/license.html) |
| [tslib](https://github.com/Microsoft/tslib) | 2.0.3 | [0BSD](http://landley.net/toybox/license.html) |
| [tslint](https://github.com/palantir/tslint) | 6.1.3 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [tsutils](https://github.com/ajafff/tsutils) | 2.29.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [tweetnacl](https://github.com/dchest/tweetnacl-js) | 0.14.5 | [Unlicense](http://unlicense.org/) |
| [type-check](https://github.com/gkz/type-check) | 0.3.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [type-fest](https://github.com/sindresorhus/type-fest) | 0.11.0 | ([MIT](http://www.opensource.org/licenses/MIT) OR [CC0-1.0](http://creativecommons.org/publicdomain/zero/1.0/legalcode)) |
| [type-fest](https://github.com/sindresorhus/type-fest) | 0.8.1 | ([MIT](http://www.opensource.org/licenses/MIT) OR [CC0-1.0](http://creativecommons.org/publicdomain/zero/1.0/legalcode)) |
| [type](https://github.com/medikoo/type) | 1.2.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [type](https://github.com/medikoo/type) | 2.1.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [typedarray-to-buffer](https://github.com/feross/typedarray-to-buffer) | 3.1.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [typescript](https://github.com/Microsoft/TypeScript) | 3.9.7 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [unique-string](https://github.com/sindresorhus/unique-string) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [unpipe](https://github.com/stream-utils/unpipe) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [update-notifier](https://github.com/yeoman/update-notifier) | 4.1.3 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [url-parse-lax](https://github.com/sindresorhus/url-parse-lax) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [util-deprecate](https://github.com/TooTallNate/util-deprecate) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [uuid](https://github.com/uuidjs/uuid) | 3.4.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [uuid](https://github.com/uuidjs/uuid) | 8.3.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [vscode-languageserver-types](https://github.com/Microsoft/vscode-languageserver-node) | 3.15.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [which](https://github.com/isaacs/node-which) | 1.3.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [widest-line](https://github.com/sindresorhus/widest-line) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [windows-release](https://github.com/sindresorhus/windows-release) | 3.3.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [word-wrap](https://github.com/jonschlinkert/word-wrap) | 1.2.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [wrap-ansi](https://github.com/chalk/wrap-ansi) | 5.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [wrappy](https://github.com/npm/wrappy) | 1.0.2 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [write-file-atomic](https://github.com/npm/write-file-atomic) | 3.0.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [xdg-basedir](https://github.com/sindresorhus/xdg-basedir) | 4.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [xml-js](https://github.com/nashwaan/xml-js) | 1.6.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [xml2js](https://github.com/Leonidas-from-XIV/node-xml2js) | 0.4.23 | [MIT](http://www.opensource.org/licenses/MIT) |
| [xmlbuilder](https://github.com/oozcitak/xmlbuilder-js) | 11.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [xregexp](https://github.com/slevithan/XRegExp) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [xtend](https://github.com/Raynos/xtend) | 4.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [yallist](https://github.com/isaacs/yallist) | 2.1.2 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [yallist](https://github.com/isaacs/yallist) | 3.1.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [yallist](https://github.com/isaacs/yallist) | 4.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [yaml](https://github.com/eemeli/yaml) | 1.10.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [zone.js](https://github.com/angular/angular) | 0.10.3 | [MIT](http://www.opensource.org/licenses/MIT) |
@@ -78,7 +78,7 @@ A default template will be used if you don't supply a custom one to override it:
You can wrap the attachment list with an
[Upload Drag Area component](../../content-services/components/upload-drag-area.component.md)
to let the user upload attachments to empty lists. When you do this, you can also supply
a custom *no content template* (using \<adf-empty-list>) to invite the user to add their attachments:
a custom *no content template* (using &lt;adf-empty-list>) to invite the user to add their attachments:
<!-- {% raw %} -->
-5
View File
@@ -16,7 +16,6 @@ You can contact Francesco Corti (francesco.corti at alfresco.com) for details of
- [New package versions](#new-package-versions)
- [Goals for this release](#goals-for-this-release)
- [TODO](#todo)
- [Localisation](#localisation)
- [References](#references)
- [PR merged](#pr-merged)
@@ -39,10 +38,6 @@ The highlights of this release is mainly about bugfixes and enhancements related
Please report issues with this release in the [issue tracker](https://github.com/Alfresco/alfresco-ng2-components/issues/new). You can collaborate on this release or share feedback by using the discussion tools on [Gitter](http://gitter.im/Alfresco/alfresco-ng2-components).
### TODO
TODO
## Localisation
This release includes: Arabic, Brazilian Portuguese, Czech, Danish, Dutch, Finnish, French, German, Italian, Japanese, Norwegian (Bokmål), Polish, Russian, Simplified Chinese, Spanish and Swedish versions.
-172
View File
@@ -1,172 +0,0 @@
---
Title: Form Extensibility for APA Form Widget
Added: v4.1.0
---
## Form Extensibility for APA Form Widget
This page describes how you can customize ADF forms to your own specification.
## Contents
There are two ways to customize the form
- [Replace default form widgets with custom components](#replace-default-form-widgets-with-apa-form-widgets)
- [Replace custom form widget with custom components](#replace-custom-form-widgets-with-custom-components)
## Replace default form widgets with APA form widgets
This is an example of replacing the standard `Text` [widget](../../lib/testing/src/lib/core/pages/form/widgets/widget.ts) with a custom component for all APA forms rendered within the `<adf-form>` component.
1. Create a simple form with some `Text` widgets:
![default text widget](../docassets/images/apa-simple-form.png)
Every custom widget component must inherit the [`WidgetComponent`](../insights/components/widget.component.md) class in order to function properly:
```ts
import { Component } from '@angular/core';
import { WidgetComponent } from '@alfresco/adf-core';
@Component({
selector: 'custom-editor',
template: `
<div style="color: red">Look, I'm a APA custom editor!</div>
`
})
export class CustomEditorComponent extends WidgetComponent {}
```
2. Add it to the application module or any custom module that is imported into the application one:
```ts
import { NgModule } from '@angular/core';
import { CustomEditorComponent } from './custom-editor.component';
@NgModule({
declarations: [ CustomEditorComponent ],
exports: [ CustomEditorComponent ]
})
export class CustomEditorsModule {}
```
3. Every custom widget component should be added into the the collections `declarations` and `exports`. If you decided to store custom widgets in a separate dedicated module (and optionally as a separate re-distributable library) don't forget to import it into the main application:
```ts
@NgModule({
imports: [
// ...
CustomEditorsModule
// ...
],
providers: [],
bootstrap: [ AppComponent ]
})
export class AppModule {}
```
4. Import the [`FormRenderingService`](../core/services/form-rendering.service.md) into any of your Views and override the default mapping, for example:
```ts
import { Component } from '@angular/core';
import { CustomEditorComponent } from './custom-editor.component';
@Component({...})
export class MyView {
constructor(formRenderingService: FormRenderingService) {
this.formRenderingService.register({
'text': () => CustomEditorComponent
}, true);
}
}
```
5. At runtime the form should look similar to the following:
![custom text widget](../docassets/images/apa-simple-override-form.png)
## Replace custom form widgets with custom components
This is an example of rendering custom form widgets using custom Angular components.
### Create a custom form widget
To begin, create a basic form widget and call it `demo-widget`:
![custom form widget](../docassets/images/apa-form-widget.png)
**Note**: The `type` is important as it will become the `field type` when the form is rendered.
You can now design a form that uses your custom form widget:
![custom form widget form](../docassets/images/apa-form-with-widget.png)
### Create a custom widget
When displayed in a task, the field will look similar to the following:
![adf form widget](../docassets/images/apa-unresolved-widget.png)
To render the missing content:
1. Create an Angular component:
```ts
import { Component } from '@angular/core';
import { WidgetComponent } from '@alfresco/adf-core';
@Component({
selector: 'app-demo-widget',
template: `<div style="color: green">ADF version of custom form widget</div>`
})
export class DemoWidgetComponent extends WidgetComponent {}
```
2. Place it inside the custom module:
```ts
import { NgModule } from '@angular/core';
import { DemoWidgetComponent } from './demo-widget.component';
@NgModule({
declarations: [ DemoWidgetComponent ],
exports: [ DemoWidgetComponent ]
})
export class CustomWidgetsModule {}
```
3. Import it into your Application Module:
```ts
@NgModule({
imports: [
// ...
CustomWidgetsModule
// ...
],
providers: [],
bootstrap: [ AppComponent ]
})
export class AppModule {}
```
4. Import the [`FormRenderingService`](../core/services/form-rendering.service.md) in any of your Views and provide the new mapping:
```ts
import { Component } from '@angular/core';
import { DemoWidgetComponent } from './demo-widget.component';
@Component({...})
export class MyView {
constructor(formRenderingService: FormRenderingService) {
this.formRenderingService.register({
'custom-editor': () => DemoWidgetComponent
});
}
}
```
At runtime you should now see your custom Angular component rendered in place of the original form widgets:
![adf form widget runtime](../docassets/images/apa-resolved-widget.png)
## See Also
- [Extensibility](./extensibility.md)
- [Form field model](../core/models/form-field.model.md)
- [Form rendering service](../core/services/form-rendering.service.md)
- [Form component](../core/components/form.component.md)
- [Widget component](../insights/components/widget.component.md)
+10 -9
View File
@@ -7,12 +7,13 @@ Github only: true
The pages linked below contain the audit for all third party dependencies of ADF.
- [ADF v4.1.0](audit-info-4.1.0.md)
- [ADF v4.0.0](audit-info-4.0.0.md)
- [ADF v3.9.0](audit-info-3.9.0.md)
- [ADF v3.8.0](audit-info-3.8.0.md)
- [ADF v3.7.0](audit-info-3.7.0.md)
- [ADF v3.6.0](audit-info-3.6.0.md)
- [ADF v3.5.0](audit-info-3.5.0.md)
- [ADF v3.4.0](audit-info-3.4.0.md)
- [ADF v3.3.0](audit-info-3.3.0.md)
- [ADF 3.3.0](audit-info-3.3.0.md)
- [ADF 3.4.0](audit-info-3.4.0.md)
- [ADF 3.5.0](audit-info-3.5.0.md)
- [ADF 3.6.0](audit-info-3.6.0.md)
- [ADF 3.7.0](audit-info-3.7.0.md)
- [ADF 3.8.0](audit-info-3.8.0.md)
- [ADF 3.9.0](audit-info-3.9.0.md)
- [ADF 4.0.0](audit-info-4.0.0.md)
- [ADF 4.1.0](audit-info-4.1.0.md)
- [ADF 4.2.0](audit-info-4.2.0.md)
+24
View File
@@ -0,0 +1,24 @@
---
Title: Audit info, alfresco-ng2-components 4.2.0
---
# Audit information for alfresco-ng2-components 4.2.0
This page lists the security audit of the dependencies this project depends on.
## Risks
- Critical risk: 0
- High risk: 0
- Moderate risk: 0
- Low risk: 8
Dependencies analyzed: 3074
## Libraries
| Severity | Module | Vulnerable versions |
| --- | --- | --- |
|low | yargs-parser | &#34;&lt;13.1.2 || &gt;=14.0.0 &lt;15.0.1 || &gt;=16.0.0 &lt;18.1.2&#34; |
|low | node-fetch | &#34;&lt; 2.6.1 || &gt;= 3.0.0-beta.1 &lt; 3.0.0-beta.9&#34; |
@@ -29,8 +29,8 @@ describe('About Content Services', () => {
beforeAll(async() => {
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.clickAboutButton();
});
@@ -31,7 +31,7 @@ import { FileModel } from '../../models/ACS/file.model';
import { browser } from 'protractor';
import CONSTANTS = require('../../util/constants');
describe('Comment Component', () => {
describe('Comment', () => {
const loginPage: LoginPage = new LoginPage();
const contentServicesPage: ContentServicesPage = new ContentServicesPage();
@@ -68,100 +68,100 @@ describe('Comment Component', () => {
acsUser = await usersActions.createUser();
});
afterAll(async () => {
await navigationBarPage.clickLogoutButton();
});
describe('component', () => {
beforeEach(async () => {
await apiService.login(acsUser.email, acsUser.password);
beforeEach(async () => {
await apiService.login(acsUser.username, acsUser.password);
const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-');
const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-');
nodeId = pngUploadedFile.entry.id;
nodeId = pngUploadedFile.entry.id;
userFullName = pngUploadedFile.entry.createdByUser.displayName;
userFullName = pngUploadedFile.entry.createdByUser.displayName;
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
});
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
});
afterEach(async () => {
await apiService.loginWithProfile('admin');
await uploadActions.deleteFileOrFolder(nodeId);
});
afterEach(async () => {
await apiService.loginWithProfile('admin');
await uploadActions.deleteFileOrFolder(nodeId);
await navigationBarPage.clickLogoutButton();
});
it('[C276947] Should be able to add a comment on ACS and view on ADF', async () => {
await apiService.getInstance().core.commentsApi.addComment(nodeId, { content: comments.test });
it('[C276947] Should be able to add a comment on ACS and view on ADF', async () => {
await apiService.getInstance().core.commentsApi.addComment(nodeId, { content: comments.test });
await viewerPage.viewFile(pngFileModel.name);
await viewerPage.viewFile(pngFileModel.name);
await viewerPage.clickInfoButton();
await viewerPage.checkInfoSideBarIsDisplayed();
await viewerPage.clickInfoButton();
await viewerPage.checkInfoSideBarIsDisplayed();
await commentsPage.checkCommentsTabIsSelected();
await commentsPage.checkCommentInputIsDisplayed();
await commentsPage.checkCommentsTabIsSelected();
await commentsPage.checkCommentInputIsDisplayed();
await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)');
await expect(await commentsPage.getMessage(0)).toEqual(comments.test);
await expect(await commentsPage.getUserName(0)).toEqual(userFullName);
await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/);
});
await commentsPage.getTotalNumberOfComments('Comments (1)');
await expect(await commentsPage.getMessage(0)).toEqual(comments.test);
await expect(await commentsPage.getUserName(0)).toEqual(userFullName);
await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/);
});
it('[C276948] Should be able to add a comment on a file', async () => {
await viewerPage.viewFile(pngFileModel.name);
it('[C276948] Should be able to add a comment on a file', async () => {
await viewerPage.viewFile(pngFileModel.name);
await viewerPage.clickInfoButton();
await viewerPage.checkInfoSideBarIsDisplayed();
await viewerPage.clickOnCommentsTab();
await viewerPage.clickInfoButton();
await viewerPage.checkInfoSideBarIsDisplayed();
await viewerPage.clickOnCommentsTab();
await commentsPage.addComment(comments.first);
await commentsPage.checkUserIconIsDisplayed();
await commentsPage.addComment(comments.first);
await commentsPage.checkUserIconIsDisplayed();
await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)');
await expect(await commentsPage.getMessage(0)).toEqual(comments.first);
await expect(await commentsPage.getUserName(0)).toEqual(userFullName);
await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/);
});
await commentsPage.getTotalNumberOfComments('Comments (1)');
await expect(await commentsPage.getMessage(0)).toEqual(comments.first);
await expect(await commentsPage.getUserName(0)).toEqual(userFullName);
await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/);
});
it('[C280021] Should be able to add a multiline comment on a file', async () => {
await viewerPage.viewFile(pngFileModel.name);
it('[C280021] Should be able to add a multiline comment on a file', async () => {
await viewerPage.viewFile(pngFileModel.name);
await viewerPage.clickInfoButton();
await viewerPage.checkInfoSideBarIsDisplayed();
await viewerPage.clickOnCommentsTab();
await viewerPage.clickInfoButton();
await viewerPage.checkInfoSideBarIsDisplayed();
await viewerPage.clickOnCommentsTab();
await commentsPage.addComment(comments.multiline);
await commentsPage.checkUserIconIsDisplayed();
await commentsPage.addComment(comments.multiline);
await commentsPage.checkUserIconIsDisplayed();
await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)');
await expect(await commentsPage.getMessage(0)).toEqual(comments.multiline);
await expect(await commentsPage.getUserName(0)).toEqual(userFullName);
await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/);
await commentsPage.getTotalNumberOfComments('Comments (1)');
await expect(await commentsPage.getMessage(0)).toEqual(comments.multiline);
await expect(await commentsPage.getUserName(0)).toEqual(userFullName);
await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/);
await commentsPage.addComment(comments.second);
await commentsPage.checkUserIconIsDisplayed();
await commentsPage.addComment(comments.second);
await commentsPage.checkUserIconIsDisplayed();
await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (2)');
await expect(await commentsPage.getMessage(0)).toEqual(comments.second);
await expect(await commentsPage.getUserName(0)).toEqual(userFullName);
await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/);
});
await commentsPage.getTotalNumberOfComments('Comments (2)');
await expect(await commentsPage.getMessage(0)).toEqual(comments.second);
await expect(await commentsPage.getUserName(0)).toEqual(userFullName);
await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/);
});
it('[C280022] Should not be able to add an HTML or other code input into the comment input filed', async () => {
await viewerPage.viewFile(pngFileModel.name);
await viewerPage.clickInfoButton();
await viewerPage.checkInfoSideBarIsDisplayed();
await viewerPage.clickOnCommentsTab();
it('[C280022] Should not be able to add an HTML or other code input into the comment input filed', async () => {
await viewerPage.viewFile(pngFileModel.name);
await viewerPage.clickInfoButton();
await viewerPage.checkInfoSideBarIsDisplayed();
await viewerPage.clickOnCommentsTab();
await commentsPage.addComment(comments.codeType);
await commentsPage.checkUserIconIsDisplayed();
await commentsPage.addComment(comments.codeType);
await commentsPage.checkUserIconIsDisplayed();
await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)');
await expect(await commentsPage.getMessage(0)).toEqual('First name: Last name:');
await expect(await commentsPage.getUserName(0)).toEqual(userFullName);
await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/);
await commentsPage.getTotalNumberOfComments('Comments (1)');
await expect(await commentsPage.getMessage(0)).toEqual('First name: Last name:');
await expect(await commentsPage.getUserName(0)).toEqual(userFullName);
await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/);
});
});
describe('Consumer Permissions', () => {
@@ -176,13 +176,13 @@ describe('Comment Component', () => {
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: acsUser.email,
id: acsUser.username,
role: CONSTANTS.CS_USER_ROLES.CONSUMER
});
pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, site.entry.guid);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.navigateToContentServices();
});
@@ -203,6 +203,7 @@ describe('Comment Component', () => {
await commentsPage.checkCommentsTabIsSelected();
await commentsPage.checkCommentInputIsNotDisplayed();
await viewerPage.clickCloseButton();
});
});
});
@@ -46,7 +46,7 @@ describe('Create folder directive', () => {
acsUser = await usersActions.createUser();
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
});
@@ -50,7 +50,7 @@ describe('Create library directive', () => {
visibility: 'PUBLIC'
});
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
});
afterAll(async () => {
@@ -30,19 +30,24 @@ import {
} from '@alfresco/adf-testing';
import { browser } from 'protractor';
import { FolderModel } from '../../models/ACS/folder.model';
import { NavigationBarPage } from '../../core/pages/navigation-bar.page';
describe('Delete Directive', () => {
const apiService = new ApiService();
let baseFolderUploaded;
const loginPage = new LoginPage();
const contentServicesPage = new ContentServicesPage();
const paginationPage = new PaginationPage();
const navigationBarPage = new NavigationBarPage();
const contentListPage = contentServicesPage.getDocumentList();
const acsUser = new UserModel();
const secondAcsUser = new UserModel();
const apiService = new ApiService();
const uploadActions = new UploadActions(apiService);
const permissionActions = new PermissionActions(apiService);
let baseFolderUploaded;
const usersActions = new UsersActions(apiService);
const txtFileModel = new FileModel({
@@ -94,10 +99,10 @@ describe('Delete Directive', () => {
await apiService.loginWithProfile('admin');
await usersActions.createUser(acsUser);
await usersActions.createUser(secondAcsUser);
await apiService.login(acsUser.email, acsUser.password);
});
beforeEach(async () => {
await apiService.login(acsUser.username, acsUser.password);
baseFolderUploaded = await uploadActions.createFolder(
baseFolder.name,
'-my-'
@@ -105,6 +110,7 @@ describe('Delete Directive', () => {
});
afterEach(async () => {
await apiService.loginWithProfile('admin');
await uploadActions.deleteFileOrFolder(baseFolderUploaded.entry.id);
});
@@ -118,11 +124,15 @@ describe('Delete Directive', () => {
await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, textFolderUploaded.entry.id);
await uploadActions.createFolder(folderSecond.name, baseFolderUploaded.entry.id);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await BrowserActions.getUrl(`${browser.baseUrl}/files/${baseFolderUploaded.entry.id}`);
await contentServicesPage.waitForTableBody();
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C260188] Delete multiple content', async () => {
await contentListPage.selectRowWithKeyboard(txtFileModel.name);
await contentListPage.dataTable.checkRowIsSelected('Display name', txtFileModel.name);
@@ -184,6 +194,8 @@ describe('Delete Directive', () => {
describe('When selection on multiple pages', () => {
beforeEach(async () => {
await apiService.login(acsUser.username, acsUser.password);
await uploadActions.uploadFile( txtFileModel.location, txtFileModel.name, baseFolderUploaded.entry.id);
await uploadActions.uploadFile(file0BytesModel.location, file0BytesModel.name, baseFolderUploaded.entry.id);
await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, baseFolderUploaded.entry.id);
@@ -191,11 +203,15 @@ describe('Delete Directive', () => {
await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, baseFolderUploaded.entry.id);
await uploadActions.uploadFile(secondPngFileModel.location, secondPngFileModel.name, baseFolderUploaded.entry.id);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await BrowserActions.getUrl(`${browser.baseUrl}/files/${baseFolderUploaded.entry.id}`);
await contentServicesPage.waitForTableBody();
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C260191] Delete content selected from different pages', async () => {
await contentServicesPage.sortByName('ASC');
await paginationPage.selectItemsPerPage('5');
@@ -216,13 +232,15 @@ describe('Delete Directive', () => {
let fileTxt, filePdf, folderA, folderB;
beforeAll(async () => {
await apiService.login(acsUser.username, acsUser.password);
createdSite = await apiService.getInstance().core.sitesApi.createSite({
title: StringUtil.generateRandomString(20).toLowerCase(),
visibility: 'PRIVATE'
});
await apiService.getInstance().core.sitesApi.addSiteMember(createdSite.entry.id, {
id: secondAcsUser.email,
id: secondAcsUser.username,
role: 'SiteCollaborator'
});
@@ -231,17 +249,17 @@ describe('Delete Directive', () => {
folderA = await uploadActions.createFolder(StringUtil.generateRandomString(5), createdSite.entry.guid);
folderB = await uploadActions.createFolder(StringUtil.generateRandomString(5), createdSite.entry.guid);
await permissionActions.addRoleForUser(secondAcsUser.email, 'SiteManager', folderA);
await permissionActions.addRoleForUser(secondAcsUser.email, 'SiteManager', fileTxt);
await permissionActions.addRoleForUser(secondAcsUser.email, 'SiteConsumer', folderB);
await permissionActions.addRoleForUser(secondAcsUser.email, 'SiteConsumer', filePdf);
await permissionActions.addRoleForUser(secondAcsUser.username, 'SiteManager', folderA);
await permissionActions.addRoleForUser(secondAcsUser.username, 'SiteManager', fileTxt);
await permissionActions.addRoleForUser(secondAcsUser.username, 'SiteConsumer', folderB);
await permissionActions.addRoleForUser(secondAcsUser.username, 'SiteConsumer', filePdf);
await permissionActions.disableInheritedPermissionsForNode(folderA.entry.id);
await permissionActions.disableInheritedPermissionsForNode(folderB.entry.id);
await permissionActions.disableInheritedPermissionsForNode(fileTxt.entry.id);
await permissionActions.disableInheritedPermissionsForNode(filePdf.entry.id);
await loginPage.login(secondAcsUser.email, secondAcsUser.password);
await loginPage.login(secondAcsUser.username, secondAcsUser.password);
await BrowserActions.getUrl(`${browser.baseUrl}/files/${createdSite.entry.guid}`);
await contentServicesPage.waitForTableBody();
});
@@ -250,6 +268,7 @@ describe('Delete Directive', () => {
try {
await apiService.getInstance().core.sitesApi.deleteSite(createdSite.entry.id, { permanent: true });
} catch (error) {}
await navigationBarPage.clickLogoutButton();
});
it('[C216426] Delete file without delete permissions', async () => {
@@ -71,7 +71,7 @@ describe('Version component actions', () => {
beforeAll(async () => {
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
await uploadActions.uploadFile( txtFileModel.location, txtFileModel.name, '-my-');
await uploadActions.uploadFile(file0BytesModel.location, file0BytesModel.name, '-my-');
@@ -82,7 +82,7 @@ describe('Version component actions', () => {
await uploadActions.createFolder(folderSecond.name, '-my-');
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
@@ -56,7 +56,7 @@ describe('Edit folder directive', () => {
await apiService.loginWithProfile('admin');
await usersActions.createUser(acsUser);
await usersActions.createUser(anotherAcsUser);
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
editFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
anotherFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
@@ -68,14 +68,14 @@ describe('Edit folder directive', () => {
{
permissions: {
locallySet: [{
authorityId: anotherAcsUser.email,
authorityId: anotherAcsUser.username,
name: 'Consumer',
accessStatus: 'ALLOWED'
}]
}
});
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
});
afterAll(async () => {
@@ -235,7 +235,7 @@ describe('Edit folder directive', () => {
describe('Edit Folder - no permission', () => {
beforeEach(async () => {
await navigationBarPage.clickLogoutButton();
await loginPage.login(anotherAcsUser.email, anotherAcsUser.password);
await loginPage.login(anotherAcsUser.username, anotherAcsUser.password);
await BrowserActions.getUrl(browser.baseUrl + '/files/' + editFolder.entry.id);
await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded();
});
@@ -56,7 +56,7 @@ describe('Favorite directive', () => {
beforeAll(async () => {
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
testFolder1 = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
testFolder2 = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
@@ -66,7 +66,7 @@ describe('Favorite directive', () => {
await browser.sleep(browser.params.testConfig.timeouts.index_search);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
});
@@ -24,7 +24,6 @@ import { TrashcanPage } from '../../core/pages/trashcan.page';
import {
ApiService,
BreadcrumbPage,
BrowserActions,
LoginPage,
NotificationHistoryPage,
StringUtil,
@@ -71,7 +70,7 @@ describe('Restore content directive', () => {
await apiService.loginWithProfile('admin');
await usersActions.createUser(acsUser);
await usersActions.createUser(anotherAcsUser);
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
await uploadActions.createFolder(folderName, '-my-');
folderWithContent = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
@@ -80,8 +79,6 @@ describe('Restore content directive', () => {
folderWithFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
subFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), folderWithFolder.entry.id);
restoreFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-');
await loginPage.login(acsUser.email, acsUser.password);
});
afterAll(async () => {
@@ -90,14 +87,10 @@ describe('Restore content directive', () => {
await uploadActions.deleteFileOrFolder(folderWithFolder.entry.id);
});
beforeEach(async () => {
await BrowserActions.closeMenuAndDialogs();
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
});
describe('Restore same name folders', () => {
beforeAll(async () => {
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
await contentServicesPage.checkContentIsDisplayed(folderName);
@@ -108,10 +101,13 @@ describe('Restore content directive', () => {
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName);
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C260227] Should validate when restoring Folders with same name', async () => {
await uploadActions.createFolder(folderName, '-my-');
await navigationBarPage.navigateToContentServices();
await browser.refresh();
await contentServicesPage.waitForTableBody();
await contentServicesPage.checkContentIsDisplayed(folderName);
await contentServicesPage.deleteContent(folderName);
@@ -121,8 +117,10 @@ describe('Restore content directive', () => {
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName);
await trashcanPage.getDocumentList().dataTablePage().checkAllRows();
await trashcanPage.clickRestore();
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName);
await browser.sleep(1000);
await navigationBarPage.navigateToContentServices();
await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded();
await contentServicesPage.checkContentIsDisplayed(folderName);
@@ -131,114 +129,129 @@ describe('Restore content directive', () => {
});
});
it('[C260238] Should restore a file', async () => {
await contentServicesPage.checkContentIsDisplayed(testFile.entry.name);
await contentServicesPage.deleteContent(testFile.entry.name);
await contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name);
await navigationBarPage.clickTrashcanButton();
await trashcanPage.waitForTableBody();
await trashcanPage.getDocumentList().dataTablePage().clickRowByContent(testFile.entry.name);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(testFile.entry.name);
await trashcanPage.clickRestore();
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsNotDisplayed(testFile.entry.name);
describe('Validate', () => {
await notificationHistoryPage.checkNotifyContains(testFile.entry.name + ' item restored');
beforeAll(async () => {
await loginPage.login(acsUser.username, acsUser.password);
});
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
await contentServicesPage.checkContentIsDisplayed(testFile.entry.name);
await contentServicesPage.deleteContent(testFile.entry.name);
await contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name);
await navigationBarPage.clickTrashcanButton();
await trashcanPage.waitForTableBody();
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(testFile.entry.name);
});
afterAll(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C260239] Should restore folder with content', async () => {
await contentServicesPage.checkContentIsDisplayed(folderWithContent.entry.name);
await contentServicesPage.deleteContent(folderWithContent.entry.name);
await contentServicesPage.checkContentIsNotDisplayed(folderWithContent.entry.name);
await navigationBarPage.clickTrashcanButton();
await trashcanPage.waitForTableBody();
await trashcanPage.getDocumentList().dataTablePage().clickRowByContent(folderWithContent.entry.name);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderWithContent.entry.name);
await trashcanPage.clickRestore();
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsNotDisplayed(folderWithContent.entry.name);
beforeEach(async () => {
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
});
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
await contentServicesPage.checkContentIsDisplayed(folderWithContent.entry.name);
await contentServicesPage.getDocumentList().dataTablePage().doubleClickRow('Display name', folderWithContent.entry.name);
await contentServicesPage.checkContentIsDisplayed(subFile.entry.name);
await notificationHistoryPage.checkNotifyContains(folderWithContent.entry.name + ' item restored');
});
it('[C260238] Should restore a file', async () => {
await contentServicesPage.checkContentIsDisplayed(testFile.entry.name);
await contentServicesPage.deleteContent(testFile.entry.name);
await contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name);
await navigationBarPage.clickTrashcanButton();
await trashcanPage.waitForTableBody();
await trashcanPage.getDocumentList().dataTablePage().clickRowByContent(testFile.entry.name);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(testFile.entry.name);
await trashcanPage.clickRestore();
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsNotDisplayed(testFile.entry.name);
it('[C260240] Should validate restore when the original location no longer exists', async () => {
await contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name);
await contentServicesPage.openFolder(folderWithFolder.entry.name);
await contentServicesPage.checkContentIsDisplayed(subFolder.entry.name);
await contentServicesPage.deleteContent(subFolder.entry.name);
await contentServicesPage.checkContentIsNotDisplayed(subFolder.entry.name);
await breadCrumbPage.chooseBreadCrumb(acsUser.email);
await contentServicesPage.waitForTableBody();
await contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name);
await contentServicesPage.deleteContent(folderWithFolder.entry.name);
await contentServicesPage.checkContentIsNotDisplayed(folderWithFolder.entry.name);
await notificationHistoryPage.checkNotifyContains(testFile.entry.name + ' item restored');
await navigationBarPage.clickTrashcanButton();
await trashcanPage.waitForTableBody();
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderWithFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().clickRowByContent(subFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name);
await trashcanPage.clickRestore();
await notificationHistoryPage.checkNotifyContains(`Can't restore ${subFolder.entry.name} item, the original location no longer exists`);
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderWithFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(subFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderWithFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderWithFolder.entry.name);
await trashcanPage.clickRestore();
await notificationHistoryPage.checkNotifyContains('Restore successful');
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
await contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name);
await contentServicesPage.openFolder(folderWithFolder.entry.name);
await contentServicesPage.checkContentIsDisplayed(subFolder.entry.name);
});
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
await contentServicesPage.checkContentIsDisplayed(testFile.entry.name);
await contentServicesPage.deleteContent(testFile.entry.name);
await contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name);
await navigationBarPage.clickTrashcanButton();
await trashcanPage.waitForTableBody();
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(testFile.entry.name);
});
it('[C260241] Should display restore icon both for file and folder', async () => {
await contentServicesPage.checkContentIsDisplayed(folderName);
await contentServicesPage.checkContentIsDisplayed(restoreFile.entry.name);
await contentServicesPage.deleteContent(folderName);
await contentServicesPage.deleteContent(restoreFile.entry.name);
await contentServicesPage.checkContentIsNotDisplayed(folderName);
await contentServicesPage.checkContentIsNotDisplayed(restoreFile.entry.name);
it('[C260239] Should restore folder with content', async () => {
await contentServicesPage.checkContentIsDisplayed(folderWithContent.entry.name);
await contentServicesPage.deleteContent(folderWithContent.entry.name);
await contentServicesPage.checkContentIsNotDisplayed(folderWithContent.entry.name);
await navigationBarPage.clickTrashcanButton();
await trashcanPage.waitForTableBody();
await trashcanPage.getDocumentList().dataTablePage().clickRowByContent(folderWithContent.entry.name);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderWithContent.entry.name);
await trashcanPage.clickRestore();
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsNotDisplayed(folderWithContent.entry.name);
await navigationBarPage.clickTrashcanButton();
await trashcanPage.waitForTableBody();
await trashcanPage.checkRestoreButtonIsNotDisplayed();
await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderName);
await trashcanPage.checkRestoreButtonIsDisplayed();
await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsNotSelected(folderName);
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
await contentServicesPage.checkContentIsDisplayed(folderWithContent.entry.name);
await contentServicesPage.getDocumentList().dataTablePage().doubleClickRow('Display name', folderWithContent.entry.name);
await contentServicesPage.checkContentIsDisplayed(subFile.entry.name);
await notificationHistoryPage.checkNotifyContains(folderWithContent.entry.name + ' item restored');
});
await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(restoreFile.entry.name);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(restoreFile.entry.name);
await trashcanPage.checkRestoreButtonIsDisplayed();
it('[C260240] Should validate restore when the original location no longer exists', async () => {
await contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name);
await contentServicesPage.openFolder(folderWithFolder.entry.name);
await contentServicesPage.checkContentIsDisplayed(subFolder.entry.name);
await contentServicesPage.deleteContent(subFolder.entry.name);
await contentServicesPage.checkContentIsNotDisplayed(subFolder.entry.name);
await breadCrumbPage.chooseBreadCrumb(acsUser.username);
await contentServicesPage.waitForTableBody();
await contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name);
await contentServicesPage.deleteContent(folderWithFolder.entry.name);
await contentServicesPage.checkContentIsNotDisplayed(folderWithFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderName);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(restoreFile.entry.name);
await trashcanPage.checkRestoreButtonIsDisplayed();
await navigationBarPage.clickTrashcanButton();
await trashcanPage.waitForTableBody();
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderWithFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().clickRowByContent(subFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name);
await trashcanPage.clickRestore();
await notificationHistoryPage.checkNotifyContains(`Can't restore ${subFolder.entry.name} item, the original location no longer exists`);
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderWithFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(subFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderWithFolder.entry.name);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderWithFolder.entry.name);
await trashcanPage.clickRestore();
await notificationHistoryPage.checkNotifyContains('Restore successful');
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
await contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name);
await contentServicesPage.openFolder(folderWithFolder.entry.name);
await contentServicesPage.checkContentIsDisplayed(subFolder.entry.name);
});
it('[C260241] Should display restore icon both for file and folder', async () => {
await contentServicesPage.checkContentIsDisplayed(folderName);
await contentServicesPage.checkContentIsDisplayed(restoreFile.entry.name);
await contentServicesPage.deleteContent(folderName);
await contentServicesPage.deleteContent(restoreFile.entry.name);
await navigationBarPage.clickTrashcanButton();
await trashcanPage.waitForTableBody();
await trashcanPage.checkRestoreButtonIsNotDisplayed();
await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderName);
await trashcanPage.checkRestoreButtonIsDisplayed();
await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsNotSelected(folderName);
await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(restoreFile.entry.name);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(restoreFile.entry.name);
await trashcanPage.checkRestoreButtonIsDisplayed();
await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderName);
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(restoreFile.entry.name);
await trashcanPage.checkRestoreButtonIsDisplayed();
});
});
describe('Restore deleted library', () => {
beforeAll(async () => {
await apiService.login(acsUser.email, acsUser.password);
const publicSiteName = `00${StringUtil.generateRandomString(5)}`;
await apiService.login(acsUser.username, acsUser.password);
const publicSiteName = `public-${StringUtil.generateRandomString(5)}`;
const publicSiteBody = { visibility: 'PUBLIC', title: publicSiteName };
publicSite = await apiService.getInstance().core.sitesApi.createSite(publicSiteBody);
siteFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), publicSite.entry.guid);
@@ -246,8 +259,19 @@ describe('Restore content directive', () => {
await apiService.getInstance().core.sitesApi.deleteSite(publicSite.entry.id);
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
beforeEach(async () => {
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
});
afterAll(async () => {
try {
await apiService.loginWithProfile('admin');
await apiService.getInstance().core.sitesApi.deleteSite(publicSite.entry.id, { permanent: true });
} catch (error) {
}
@@ -261,8 +285,11 @@ describe('Restore content directive', () => {
await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(publicSite.entry.id);
await trashcanPage.clickRestore();
await browser.sleep(browser.params.testConfig.timeouts.index_search);
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
await contentServicesPage.selectSite(publicSite.entry.title);
await contentServicesPage.waitForTableBody();
await contentServicesPage.checkContentIsDisplayed(siteFolder.entry.name);
@@ -276,7 +303,7 @@ describe('Restore content directive', () => {
let parentFolder, folderWithin, pdfFile, pngFile, mainFile, mainFolder;
beforeAll(async () => {
await apiService.login(anotherAcsUser.email, anotherAcsUser.password);
await apiService.login(anotherAcsUser.username, anotherAcsUser.password);
await uploadActions.createFolder(folderName, '-my-');
parentFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
folderWithin = await uploadActions.createFolder(StringUtil.generateRandomString(5), parentFolder.entry.id);
@@ -285,8 +312,16 @@ describe('Restore content directive', () => {
mainFile = await uploadActions.uploadFile(testFileModel.location, testFileModel.name, '-my-');
mainFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
await loginPage.login(anotherAcsUser.email, anotherAcsUser.password);
await contentServicesPage.goToDocumentList();
await loginPage.login(anotherAcsUser.username, anotherAcsUser.password);
});
beforeEach(async () => {
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
afterAll(async () => {
@@ -68,7 +68,7 @@ describe('Document List Component - Actions', () => {
folderName = `TATSUMAKY_${StringUtil.generateRandomString(5)}_SENPOUKYAKU`;
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
pdfUploadedNode = await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, '-my-');
await uploadActions.uploadFile(testFileModel.location, testFileModel.name, '-my-');
uploadedFolder = await uploadActions.createFolder(folderName, '-my-');
@@ -77,7 +77,7 @@ describe('Document List Component - Actions', () => {
fileNames = StringUtil.generateFilesNames(1, nrOfFiles, files.base, files.extension);
await uploadActions.createEmptyFiles(fileNames, uploadedFolder.entry.id);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await browser.sleep(browser.params.testConfig.timeouts.index_search); // wait search index previous file/folder uploaded
});
@@ -20,12 +20,16 @@ import { browser } from 'protractor';
import { ApiService, LoginPage, StringUtil, UploadActions, UsersActions, ViewerPage } from '@alfresco/adf-testing';
import { FileModel } from '../../models/ACS/file.model';
import moment from 'moment-es6';
import { NavigationBarPage } from '../../core/pages/navigation-bar.page';
describe('Document List Component', () => {
const loginPage = new LoginPage();
const contentServicesPage = new ContentServicesPage();
let uploadedFolder, uploadedFolderExtra;
const loginPage = new LoginPage();
const navigationBarPage = new NavigationBarPage();
const contentServicesPage = new ContentServicesPage();
const apiService = new ApiService();
const usersActions = new UsersActions(apiService);
@@ -82,7 +86,7 @@ describe('Document List Component', () => {
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
uploadedFolder = await uploadActions.createFolder(folderName, '-my-');
pdfUploadedNode = await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, '-my-');
docxUploadedNode = await uploadActions.uploadFile(docxFileModel.location, docxFileModel.name, '-my-');
@@ -106,7 +110,11 @@ describe('Document List Component', () => {
});
beforeEach(async () => {
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C279926] Should only display the user\'s files and folders', async () => {
@@ -126,7 +134,7 @@ describe('Document List Component', () => {
});
it('[C279928] Should be able to display date with timeAgo', async () => {
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
timeAgoUploadedNode = await uploadActions.uploadFile(timeAgoFileModel.location, timeAgoFileModel.name, '-my-');
await contentServicesPage.goToDocumentList();
const dateValue = await contentServicesPage.getColumnValueForRow(timeAgoFileModel.name, 'Created');
@@ -134,7 +142,7 @@ describe('Document List Component', () => {
});
it('[C279929] Should be able to display the date with date type', async () => {
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
mediumDateUploadedNode = await uploadActions.uploadFile(mediumFileModel.location, mediumFileModel.name, '-my-');
const createdDate = moment(mediumDateUploadedNode.createdAt).format('ll');
await contentServicesPage.goToDocumentList();
@@ -166,18 +174,20 @@ describe('Document List Component', () => {
await apiService.loginWithProfile('admin');
const user = await usersActions.createUser();
await apiService.login(user.email, user.password);
await apiService.login(user.username, user.password);
fileANode = await uploadActions.uploadFile(fakeFileA.location, fakeFileA.name, '-my-');
fileBNode = await uploadActions.uploadFile(fakeFileB.location, fakeFileB.name, '-my-');
fileCNode = await uploadActions.uploadFile(fakeFileC.location, fakeFileC.name, '-my-');
await loginPage.login(user.email, user.password);
await loginPage.login(user.username, user.password);
await contentServicesPage.goToDocumentList();
});
afterAll(async () => {
await navigationBarPage.clickLogoutButton();
await apiService.loginWithProfile('admin');
if (fileANode) {
await uploadActions.deleteFileOrFolder(fileANode.entry.id);
@@ -215,86 +225,98 @@ describe('Document List Component', () => {
});
});
it('[C279959] Should display empty folder state for new folders', async () => {
const folderName = 'BANANA';
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await loginPage.login(acsUser.email, acsUser.password);
await contentServicesPage.goToDocumentList();
await contentServicesPage.createNewFolder(folderName);
await contentServicesPage.openFolder(folderName);
await contentServicesPage.checkEmptyFolderTextToBe('This folder is empty');
await contentServicesPage.checkEmptyFolderImageUrlToContain('/assets/images/empty_doc_lib.svg');
});
describe('', () => {
it('[C272775] Should be able to upload a file in new folder', async () => {
const testFile = new FileModel({
name: browser.params.resources.Files.ADF_DOCUMENTS.TEST.file_name,
location: browser.params.resources.Files.ADF_DOCUMENTS.TEST.file_location
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
/* cspell:disable-next-line */
const folderName = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`;
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
uploadedFolder = await uploadActions.createFolder(folderName, '-my-');
await loginPage.login(acsUser.email, acsUser.password);
await contentServicesPage.goToDocumentList();
await contentServicesPage.checkContentIsDisplayed(uploadedFolder.entry.name);
await contentServicesPage.openFolder(uploadedFolder.entry.name);
await contentServicesPage.uploadFile(testFile.location);
await contentServicesPage.checkContentIsDisplayed(testFile.name);
});
it('[C261997] Should be able to clean Recent Files history', async () => {
await apiService.loginWithProfile('admin');
const cleanUser = await usersActions.createUser();
await loginPage.login(cleanUser.email, cleanUser.password);
await contentServicesPage.clickOnContentServices();
await contentServicesPage.checkRecentFileToBeShowed();
const icon = await contentServicesPage.getRecentFileIcon();
await expect(icon).toBe('history');
await contentServicesPage.expandRecentFiles();
await contentServicesPage.checkEmptyRecentFileIsDisplayed();
await contentServicesPage.closeRecentFiles();
});
it('[C279959] Should display empty folder state for new folders', async () => {
const folderName = 'BANANA';
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
it('[C279970] Should display Islocked field for folders', async () => {
const folderNameA = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`;
const folderNameB = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`;
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
uploadedFolder = await uploadActions.createFolder(folderNameA, '-my-');
uploadedFolderExtra = await uploadActions.createFolder(folderNameB, '-my-');
await loginPage.login(acsUser.email, acsUser.password);
await contentServicesPage.goToDocumentList();
await contentServicesPage.checkContentIsDisplayed(folderNameA);
await contentServicesPage.checkContentIsDisplayed(folderNameB);
await contentServicesPage.checkLockIsDisplayedForElement(folderNameA);
await contentServicesPage.checkLockIsDisplayedForElement(folderNameB);
});
it('[C269086] Should display Islocked field for files', async () => {
const testFileA = new FileModel({
name: browser.params.resources.Files.ADF_DOCUMENTS.TEST.file_name,
location: browser.params.resources.Files.ADF_DOCUMENTS.TEST.file_path
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
await contentServicesPage.createNewFolder(folderName);
await contentServicesPage.openFolder(folderName);
await contentServicesPage.checkEmptyFolderTextToBe('This folder is empty');
await contentServicesPage.checkEmptyFolderImageUrlToContain('/assets/images/empty_doc_lib.svg');
});
const testFileB = new FileModel({
name: browser.params.resources.Files.ADF_DOCUMENTS.PDF_B.file_name,
location: browser.params.resources.Files.ADF_DOCUMENTS.PDF_B.file_path
it('[C272775] Should be able to upload a file in new folder', async () => {
const testFile = new FileModel({
name: browser.params.resources.Files.ADF_DOCUMENTS.TEST.file_name,
location: browser.params.resources.Files.ADF_DOCUMENTS.TEST.file_location
});
/* cspell:disable-next-line */
const folderName = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`;
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.username, acsUser.password);
uploadedFolder = await uploadActions.createFolder(folderName, '-my-');
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
await contentServicesPage.checkContentIsDisplayed(uploadedFolder.entry.name);
await contentServicesPage.openFolder(uploadedFolder.entry.name);
await contentServicesPage.uploadFile(testFile.location);
await contentServicesPage.checkContentIsDisplayed(testFile.name);
});
it('[C261997] Should be able to clean Recent Files history', async () => {
await apiService.loginWithProfile('admin');
const cleanUser = await usersActions.createUser();
await loginPage.login(cleanUser.username, cleanUser.password);
await contentServicesPage.clickOnContentServices();
await contentServicesPage.checkRecentFileToBeShowed();
const icon = await contentServicesPage.getRecentFileIcon();
await expect(icon).toBe('history');
await contentServicesPage.expandRecentFiles();
await contentServicesPage.checkEmptyRecentFileIsDisplayed();
await contentServicesPage.closeRecentFiles();
});
it('[C279970] Should display Islocked field for folders', async () => {
const folderNameA = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`;
const folderNameB = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`;
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.username, acsUser.password);
uploadedFolder = await uploadActions.createFolder(folderNameA, '-my-');
uploadedFolderExtra = await uploadActions.createFolder(folderNameB, '-my-');
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
await contentServicesPage.checkContentIsDisplayed(folderNameA);
await contentServicesPage.checkContentIsDisplayed(folderNameB);
await contentServicesPage.checkLockIsDisplayedForElement(folderNameA);
await contentServicesPage.checkLockIsDisplayedForElement(folderNameB);
});
it('[C269086] Should display Islocked field for files', async () => {
const testFileA = new FileModel({
name: browser.params.resources.Files.ADF_DOCUMENTS.TEST.file_name,
location: browser.params.resources.Files.ADF_DOCUMENTS.TEST.file_path
});
const testFileB = new FileModel({
name: browser.params.resources.Files.ADF_DOCUMENTS.PDF_B.file_name,
location: browser.params.resources.Files.ADF_DOCUMENTS.PDF_B.file_path
});
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.username, acsUser.password);
testFileNode = await uploadActions.uploadFile(testFileA.location, testFileA.name, '-my-');
pdfBFileNode = await uploadActions.uploadFile(testFileB.location, testFileB.name, '-my-');
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
await contentServicesPage.checkContentIsDisplayed(testFileA.name);
await contentServicesPage.checkContentIsDisplayed(testFileB.name);
await contentServicesPage.checkLockIsDisplayedForElement(testFileA.name);
await contentServicesPage.checkLockIsDisplayedForElement(testFileB.name);
});
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
testFileNode = await uploadActions.uploadFile(testFileA.location, testFileA.name, '-my-');
pdfBFileNode = await uploadActions.uploadFile(testFileB.location, testFileB.name, '-my-');
await loginPage.login(acsUser.email, acsUser.password);
await contentServicesPage.goToDocumentList();
await contentServicesPage.checkContentIsDisplayed(testFileA.name);
await contentServicesPage.checkContentIsDisplayed(testFileB.name);
await contentServicesPage.checkLockIsDisplayedForElement(testFileA.name);
await contentServicesPage.checkLockIsDisplayedForElement(testFileB.name);
});
describe('Once uploaded 20 folders', () => {
@@ -304,7 +326,7 @@ describe('Document List Component', () => {
folderCreated = [];
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
let folderName = '';
let folder = null;
@@ -319,10 +341,12 @@ describe('Document List Component', () => {
for (let i = 0; i < folderCreated.length; i++) {
await uploadActions.deleteFileOrFolder(folderCreated[i].entry.id);
}
await navigationBarPage.clickLogoutButton();
});
it('[C277093] Should sort files with Items per page set to default', async () => {
await loginPage.login(acsUser.email, acsUser.password);
await navigationBarPage.clickLogoutButton();
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
await contentServicesPage.checkListIsSortedByNameColumn('asc');
});
@@ -340,10 +364,10 @@ describe('Document List Component', () => {
beforeAll(async () => {
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
file = await uploadActions.uploadFile(file0BytesModel.location, file0BytesModel.name, '-my-');
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
});
@@ -71,10 +71,10 @@ describe('Document List Component', () => {
visibility: 'PUBLIC'
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: anotherAcsUser.email,
id: anotherAcsUser.username,
role: CONSTANTS.CS_USER_ROLES.COLLABORATOR
});
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
uploadedFolder = await uploadActions.createFolder(folderName, '-my-');
destinationFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
sourceFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
@@ -90,7 +90,7 @@ describe('Document List Component', () => {
{
permissions: {
locallySet: [{
authorityId: anotherAcsUser.email,
authorityId: anotherAcsUser.username,
name: 'Consumer',
accessStatus: 'ALLOWED'
}]
@@ -101,8 +101,6 @@ describe('Document List Component', () => {
});
afterAll(async () => {
await navigationBarPage.clickLogoutButton();
await apiService.loginWithProfile('admin');
await uploadActions.deleteFileOrFolder(uploadedFolder.entry.id);
await uploadActions.deleteFileOrFolder(uploadedFile.entry.id);
@@ -112,8 +110,9 @@ describe('Document List Component', () => {
});
describe('Document List Component - Actions Move and Copy', () => {
beforeAll(async () => {
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
});
beforeEach(async () => {
@@ -122,6 +121,10 @@ describe('Document List Component', () => {
await contentServicesPage.contentList.dataTablePage().waitTillContentLoaded();
});
afterAll(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C260128] Move - Same name file', async () => {
await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name);
await contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name);
@@ -206,13 +209,18 @@ describe('Document List Component', () => {
});
});
describe('Document List actionns - Move, Copy on no permission folder', () => {
describe('Document List actions - Move, Copy on no permission folder', () => {
beforeAll(async () => {
await loginPage.login(anotherAcsUser.email, anotherAcsUser.password);
await loginPage.login(anotherAcsUser.username, anotherAcsUser.password);
await BrowserActions.getUrl(`${browser.baseUrl}/files/${sourceFolder.entry.id}`);
await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded();
});
afterAll(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C260133] Move - no permission folder', async () => {
await contentServicesPage.checkContentIsDisplayed(subFolder.entry.name);
await contentServicesPage.getDocumentList().rightClickOnRow(subFolder.entry.name);
@@ -269,7 +277,8 @@ describe('Document List Component', () => {
await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name);
await contentServicesPage.checkDeleteIsDisabled(pdfFileModel.name);
await loginPage.login(acsUser.email, acsUser.password);
await navigationBarPage.clickLogoutButton();
await loginPage.login(acsUser.username, acsUser.password);
await BrowserActions.getUrl(`${browser.baseUrl}/files/${sourceFolder.entry.id}`);
await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded();
@@ -31,6 +31,7 @@ import {
import { ContentServicesPage } from '../../core/pages/content-services.page';
import { InfinitePaginationPage } from '../../core/pages/infinite-pagination.page';
import { FolderModel } from '../../models/ACS/folder.model';
import { NavigationBarPage } from '../../core/pages/navigation-bar.page';
describe('Document List Component - Actions', () => {
@@ -41,6 +42,8 @@ describe('Document List Component - Actions', () => {
const paginationPage = new PaginationPage();
const breadCrumbDropdownPage = new BreadcrumbDropdownPage();
const breadCrumbPage = new BreadcrumbPage();
const navigationBarPage = new NavigationBarPage();
const apiService = new ApiService();
const usersActions = new UsersActions(apiService);
@@ -63,7 +66,7 @@ describe('Document List Component - Actions', () => {
beforeAll(async () => {
await apiService.loginWithProfile('admin');
await usersActions.createUser(contentServicesUser);
await apiService.login(contentServicesUser.email, contentServicesUser.password);
await apiService.login(contentServicesUser.username, contentServicesUser.password);
folder1 = await uploadActions.createFolder('A' + folderModel1.name, '-my-');
folder2 = await uploadActions.createFolder('B' + folderModel2.name, '-my-');
folder3 = await uploadActions.createFolder('C' + folderModel3.name, '-my-');
@@ -74,13 +77,17 @@ describe('Document List Component - Actions', () => {
});
beforeEach(async () => {
await loginPage.login(contentServicesUser.email, contentServicesUser.password);
await loginPage.login(contentServicesUser.username, contentServicesUser.password);
await contentServicesPage.goToDocumentList();
await paginationPage.selectItemsPerPage('5');
await contentServicesPage.checkAcsContainer();
await contentListPage.waitForTableBody();
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
afterAll(async () => {
await apiService.loginWithProfile('admin');
for (const folder of folders) {
@@ -134,11 +141,11 @@ describe('Document List Component - Actions', () => {
await contentNodeSelector.checkDialogIsDisplayed();
await breadCrumbDropdownPage.clickParentFolder();
await breadCrumbDropdownPage.checkBreadCrumbDropdownIsDisplayed();
await breadCrumbDropdownPage.choosePath(contentServicesUser.email);
await breadCrumbDropdownPage.choosePath(contentServicesUser.username);
await contentNodeSelector.clickMoveCopyButton();
await contentServicesPage.checkContentIsNotDisplayed('A' + folderModel1.name);
await breadCrumbPage.chooseBreadCrumb(contentServicesUser.email);
await breadCrumbPage.chooseBreadCrumb(contentServicesUser.username);
await contentServicesPage.waitForTableBody();
await contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name);
});
@@ -177,7 +184,7 @@ describe('Document List Component - Actions', () => {
await contentNodeSelector.clickMoveCopyButton();
await contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name);
await paginationPage.clickOnNextPage();
await contentServicesPage.getDocumentList().waitForTableBody();
await contentServicesPage.getDocumentList().dataTable.waitTillContentLoaded();
await contentServicesPage.openFolder('F' + folderModel6.name);
await contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name);
});
@@ -61,14 +61,14 @@ describe('Document List Component', () => {
beforeAll(async () => {
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
filePdfNode = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, '-my-');
fileTestNode = await uploadActions.uploadFile(testFile.location, testFile.name, '-my-');
fileDocxNode = await uploadActions.uploadFile(docxFile.location, docxFile.name, '-my-');
folderNode = await uploadActions.createFolder(folderName, '-my-');
filePDFSubNode = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, folderNode.entry.id);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
});
afterAll(async () => {
@@ -77,7 +77,7 @@ describe('Document List - Pagination', () => {
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
const folderThreeUploadedModel = await uploadActions.createFolder(folderThreeModel.name, '-my-');
const newFolderUploadedModel = await uploadActions.createFolder(newFolderModel.name, '-my-');
@@ -85,7 +85,7 @@ describe('Document List - Pagination', () => {
await uploadActions.createEmptyFiles(fileNames, newFolderUploadedModel.entry.id);
await uploadActions.createEmptyFiles(secondSetOfFiles, folderThreeUploadedModel.entry.id);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
});
afterAll(async () => {
@@ -121,13 +121,13 @@ describe('Document List - Pagination', () => {
await paginationPage.checkPreviousPageButtonIsDisabled();
await navigationBarPage.clickLogoutButton();
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
await expect(await paginationPage.getCurrentItemsPerPage()).toEqual('20');
await navigationBarPage.clickLogoutButton();
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
});
it('[C260069] Should be able to set Items per page to 5', async () => {
@@ -175,7 +175,7 @@ describe('Document List - Pagination', () => {
await contentServicesPage.contentList.dataTablePage().waitTillContentLoaded();
await expect(await paginationPage.getCurrentItemsPerPage()).toEqual('5');
await navigationBarPage.clickLogoutButton();
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
});
it('[C260067] Should be able to set Items per page to 10', async () => {
@@ -203,7 +203,7 @@ describe('Document List - Pagination', () => {
await expect(await paginationPage.getCurrentItemsPerPage()).toEqual('10');
await navigationBarPage.clickLogoutButton();
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
currentPage = 1;
});
@@ -374,7 +374,7 @@ describe('Document List - Pagination', () => {
await expect(await contentServicesPage.getActiveBreadcrumb()).toEqual(newFolderModel.name);
await expect(await paginationPage.getCurrentItemsPerPage()).toEqual('5');
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
await contentServicesPage.createNewFolder(folderTwoModel.name);
const nodeIdSubFolderTwo = await contentServicesPage.getAttributeValueForElement(folderTwoModel.name, 'Node id');
await contentServicesPage.openFolder(folderTwoModel.name);
@@ -415,7 +415,7 @@ describe('Document List - Pagination', () => {
const nodeIdSubFolderTwo = await contentServicesPage.getAttributeValueForElement(folderTwoModel.name, 'Node id');
await contentServicesPage.openFolder(folderTwoModel.name);
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
for (let i = 0; i < numberOfSubFolders; i++) {
await uploadActions.createFolder('subfolder' + (i + 1), nodeIdSubFolderTwo);
}
@@ -43,7 +43,7 @@ describe('Document List Component', () => {
privateSite = await apiService.getInstance().core.sitesApi.createSite(privateSiteBody);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
});
afterAll(async () => {
@@ -43,12 +43,12 @@ describe('Document List Component - Properties', () => {
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
parentFolder = await uploadActions.createFolder('parentFolder', '-my-');
subFolder = await uploadActions.createFolder('subFolder', parentFolder.entry.id);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
});
afterEach(async () => {
@@ -43,9 +43,9 @@ describe('Document List - Selection', () => {
try {
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
await contentServicesPage.createNewFolder(folderModel.name);
@@ -77,7 +77,7 @@ describe('Document List Component', () => {
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
filePdfNode = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, '-my-');
fileTestNode = await uploadActions.uploadFile(testFile.location, testFile.name, '-my-');
fileDocxNode = await uploadActions.uploadFile(docxFile.location, docxFile.name, '-my-');
@@ -100,13 +100,17 @@ describe('Document List Component', () => {
if (folderNode) {
await uploadActions.deleteFileOrFolder(folderNode.entry.id);
}
});
});
beforeEach(async () => {
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C260108] Should display tooltip for file\'s name', async () => {
await expect(await contentServicesPage.getDocumentList().getTooltip(pdfFile.name)).toEqual(pdfFile.name);
});
+42 -61
View File
@@ -54,7 +54,7 @@ describe('Lock File', () => {
await usersActions.createUser(adminUser);
await usersActions.createUser(managerUser);
await apiService.login(adminUser.email, adminUser.password);
await apiService.login(adminUser.username, adminUser.password);
site = await apiService.getInstance().core.sitesApi.createSite({
title: StringUtil.generateRandomString(),
@@ -66,7 +66,7 @@ describe('Lock File', () => {
documentLibrary = resultNode.list.entries[0].entry.id;
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: managerUser.email,
id: managerUser.username,
role: CONSTANTS.CS_USER_ROLES.MANAGER
});
});
@@ -83,38 +83,25 @@ describe('Lock File', () => {
});
beforeEach(async () => {
try {
const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, documentLibrary);
nodeId = pngUploadedFile.entry.id;
await loginPage.login(adminUser.email, adminUser.password);
await navigationBarPage.openContentServicesFolder(documentLibrary);
const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, documentLibrary);
nodeId = pngUploadedFile.entry.id;
await loginPage.login(adminUser.username, adminUser.password);
await navigationBarPage.openContentServicesFolder(documentLibrary);
await contentServices.waitForTableBody();
} catch (error) {
}
});
await contentServices.waitForTableBody();
});
afterEach(async () => {
try {
await apiService.login(adminUser.email, adminUser.password);
await uploadActions.deleteFileOrFolder(nodeId);
} catch (error) {
}
});
await apiService.login(adminUser.username, adminUser.password);
await uploadActions.deleteFileOrFolder(nodeId);
await navigationBarPage.clickLogoutButton();
});
afterAll(async () => {
try {
await apiService.login(adminUser.email, adminUser.password);
await apiService.getInstance().core.nodesApi.unlockNode(lockedFileNodeId);
await uploadActions.deleteFileOrFolder(lockedFileNodeId);
} catch (error) {
}
});
await apiService.login(adminUser.username, adminUser.password);
await apiService.getInstance().core.nodesApi.unlockNode(lockedFileNodeId);
await uploadActions.deleteFileOrFolder(lockedFileNodeId);
});
it('[C286604] Should be able to open Lock file option by clicking the lock image', async () => {
await contentServices.lockContent(pngFileModel.name);
@@ -158,28 +145,31 @@ describe('Lock File', () => {
await contentServices.checkUnlockedIcon(pngFileModel.name);
});
});
});
describe('Locked file without owner permissions', () => {
beforeEach(async () => {
await apiService.login(adminUser.username, adminUser.password);
const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, documentLibrary);
nodeId = pngUploadedFile.entry.id;
await loginPage.login(managerUser.email, managerUser.password);
await loginPage.login(managerUser.username, managerUser.password);
await navigationBarPage.openContentServicesFolder(documentLibrary);
});
afterEach(async () => {
await apiService.login(adminUser.email, adminUser.password);
await apiService.login(adminUser.username, adminUser.password);
try {
await apiService.getInstance().core.nodesApi.unlockNode(nodeId);
await uploadActions.deleteFileOrFolder(nodeId);
} catch (error) {
}
});
await navigationBarPage.clickLogoutButton();
});
it('[C286610] Should not be able to delete a locked file', async () => {
await contentServices.lockContent(pngFileModel.name);
@@ -193,7 +183,7 @@ describe('Lock File', () => {
} catch (error) {
await expect(error.status).toEqual(409);
}
});
});
it('[C286611] Should not be able to rename a locked file', async () => {
await contentServices.lockContent(pngFileModel.name);
@@ -208,7 +198,7 @@ describe('Lock File', () => {
} catch (error) {
await expect(error.status).toEqual(409);
}
});
});
it('[C286612] Should not be able to move a locked file', async () => {
await contentServices.lockContent(pngFileModel.name);
@@ -239,37 +229,28 @@ describe('Lock File', () => {
await expect(error.status).toEqual(409);
}
});
});
});
describe('Locked file with owner permissions', () => {
let pngFileToBeLocked;
beforeAll(async () => {
try {
pngFileToBeLocked = await uploadActions.uploadFile(pngFileToLock.location, pngFileToLock.name, documentLibrary);
lockedFileNodeId = pngFileToBeLocked.entry.id;
} catch (error) {
}
});
pngFileToBeLocked = await uploadActions.uploadFile(pngFileToLock.location, pngFileToLock.name, documentLibrary);
lockedFileNodeId = pngFileToBeLocked.entry.id;
});
beforeEach(async () => {
try {
const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, documentLibrary);
nodeId = pngUploadedFile.entry.id;
await loginPage.login(adminUser.email, adminUser.password);
await navigationBarPage.openContentServicesFolder(documentLibrary);
} catch (error) {
}
});
const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, documentLibrary);
nodeId = pngUploadedFile.entry.id;
await loginPage.login(adminUser.username, adminUser.password);
await navigationBarPage.openContentServicesFolder(documentLibrary);
});
afterEach(async () => {
await apiService.login(adminUser.email, adminUser.password);
try {
await uploadActions.deleteFileOrFolder(nodeId);
} catch (error) {
}
});
await apiService.login(adminUser.username, adminUser.password);
await uploadActions.deleteFileOrFolder(nodeId);
await navigationBarPage.clickLogoutButton();
});
it('[C286614] Owner of the locked file should be able to rename if Allow owner to modify is checked', async () => {
await contentServices.lockContent(pngFileModel.name);
@@ -284,7 +265,7 @@ describe('Lock File', () => {
await expect(response.entry.name).toEqual('My new name');
} catch (error) {
}
});
});
it('[C286615] Owner of the locked file should be able to update a new version if Allow owner to modify is checked', async () => {
await contentServices.lockContent(pngFileModel.name);
@@ -299,7 +280,7 @@ describe('Lock File', () => {
await expect(response.entry.modifiedAt.getTime()).toBeGreaterThan(response.entry.createdAt.getTime());
} catch (error) {
}
});
});
it('[C286616] Owner of the locked file should be able to move if Allow owner to modify is checked', async () => {
await contentServices.lockContent(pngFileModel.name);
@@ -317,7 +298,7 @@ describe('Lock File', () => {
await expect(movedFile.entry.parentId).not.toEqual(documentLibrary);
} catch (error) {
}
});
});
it('[C286617] Owner of the locked file should be able to delete if Allow owner to modify is checked', async () => {
await contentServices.lockContent(pngFileToLock.name);
@@ -330,5 +311,5 @@ describe('Lock File', () => {
await contentServices.deleteContent(pngFileToBeLocked.entry.name);
await contentServices.checkContentIsNotDisplayed(pngFileToBeLocked.entry.name);
});
});
});
});
@@ -68,11 +68,11 @@ describe('Aspect oriented config', () => {
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
const uploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-');
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
const aspects = await apiService.getInstance().core.nodesApi.getNode(uploadedFile.entry.id);
@@ -77,17 +77,17 @@ describe('permissions', () => {
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: consumerUser.email,
id: consumerUser.username,
role: CONSTANTS.CS_USER_ROLES.CONSUMER
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: collaboratorUser.email,
id: collaboratorUser.username,
role: CONSTANTS.CS_USER_ROLES.COLLABORATOR
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: contributorUser.email,
id: contributorUser.username,
role: CONSTANTS.CS_USER_ROLES.CONTRIBUTOR
});
@@ -95,12 +95,15 @@ describe('permissions', () => {
});
afterAll(async () => {
await navigationBarPage.clickLogoutButton();
await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true });
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C274692] Should not be possible edit metadata properties when the user is a consumer user', async () => {
await loginPage.login(consumerUser.email, consumerUser.password);
await loginPage.login(consumerUser.username, consumerUser.password);
await navigationBarPage.openContentServicesFolder(site.entry.guid);
@@ -112,7 +115,7 @@ describe('permissions', () => {
});
it('[C279971] Should be possible edit metadata properties when the user is a collaborator user', async () => {
await loginPage.login(collaboratorUser.email, collaboratorUser.password);
await loginPage.login(collaboratorUser.username, collaboratorUser.password);
await navigationBarPage.openContentServicesFolder(site.entry.guid);
@@ -132,7 +135,7 @@ describe('permissions', () => {
});
it('[C279972] Should be possible edit metadata properties when the user is a contributor user', async () => {
await loginPage.login(collaboratorUser.email, collaboratorUser.password);
await loginPage.login(collaboratorUser.username, collaboratorUser.password);
await navigationBarPage.openContentServicesFolder(site.entry.guid);
@@ -64,7 +64,7 @@ describe('CardView Component - properties', () => {
beforeAll(async () => {
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
const pdfUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-');
@@ -72,7 +72,7 @@ describe('CardView Component - properties', () => {
pngFileModel.update(pdfUploadedFile.entry);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
@@ -70,19 +70,15 @@ describe('Metadata component', () => {
beforeAll(async () => {
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-');
Object.assign(pngFileModel, pngUploadedFile.entry);
pngFileModel.update(pngUploadedFile.entry);
});
afterAll(async () => {
await navigationBarPage.clickLogoutButton();
});
describe('Viewer Metadata', () => {
beforeAll(async () => {
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
await LocalStorageUtil.setConfigField('content-metadata', JSON.stringify({
@@ -94,6 +90,10 @@ describe('Metadata component', () => {
}));
});
afterAll(async () => {
await navigationBarPage.clickLogoutButton();
});
beforeEach(async () => {
await viewerPage.viewFile(pngFileModel.name);
await viewerPage.checkFileIsLoaded();
@@ -226,19 +226,24 @@ describe('Metadata component', () => {
});
describe('Folder metadata', () => {
beforeAll(async () => {
await uploadActions.createFolder(folderName, '-my-');
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
});
afterAll(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C261157] Should be possible use the metadata component When the node is a Folder', async () => {
await contentServicesPage.metadataContent(folderName);
await expect(await metadataViewPage.getPropertyText('name')).toEqual(folderName);
await expect(await metadataViewPage.getPropertyText('createdByUser.displayName')).toEqual(acsUser.firstName + ' ' + acsUser.lastName);
await expect(await metadataViewPage.getPropertyText('createdByUser.displayName')).toEqual(`${acsUser.firstName} ${acsUser.lastName}`);
await BrowserActions.closeMenuAndDialogs();
});
@@ -279,7 +284,8 @@ describe('Metadata component', () => {
await metadataViewPage.clickSaveMetadata();
await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('check author example description');
await loginPage.login(acsUser.email, acsUser.password);
await navigationBarPage.clickLogoutButton();
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.navigateToContentServices();
await viewerPage.viewFile(pngFileModel.name);
@@ -81,7 +81,7 @@ describe('Permissions Component', () => {
const fileOwnerUser = new UserModel();
const filePermissionUser = new UserModel();
const duplicateUserPermissionMessage = 'One or more of the permissions you have set is already present : authority -> ' + filePermissionUser.email + ' / role -> Contributor';
const duplicateUserPermissionMessage = 'One or more of the permissions you have set is already present : authority -> ' + filePermissionUser.username + ' / role -> Contributor';
const roleConsumerFolderModel = new FolderModel({ name: 'roleConsumer' + StringUtil.generateRandomString() });
const roleCoordinatorFolderModel = new FolderModel({ name: 'roleCoordinator' + StringUtil.generateRandomString() });
const roleCollaboratorFolderModel = new FolderModel({ name: 'roleCollaborator' + StringUtil.generateRandomString() });
@@ -99,7 +99,7 @@ describe('Permissions Component', () => {
// to sync user in acs
await searchService.isUserSearchable(filePermissionUser);
await apiService.login(fileOwnerUser.email, fileOwnerUser.password);
await apiService.login(fileOwnerUser.username, fileOwnerUser.password);
roleConsumerFolder = await uploadActions.createFolder(roleConsumerFolderModel.name, '-my-');
roleCoordinatorFolder = await uploadActions.createFolder(roleCoordinatorFolderModel.name, '-my-');
roleContributorFolder = await uploadActions.createFolder(roleContributorFolderModel.name, '-my-');
@@ -112,11 +112,11 @@ describe('Permissions Component', () => {
await uploadActions.uploadFile(fileModel.location, 'RoleCollaborator' + fileModel.name, roleCollaboratorFolder.entry.id);
await uploadActions.uploadFile(fileModel.location, 'RoleEditor' + fileModel.name, roleEditorFolder.entry.id);
await permissionActions.addRoleForUser(filePermissionUser.email, 'Consumer', roleConsumerFolder);
await permissionActions.addRoleForUser(filePermissionUser.email, 'Collaborator', roleCollaboratorFolder);
await permissionActions.addRoleForUser(filePermissionUser.email, 'Coordinator', roleCoordinatorFolder);
await permissionActions.addRoleForUser(filePermissionUser.email, 'Contributor', roleContributorFolder);
await permissionActions.addRoleForUser(filePermissionUser.email, 'Editor', roleEditorFolder);
await permissionActions.addRoleForUser(filePermissionUser.username, 'Consumer', roleConsumerFolder);
await permissionActions.addRoleForUser(filePermissionUser.username, 'Collaborator', roleCollaboratorFolder);
await permissionActions.addRoleForUser(filePermissionUser.username, 'Coordinator', roleCoordinatorFolder);
await permissionActions.addRoleForUser(filePermissionUser.username, 'Contributor', roleContributorFolder);
await permissionActions.addRoleForUser(filePermissionUser.username, 'Editor', roleEditorFolder);
await browser.sleep(browser.params.testConfig.timeouts.index_search); // wait search index previous file/folder uploaded
});
@@ -124,10 +124,10 @@ describe('Permissions Component', () => {
describe('Inherit and assigning permissions', () => {
beforeEach(async () => {
await apiService.login(fileOwnerUser.email, fileOwnerUser.password);
await apiService.login(fileOwnerUser.username, fileOwnerUser.password);
file = await uploadActions.uploadFile(fileModel.location, fileModel.name, '-my-');
await loginPage.login(fileOwnerUser.email, fileOwnerUser.password);
await loginPage.login(fileOwnerUser.username, fileOwnerUser.password);
await contentServicesPage.goToDocumentList();
await contentServicesPage.contentList.dataTablePage().waitTillContentLoaded();
@@ -172,7 +172,7 @@ describe('Permissions Component', () => {
await permissionsPage.addPermissionsDialog.clickAddPermissionButton();
await permissionsPage.addPermissionsDialog.checkAddPermissionDialogIsDisplayed();
await permissionsPage.addPermissionsDialog.checkSearchUserInputIsDisplayed();
await permissionsPage.addPermissionsDialog.searchUserOrGroup(filePermissionUser.email);
await permissionsPage.addPermissionsDialog.searchUserOrGroup(filePermissionUser.username);
await permissionsPage.addPermissionsDialog.checkResultListIsDisplayed();
await permissionsPage.addPermissionsDialog.checkUserOrGroupIsDisplayed('EVERYONE');
await permissionsPage.addPermissionsDialog.searchUserOrGroup('somerandomtext');
@@ -184,9 +184,9 @@ describe('Permissions Component', () => {
describe('Changing and duplicate Permissions', () => {
beforeEach(async () => {
await apiService.login(fileOwnerUser.email, fileOwnerUser.password);
await apiService.login(fileOwnerUser.username, fileOwnerUser.password);
file = await uploadActions.uploadFile(fileModel.location, fileModel.name, '-my-');
await loginPage.login(fileOwnerUser.email, fileOwnerUser.password);
await loginPage.login(fileOwnerUser.username, fileOwnerUser.password);
await contentServicesPage.goToDocumentList();
await contentServicesPage.checkContentIsDisplayed(fileModel.name);
await contentServicesPage.checkSelectedSiteIsDisplayed('My files');
@@ -198,7 +198,7 @@ describe('Permissions Component', () => {
await permissionsPage.addPermissionsDialog.checkSearchUserInputIsDisplayed();
await permissionsPage.addPermissionsDialog.searchUserOrGroup(filePermissionUser.firstName);
await permissionsPage.addPermissionsDialog.clickUserOrGroup(filePermissionUser.firstName);
await permissionsPage.addPermissionsDialog.checkUserIsAdded(filePermissionUser.email);
await permissionsPage.addPermissionsDialog.checkUserIsAdded(filePermissionUser.username);
});
afterEach(async () => {
@@ -207,8 +207,8 @@ describe('Permissions Component', () => {
});
it('[C274691] Should be able to add a new User with permission to the file and also change locally set permissions', async () => {
await expect(await permissionsPage.addPermissionsDialog.getRoleCellValue(filePermissionUser.email)).toEqual('Contributor');
await permissionsPage.addPermissionsDialog.clickRoleDropdownByUserOrGroupName(filePermissionUser.email);
await expect(await permissionsPage.addPermissionsDialog.getRoleCellValue(filePermissionUser.username)).toEqual('Contributor');
await permissionsPage.addPermissionsDialog.clickRoleDropdownByUserOrGroupName(filePermissionUser.username);
const roleDropdownOptions = permissionsPage.addPermissionsDialog.getRoleDropdownOptions();
await expect(await roleDropdownOptions.count()).toBe(5);
@@ -219,21 +219,21 @@ describe('Permissions Component', () => {
await expect(await BrowserActions.getText(roleDropdownOptions.get(4))).toBe('Consumer');
await BrowserActions.closeMenuAndDialogs();
await permissionsPage.changePermission(filePermissionUser.email, 'Collaborator');
await expect(await permissionsPage.addPermissionsDialog.getRoleCellValue(filePermissionUser.email)).toEqual('Collaborator');
await permissionsPage.changePermission(filePermissionUser.username, 'Collaborator');
await expect(await permissionsPage.addPermissionsDialog.getRoleCellValue(filePermissionUser.username)).toEqual('Collaborator');
await permissionsPage.changePermission(filePermissionUser.email, 'Coordinator');
await expect(await permissionsPage.addPermissionsDialog.getRoleCellValue(filePermissionUser.email)).toEqual('Coordinator');
await permissionsPage.changePermission(filePermissionUser.username, 'Coordinator');
await expect(await permissionsPage.addPermissionsDialog.getRoleCellValue(filePermissionUser.username)).toEqual('Coordinator');
await permissionsPage.changePermission(filePermissionUser.email, 'Editor');
await expect(await permissionsPage.addPermissionsDialog.getRoleCellValue(filePermissionUser.email)).toEqual('Editor');
await permissionsPage.changePermission(filePermissionUser.username, 'Editor');
await expect(await permissionsPage.addPermissionsDialog.getRoleCellValue(filePermissionUser.username)).toEqual('Editor');
await permissionsPage.changePermission(filePermissionUser.email, 'Consumer');
await expect(await permissionsPage.addPermissionsDialog.getRoleCellValue(filePermissionUser.email)).toEqual('Consumer');
await permissionsPage.changePermission(filePermissionUser.username, 'Consumer');
await expect(await permissionsPage.addPermissionsDialog.getRoleCellValue(filePermissionUser.username)).toEqual('Consumer');
});
it('[C276980] Should not be able to duplicate User or Group to the locally set permissions', async () => {
await expect(await permissionsPage.addPermissionsDialog.getRoleCellValue(filePermissionUser.email)).toEqual('Contributor');
await expect(await permissionsPage.addPermissionsDialog.getRoleCellValue(filePermissionUser.username)).toEqual('Contributor');
await permissionsPage.addPermissionsDialog.clickAddPermissionButton();
await permissionsPage.addPermissionsDialog.checkAddPermissionDialogIsDisplayed();
await permissionsPage.addPermissionsDialog.checkSearchUserInputIsDisplayed();
@@ -245,9 +245,9 @@ describe('Permissions Component', () => {
});
it('[C276982] Should be able to remove User or Group from the locally set permissions', async () => {
await expect(await permissionsPage.addPermissionsDialog.getRoleCellValue(filePermissionUser.email)).toEqual('Contributor');
await expect(await permissionsPage.addPermissionsDialog.getRoleCellValue(filePermissionUser.username)).toEqual('Contributor');
await permissionsPage.addPermissionsDialog.clickDeletePermissionButton();
await permissionsPage.addPermissionsDialog.checkUserIsDeleted(filePermissionUser.email);
await permissionsPage.addPermissionsDialog.checkUserIsDeleted(filePermissionUser.username);
});
});
@@ -258,7 +258,7 @@ describe('Permissions Component', () => {
});
it('[C276993] Role Consumer', async () => {
await loginPage.login(filePermissionUser.email, filePermissionUser.password);
await loginPage.login(filePermissionUser.username, filePermissionUser.password);
await navigationBarPage.openContentServicesFolder(roleConsumerFolder.entry.id);
await contentServicesPage.checkContentIsDisplayed('RoleConsumer' + fileModel.name);
await contentList.doubleClickRow('RoleConsumer' + fileModel.name);
@@ -278,7 +278,7 @@ describe('Permissions Component', () => {
});
it('[C276996] Role Contributor', async () => {
await loginPage.login(filePermissionUser.email, filePermissionUser.password);
await loginPage.login(filePermissionUser.username, filePermissionUser.password);
await navigationBarPage.openContentServicesFolder(roleContributorFolder.entry.id);
await contentServicesPage.checkContentIsDisplayed('RoleContributor' + fileModel.name);
await contentList.doubleClickRow('RoleContributor' + fileModel.name);
@@ -298,7 +298,7 @@ describe('Permissions Component', () => {
});
it('[C277000] Role Editor', async () => {
await loginPage.login(filePermissionUser.email, filePermissionUser.password);
await loginPage.login(filePermissionUser.username, filePermissionUser.password);
await navigationBarPage.openContentServicesFolder(roleEditorFolder.entry.id);
await contentServicesPage.checkContentIsDisplayed('RoleEditor' + fileModel.name);
await contentList.doubleClickRow('RoleEditor' + fileModel.name);
@@ -320,7 +320,7 @@ describe('Permissions Component', () => {
});
it('[C277003] Role Collaborator', async () => {
await loginPage.login(filePermissionUser.email, filePermissionUser.password);
await loginPage.login(filePermissionUser.username, filePermissionUser.password);
await navigationBarPage.openContentServicesFolder(roleCollaboratorFolder.entry.id);
await contentServicesPage.checkContentIsDisplayed('RoleCollaborator' + fileModel.name);
await contentList.doubleClickRow('RoleCollaborator' + fileModel.name);
@@ -345,7 +345,7 @@ describe('Permissions Component', () => {
});
it('[C277004] Role Coordinator', async () => {
await loginPage.login(filePermissionUser.email, filePermissionUser.password);
await loginPage.login(filePermissionUser.username, filePermissionUser.password);
await navigationBarPage.openContentServicesFolder(roleCoordinatorFolder.entry.id);
await contentServicesPage.checkContentIsDisplayed('RoleCoordinator' + fileModel.name);
await contentList.doubleClickRow('RoleCoordinator' + fileModel.name);
@@ -370,7 +370,7 @@ describe('Permissions Component', () => {
});
it('[C279881] No Permission User', async () => {
await loginPage.login(filePermissionUser.email, filePermissionUser.password);
await loginPage.login(filePermissionUser.username, filePermissionUser.password);
await navigationBarPage.openContentServicesFolder(roleConsumerFolder.entry.id);
await contentServicesPage.checkContentIsDisplayed('RoleConsumer' + fileModel.name);
await contentServicesPage.checkSelectedSiteIsDisplayed('My files');
@@ -93,7 +93,7 @@ describe('Permissions Component', () => {
await usersActions.createUser(contributorUser);
await usersActions.createUser(collaboratorUser);
await usersActions.createUser(managerUser);
await apiService.login(folderOwnerUser.email, folderOwnerUser.password);
await apiService.login(folderOwnerUser.username, folderOwnerUser.password);
await browser.sleep(15000);
@@ -111,27 +111,27 @@ describe('Permissions Component', () => {
privateSite = await apiService.getInstance().core.sitesApi.createSite(privateSiteBody);
await apiService.getInstance().core.sitesApi.addSiteMember(publicSite.entry.id, {
id: siteConsumerUser.email,
id: siteConsumerUser.username,
role: CONSTANTS.CS_USER_ROLES.CONSUMER
});
await apiService.getInstance().core.sitesApi.addSiteMember(publicSite.entry.id, {
id: collaboratorUser.email,
id: collaboratorUser.username,
role: CONSTANTS.CS_USER_ROLES.COLLABORATOR
});
await apiService.getInstance().core.sitesApi.addSiteMember(publicSite.entry.id, {
id: contributorUser.email,
id: contributorUser.username,
role: CONSTANTS.CS_USER_ROLES.CONTRIBUTOR
});
await apiService.getInstance().core.sitesApi.addSiteMember(publicSite.entry.id, {
id: managerUser.email,
id: managerUser.username,
role: CONSTANTS.CS_USER_ROLES.MANAGER
});
await apiService.getInstance().core.sitesApi.addSiteMember(privateSite.entry.id, {
id: managerUser.email,
id: managerUser.username,
role: CONSTANTS.CS_USER_ROLES.MANAGER
});
@@ -142,7 +142,7 @@ describe('Permissions Component', () => {
{
permissions: {
locallySet: [{
authorityId: managerUser.email,
authorityId: managerUser.username,
name: 'SiteConsumer',
accessStatus: 'ALLOWED'
}]
@@ -153,20 +153,22 @@ describe('Permissions Component', () => {
});
afterAll(async () => {
await navigationBarPage.clickLogoutButton();
await apiService.loginWithProfile('admin');
await apiService.getInstance().core.sitesApi.deleteSite(publicSite.entry.id, { permanent: true });
await apiService.getInstance().core.sitesApi.deleteSite(privateSite.entry.id, { permanent: true });
});
describe('Role Site Dropdown', () => {
beforeAll(async () => {
await loginPage.login(folderOwnerUser.email, folderOwnerUser.password);
await loginPage.login(folderOwnerUser.username, folderOwnerUser.password);
await BrowserActions.getUrl(browser.baseUrl + '/files/' + publicSite.entry.guid);
await contentServicesPage.contentList.dataTablePage().waitTillContentLoaded();
});
afterAll(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C277002] Should display the Role Site dropdown', async () => {
@@ -185,14 +187,14 @@ describe('Permissions Component', () => {
await permissionsPage.addPermissionsDialog.checkAddPermissionDialogIsDisplayed();
await permissionsPage.addPermissionsDialog.checkSearchUserInputIsDisplayed();
await permissionsPage.addPermissionsDialog.searchUserOrGroup(consumerUser.email);
await permissionsPage.addPermissionsDialog.searchUserOrGroup(consumerUser.username);
await permissionsPage.addPermissionsDialog.clickUserOrGroup(consumerUser.firstName);
await permissionsPage.addPermissionsDialog.checkUserIsAdded(consumerUser.email);
await permissionsPage.addPermissionsDialog.checkUserIsAdded(consumerUser.username);
await expect(await permissionsPage.addPermissionsDialog.getRoleCellValue(consumerUser.email)).toEqual('SiteCollaborator');
await expect(await permissionsPage.addPermissionsDialog.getRoleCellValue(consumerUser.username)).toEqual('SiteCollaborator');
await permissionsPage.addPermissionsDialog.clickRoleDropdownByUserOrGroupName(consumerUser.email);
await permissionsPage.addPermissionsDialog.clickRoleDropdownByUserOrGroupName(consumerUser.username);
const roleDropdownOptions = permissionsPage.addPermissionsDialog.getRoleDropdownOptions();
@@ -205,8 +207,13 @@ describe('Permissions Component', () => {
});
describe('Roles: SiteConsumer, SiteCollaborator, SiteContributor, SiteManager', () => {
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C276994] Role SiteConsumer', async () => {
await loginPage.login(siteConsumerUser.email, siteConsumerUser.password);
await loginPage.login(siteConsumerUser.username, siteConsumerUser.password);
await navigationBarPage.openContentServicesFolder(siteFolder.entry.id);
await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name);
@@ -234,7 +241,7 @@ describe('Permissions Component', () => {
});
it('[C276997] Role SiteContributor', async () => {
await loginPage.login(contributorUser.email, contributorUser.password);
await loginPage.login(contributorUser.username, contributorUser.password);
await navigationBarPage.openContentServicesFolder(siteFolder.entry.id);
await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name);
@@ -265,7 +272,7 @@ describe('Permissions Component', () => {
});
it('[C277005] Role SiteCollaborator', async () => {
await loginPage.login(collaboratorUser.email, collaboratorUser.password);
await loginPage.login(collaboratorUser.username, collaboratorUser.password);
await navigationBarPage.openContentServicesFolder(siteFolder.entry.id);
await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name);
@@ -304,7 +311,7 @@ describe('Permissions Component', () => {
});
it('[C277006] Role SiteManager', async () => {
await loginPage.login(managerUser.email, managerUser.password);
await loginPage.login(managerUser.username, managerUser.password);
await navigationBarPage.openContentServicesFolder(siteFolder.entry.id);
await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name);
@@ -342,8 +349,13 @@ describe('Permissions Component', () => {
});
describe('Roles: Private site and Manager User', () => {
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C277196] should a user with Manager permissions be able to upload a new version for the created file', async () => {
await loginPage.login(managerUser.email, managerUser.password);
await loginPage.login(managerUser.username, managerUser.password);
await navigationBarPage.openContentServicesFolder(privateSite.entry.guid);
@@ -66,7 +66,7 @@ describe('Share file', () => {
};
const apiCall = async () => {
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
return apiService.getInstance().core.sharedlinksApi.findSharedLinks();
};
@@ -76,7 +76,7 @@ describe('Share file', () => {
beforeAll(async () => {
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-');
@@ -90,12 +90,16 @@ describe('Share file', () => {
describe('Shared link dialog', () => {
beforeAll(async () => {
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.navigateToContentServices();
await contentListPage.selectRow(pngFileModel.name);
await BrowserActions.closeMenuAndDialogs();
});
afterAll(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C286549] Should check automatically toggle button in Share dialog', async () => {
await contentServicesPage.clickShareButton();
await shareDialog.checkDialogIsDisplayed();
@@ -164,11 +168,15 @@ describe('Share file', () => {
describe('Shared link preview', () => {
beforeEach(async () => {
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C286565] Should open file when logged user access shared link', async () => {
await contentListPage.selectRow(pngFileModel.name);
await contentServicesPage.clickShareButton();
@@ -68,11 +68,6 @@ describe('Unshare file', () => {
id: siteName
};
const memberBody = {
id: acsUser.email,
role: CONSTANTS.CS_USER_ROLES.CONSUMER
};
nodeBody = {
name: StringUtil.generateRandomString(5),
nodeType: 'cm:content',
@@ -85,26 +80,29 @@ describe('Unshare file', () => {
const docLibId = (await apiService.getInstance().core.sitesApi.getSiteContainers(siteName)).list.entries[0].entry.id;
const testFile1Id = (await apiService.getInstance().core.nodesApi.addNode(docLibId, nodeBody)).entry.id;
await apiService.getInstance().core.sitesApi.addSiteMember(siteName, memberBody);
await apiService.getInstance().core.sitesApi.addSiteMember(siteName, {
id: acsUser.username,
role: CONSTANTS.CS_USER_ROLES.CONSUMER
});
await apiService.getInstance().core.nodesApi.updateNode(testFile1Id, {
permissions: {
isInheritanceEnabled: false,
locallySet: [
{
authorityId: acsUser.email,
authorityId: acsUser.username,
name: CONSTANTS.CS_USER_ROLES.CONSUMER
}
]
}
});
await apiService.getInstance().core.sharedlinksApi.addSharedLink({ nodeId: testFile1Id });
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-');
nodeId = pngUploadedFile.entry.id;
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navBar.navigateToContentServices();
await contentServicesPage.waitForTableBody();
});
@@ -114,10 +112,6 @@ describe('Unshare file', () => {
await apiService.getInstance().core.sitesApi.deleteSite(testSite.entry.id, { permanent: true });
});
afterEach(async () => {
await browser.refresh();
});
describe('with permission', () => {
afterAll(async () => {
await apiService.loginWithProfile('admin');
@@ -128,6 +122,7 @@ describe('Unshare file', () => {
await contentListPage.selectRow(pngFileModel.name);
await contentServicesPage.clickShareButton();
await shareDialog.checkDialogIsDisplayed();
await browser.sleep(2000);
await shareDialog.clickUnShareFile();
await shareDialog.confirmationDialogIsDisplayed();
});
@@ -156,17 +151,20 @@ describe('Unshare file', () => {
await contentListPage.selectRow(pngFileModel.name);
await contentServicesPage.clickShareButton();
await shareDialog.checkDialogIsDisplayed();
await browser.sleep(2000);
const sharedLink = await shareDialog.getShareLink();
await shareDialog.clickUnShareFile();
await shareDialog.confirmationDialogIsDisplayed();
await shareDialog.clickConfirmationDialogRemoveButton();
await shareDialog.dialogIsClosed();
await BrowserActions.getUrl(sharedLink.replace(browser.params.testConfig.appConfig.ecmHost, browser.baseUrl));
await BrowserActions.getUrl(sharedLink.replace(browser.params.testConfig.appConfig.ecmHost, `${browser.baseUrl}`));
await errorPage.checkErrorCode();
});
});
describe('without permission', () => {
afterAll(async () => {
await apiService.loginWithProfile('admin');
await apiService.getInstance().core.sitesApi.deleteSite(siteName, { permanent: true });
@@ -177,6 +175,7 @@ describe('Unshare file', () => {
await contentServicesPage.openFolder('documentLibrary');
await contentListPage.selectRow(nodeBody.name);
await contentServicesPage.clickShareButton();
await shareDialog.checkDialogIsDisplayed();
await shareDialog.shareToggleButtonIsChecked();
await shareDialog.clickUnShareFile();
@@ -184,6 +183,7 @@ describe('Unshare file', () => {
await shareDialog.clickConfirmationDialogRemoveButton();
await shareDialog.checkDialogIsDisplayed();
await shareDialog.shareToggleButtonIsChecked();
await notificationHistoryPage.checkNotifyContains(`You don't have permission to unshare this file`);
});
});
@@ -63,7 +63,7 @@ describe('Social component', () => {
await usersActions.createUser(componentVisitor);
await usersActions.createUser(secondComponentVisitor);
await apiService.login(componentOwner.email, componentOwner.password);
await apiService.login(componentOwner.username, componentOwner.password);
emptyFile = await uploadActions.uploadFile(emptyFileModel.location, emptyFileModel.name, '-my-');
@@ -72,11 +72,11 @@ describe('Social component', () => {
{
permissions: {
locallySet: [{
authorityId: componentVisitor.email,
authorityId: componentVisitor.username,
name: 'Consumer',
accessStatus: 'ALLOWED'
}, {
authorityId: secondComponentVisitor.email,
authorityId: secondComponentVisitor.username,
name: 'Consumer',
accessStatus: 'ALLOWED'
}]
@@ -85,52 +85,60 @@ describe('Social component', () => {
});
afterAll(async () => {
await navigationBarPage.clickLogoutButton();
await apiService.loginWithProfile('admin');
await uploadActions.deleteFileOrFolder(emptyFile.entry.email);
});
describe('User interaction on their own components', () => {
beforeEach(async () => {
await loginPage.login(componentOwner.email, componentOwner.password);
await loginPage.login(componentOwner.username, componentOwner.password);
await navigationBarPage.clickSocialButton();
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C203006] Should be able to like and unlike their components but not rate them,', async () => {
await socialPage.writeCustomNodeId(emptyFile.entry.id);
await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id);
await likePage.clickLike();
await expect(await likePage.getLikeCounter()).toBe('1');
await likePage.checkLikeCounter(1);
await likePage.removeHoverFromLikeButton();
await expect(await likePage.getLikedIconColor()).toBe(blueLikeColor);
await ratePage.rateComponent(4);
await expect(await ratePage.getRatingCounter()).toBe('0');
await ratePage.checkRatingCounter(0);
await expect(await ratePage.isNotStarRated(4));
await expect(await ratePage.getUnratedStarColor(4)).toBe(averageStarColor);
await likePage.clickUnlike();
await expect(await likePage.getLikeCounter()).toBe('0');
await likePage.checkLikeCounter(0);
await likePage.removeHoverFromLikeButton();
await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor);
});
});
describe('User interaction on components that belong to other users', () => {
beforeEach(async () => {
await loginPage.login(componentVisitor.email, componentVisitor.password);
await loginPage.login(componentVisitor.username, componentVisitor.password);
await navigationBarPage.clickSocialButton();
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C260324] Should be able to like and unlike a component', async () => {
await socialPage.writeCustomNodeId(emptyFile.entry.id);
await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id);
await expect(await likePage.getLikeCounter()).toEqual('0');
await likePage.checkLikeCounter(0);
await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor);
await likePage.clickLike();
await expect(await likePage.getLikeCounter()).toBe('1');
await likePage.checkLikeCounter(1);
await likePage.removeHoverFromLikeButton();
await expect(await likePage.getLikedIconColor()).toBe(blueLikeColor);
await likePage.clickUnlike();
await expect(await likePage.getLikeCounter()).toBe('0');
await likePage.checkLikeCounter(0);
await likePage.removeHoverFromLikeButton();
await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor);
});
@@ -138,42 +146,49 @@ describe('Social component', () => {
it('[C310198] Should be able to rate and unRate a component', async () => {
await socialPage.writeCustomNodeId(emptyFile.entry.id);
await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id);
await expect(await ratePage.getRatingCounter()).toBe('0');
await ratePage.checkRatingCounter(0);
await ratePage.rateComponent(4);
await expect(await ratePage.getRatingCounter()).toBe('1');
await ratePage.checkRatingCounter(1);
await expect(await ratePage.isStarRated(4));
await expect(await ratePage.getRatedStarColor(4)).toBe(yellowRatedStarColor);
await ratePage.removeRating(4);
await expect(await ratePage.getRatingCounter()).toBe('0');
await ratePage.checkRatingCounter(0);
await expect(await ratePage.isNotStarRated(4));
});
});
describe('Multiple Users interaction', () => {
beforeEach(async () => {
await loginPage.login(componentVisitor.email, componentVisitor.password);
await loginPage.login(componentVisitor.username, componentVisitor.password);
await navigationBarPage.clickSocialButton();
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C310197] Should be able to like, unLike, display total likes', async () => {
await socialPage.writeCustomNodeId(emptyFile.entry.id);
await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id);
await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor);
await likePage.clickLike();
await expect(await likePage.getLikeCounter()).toBe('1');
await likePage.checkLikeCounter(1);
await likePage.removeHoverFromLikeButton();
await expect(await likePage.getLikedIconColor()).toBe(blueLikeColor);
await loginPage.login(secondComponentVisitor.email, secondComponentVisitor.password);
await navigationBarPage.clickLogoutButton();
await loginPage.login(secondComponentVisitor.username, secondComponentVisitor.password);
await navigationBarPage.clickSocialButton();
await socialPage.writeCustomNodeId(emptyFile.entry.id);
await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor);
await likePage.clickLike();
await expect(await likePage.getLikeCounter()).toEqual('2');
await likePage.checkLikeCounter(2);
await likePage.removeHoverFromLikeButton();
await expect(await likePage.getLikedIconColor()).toBe(blueLikeColor);
await likePage.clickUnlike();
await expect(await likePage.getLikeCounter()).toEqual('1');
await likePage.checkLikeCounter(1);
await likePage.removeHoverFromLikeButton();
await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor);
});
@@ -182,21 +197,22 @@ describe('Social component', () => {
await socialPage.writeCustomNodeId(emptyFile.entry.id);
await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id);
await ratePage.rateComponent(4);
await expect(await ratePage.getRatingCounter()).toEqual('1');
await ratePage.checkRatingCounter(1);
await expect(await ratePage.isStarRated(4));
await expect(await ratePage.getRatedStarColor(4)).toBe(yellowRatedStarColor);
await loginPage.login(secondComponentVisitor.email, secondComponentVisitor.password);
await navigationBarPage.clickLogoutButton();
await loginPage.login(secondComponentVisitor.username, secondComponentVisitor.password);
await navigationBarPage.clickSocialButton();
await socialPage.writeCustomNodeId(emptyFile.entry.id);
await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id);
await expect(await ratePage.getRatingCounter()).toEqual('1');
await ratePage.checkRatingCounter(1);
await expect(await ratePage.getAverageStarColor(4)).toBe(averageStarColor);
await ratePage.rateComponent(0);
await expect(await ratePage.getRatingCounter()).toEqual('2');
await ratePage.checkRatingCounter(2);
await expect(await ratePage.isStarRated(2));
await ratePage.removeRating(0);
await expect(await ratePage.getRatingCounter()).toEqual('1');
await ratePage.checkRatingCounter(1);
await expect(await ratePage.getAverageStarColor(4)).toBe(averageStarColor);
});
});
@@ -64,7 +64,7 @@ describe('SSO in ADF using ACS and AIS, Download Directive, Viewer, DocumentList
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
folder = await uploadActions.createFolder(folderName, '-my-');
@@ -75,7 +75,7 @@ describe('SSO in ADF using ACS and AIS, Download Directive, Viewer, DocumentList
browser.params.testConfig.appConfig.oauth2.host,
browser.params.testConfig.appConfig.identityHost, false, true, browser.params.testConfig.appConfig.oauth2.clientId);
await loginSsoPage.loginSSOIdentityService(acsUser.email, acsUser.password);
await loginSsoPage.loginSSOIdentityService(acsUser.username, acsUser.password);
await navigationBarPage.navigateToContentServices();
await contentServicesPage.checkAcsContainer();
+2 -2
View File
@@ -54,7 +54,7 @@ describe('Tag component', () => {
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
pdfUploadedFile = await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, '-my-');
@@ -68,7 +68,7 @@ describe('Tag component', () => {
await apiService.getInstance().core.tagsApi.addTag(nodeId, tags);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.clickTagButton();
});
@@ -64,7 +64,7 @@ describe('Trashcan - Pagination', () => {
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
const folderUploadedModel = await uploadActions.createFolder(newFolderModel.name, '-my-');
const emptyFiles: any = await uploadActions.createEmptyFiles(fileNames, folderUploadedModel.entry.id);
@@ -74,7 +74,7 @@ describe('Trashcan - Pagination', () => {
});
}
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.clickTrashcanButton();
await trashcanPage.getDocumentList().dataTablePage().waitTillContentLoaded();
});
@@ -46,7 +46,7 @@ describe('Tree View Component', () => {
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
treeFolder = await apiService.getInstance().nodes.addNode(nodeNames.parentFolder, {
name: nodeNames.folder,
@@ -65,7 +65,7 @@ describe('Tree View Component', () => {
nodeType: 'cm:content'
});
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.clickTreeViewButton();
});
@@ -52,9 +52,9 @@ describe('Upload component', async () => {
beforeAll(async () => {
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
});
@@ -78,9 +78,9 @@ describe('Upload component - Excluded Files', () => {
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
});
@@ -70,8 +70,8 @@ describe('Upload component', () => {
beforeAll(async () => {
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
});
@@ -74,8 +74,8 @@ describe('Upload component', () => {
beforeAll(async () => {
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
const pdfUploadedFile = await uploadActions.uploadFile(firstPdfFileModel.location, firstPdfFileModel.name, '-my-');
Object.assign(firstPdfFileModel, pdfUploadedFile.entry);
});
@@ -55,11 +55,10 @@ describe('Upload - User permission', () => {
acsUser = await usersActions.createUser(acsUser);
acsUserTwo = await usersActions.createUser(acsUserTwo);
await loginPage.login(acsUser.username, acsUser.password);
});
beforeEach(async () => {
await loginPage.login(acsUser.email, acsUser.password);
consumerSite = await apiService.getInstance().core.sitesApi.createSite({
title: StringUtil.generateRandomString(),
visibility: 'PUBLIC'
@@ -71,12 +70,12 @@ describe('Upload - User permission', () => {
});
await apiService.getInstance().core.sitesApi.addSiteMember(consumerSite.entry.id, {
id: acsUser.email,
id: acsUser.username,
role: CONSTANTS.CS_USER_ROLES.CONSUMER
});
await apiService.getInstance().core.sitesApi.addSiteMember(managerSite.entry.id, {
id: acsUser.email,
id: acsUser.username,
role: CONSTANTS.CS_USER_ROLES.MANAGER
});
});
@@ -150,8 +149,8 @@ describe('Upload - User permission', () => {
await contentServicesPage.checkContentIsDisplayed(emptyFile.name);
await navigationBarPage.clickLoginButton();
await loginPage.login(acsUserTwo.email, acsUserTwo.password);
await navigationBarPage.clickLogoutButton();
await loginPage.login(acsUserTwo.username, acsUserTwo.password);
await contentServicesPage.goToDocumentList();
await contentServicesPage.checkContentIsNotDisplayed(emptyFile.name);
@@ -160,8 +159,8 @@ describe('Upload - User permission', () => {
await contentServicesPage.checkContentIsDisplayed(pngFile.name);
await navigationBarPage.clickLoginButton();
await loginPage.login(acsUser.email, acsUser.password);
await navigationBarPage.clickLogoutButton();
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
await contentServicesPage.checkContentIsNotDisplayed(pngFile.name);
@@ -66,11 +66,11 @@ describe('Version component actions', () => {
uploadActions = new UploadActions(apiService);
await apiService.loginWithProfile('admin');
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
const txtUploadedFile = await uploadActions.uploadFile(txtFileModel.location, txtFileModel.name, '-my-');
Object.assign(txtFileModel, txtUploadedFile.entry);
txtFileModel.update(txtUploadedFile.entry);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
});
@@ -85,27 +85,27 @@ describe('Version component permissions', () => {
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: consumerUser.email,
id: consumerUser.username,
role: CONSTANTS.CS_USER_ROLES.CONSUMER
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: collaboratorUser.email,
id: collaboratorUser.username,
role: CONSTANTS.CS_USER_ROLES.COLLABORATOR
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: contributorUser.email,
id: contributorUser.username,
role: CONSTANTS.CS_USER_ROLES.CONTRIBUTOR
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: managerUser.email,
id: managerUser.username,
role: CONSTANTS.CS_USER_ROLES.MANAGER
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: fileCreatorUser.email,
id: fileCreatorUser.username,
role: CONSTANTS.CS_USER_ROLES.MANAGER
});
@@ -117,7 +117,7 @@ describe('Version component permissions', () => {
lifetime: 'PERSISTENT'
});
await apiService.login(fileCreatorUser.email, fileCreatorUser.password);
await apiService.login(fileCreatorUser.username, fileCreatorUser.password);
await uploadActions.uploadFile(differentCreatorFile.location, differentCreatorFile.name, site.entry.guid);
});
@@ -134,12 +134,12 @@ describe('Version component permissions', () => {
});
beforeAll(async () => {
await apiService.login(managerUser.email, managerUser.password);
await apiService.login(managerUser.username, managerUser.password);
const sameCreatorFileUploaded = await uploadActions.uploadFile(sameCreatorFile.location, sameCreatorFile.name, site.entry.guid);
Object.assign(sameCreatorFile, sameCreatorFileUploaded.entry);
await loginPage.login(managerUser.email, managerUser.password);
await loginPage.login(managerUser.username, managerUser.password);
await navigationBarPage.openContentServicesFolder(site.entry.guid);
});
@@ -178,7 +178,7 @@ describe('Version component permissions', () => {
describe('Consumer', () => {
beforeAll(async () => {
await loginPage.login(consumerUser.email, consumerUser.password);
await loginPage.login(consumerUser.username, consumerUser.password);
await navigationBarPage.openContentServicesFolder(site.entry.guid);
});
@@ -206,12 +206,12 @@ describe('Version component permissions', () => {
});
beforeAll(async () => {
await apiService.login(contributorUser.email, contributorUser.password);
await apiService.login(contributorUser.username, contributorUser.password);
const sameCreatorFileUploaded = await uploadActions.uploadFile(sameCreatorFile.location, sameCreatorFile.name, site.entry.guid);
Object.assign(sameCreatorFile, sameCreatorFileUploaded.entry);
await loginPage.login(contributorUser.email, contributorUser.password);
await loginPage.login(contributorUser.username, contributorUser.password);
await navigationBarPage.openContentServicesFolder(site.entry.guid);
});
@@ -261,12 +261,12 @@ describe('Version component permissions', () => {
});
beforeAll(async () => {
await apiService.login(collaboratorUser.email, collaboratorUser.password);
await apiService.login(collaboratorUser.username, collaboratorUser.password);
const sameCreatorFileUploaded = await uploadActions.uploadFile(sameCreatorFile.location, sameCreatorFile.name, site.entry.guid);
Object.assign(sameCreatorFile, sameCreatorFileUploaded.entry);
await loginPage.login(collaboratorUser.email, collaboratorUser.password);
await loginPage.login(collaboratorUser.username, collaboratorUser.password);
await navigationBarPage.openContentServicesFolder(site.entry.guid);
});
@@ -60,7 +60,7 @@ describe('Version Properties', () => {
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
const txtUploadedFile = await uploadActions.uploadFile(txtFileModel.location, txtFileModel.name, '-my-');
@@ -68,7 +68,7 @@ describe('Version Properties', () => {
txtFileModel.update(txtUploadedFile.entry);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
@@ -75,14 +75,14 @@ describe('Version component', () => {
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
txtUploadedFile = await uploadActions.uploadFile(txtFileModel.location, txtFileModel.name, '-my-');
Object.assign(txtFileModel, txtUploadedFile.entry);
txtFileModel.update(txtUploadedFile.entry);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.navigateToContentServices();
await contentServicesPage.waitForTableBody();
@@ -35,7 +35,7 @@ describe('Datatable component - selection', () => {
await usersActions.createUser(acsUser);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.navigateToDatatable();
});
@@ -50,7 +50,7 @@ describe('Datatable component', () => {
await usersActions.createUser(acsUser);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
});
afterAll(async () => {
+6 -14
View File
@@ -17,29 +17,21 @@
import { ApiService, BrowserActions, ErrorPage, LoginPage, UserModel, UsersActions } from '@alfresco/adf-testing';
import { browser } from 'protractor';
import { NavigationBarPage } from '../core/pages/navigation-bar.page';
import { ContentServicesPage } from './pages/content-services.page';
describe('Error Component', () => {
const acsUser = new UserModel();
const loginPage = new LoginPage();
const errorPage = new ErrorPage();
const navigationBarPage = new NavigationBarPage();
const apiService = new ApiService();
const usersActions = new UsersActions(apiService);
const contentServicesPage = new ContentServicesPage();
const acsUser = new UserModel();
const errorPage = new ErrorPage();
const loginPage = new LoginPage();
beforeAll(async () => {
await apiService.loginWithProfile('admin');
await usersActions.createUser(acsUser);
await loginPage.login(acsUser.email, acsUser.password);
await contentServicesPage.goToDocumentList();
});
afterAll(async () => {
await navigationBarPage.clickLogoutButton();
await loginPage.login(acsUser.username, acsUser.password);
});
it('[C277302] Should display the error 403 when access to unauthorized page - My Change', async () => {
+1 -1
View File
@@ -47,7 +47,7 @@ describe('Header Component', () => {
await apiService.loginWithProfile('admin');
await usersActions.createUser(acsUser);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
});
beforeEach(async () => {
+1 -1
View File
@@ -32,7 +32,7 @@ describe('Universal Icon component', () => {
beforeAll(async () => {
await apiService.loginWithProfile('admin');
await usersActions.createUser(acsUser);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
});
afterAll(async () => {
+2 -2
View File
@@ -62,12 +62,12 @@ describe('Enable infinite scrolling', () => {
await usersActions.createUser(acsUser);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
fileNames = StringUtil.generateFilesNames(1, nrOfFiles, files.base, files.extension);
deleteFileNames = StringUtil.generateFilesNames(1, nrOfDeletedFiles, files.base, files.extension);
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
const folderUploadedModel = await uploadActions.createFolder(folderModel.name, '-my-');
emptyFolderModel = await uploadActions.createFolder('emptyFolder', '-my-');
+11 -8
View File
@@ -59,24 +59,27 @@ describe('Login component', () => {
await usersActions.createUser(userA);
await usersActions.createUser(userB);
});
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C276746] Should display the right information in user-info when a different users logs in', async () => {
await LocalStorageUtil.setStorageItem('providers', 'ECM');
await loginPage.login(userA.email, userA.password);
await loginPage.login(userA.username, userA.password);
await userInfoPage.clickUserProfile();
await expect(await userInfoPage.getContentHeaderTitle()).toEqual(userA.firstName + ' ' + userA.lastName);
await expect(await userInfoPage.getContentEmail()).toEqual(userA.email);
await expect(await userInfoPage.getContentHeaderTitle()).toEqual(`${userA.firstName} ${userA.lastName}`);
await loginPage.login(userB.email, userB.password);
await navigationBarPage.clickLogoutButton();
await loginPage.login(userB.username, userB.password);
await userInfoPage.clickUserProfile();
await expect(await userInfoPage.getContentHeaderTitle()).toEqual(userB.firstName + ' ' + userB.lastName);
await expect(await userInfoPage.getContentEmail()).toEqual(userB.email);
await expect(await userInfoPage.getContentHeaderTitle()).toEqual(`${userB.firstName} ${userB.lastName}`);
});
it('[C299206] Should redirect the user without the right access role on a forbidden page', async () => {
await loginPage.login(userA.email, userA.password);
await loginPage.login(userA.username, userA.password);
await navigationBarPage.navigateToProcessServicesCloudPage();
await expect(await errorPage.getErrorCode()).toBe('403');
await expect(await errorPage.getErrorTitle()).toBe('You don\'t have permission to access this server.');
+5 -4
View File
@@ -15,22 +15,23 @@
* limitations under the License.
*/
import { BrowserActions, LoginPage, SettingsPage } from '@alfresco/adf-testing';
import { LoginPage, SettingsPage } from '@alfresco/adf-testing';
import { browser } from 'protractor';
import { NavigationBarPage } from '../../pages/navigation-bar.page';
describe('Logout component - SSO', () => {
const settingsPage = new SettingsPage();
const loginSSOPage = new LoginPage();
const navigationBarPage = new NavigationBarPage();
it('[C280665] Should be possible change the logout redirect URL', async () => {
await settingsPage.setProviderEcmSso(browser.params.testConfig.appConfig.ecmHost,
browser.params.testConfig.appConfig.oauth2.host,
browser.params.testConfig.appConfig.identityHost, false, true, browser.params.testConfig.appConfig.oauth2.clientId, '/login');
browser.params.testConfig.appConfig.identityHost, false, true, browser.params.testConfig.appConfig.oauth2.clientId, '#/login');
await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.users.admin.username, browser.params.testConfig.users.admin.password);
await BrowserActions.clickExecuteScript('.app-sidenav-link[adf-logout]');
await browser.sleep(2000);
await navigationBarPage.clickLogoutButton();
const actualUrl = await browser.getCurrentUrl();
await expect(actualUrl).toEqual(browser.baseUrl + '/login');
+2 -2
View File
@@ -35,9 +35,9 @@ describe('Notifications Component', () => {
acsUser = await usersActions.createUser();
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await notificationPage.goToNotificationsPage();
});
+2 -2
View File
@@ -29,8 +29,8 @@ export class CommentsPage {
commentInput = element(by.id('comment-input'));
addCommentButton = element(by.css("[data-automation-id='comments-input-add']"));
async getTotalNumberOfComments(): Promise<string> {
return BrowserActions.getText(this.numberOfComments);
async getTotalNumberOfComments(text: string): Promise<void> {
await BrowserVisibility.waitUntilElementHasText(this.numberOfComments, text);
}
async checkUserIconIsDisplayed(): Promise<void> {
+2 -11
View File
@@ -132,15 +132,14 @@ export class ContentServicesPage {
async checkDeleteIsDisabled(content): Promise<void> {
await this.contentList.clickOnActionMenu(content);
await this.waitForContentOptions();
const disabledDelete = element(by.css(`button[data-automation-id*='DELETE'][disabled='true']`));
await BrowserVisibility.waitUntilElementIsVisible(disabledDelete);
}
async deleteContent(content): Promise<void> {
await this.contentList.clickOnActionMenu(content);
await this.waitForContentOptions();
await BrowserActions.click(this.deleteContentElement);
await this.checkContentIsNotDisplayed(content);
}
async clickDeleteOnToolbar(): Promise<void> {
@@ -153,13 +152,11 @@ export class ContentServicesPage {
async metadataContent(content): Promise<void> {
await this.contentList.clickOnActionMenu(content);
await this.waitForContentOptions();
await BrowserActions.click(this.metadataAction);
}
async versionManagerContent(content): Promise<void> {
await this.contentList.clickOnActionMenu(content);
await this.waitForContentOptions();
await BrowserActions.click(this.versionManagerAction);
}
@@ -178,13 +175,6 @@ export class ContentServicesPage {
await BrowserActions.click(this.lockContentElement);
}
async waitForContentOptions(): Promise<void> {
await BrowserVisibility.waitUntilElementIsVisible(this.copyContentElement);
await BrowserVisibility.waitUntilElementIsVisible(this.moveContentElement);
await BrowserVisibility.waitUntilElementIsVisible(this.deleteContentElement);
await BrowserVisibility.waitUntilElementIsVisible(this.downloadContent);
}
async clickFileHyperlink(fileName): Promise<void> {
const hyperlink = this.contentList.dataTablePage().getFileHyperlink(fileName);
await BrowserActions.click(hyperlink);
@@ -641,6 +631,7 @@ export class ContentServicesPage {
}
async clickShareButton(): Promise<void> {
await browser.sleep(2000);
await BrowserActions.closeMenuAndDialogs();
await BrowserActions.click(this.shareNodeButton);
}
+2 -1
View File
@@ -16,7 +16,7 @@
*/
import { BrowserActions, BrowserVisibility, DocumentListPage } from '@alfresco/adf-testing';
import { Locator, element, by } from 'protractor';
import { Locator, element, by, browser } from 'protractor';
export class TrashcanPage {
@@ -49,6 +49,7 @@ export class TrashcanPage {
async clickRestore(): Promise<void> {
await BrowserActions.click(this.restoreButton);
await browser.sleep(2000);
}
async checkRestoreButtonIsNotDisplayed(): Promise<void> {
@@ -77,7 +77,7 @@ describe('Pagination - returns to previous page when current is empty', () => {
fileNames = StringUtil.generateFilesNames(1, nrOfFiles, files.base, files.extension);
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
const folderUploadedModel = await uploadActions.createFolder(folderModel.name, '-my-');
@@ -93,7 +93,7 @@ describe('Pagination - returns to previous page when current is empty', () => {
pngFileUploaded = await uploadActions.uploadFile(pngFileInfo.location, pngFileInfo.name, lastFolderResponse.entry.id);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
});
+1 -1
View File
@@ -38,7 +38,7 @@ describe('User Info - SSO', () => {
browser.params.testConfig.appConfig.oauth2.host,
browser.params.testConfig.appConfig.identityHost, false, true, browser.params.testConfig.appConfig.oauth2.clientId);
await loginSSOPage.loginSSOIdentityService(identityUser.email, identityUser.password);
await loginSSOPage.loginSSOIdentityService(identityUser.username, identityUser.password);
});
it('[C290066] Should display UserInfo when login using SSO', async () => {
@@ -57,10 +57,10 @@ describe('Viewer', () => {
visibility: 'PUBLIC'
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: acsUser.email,
id: acsUser.username,
role: CONSTANTS.CS_USER_ROLES.MANAGER
});
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
});
afterAll(async () => {
@@ -76,7 +76,7 @@ describe('Viewer', () => {
beforeAll(async () => {
archiveFolderUploaded = await uploadActions.createFolder(archiveFolderInfo.name, '-my-');
uploadedArchives = await uploadActions.uploadFolder(archiveFolderInfo.location, archiveFolderUploaded.entry.id);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
});
@@ -69,11 +69,11 @@ describe('Viewer', () => {
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: acsUser.email,
id: acsUser.username,
role: CONSTANTS.CS_USER_ROLES.MANAGER
});
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
pngFileUploaded = await uploadActions.uploadFile(pngFileInfo.location, pngFileInfo.name, site.entry.guid);
});
@@ -81,11 +81,10 @@ describe('Viewer', () => {
afterAll(async () => {
await apiService.loginWithProfile('admin');
await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true });
await navigationBarPage.clickLogoutButton();
});
it('[C272813] Should be redirected to site when opening and closing a file in a site', async () => {
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await navigationBarPage.goToSite(site);
await contentServicesPage.contentList.dataTablePage().waitTillContentLoaded();
@@ -95,6 +94,7 @@ describe('Viewer', () => {
await viewerPage.checkImgViewerIsDisplayed();
await viewerPage.clickCloseButton();
await navigationBarPage.clickLogoutButton();
});
describe('Other Folder Uploaded', () => {
@@ -102,11 +102,12 @@ describe('Viewer', () => {
let otherFolderUploaded;
beforeAll(async () => {
await apiService.login(acsUser.username, acsUser.password);
otherFolderUploaded = await uploadActions.createFolder(otherFolderInfo.name, '-my-');
uploadedOthers = await uploadActions.uploadFolder(otherFolderInfo.location, otherFolderUploaded.entry.id);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
});
@@ -56,11 +56,11 @@ describe('Viewer', () => {
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: acsUser.email,
id: acsUser.username,
role: CONSTANTS.CS_USER_ROLES.MANAGER
});
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
});
afterAll(async () => {
@@ -77,7 +77,7 @@ describe('Viewer', () => {
uploadedExcels = await uploadActions.uploadFolder(excelFolderInfo.location, excelFolderUploaded.entry.id);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
});
@@ -62,11 +62,11 @@ describe('Viewer', () => {
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: acsUser.email,
id: acsUser.username,
role: CONSTANTS.CS_USER_ROLES.MANAGER
});
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
});
afterAll(async () => {
@@ -87,7 +87,7 @@ describe('Viewer', () => {
uploadedImgRenditionFolderInfo = await uploadActions.uploadFolder(imgRenditionFolderInfo.location, imgFolderRenditionUploaded.entry.id);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
});
@@ -58,11 +58,11 @@ describe('Viewer', () => {
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: acsUser.email,
id: acsUser.username,
role: CONSTANTS.CS_USER_ROLES.MANAGER
});
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
});
afterAll(async () => {
@@ -79,7 +79,7 @@ describe('Viewer', () => {
uploadedPpt = await uploadActions.uploadFolder(pptFolderInfo.location, pptFolderUploaded.entry.id);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
});
@@ -56,11 +56,11 @@ describe('Viewer', () => {
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: acsUser.email,
id: acsUser.username,
role: CONSTANTS.CS_USER_ROLES.MANAGER
});
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
});
afterAll(async () => {
@@ -77,7 +77,7 @@ describe('Viewer', () => {
uploadedTexts = await uploadActions.uploadFolder(textFolderInfo.location, textFolderUploaded.entry.id);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
});
@@ -58,11 +58,11 @@ describe('Viewer', () => {
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: acsUser.email,
id: acsUser.username,
role: CONSTANTS.CS_USER_ROLES.MANAGER
});
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
});
afterAll(async () => {
@@ -80,7 +80,7 @@ describe('Viewer', () => {
uploadedWords = await uploadActions.uploadFolder(wordFolderInfo.location, wordFolderUploaded.entry.id);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
});
@@ -92,7 +92,7 @@ describe('Content Services Viewer', () => {
await usersActions.createUser(acsUser);
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
const pdfFileUploaded = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, '-my-');
Object.assign(pdfFile, pdfFileUploaded.entry);
@@ -115,7 +115,7 @@ describe('Content Services Viewer', () => {
const unsupportedFileUploaded = await uploadActions.uploadFile(unsupportedFile.location, unsupportedFile.name, '-my-');
Object.assign(unsupportedFile, unsupportedFileUploaded.entry);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
});
@@ -51,11 +51,11 @@ describe('Viewer', () => {
await apiService.loginWithProfile('admin');
await usersActions.createUser(acsUser);
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
txtFileUploaded = await uploadActions.uploadFile(txtFileInfo.location, txtFileInfo.name, '-my-');
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
});
afterAll(async () => {
+94 -82
View File
@@ -29,7 +29,7 @@ import { ContentServicesPage } from '../../core/pages/content-services.page';
import { NavigationBarPage } from '../../core/pages/navigation-bar.page';
import { FileModel } from '../../models/ACS/file.model';
describe('Viewer - properties', () => {
describe('Viewer', () => {
const acsUser = new UserModel();
const viewerPage = new ViewerPage();
@@ -56,7 +56,7 @@ describe('Viewer - properties', () => {
await usersActions.createUser(acsUser);
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
let pngFileUploaded = await uploadActions.uploadFile(pngFile.location, pngFile.name, '-my-');
Object.assign(pngFile, pngFileUploaded.entry);
@@ -64,126 +64,137 @@ describe('Viewer - properties', () => {
pngFileUploaded = await uploadActions.uploadFile(fileForOverlay.location, fileForOverlay.name, '-my-');
Object.assign(fileForOverlay, pngFileUploaded.entry);
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
await contentServicesPage.goToDocumentList();
await viewerPage.viewFile(pngFile.name);
await viewerPage.clickLeftSidebarButton();
await viewerPage.checkLeftSideBarIsDisplayed();
});
});
afterAll(async () => {
await uploadActions.deleteFileOrFolder(pngFile.getId());
await navigationBarPage.clickLogoutButton();
});
it('[C260066] Should Show/Hide viewer toolbar when showToolbar is true/false', async () => {
await viewerPage.checkToolbarIsDisplayed();
await viewerPage.disableToolbar();
await viewerPage.checkToolbarIsNotDisplayed();
await viewerPage.enableToolbar();
});
it('[C260076] Should Show/Hide back button when allowGoBack is true/false', async () => {
await viewerPage.checkGoBackIsDisplayed();
await viewerPage.disableGoBack();
await viewerPage.checkGoBackIsNotDisplayed();
await viewerPage.enableGoBack();
});
describe('properties', () => {
it('[C260077] Should Show toolbar options dropdown when adf-viewer-open-with directive is used', async () => {
await viewerPage.checkToolbarOptionsIsNotDisplayed();
await viewerPage.enableToolbarOptions();
await viewerPage.checkToolbarOptionsIsDisplayed();
await viewerPage.disableToolbarOptions();
});
beforeAll(async () => {
await viewerPage.viewFile(pngFile.name);
it('[C260079] Should Show/Hide download button when allowDownload is true/false', async () => {
await viewerPage.checkDownloadButtonIsDisplayed();
await viewerPage.disableDownload();
await viewerPage.checkDownloadButtonIsNotDisplayed();
await viewerPage.enableDownload();
});
await viewerPage.clickLeftSidebarButton();
await viewerPage.checkLeftSideBarIsDisplayed();
});
it('[C260082] Should Show/Hide print button when allowPrint is true/false', async () => {
await viewerPage.checkPrintButtonIsDisplayed();
await viewerPage.disablePrint();
await viewerPage.checkPrintButtonIsNotDisplayed();
await viewerPage.enablePrint();
});
afterAll(async () => {
await viewerPage.clickCloseButton();
});
it('[C260092] Should show adf-viewer-toolbar-actions directive buttons when adf-viewer-toolbar-actions is used', async () => {
await viewerPage.checkMoreActionsDisplayed();
it('[C260066] Should Show/Hide viewer toolbar when showToolbar is true/false', async () => {
await viewerPage.checkToolbarIsDisplayed();
await viewerPage.disableToolbar();
await viewerPage.checkToolbarIsNotDisplayed();
await viewerPage.enableToolbar();
});
await viewerPage.disableMoreActions();
it('[C260076] Should Show/Hide back button when allowGoBack is true/false', async () => {
await viewerPage.checkGoBackIsDisplayed();
await viewerPage.disableGoBack();
await viewerPage.checkGoBackIsNotDisplayed();
await viewerPage.enableGoBack();
});
await viewerPage.checkMoreActionsIsNotDisplayed();
it('[C260077] Should Show toolbar options dropdown when adf-viewer-open-with directive is used', async () => {
await viewerPage.checkToolbarOptionsIsNotDisplayed();
await viewerPage.enableToolbarOptions();
await viewerPage.checkToolbarOptionsIsDisplayed();
await viewerPage.disableToolbarOptions();
});
await viewerPage.enableMoreActions();
});
it('[C260079] Should Show/Hide download button when allowDownload is true/false', async () => {
await viewerPage.checkDownloadButtonIsDisplayed();
await viewerPage.disableDownload();
await viewerPage.checkDownloadButtonIsNotDisplayed();
await viewerPage.enableDownload();
});
it('[C260074] Should show a custom file name when displayName property is used', async () => {
await viewerPage.checkFileNameIsDisplayed(pngFile.name);
it('[C260082] Should Show/Hide print button when allowPrint is true/false', async () => {
await viewerPage.checkPrintButtonIsDisplayed();
await viewerPage.disablePrint();
await viewerPage.checkPrintButtonIsNotDisplayed();
await viewerPage.enablePrint();
});
await viewerPage.enableCustomName();
it('[C260092] Should show adf-viewer-toolbar-actions directive buttons when adf-viewer-toolbar-actions is used', async () => {
await viewerPage.checkMoreActionsDisplayed();
await viewerPage.enterCustomName('test custom title');
await viewerPage.checkFileNameIsDisplayed('test custom title');
await viewerPage.disableMoreActions();
await viewerPage.disableCustomName();
});
await viewerPage.checkMoreActionsIsNotDisplayed();
it('[C260090] Should showSidebar allow right info-drawer to be shown', async () => {
await viewerPage.clickToggleRightSidebar();
await viewerPage.checkInfoSideBarIsDisplayed();
await viewerPage.enableMoreActions();
});
await viewerPage.clickToggleRightSidebar();
await viewerPage.checkInfoSideBarIsNotDisplayed();
});
it('[C260074] Should show a custom file name when displayName property is used', async () => {
await viewerPage.checkFileNameIsDisplayed(pngFile.name);
it('[C286442] Should showLeftSidebar allow left info-drawer to be shown', async () => {
await viewerPage.clickToggleLeftSidebar();
await viewerPage.checkLeftSideBarIsNotDisplayed();
await viewerPage.clickLeftSidebarButton();
await viewerPage.checkLeftSideBarIsDisplayed();
});
await viewerPage.enableCustomName();
it('[C260089] Should Show/Hide info-drawer if allowSidebar true/false', async () => {
await viewerPage.clickInfoButton();
await viewerPage.enterCustomName('test custom title');
await viewerPage.checkFileNameIsDisplayed('test custom title');
await viewerPage.checkInfoSideBarIsDisplayed();
await viewerPage.checkInfoButtonIsDisplayed();
await viewerPage.disableCustomName();
});
await viewerPage.disableAllowSidebar();
it('[C260090] Should showSidebar allow right info-drawer to be shown', async () => {
await viewerPage.clickToggleRightSidebar();
await viewerPage.checkInfoSideBarIsDisplayed();
await viewerPage.checkInfoButtonIsNotDisplayed();
await viewerPage.checkInfoSideBarIsNotDisplayed();
});
await viewerPage.clickToggleRightSidebar();
await viewerPage.checkInfoSideBarIsNotDisplayed();
});
it('[C286596] Should Show/Hide left info-drawer if allowLeftSidebar true/false', async () => {
await viewerPage.checkLeftSideBarIsDisplayed();
await viewerPage.checkLeftSideBarButtonIsDisplayed();
it('[C286442] Should showLeftSidebar allow left info-drawer to be shown', async () => {
await viewerPage.clickToggleLeftSidebar();
await viewerPage.checkLeftSideBarIsNotDisplayed();
await viewerPage.clickLeftSidebarButton();
await viewerPage.checkLeftSideBarIsDisplayed();
});
await viewerPage.disableAllowLeftSidebar();
it('[C260089] Should Show/Hide info-drawer if allowSidebar true/false', async () => {
await viewerPage.clickInfoButton();
await viewerPage.checkInfoSideBarIsDisplayed();
await viewerPage.checkInfoButtonIsDisplayed();
await viewerPage.disableAllowSidebar();
await viewerPage.checkInfoButtonIsNotDisplayed();
await viewerPage.checkInfoSideBarIsNotDisplayed();
});
it('[C286596] Should Show/Hide left info-drawer if allowLeftSidebar true/false', async () => {
await viewerPage.checkLeftSideBarIsDisplayed();
await viewerPage.checkLeftSideBarButtonIsDisplayed();
await viewerPage.disableAllowLeftSidebar();
await viewerPage.checkLeftSideBarButtonIsNotDisplayed();
await viewerPage.checkLeftSideBarIsNotDisplayed();
});
await viewerPage.checkLeftSideBarButtonIsNotDisplayed();
await viewerPage.checkLeftSideBarIsNotDisplayed();
});
it('[C260100] Should be possible to disable Overlay viewer', async () => {
await viewerPage.clickCloseButton();
await navigationBarPage.clickOverlayViewerButton();
await dataTable.doubleClickRow('Name', fileForOverlay.name);
await viewerPage.checkOverlayViewerIsDisplayed();
await viewerPage.clickCloseButton();
await dataTable.doubleClickRow('Name', pngFile.name);
await viewerPage.checkOverlayViewerIsDisplayed();
await viewerPage.clickCloseButton();
await viewerPage.disableOverlay();
await dataTable.doubleClickRow('Name', fileForOverlay.name);
await viewerPage.checkImgContainerIsDisplayed();
await viewerPage.checkInlineViewerIsDisplayed();
@@ -191,4 +202,5 @@ describe('Viewer - properties', () => {
await viewerPage.checkImgContainerIsDisplayed();
await viewerPage.checkInlineViewerIsDisplayed();
});
});
})
;
+5 -5
View File
@@ -71,15 +71,15 @@ describe('Viewer', () => {
});
await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, {
id: acsUser.email,
id: acsUser.username,
role: CONSTANTS.CS_USER_ROLES.MANAGER
});
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
pngFileUploaded = await uploadActions.uploadFile(pngFileInfo.location, pngFileInfo.name, site.entry.guid);
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
wordFileUploaded = await uploadActions.uploadFile(wordFileInfo.location, wordFileInfo.name, '-my-');
@@ -88,12 +88,12 @@ describe('Viewer', () => {
afterAll(async () => {
await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true });
await apiService.login(acsUser.email, acsUser.password);
await apiService.login(acsUser.username, acsUser.password);
await uploadActions.deleteFileOrFolder(wordFileUploaded.entry.id);
});
beforeEach(async () => {
await loginPage.login(acsUser.email, acsUser.password);
await loginPage.login(acsUser.username, acsUser.password);
});
it('[C260105] Should be able to open an image file shared via API', async () => {
+1 -1
View File
@@ -40,7 +40,7 @@ describe('Analytics Smoke Test', () => {
procUserModel = await usersActions.createUser();
await loginPage.login(procUserModel.email, procUserModel.password);
await loginPage.login(procUserModel.username, procUserModel.password);
});
afterAll(async () => {
@@ -32,8 +32,8 @@ describe('About Process Services Cloud', () => {
beforeAll(async () => {
await apiService.loginWithProfile('identityAdmin');
testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER, identityService.ROLES.ACTIVITI_DEVOPS]);
await loginSSOPage.login(testUser.email, testUser.password);
await apiService.login(testUser.email, testUser.password);
await loginSSOPage.login(testUser.username, testUser.password);
await apiService.login(testUser.username, testUser.password);
await navigationBarPage.clickAboutButton();
});
@@ -39,8 +39,8 @@ describe('Applications list', () => {
await apiService.loginWithProfile('identityAdmin');
testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER, identityService.ROLES.ACTIVITI_DEVOPS]);
await loginSSOPage.login(testUser.email, testUser.password);
await apiService.login(testUser.email, testUser.password);
await loginSSOPage.login(testUser.username, testUser.password);
await apiService.login(testUser.username, testUser.password);
applications = await applicationsService.getApplicationsByStatus('RUNNING');
@@ -53,7 +53,7 @@ describe('Edit process filters cloud', () => {
groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr');
await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id);
await loginSSOPage.login(testUser.email, testUser.password);
await loginSSOPage.login(testUser.username, testUser.password);
});
afterAll(async () => {
@@ -54,12 +54,12 @@ describe('Edit task filters cloud', () => {
groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr');
await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id);
await apiService.login(testUser.email, testUser.password);
await apiService.login(testUser.username, testUser.password);
const assignedTask = await tasksService.createStandaloneTask(assignedTaskName, simpleApp);
await tasksService.claimTask(assignedTask.entry.id, simpleApp);
await tasksService.createAndCompleteTask(completedTaskName, simpleApp);
await loginSSOPage.login(testUser.email, testUser.password);
await loginSSOPage.login(testUser.username, testUser.password);
});
afterAll(async () => {
@@ -56,7 +56,7 @@ describe('Form Field Component - Dropdown Widget', () => {
groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr');
await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id);
await apiService.login(testUser.email, testUser.password);
await apiService.login(testUser.username, testUser.password);
const processDefinition = await processDefinitionService
.getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.processes.dropdownrestprocess, simpleApp);
@@ -69,7 +69,7 @@ describe('Form Field Component - Dropdown Widget', () => {
task = await tasklist.list.entries[0];
await tasksService.claimTask(task.entry.id, simpleApp);
await loginSSOPage.login(testUser.email, testUser.password);
await loginSSOPage.login(testUser.username, testUser.password);
});
afterAll(async () => {
@@ -62,7 +62,7 @@ describe('Task cloud visibility', async () => {
groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr');
await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id);
await loginSSOPage.login(testUser.email, testUser.password);
await loginSSOPage.login(testUser.username, testUser.password);
});
afterAll(async () => {
@@ -80,7 +80,7 @@ describe('People Groups Cloud Component', () => {
`${testUser.idIdentityService}`, `${devopsUser.idIdentityService}`];
groups = [`${groupUser.id}`, `${groupAdmin.id}`, `${groupNoRole.id}`];
await loginSSOPage.login(testUser.email, testUser.password);
await loginSSOPage.login(testUser.username, testUser.password);
});
afterAll(async () => {
@@ -57,7 +57,7 @@ describe('People Groups Cloud Component', () => {
users = [apsUser.idIdentityService, noRoleUser.idIdentityService, testUser.idIdentityService];
await loginSSOPage.login(apsUser.email, apsUser.password);
await loginSSOPage.login(apsUser.username, apsUser.password);
});
afterAll(async () => {
@@ -57,7 +57,7 @@ describe('Process list cloud', () => {
groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr');
await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id);
await apiService.login(testUser.email, testUser.password);
await apiService.login(testUser.username, testUser.password);
const processDefinition = await processDefinitionService
.getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.processes.candidateGroupProcess, candidateBaseApp);
@@ -91,13 +91,13 @@ describe('Process list cloud', () => {
const claimedTask = await tasksService.claimTask(task.list.entries[0].entry.id, candidateBaseApp);
await tasksService.completeTask(claimedTask.entry.id, candidateBaseApp);
await loginSSOPage.login(testUser.email, testUser.password);
await loginSSOPage.login(testUser.username, testUser.password);
await LocalStorageUtil.setConfigField('adf-edit-process-filter', JSON.stringify(editProcessFilterConfigFile));
await LocalStorageUtil.setConfigField('adf-cloud-process-list', JSON.stringify(processListCloudConfigFile));
});
afterAll(async () => {
await apiService.login(testUser.email, testUser.password);
await apiService.login(testUser.username, testUser.password);
await processInstancesService.deleteProcessInstance(anotherProcessInstance.entry.id, candidateBaseApp);
await apiService.loginWithProfile('identityAdmin');
await identityService.deleteIdentityUser(testUser.idIdentityService);
@@ -79,7 +79,7 @@ describe('Process filters cloud', () => {
await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id);
await identityService.addUserToGroup(anotherUser.idIdentityService, groupInfo.id);
await apiService.login(anotherUser.email, anotherUser.password);
await apiService.login(anotherUser.username, anotherUser.password);
simpleAppProcessDefinition = await processDefinitionService
.getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.processes.simpleProcess, simpleApp);
@@ -88,7 +88,7 @@ describe('Process filters cloud', () => {
'businessKey': StringUtil.generateRandomString()
});
await apiService.login(testUser.email, testUser.password);
await apiService.login(testUser.username, testUser.password);
processDefinition = await processDefinitionService
.getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.processes.candidateGroupProcess, candidateBaseApp);
@@ -120,7 +120,7 @@ describe('Process filters cloud', () => {
const claimedTask = await tasksService.claimTask(task.list.entries[0].entry.id, candidateBaseApp);
await tasksService.completeTask(claimedTask.entry.id, candidateBaseApp);
await loginSSOPage.login(testUser.email, testUser.password);
await loginSSOPage.login(testUser.username, testUser.password);
await LocalStorageUtil.setConfigField('adf-edit-process-filter', JSON.stringify(editProcessFilterConfigFile));
await LocalStorageUtil.setConfigField('adf-cloud-process-list', JSON.stringify(processListCloudConfigFile));
});
@@ -130,7 +130,7 @@ describe('Process filters cloud', () => {
await processInstancesService.deleteProcessInstance(anotherProcessInstance.entry.id, candidateBaseApp);
await processInstancesService.deleteProcessInstance(suspendProcessInstance.entry.id, candidateBaseApp);
await apiService.login(anotherUser.email, anotherUser.password);
await apiService.login(anotherUser.username, anotherUser.password);
await processInstancesService.deleteProcessInstance(differentAppUserProcessInstance.entry.id, simpleApp);
await apiService.loginWithProfile('identityAdmin');
@@ -63,7 +63,7 @@ describe('Process filters cloud', () => {
groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr');
await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id);
await apiService.login(testUser.email, testUser.password);
await apiService.login(testUser.username, testUser.password);
const processDefinition = await processDefinitionService
.getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.processes.candidateGroupProcess, candidateBaseApp);
@@ -82,7 +82,7 @@ describe('Process filters cloud', () => {
const claimedTask = await tasksService.claimTask(task.list.entries[0].entry.id, candidateBaseApp);
await tasksService.completeTask(claimedTask.entry.id, candidateBaseApp);
await loginSSOPage.login(testUser.email, testUser.password);
await loginSSOPage.login(testUser.username, testUser.password);
}, 5 * 60 * 1000);

Some files were not shown because too many files have changed in this diff Show More