fix(data): fix and adjust detail test using translation

Closes #50
This commit is contained in:
Jovan Krunić
2019-04-26 10:04:38 +02:00
parent 9d682125db
commit 478f49a874

View File

@@ -12,24 +12,35 @@
* You should have received a copy of the GNU General Public License along with * You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>. * this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; import {CUSTOM_ELEMENTS_SCHEMA, DebugElement} from '@angular/core';
import {async, ComponentFixture, TestBed} from '@angular/core/testing'; import {async, ComponentFixture, TestBed} from '@angular/core/testing';
import {ActivatedRoute, RouterModule} from '@angular/router'; import {ActivatedRoute, RouterModule} from '@angular/router';
import {IonRefresher} from '@ionic/angular'; import {IonRefresher, IonTitle} from '@ionic/angular';
import {TranslateFakeLoader, TranslateLoader, TranslateModule} from '@ngx-translate/core'; import {TranslateLoader, TranslateModule, TranslateService} from '@ngx-translate/core';
import {sampleThingsMap} from '../../../_helpers/data/sample-things'; import {sampleThingsMap} from '../../../_helpers/data/sample-things';
import {DataRoutingModule} from '../data-routing.module'; import {DataRoutingModule} from '../data-routing.module';
import {DataModule} from '../data.module'; import {DataModule} from '../data.module';
import {DataProvider} from '../data.provider'; import {DataProvider} from '../data.provider';
import {DataDetailComponent} from './data-detail.component'; import {DataDetailComponent} from './data-detail.component';
import {By} from '@angular/platform-browser';
import {Observable, of} from 'rxjs';
const translations: any = {data: {detail: {TITLE: 'Foo'}}};
class TranslateFakeLoader implements TranslateLoader {
getTranslation(_lang: string): Observable<any> {
return of(translations);
}
}
describe('DataDetailComponent', () => { describe('DataDetailComponent', () => {
let comp: DataDetailComponent; let comp: DataDetailComponent;
let fixture: ComponentFixture<DataDetailComponent>; let fixture: ComponentFixture<DataDetailComponent>;
let detailPage: HTMLElement; let detailPage: DebugElement;
let dataProvider: DataProvider; let dataProvider: DataProvider;
let refresher: IonRefresher; let refresher: IonRefresher;
const sampleThing = sampleThingsMap.message[0]; const sampleThing = sampleThingsMap.message[0];
let translateService: TranslateService;
// @Component({ selector: 'stapps-data-list-item', template: '' }) // @Component({ selector: 'stapps-data-list-item', template: '' })
// class DataListItemComponent { // class DataListItemComponent {
@@ -60,13 +71,15 @@ describe('DataDetailComponent', () => {
beforeEach(async () => { beforeEach(async () => {
dataProvider = TestBed.get(DataProvider); dataProvider = TestBed.get(DataProvider);
translateService = TestBed.get(TranslateService);
refresher = jasmine.createSpyObj('refresher', ['complete']); refresher = jasmine.createSpyObj('refresher', ['complete']);
spyOn(dataProvider, 'get' as any).and.returnValue(Promise.resolve(sampleThing)); spyOn(dataProvider, 'get' as any).and.returnValue(Promise.resolve(sampleThing));
spyOn(DataDetailComponent.prototype, 'getItem').and.callThrough(); spyOn(DataDetailComponent.prototype, 'getItem').and.callThrough();
fixture = await TestBed.createComponent(DataDetailComponent); fixture = await TestBed.createComponent(DataDetailComponent);
comp = fixture.componentInstance; comp = fixture.componentInstance;
detailPage = fixture.debugElement;
translateService.use('foo');
fixture.detectChanges(); fixture.detectChanges();
detailPage = fixture.nativeElement;
await dataProvider.deleteAll(); await dataProvider.deleteAll();
}); });
@@ -75,10 +88,9 @@ describe('DataDetailComponent', () => {
); );
it('should have apropriate title', async () => { it('should have apropriate title', async () => {
await fixture.whenStable(); const title: DebugElement | null = detailPage.query(By.directive(IonTitle));
const title: HTMLIonTitleElement | null = detailPage.querySelector('ion-title');
expect(title).not.toBe(null); expect(title).not.toBe(null);
expect(title!.innerText).toContain('data.detail.TITLE'); expect(title!.nativeElement.textContent).toBe('Foo');
}); });
it('should get a data item', () => { it('should get a data item', () => {
@@ -87,12 +99,10 @@ describe('DataDetailComponent', () => {
}); });
it('should get a data item when component is accessed', async () => { it('should get a data item when component is accessed', async () => {
await fixture.whenStable();
expect(DataDetailComponent.prototype.getItem).toHaveBeenCalledWith(sampleThing.uid); expect(DataDetailComponent.prototype.getItem).toHaveBeenCalledWith(sampleThing.uid);
}); });
it('should update the data item when refresh is called', async () => { it('should update the data item when refresh is called', async () => {
await fixture.whenStable();
await comp.refresh(refresher); await comp.refresh(refresher);
expect(DataDetailComponent.prototype.getItem).toHaveBeenCalledWith(sampleThing.uid); expect(DataDetailComponent.prototype.getItem).toHaveBeenCalledWith(sampleThing.uid);
expect(refresher.complete).toHaveBeenCalled(); expect(refresher.complete).toHaveBeenCalled();