blob: b1c5edef369eda2023eedcb6775b1a3d5d36fc52 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Inject } from '@angular/core';
import { async, TestBed, ComponentFixture } from '@angular/core/testing';
import { HttpClient } from '@angular/common/http';
import { GeneralSettingsComponent } from './general-settings.component';
import { MetronAlerts } from '../shared/metron-alerts';
import { MetronDialogBox } from '../shared/metron-dialog-box';
import { GlobalConfigService } from '../service/global-config.service';
import { GeneralSettingsModule } from './general-settings.module';
import { Observable, throwError } from 'rxjs';
import { APP_CONFIG, METRON_REST_CONFIG } from '../app.config';
import { IAppConfig } from '../app.config.interface';
class MockGlobalConfigService extends GlobalConfigService {
_config: any = {};
_postSuccess = true;
constructor(
private http2: HttpClient,
@Inject(APP_CONFIG) private config2: IAppConfig
) {
super(http2, config2);
}
public post(globalConfig: {}): Observable<{}> {
if (this._postSuccess) {
return Observable.create(observer => {
observer.next(globalConfig);
observer.complete();
});
}
return throwError('Error');
}
public get(): Observable<{}> {
return Observable.create(observer => {
observer.next(this._config);
observer.complete();
});
}
}
describe('GeneralSettingsComponent', () => {
let metronAlerts: MetronAlerts;
let metronDialogBox: MetronDialogBox;
let component: GeneralSettingsComponent;
let globalConfigService: MockGlobalConfigService;
let fixture: ComponentFixture<GeneralSettingsComponent>;
let config = {
'solr.collection': 'metron',
'storm.indexingWorkers': 1,
'storm.indexingExecutors': 2,
'hdfs.boltBatchSize': 5000,
'hdfs.boltFieldDelimiter': '|',
'hdfs.boltFileRotationSize': 5,
'hdfs.boltCompressionCodecClass':
'org.apache.hadoop.io.compress.SnappyCodec',
'hdfs.indexOutput': '/tmp/metron/enriched',
'kafkaWriter.topic': 'outputTopic',
'kafkaWriter.keySerializer':
'org.apache.kafka.common.serialization.StringSerializer',
'kafkaWriter.valueSerializer':
'org.apache.kafka.common.serialization.StringSerializer',
'kafkaWriter.requestRequiredAcks': 1,
'solrWriter.indexName': 'alfaalfa',
'solrWriter.shards': 1,
'solrWriter.replicationFactor': 1,
'solrWriter.batchSize': 50,
fieldValidations: { field: 'validation' }
};
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [GeneralSettingsModule],
providers: [
{ provide: HttpClient },
MetronAlerts,
MetronDialogBox,
{ provide: GlobalConfigService, useClass: MockGlobalConfigService },
{ provide: APP_CONFIG, useValue: METRON_REST_CONFIG }
]
});
fixture = TestBed.createComponent(GeneralSettingsComponent);
component = fixture.componentInstance;
globalConfigService = TestBed.get(GlobalConfigService);
metronAlerts = TestBed.get(MetronAlerts);
metronDialogBox = TestBed.get(MetronDialogBox);
}));
it('can instantiate GeneralSettingsComponent', async(() => {
expect(component instanceof GeneralSettingsComponent).toBe(true);
}));
it('should load global config', async(() => {
globalConfigService._config = config;
component.ngOnInit();
expect(component.globalConfig).toEqual(config);
}));
it('should save global config', async(() => {
globalConfigService._config = config;
component.ngOnInit();
fixture.detectChanges();
spyOn(metronAlerts, 'showSuccessMessage');
spyOn(metronAlerts, 'showErrorMessage');
component.onSave();
expect(metronAlerts.showSuccessMessage).toHaveBeenCalledWith(
'Saved Global Settings'
);
globalConfigService._postSuccess = false;
component.onSave();
expect(metronAlerts.showErrorMessage).toHaveBeenCalledWith(
'Unable to save Global Settings: Error'
);
}));
it('should handle onCancel', async(() => {
let dialogReturnTrue = true;
let confirmationMsg =
'Cancelling will revert all the changes made to the form. Do you wish to continue ?';
spyOn(component, 'ngOnInit');
spyOn(metronDialogBox, 'showConfirmationMessage').and.callFake(function() {
return Observable.create(observer => {
observer.next(dialogReturnTrue);
observer.complete();
});
});
component.onCancel();
expect(component.ngOnInit).toHaveBeenCalled();
expect(component.ngOnInit['calls'].count()).toEqual(1);
expect(metronDialogBox.showConfirmationMessage['calls'].count()).toEqual(1);
expect(metronDialogBox.showConfirmationMessage).toHaveBeenCalledWith(
confirmationMsg
);
dialogReturnTrue = false;
component.onCancel();
expect(metronDialogBox.showConfirmationMessage['calls'].count()).toEqual(2);
expect(component.ngOnInit['calls'].count()).toEqual(1);
}));
});