[ACA-2214] Sharing URL being constructed from ECM Host incorrectly (#981)

* fix baseShareUrl defaults

* allow controlling full path

* unit test

* update tomcat settings

* use single slash

* simplify documentation
This commit is contained in:
Denys Vuika
2019-03-01 07:15:08 +00:00
committed by GitHub
parent 229e23f61d
commit 830357e892
5 changed files with 43 additions and 41 deletions

View File

@@ -3,7 +3,7 @@ npm run build.e2e -- --base-href ./
node -e "
const fs = require('fs');
const config = require('./dist/app/app.config.json');
config.baseShareUrl = 'http://localhost:4000/content-app';
config.baseShareUrl = 'http://localhost:4000/content-app/#/preview/s/';
fs.writeFileSync(
'./dist/app/app.config.json',
JSON.stringify(config, null, 2)

View File

@@ -49,32 +49,12 @@ Alternatively, you can provide a static address for the ACS server if necessary:
The "baseShareUrl" property tells the application how to construct the address where users will access shared files.
#### Default
When the default value is set the application will construct the File Share URL from the "ecmHost" property:
```json
{
...
"baseShareUrl": null,
...
"baseShareUrl": "{protocol}//{hostname}{:port}/#/preview/s"
}
```
#### Configuration
If you run the application from a different server than the Content Services server the "baseShareUrl" property should must be configured correctly, for example:
```json
{
...
"baseShareUrl": "http://{serveraddress}{:port}",
...
}
```
**Note:** If you run the application as part of Tomcat and not in the root (subfolder), then "baseShareUrl" value should contain full address to the app, for example: "baseShareUrl": "http://{serveraddress}{:port}/{folder}".
## Application settings
There are many settings you can change to alter the default behavior of the application.
@@ -104,7 +84,6 @@ The default logo displayed in the top left corner of the Alfresco Content Applic
2. In the app.config.json file, set the value of the application.logo to contain the name of the custom logo image: "logo": "/assets/images/[image-name].[extension]"
```json
{
...,

View File

@@ -1,7 +1,7 @@
{
"ecmHost": "{protocol}//{hostname}{:port}",
"aosHost": "{protocol}//{hostname}{:port}/alfresco/aos",
"baseShareUrl": null,
"baseShareUrl": "{protocol}//{hostname}{:port}/#/preview/s",
"providers": "ECM",
"authType": "BASIC",
"oauth2": {

View File

@@ -24,20 +24,31 @@
*/
import { AppComponent } from './app.component';
import { SetInitialStateAction } from './store/actions';
describe('AppComponent', () => {
let component;
const storeMock = <any>{
let component: AppComponent;
const storeMock: any = {
dispatch: jasmine.createSpy('dispatch')
};
const configMock: any = {
get: (key: string) => {
if (key === 'baseShareUrl') {
return 'http://localhost:4200/#/preview/s';
}
return null;
}
};
beforeAll(() => {
component = new AppComponent(
null,
null,
null,
storeMock,
null,
configMock,
null,
null,
null,
@@ -47,48 +58,59 @@ describe('AppComponent', () => {
);
});
describe('onFileUploadedError', () => {
afterEach(() => {
storeMock.dispatch['calls'].reset();
beforeEach(() => {
storeMock.dispatch = jasmine.createSpy('dispatch');
});
it('should setup baseShareUrl as per config', done => {
storeMock.dispatch.and.callFake((action: SetInitialStateAction) => {
expect(action.payload.sharedUrl).toBe(
'http://localhost:4200/#/preview/s/'
);
done();
});
component.loadAppSettings();
});
describe('onFileUploadedError', () => {
it('should dispatch 403 error message', () => {
component.onFileUploadedError({ error: { status: 403 } });
component.onFileUploadedError(<any>{ error: { status: 403 } });
expect(storeMock.dispatch['calls'].argsFor(0)[0].payload).toBe(
'APP.MESSAGES.UPLOAD.ERROR.403'
);
});
it('should dispatch 404 error message', () => {
component.onFileUploadedError({ error: { status: 404 } });
component.onFileUploadedError(<any>{ error: { status: 404 } });
expect(storeMock.dispatch['calls'].argsFor(0)[0].payload).toBe(
'APP.MESSAGES.UPLOAD.ERROR.404'
);
});
it('should dispatch 409 error message', () => {
component.onFileUploadedError({ error: { status: 409 } });
component.onFileUploadedError(<any>{ error: { status: 409 } });
expect(storeMock.dispatch['calls'].argsFor(0)[0].payload).toBe(
'APP.MESSAGES.UPLOAD.ERROR.CONFLICT'
);
});
it('should dispatch 500 error message', () => {
component.onFileUploadedError({ error: { status: 500 } });
component.onFileUploadedError(<any>{ error: { status: 500 } });
expect(storeMock.dispatch['calls'].argsFor(0)[0].payload).toBe(
'APP.MESSAGES.UPLOAD.ERROR.500'
);
});
it('should dispatch 504 error message', () => {
component.onFileUploadedError({ error: { status: 504 } });
component.onFileUploadedError(<any>{ error: { status: 504 } });
expect(storeMock.dispatch['calls'].argsFor(0)[0].payload).toBe(
'APP.MESSAGES.UPLOAD.ERROR.504'
);
});
it('should dispatch generic error message', () => {
component.onFileUploadedError({ error: { status: 999 } });
component.onFileUploadedError(<any>{ error: { status: 999 } });
expect(storeMock.dispatch['calls'].argsFor(0)[0].payload).toBe(
'APP.MESSAGES.UPLOAD.ERROR.GENERIC'
);

View File

@@ -147,10 +147,11 @@ export class AppComponent implements OnInit, OnDestroy {
});
}
private loadAppSettings() {
const baseShareUrl =
this.config.get<string>('baseShareUrl') ||
this.config.get<string>('ecmHost');
loadAppSettings() {
let baseShareUrl = this.config.get<string>('baseShareUrl');
if (!baseShareUrl.endsWith('/')) {
baseShareUrl += '/';
}
const state: AppState = {
...INITIAL_APP_STATE,
@@ -158,7 +159,7 @@ export class AppComponent implements OnInit, OnDestroy {
appName: this.config.get<string>('application.name'),
headerColor: this.config.get<string>('headerColor'),
logoPath: this.config.get<string>('application.logo'),
sharedUrl: `${baseShareUrl}/#/preview/s/`
sharedUrl: baseShareUrl
};
this.store.dispatch(new SetInitialStateAction(state));