diff --git a/.github/workflows/locale-test.yml b/.github/workflows/locale-test.yml index cb4345fa..3079ab08 100644 --- a/.github/workflows/locale-test.yml +++ b/.github/workflows/locale-test.yml @@ -44,3 +44,9 @@ jobs: sudo apt-get install xvfb cd ./wowup-electron xvfb-run --auto-servernum ng test --watch=false --include='src/locales.spec.ts' + + - name: Run Test Suite + run: | + sudo apt-get install xvfb + cd ./wowup-electron + xvfb-run --auto-servernum ng test --watch=false diff --git a/wowup-electron/src/app/app.component.spec.ts b/wowup-electron/src/app/app.component.spec.ts index d32749e3..fd8f075c 100644 --- a/wowup-electron/src/app/app.component.spec.ts +++ b/wowup-electron/src/app/app.component.spec.ts @@ -1,26 +1,100 @@ -import { TestBed, waitForAsync } from "@angular/core/testing"; +import { ComponentFixture, TestBed } from "@angular/core/testing"; import { RouterTestingModule } from "@angular/router/testing"; -import { TranslateModule } from "@ngx-translate/core"; +import { TranslateCompiler, TranslateLoader, TranslateModule } from "@ngx-translate/core"; import { AppComponent } from "./app.component"; import { ElectronService } from "./services"; +import { HttpClient, HttpClientModule } from "@angular/common/http"; +import { httpLoaderFactory } from "./app.module"; +import { TranslateMessageFormatCompiler } from "ngx-translate-messageformat-compiler"; +import { AddonService } from "./services/addons/addon.service"; +import { MatDialog } from "@angular/material/dialog"; +import { WowUpService } from "./services/wowup/wowup.service"; +import { SessionService } from "./services/session/session.service"; +import { FileService } from "./services/files/file.service"; +import { AnalyticsService } from "./services/analytics/analytics.service"; +import { OverlayContainer, OverlayModule } from "@angular/cdk/overlay"; +import { Subject } from "rxjs"; +import { PreferenceChange } from "./models/wowup/preference-change"; +import { MatModule } from "./mat-module"; describe("AppComponent", () => { - beforeEach( - waitForAsync(() => { - TestBed.configureTestingModule({ - declarations: [AppComponent], - providers: [ElectronService], - imports: [RouterTestingModule, TranslateModule.forRoot()], - }).compileComponents(); - }) - ); + let component: AppComponent; + let fixture: ComponentFixture; + let addonService: AddonService; + let addonServiceSpy: any; + let electronService: ElectronService; + let electronServiceSpy: any; + let wowUpService: WowUpService; + let wowUpServiceSpy: any; + let sessionService: SessionService; + let sessionServiceSpy: any; + let fileService: FileService; + let fileServiceSpy: any; + let analyticsService: AnalyticsService; + let analyticsServiceSpy: any; - it( - "should create the app", - waitForAsync(() => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.debugElement.componentInstance; - expect(app).toBeTruthy(); - }) - ); + beforeEach(async () => { + addonServiceSpy = jasmine.createSpyObj("AddonService", ["processAutoUpdates"]); + electronServiceSpy = jasmine.createSpyObj("ElectronService", ["invoke"], { + appOptions: {quit : null}, + }); + wowUpServiceSpy = jasmine.createSpyObj("WowUpService", [""], { + preferenceChange$: new Subject().asObservable(), + }); + sessionServiceSpy = jasmine.createSpyObj("SessionService", [""]); + fileServiceSpy = jasmine.createSpyObj("FileService", [""]); + analyticsServiceSpy = jasmine.createSpyObj("AnalyticsService", ["trackStartup"]); + + await TestBed.configureTestingModule({ + declarations: [AppComponent], + providers: [ + MatDialog, + ElectronService, + ], + imports: [ + OverlayModule, + RouterTestingModule, + HttpClientModule, + MatModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + deps: [HttpClient], + }, + compiler: { + provide: TranslateCompiler, + useClass: TranslateMessageFormatCompiler, + }, + }) + ], + }).overrideComponent(AppComponent, { + set: { + providers: [ + MatDialog, + OverlayContainer, + { provide: AddonService, useValue: addonServiceSpy }, + { provide: ElectronService, useValue: electronServiceSpy }, + { provide: WowUpService, useValue: wowUpServiceSpy }, + { provide: SessionService, useValue: sessionServiceSpy }, + { provide: FileService, useValue: fileServiceSpy }, + { provide: AnalyticsService, useValue: analyticsServiceSpy }, + ]}, + }).compileComponents(); + + fixture = TestBed.createComponent(AppComponent); + component = fixture.componentInstance; + addonService = fixture.debugElement.injector.get(AddonService); + electronService = fixture.debugElement.injector.get(ElectronService); + wowUpService = fixture.debugElement.injector.get(WowUpService); + sessionService = fixture.debugElement.injector.get(SessionService); + fileService = fixture.debugElement.injector.get(FileService); + analyticsService = fixture.debugElement.injector.get(AnalyticsService); + + fixture.detectChanges(); + }); + + it("should create", () => { + expect(component).toBeTruthy(); + }); }); diff --git a/wowup-electron/src/app/components/addon-detail/addon-detail.component.spec.ts b/wowup-electron/src/app/components/addon-detail/addon-detail.component.spec.ts index 68ad2ab1..dbc286e3 100644 --- a/wowup-electron/src/app/components/addon-detail/addon-detail.component.spec.ts +++ b/wowup-electron/src/app/components/addon-detail/addon-detail.component.spec.ts @@ -1,19 +1,73 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { AddonDetailComponent } from "./addon-detail.component"; +import { AddonDetailComponent, AddonDetailModel } from "./addon-detail.component"; +import { CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; +import { MAT_DIALOG_DATA } from "@angular/material/dialog"; +import { AddonService } from "../../services/addons/addon.service"; +import { + TranslateCompiler, + TranslateLoader, + TranslateModule, +} from "@ngx-translate/core"; +import { Subject} from "rxjs"; +import { AddonUpdateEvent } from "../../models/wowup/addon-update-event"; +import { HttpClient, HttpClientModule } from "@angular/common/http"; +import { httpLoaderFactory } from "../../app.module"; +import { TranslateMessageFormatCompiler } from "ngx-translate-messageformat-compiler"; +import { AddonViewModel } from "../../business-objects/my-addon-list-item"; +import { Addon } from "../../entities/addon"; +import { MatModule } from "../../mat-module"; describe("AddonDetailComponent", () => { let component: AddonDetailComponent; let fixture: ComponentFixture; + let addonService: AddonService; + let dialogModel: AddonDetailModel; + let addonServiceSpy: any; beforeEach(async () => { + addonServiceSpy = jasmine.createSpyObj("AddonService", ["logDebugData"], { + addonInstalled$ : new Subject().asObservable(), + }); + + const viewModel = new AddonViewModel({ + installedVersion: "1.0.0", + externalId: '52001', + } as Addon); + + dialogModel = {listItem: viewModel} as AddonDetailModel; + await TestBed.configureTestingModule({ declarations: [AddonDetailComponent], + imports: [ + MatModule, + HttpClientModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + deps: [HttpClient], + }, + compiler: { + provide: TranslateCompiler, + useClass: TranslateMessageFormatCompiler, + }, + }) + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + providers: [ + { provide: MAT_DIALOG_DATA, useValue: dialogModel }, + ] + }).overrideComponent(AddonDetailComponent, { + set: { + providers: [ + { provide: AddonService, useValue: addonServiceSpy }, + ]}, }).compileComponents(); - }); - beforeEach(() => { fixture = TestBed.createComponent(AddonDetailComponent); component = fixture.componentInstance; + addonService = fixture.debugElement.injector.get(AddonService); + fixture.detectChanges(); }); diff --git a/wowup-electron/src/app/components/addon-install-button/addon-install-button.component.spec.ts b/wowup-electron/src/app/components/addon-install-button/addon-install-button.component.spec.ts index c824ae89..55873419 100644 --- a/wowup-electron/src/app/components/addon-install-button/addon-install-button.component.spec.ts +++ b/wowup-electron/src/app/components/addon-install-button/addon-install-button.component.spec.ts @@ -1,19 +1,67 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { TranslateCompiler, TranslateLoader, TranslateModule } from "@ngx-translate/core"; +import { HttpClient, HttpClientModule } from "@angular/common/http"; +import { TranslateMessageFormatCompiler } from "ngx-translate-messageformat-compiler"; import { AddonInstallButtonComponent } from "./addon-install-button.component"; +import { AddonService } from "../../services/addons/addon.service"; +import { SessionService } from "../../services/session/session.service"; +import { httpLoaderFactory } from "../../app.module"; +import { AddonSearchResult } from "../../models/wowup/addon-search-result"; +import { WowClientType } from "../../models/warcraft/wow-client-type"; +import { Subject } from "rxjs"; +import { AddonUpdateEvent } from "../../models/wowup/addon-update-event"; describe("AddonInstallButtonComponent", () => { let component: AddonInstallButtonComponent; let fixture: ComponentFixture; + let addonService: AddonService; + let addonServiceSpy: any; + let sessionService: SessionService; + let sessionServiceSpy: any; beforeEach(async () => { + addonServiceSpy = jasmine.createSpyObj("AddonService", { + isInstalled: () => false, + }, { + addonInstalled$ : new Subject().asObservable(), + }); + sessionServiceSpy = jasmine.createSpyObj("SessionService", [""], { + selectedClientType: WowClientType.Retail, + }); + await TestBed.configureTestingModule({ declarations: [AddonInstallButtonComponent], + imports: [ + HttpClientModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + deps: [HttpClient], + }, + compiler: { + provide: TranslateCompiler, + useClass: TranslateMessageFormatCompiler, + }, + }) + ], + }).overrideComponent(AddonInstallButtonComponent, { + set: { + providers: [ + { provide: AddonService, useValue: addonServiceSpy }, + { provide: SessionService, useValue: sessionServiceSpy }, + ]}, }).compileComponents(); - }); - beforeEach(() => { fixture = TestBed.createComponent(AddonInstallButtonComponent); component = fixture.componentInstance; + addonService = fixture.debugElement.injector.get(AddonService); + sessionService = fixture.debugElement.injector.get(SessionService); + + component.addonSearchResult = { + externalId: "123123", + } as AddonSearchResult; + fixture.detectChanges(); }); diff --git a/wowup-electron/src/app/components/addon-update-button/addon-update-button.component.spec.ts b/wowup-electron/src/app/components/addon-update-button/addon-update-button.component.spec.ts index aa5ada4a..be5b8ac0 100644 --- a/wowup-electron/src/app/components/addon-update-button/addon-update-button.component.spec.ts +++ b/wowup-electron/src/app/components/addon-update-button/addon-update-button.component.spec.ts @@ -1,17 +1,70 @@ -import { inject } from "@angular/core/testing"; -import { TranslateService } from "@ngx-translate/core"; -import { AddonService } from "../../services/addons/addon.service"; +import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { TranslateCompiler, TranslateLoader, TranslateModule } from "@ngx-translate/core"; +import { HttpClient, HttpClientModule } from "@angular/common/http"; +import { TranslateMessageFormatCompiler } from "ngx-translate-messageformat-compiler"; +import { MatDialog } from "@angular/material/dialog"; import { AnalyticsService } from "../../services/analytics/analytics.service"; +import { AddonService } from "../../services/addons/addon.service"; +import { ElectronService } from "../../services"; +import { httpLoaderFactory } from "../../app.module"; +import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; import { AddonUpdateButtonComponent } from "./addon-update-button.component"; - +import { Subject } from "rxjs"; +import { AddonUpdateEvent } from "../../models/wowup/addon-update-event"; +import { MatModule } from "../../mat-module"; describe("AddonUpdateButtonComponent", () => { + let component: AddonUpdateButtonComponent; + let fixture: ComponentFixture; + let addonService: AddonService; + let addonServiceSpy: any; + let analyticsService: AnalyticsService; + let analyticsServiceSpy: any; + + beforeEach(async () => { + addonServiceSpy = jasmine.createSpyObj("AddonService", [""], { + addonInstalled$: new Subject().asObservable(), + }) + + await TestBed.configureTestingModule({ + declarations: [AddonUpdateButtonComponent], + providers: [ + MatDialog, + ElectronService, + ], + imports: [ + MatModule, + HttpClientModule, + BrowserAnimationsModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + deps: [HttpClient], + }, + compiler: { + provide: TranslateCompiler, + useClass: TranslateMessageFormatCompiler, + }, + }) + ], + }).overrideComponent(AddonUpdateButtonComponent, { + set: { + providers: [ + MatDialog, + { provide: AddonService, useValue: addonServiceSpy }, + { provide: AnalyticsService, useValue: analyticsServiceSpy }, + ]}, + }).compileComponents(); + + fixture = TestBed.createComponent(AddonUpdateButtonComponent); + component = fixture.componentInstance; + addonService = fixture.debugElement.injector.get(AddonService); + analyticsService = fixture.debugElement.injector.get(AnalyticsService); + + fixture.detectChanges(); + }); + it("should create", () => { - inject( - [AddonService, AnalyticsService, TranslateService], - (addonService: AddonService, analyticsService: AnalyticsService, translateService: TranslateService) => { - const instance = new AddonUpdateButtonComponent(addonService, analyticsService, translateService); - expect(instance).toBeTruthy(); - } - ); + expect(component).toBeTruthy(); }); }); diff --git a/wowup-electron/src/app/components/alert-dialog/alert-dialog.component.spec.ts b/wowup-electron/src/app/components/alert-dialog/alert-dialog.component.spec.ts index 003d4939..eb696bdd 100644 --- a/wowup-electron/src/app/components/alert-dialog/alert-dialog.component.spec.ts +++ b/wowup-electron/src/app/components/alert-dialog/alert-dialog.component.spec.ts @@ -1,5 +1,11 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; import { AlertDialogComponent } from "./alert-dialog.component"; +import { MAT_DIALOG_DATA, MatDialogRef } from "@angular/material/dialog"; +import { HttpClient, HttpClientModule } from "@angular/common/http"; +import { TranslateCompiler, TranslateLoader, TranslateModule } from "@ngx-translate/core"; +import { httpLoaderFactory } from "../../app.module"; +import { TranslateMessageFormatCompiler } from "ngx-translate-messageformat-compiler"; +import { MatModule } from "../../mat-module"; describe("AlertDialogComponent", () => { let component: AlertDialogComponent; @@ -8,10 +14,27 @@ describe("AlertDialogComponent", () => { beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [AlertDialogComponent], + imports: [ + MatModule, + HttpClientModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + deps: [HttpClient], + }, + compiler: { + provide: TranslateCompiler, + useClass: TranslateMessageFormatCompiler, + }, + }) + ], + providers: [ + { provide: MAT_DIALOG_DATA, useValue: {} }, + { provide: MatDialogRef, useValue: {} }, + ] }).compileComponents(); - }); - beforeEach(() => { fixture = TestBed.createComponent(AlertDialogComponent); component = fixture.componentInstance; fixture.detectChanges(); diff --git a/wowup-electron/src/app/components/confirm-dialog/confirm-dialog.component.spec.ts b/wowup-electron/src/app/components/confirm-dialog/confirm-dialog.component.spec.ts index ca99957e..14ba1285 100644 --- a/wowup-electron/src/app/components/confirm-dialog/confirm-dialog.component.spec.ts +++ b/wowup-electron/src/app/components/confirm-dialog/confirm-dialog.component.spec.ts @@ -1,5 +1,11 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; import { ConfirmDialogComponent } from "./confirm-dialog.component"; +import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from "@angular/material/dialog"; +import { HttpClient, HttpClientModule } from "@angular/common/http"; +import { TranslateCompiler, TranslateLoader, TranslateModule } from "@ngx-translate/core"; +import { httpLoaderFactory } from "../../app.module"; +import { TranslateMessageFormatCompiler } from "ngx-translate-messageformat-compiler"; +import { MatModule } from "../../mat-module"; describe("ConfirmDialogComponent", () => { let component: ConfirmDialogComponent; @@ -8,10 +14,27 @@ describe("ConfirmDialogComponent", () => { beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [ConfirmDialogComponent], + imports: [ + MatModule, + HttpClientModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + deps: [HttpClient], + }, + compiler: { + provide: TranslateCompiler, + useClass: TranslateMessageFormatCompiler, + }, + }) + ], + providers: [ + { provide: MAT_DIALOG_DATA, useValue: {} }, + { provide: MatDialogRef, useValue: {} }, + ] }).compileComponents(); - }); - beforeEach(() => { fixture = TestBed.createComponent(ConfirmDialogComponent); component = fixture.componentInstance; fixture.detectChanges(); diff --git a/wowup-electron/src/app/components/footer/footer.component.spec.ts b/wowup-electron/src/app/components/footer/footer.component.spec.ts index 28ae6738..30450d82 100644 --- a/wowup-electron/src/app/components/footer/footer.component.spec.ts +++ b/wowup-electron/src/app/components/footer/footer.component.spec.ts @@ -1,19 +1,73 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; import { FooterComponent } from "./footer.component"; +import { HttpClient, HttpClientModule } from "@angular/common/http"; +import { TranslateCompiler, TranslateLoader, TranslateModule } from "@ngx-translate/core"; +import { httpLoaderFactory } from "../../app.module"; +import { TranslateMessageFormatCompiler } from "ngx-translate-messageformat-compiler"; +import { WowUpService } from "../../services/wowup/wowup.service"; +import { ElectronService } from "../../services"; +import { SessionService } from "../../services/session/session.service"; +import { OverlayModule } from "@angular/cdk/overlay"; +import { BehaviorSubject, Subject } from "rxjs"; +import { UpdateCheckResult } from "electron-updater"; +import { MatModule } from "../../mat-module"; describe("FooterComponent", () => { let component: FooterComponent; let fixture: ComponentFixture; + let electronService: ElectronService; + let wowUpService: WowUpService; + let sessionService: SessionService; + let electronServiceSpy: any; + let wowUpServiceSpy: any; + let sessionServiceSpy: any; beforeEach(async () => { + wowUpServiceSpy = jasmine.createSpyObj("WowUpService", [""], { + wowupUpdateCheck$: new Subject().asObservable(), + wowupUpdateDownloaded$: new Subject().asObservable(), + wowupUpdateCheckInProgress$: new Subject().asObservable(), + wowupUpdateDownloadInProgress$: new Subject().asObservable(), + }); + + sessionServiceSpy = jasmine.createSpyObj("SessionService", [""], { + statusText$: new BehaviorSubject(""), + pageContextText$: new BehaviorSubject(""), + }); + await TestBed.configureTestingModule({ declarations: [FooterComponent], + imports: [ + MatModule, + OverlayModule, + HttpClientModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + deps: [HttpClient], + }, + compiler: { + provide: TranslateCompiler, + useClass: TranslateMessageFormatCompiler, + }, + }) + ], + }).overrideComponent(FooterComponent, { + set: { + providers: [ + { provide: WowUpService, useValue: wowUpServiceSpy }, + { provide: ElectronService, useValue: electronServiceSpy }, + { provide: SessionService, useValue: sessionServiceSpy }, + ]}, }).compileComponents(); - }); - beforeEach(() => { fixture = TestBed.createComponent(FooterComponent); component = fixture.componentInstance; + wowUpService = fixture.debugElement.injector.get(WowUpService); + electronService = fixture.debugElement.injector.get(ElectronService); + sessionService = fixture.debugElement.injector.get(SessionService); + fixture.detectChanges(); }); diff --git a/wowup-electron/src/app/components/get-addon-status-column/get-addon-status-column.component.spec.ts b/wowup-electron/src/app/components/get-addon-status-column/get-addon-status-column.component.spec.ts index 954f71c4..75118c66 100644 --- a/wowup-electron/src/app/components/get-addon-status-column/get-addon-status-column.component.spec.ts +++ b/wowup-electron/src/app/components/get-addon-status-column/get-addon-status-column.component.spec.ts @@ -1,5 +1,6 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; import { GetAddonStatusColumnComponent } from "./get-addon-status-column.component"; +import { CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; describe("GetAddonStatusColumnComponent", () => { let component: GetAddonStatusColumnComponent; @@ -8,10 +9,9 @@ describe("GetAddonStatusColumnComponent", () => { beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [GetAddonStatusColumnComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }).compileComponents(); - }); - beforeEach(() => { fixture = TestBed.createComponent(GetAddonStatusColumnComponent); component = fixture.componentInstance; fixture.detectChanges(); diff --git a/wowup-electron/src/app/components/install-from-url-dialog/install-from-url-dialog.component.spec.ts b/wowup-electron/src/app/components/install-from-url-dialog/install-from-url-dialog.component.spec.ts index b7ceeb85..dd20bd08 100644 --- a/wowup-electron/src/app/components/install-from-url-dialog/install-from-url-dialog.component.spec.ts +++ b/wowup-electron/src/app/components/install-from-url-dialog/install-from-url-dialog.component.spec.ts @@ -1,19 +1,58 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { AddonService, } from "../../services/addons/addon.service"; +import { SessionService } from "../../services/session/session.service"; +import { TranslateCompiler, TranslateLoader, TranslateModule } from "@ngx-translate/core"; +import { HttpClient, HttpClientModule } from "@angular/common/http"; +import { httpLoaderFactory } from "../../app.module"; +import { TranslateMessageFormatCompiler } from "ngx-translate-messageformat-compiler"; import { InstallFromUrlDialogComponent } from "./install-from-url-dialog.component"; +import { MatDialogRef } from "@angular/material/dialog"; +import { DownloadCountPipe } from "../../pipes/download-count.pipe"; +import { MatModule } from "../../mat-module"; +import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; describe("InstallFromUrlDialogComponent", () => { let component: InstallFromUrlDialogComponent; let fixture: ComponentFixture; + let sessionService: SessionService; + let sessionServiceSpy: any; + let addonService: AddonService; + let addonServiceSpy: any; beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [InstallFromUrlDialogComponent], + imports: [ + MatModule, + HttpClientModule, + BrowserAnimationsModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + deps: [HttpClient], + }, + compiler: { + provide: TranslateCompiler, + useClass: TranslateMessageFormatCompiler, + }, + }) + ], + }).overrideComponent(InstallFromUrlDialogComponent, { + set: { + providers: [ + DownloadCountPipe, + { provide: MatDialogRef, useValue: {} }, + { provide: AddonService, useValue: addonServiceSpy }, + { provide: SessionService, useValue: sessionServiceSpy }, + ]}, }).compileComponents(); - }); - beforeEach(() => { fixture = TestBed.createComponent(InstallFromUrlDialogComponent); component = fixture.componentInstance; + addonService = fixture.debugElement.injector.get(AddonService); + sessionService = fixture.debugElement.injector.get(SessionService); + fixture.detectChanges(); }); diff --git a/wowup-electron/src/app/components/my-addon-status-column/my-addon-status-column.component.spec.ts b/wowup-electron/src/app/components/my-addon-status-column/my-addon-status-column.component.spec.ts index 15989d6b..4a8a1f5d 100644 --- a/wowup-electron/src/app/components/my-addon-status-column/my-addon-status-column.component.spec.ts +++ b/wowup-electron/src/app/components/my-addon-status-column/my-addon-status-column.component.spec.ts @@ -1,5 +1,9 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; import { MyAddonStatusColumnComponent } from "./my-addon-status-column.component"; +import { HttpClient, HttpClientModule } from "@angular/common/http"; +import { TranslateCompiler, TranslateLoader, TranslateModule } from "@ngx-translate/core"; +import { httpLoaderFactory } from "../../app.module"; +import { TranslateMessageFormatCompiler } from "ngx-translate-messageformat-compiler"; describe("MyAddonStatusColumnComponent", () => { let component: MyAddonStatusColumnComponent; @@ -8,6 +12,17 @@ describe("MyAddonStatusColumnComponent", () => { beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [MyAddonStatusColumnComponent], + imports: [HttpClientModule, TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + deps: [HttpClient], + }, + compiler: { + provide: TranslateCompiler, + useClass: TranslateMessageFormatCompiler, + }, + })], }).compileComponents(); }); diff --git a/wowup-electron/src/app/components/my-addons-addon-cell/my-addons-addon-cell.component.spec.ts b/wowup-electron/src/app/components/my-addons-addon-cell/my-addons-addon-cell.component.spec.ts index 7830b182..b5014357 100644 --- a/wowup-electron/src/app/components/my-addons-addon-cell/my-addons-addon-cell.component.spec.ts +++ b/wowup-electron/src/app/components/my-addons-addon-cell/my-addons-addon-cell.component.spec.ts @@ -1,8 +1,49 @@ +import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { TranslateCompiler, TranslateLoader, TranslateModule } from "@ngx-translate/core"; +import { HttpClient, HttpClientModule } from "@angular/common/http"; +import { httpLoaderFactory } from "../../app.module"; +import { TranslateMessageFormatCompiler } from "ngx-translate-messageformat-compiler"; import { MyAddonsAddonCellComponent } from "./my-addons-addon-cell.component"; +import { AddonViewModel } from "../../business-objects/my-addon-list-item"; +import { Addon } from "../../entities/addon"; +import { MatModule } from "../../mat-module"; describe("MyAddonsAddonCellComponent", () => { + let component: MyAddonsAddonCellComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [MyAddonsAddonCellComponent], + imports: [ + MatModule, + HttpClientModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + deps: [HttpClient], + }, + compiler: { + provide: TranslateCompiler, + useClass: TranslateMessageFormatCompiler, + }, + }) + ], + }).compileComponents(); + + fixture = TestBed.createComponent(MyAddonsAddonCellComponent); + component = fixture.componentInstance; + + component.listItem = new AddonViewModel({ + name: "Teelo's Test Tool", + dependencies: [], + } as Addon); + + fixture.detectChanges(); + }); + it("should create", () => { - const instance = new MyAddonsAddonCellComponent(); - expect(instance).toBeTruthy(); + expect(component).toBeTruthy(); }); }); diff --git a/wowup-electron/src/app/components/options-app-section/options-app-section.component.spec.ts b/wowup-electron/src/app/components/options-app-section/options-app-section.component.spec.ts index f29179e4..d6803b16 100644 --- a/wowup-electron/src/app/components/options-app-section/options-app-section.component.spec.ts +++ b/wowup-electron/src/app/components/options-app-section/options-app-section.component.spec.ts @@ -1,20 +1,92 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; - +import { TranslateCompiler, TranslateLoader, TranslateModule } from "@ngx-translate/core"; +import { HttpClient, HttpClientModule } from "@angular/common/http"; +import { TranslateMessageFormatCompiler } from "ngx-translate-messageformat-compiler"; +import { MatDialog } from "@angular/material/dialog"; +import { AnalyticsService } from "../../services/analytics/analytics.service"; +import { FileService } from "../../services/files/file.service"; +import { SessionService } from "../../services/session/session.service"; +import { WowUpService } from "../../services/wowup/wowup.service"; +import { ElectronService } from "../../services"; import { OptionsAppSectionComponent } from "./options-app-section.component"; +import { httpLoaderFactory } from "../../app.module"; +import { BehaviorSubject } from "rxjs"; +import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; +import { MatModule } from "../../mat-module"; describe("OptionsAppSectionComponent", () => { let component: OptionsAppSectionComponent; let fixture: ComponentFixture; + let electronService: ElectronService; + let electronServiceSpy: any; + let wowUpService: WowUpService; + let wowUpServiceSpy: any; + let sessionService: SessionService; + let sessionServiceSpy: any; + let fileService: FileService; + let fileServiceSpy: any; + let analyticsService: AnalyticsService; + let analyticsServiceSpy: any; beforeEach(async () => { + analyticsServiceSpy = jasmine.createSpyObj("AnalyticsService", [""], { + telemetryEnabled$: new BehaviorSubject(false).asObservable() + }); + electronServiceSpy = jasmine.createSpyObj("ElectronService", [""], { + isWin : false, + isLinux : true, + isMac: false, + }); + wowUpServiceSpy = jasmine.createSpyObj("WowUpService", [""], { + collapseToTray: false, + useHardwareAcceleration: false, + startWithSystem: false, + startMinimized: false, + currentLanguage: false, + }); + await TestBed.configureTestingModule({ declarations: [OptionsAppSectionComponent], + providers: [ + MatDialog, + ElectronService, + ], + imports: [ + HttpClientModule, + MatModule, + BrowserAnimationsModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + deps: [HttpClient], + }, + compiler: { + provide: TranslateCompiler, + useClass: TranslateMessageFormatCompiler, + }, + }) + ], + }).overrideComponent(OptionsAppSectionComponent, { + set: { + providers: [ + MatDialog, + { provide: ElectronService, useValue: electronServiceSpy }, + { provide: WowUpService, useValue: wowUpServiceSpy }, + { provide: SessionService, useValue: sessionServiceSpy }, + { provide: FileService, useValue: fileServiceSpy }, + { provide: AnalyticsService, useValue: analyticsServiceSpy }, + ]}, }).compileComponents(); - }); - beforeEach(() => { fixture = TestBed.createComponent(OptionsAppSectionComponent); component = fixture.componentInstance; + electronService = fixture.debugElement.injector.get(ElectronService); + sessionService = fixture.debugElement.injector.get(SessionService); + wowUpService = fixture.debugElement.injector.get(WowUpService); + fileService = fixture.debugElement.injector.get(FileService); + analyticsService = fixture.debugElement.injector.get(AnalyticsService); + fixture.detectChanges(); }); diff --git a/wowup-electron/src/app/components/options-debug-section/options-debug-section.component.spec.ts b/wowup-electron/src/app/components/options-debug-section/options-debug-section.component.spec.ts index 94c73b29..55e54278 100644 --- a/wowup-electron/src/app/components/options-debug-section/options-debug-section.component.spec.ts +++ b/wowup-electron/src/app/components/options-debug-section/options-debug-section.component.spec.ts @@ -1,29 +1,68 @@ -import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { ComponentFixture, fakeAsync, TestBed, tick } from "@angular/core/testing"; import { OptionsDebugSectionComponent } from "./options-debug-section.component"; import { AddonService } from "../../services/addons/addon.service"; import { WowUpService } from "../../services/wowup/wowup.service"; +import { TranslateCompiler, TranslateLoader, TranslateModule } from "@ngx-translate/core"; +import { HttpClient, HttpClientModule } from "@angular/common/http"; +import { TranslateMessageFormatCompiler } from "ngx-translate-messageformat-compiler"; +import { httpLoaderFactory } from "../../app.module"; describe("OptionsDebugSectionComponent", () => { let component: OptionsDebugSectionComponent; let fixture: ComponentFixture; + let addonService: AddonService; + let wowUpService: WowUpService; + let addonServiceSpy: any; + let wowUpServiceSpy: any; beforeEach(async () => { + addonServiceSpy = jasmine.createSpyObj(AddonService, ["logDebugData"]); + wowUpServiceSpy = jasmine.createSpyObj(WowUpService, ["showLogsFolder"]); + await TestBed.configureTestingModule({ declarations: [OptionsDebugSectionComponent], + imports: [HttpClientModule, TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + deps: [HttpClient], + }, + compiler: { + provide: TranslateCompiler, + useClass: TranslateMessageFormatCompiler, + }, + })], + }).overrideComponent(OptionsDebugSectionComponent, { + set: { providers: [ - { provider: AddonService, useValue: jasmine.createSpyObj(AddonService, ['logDebugData']) }, - { provider: WowUpService, useValue: jasmine.createSpyObj(WowUpService, ['showLogsFolder']) }, - ], + { provide: AddonService, useValue: addonServiceSpy }, + { provide: WowUpService, useValue: wowUpServiceSpy }, + ]}, }).compileComponents(); - }); - beforeEach(() => { fixture = TestBed.createComponent(OptionsDebugSectionComponent); component = fixture.componentInstance; + addonService = fixture.debugElement.injector.get(AddonService); + wowUpService = fixture.debugElement.injector.get(WowUpService); + fixture.detectChanges(); }); it("should create", () => { expect(component).toBeTruthy(); }); + + it("Should call logDebugData", fakeAsync(() => { + const button = fixture.debugElement.nativeElement.querySelector("button[action='LogDebugData']"); + button.click(); + tick(); + expect(addonServiceSpy.logDebugData).toHaveBeenCalled(); + })); + + it("Should call showLogFiles", fakeAsync(() => { + const button = fixture.debugElement.nativeElement.querySelector("button[action='ShowLogFiles']"); + button.click(); + tick(); + expect(wowUpServiceSpy.showLogsFolder).toHaveBeenCalled(); + })); }); diff --git a/wowup-electron/src/app/components/options-wow-section/options-wow-section.component.spec.ts b/wowup-electron/src/app/components/options-wow-section/options-wow-section.component.spec.ts index a33949b0..1deb1ebb 100644 --- a/wowup-electron/src/app/components/options-wow-section/options-wow-section.component.spec.ts +++ b/wowup-electron/src/app/components/options-wow-section/options-wow-section.component.spec.ts @@ -1,20 +1,60 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; - +import { MatDialog, MatDialogModule } from "@angular/material/dialog"; +import { WowUpService } from "../../services/wowup/wowup.service"; +import { TranslateCompiler, TranslateLoader, TranslateModule } from "@ngx-translate/core"; +import { WarcraftService } from "../../services/warcraft/warcraft.service"; +import { HttpClient, HttpClientModule } from "@angular/common/http"; +import { httpLoaderFactory } from "../../app.module"; +import { TranslateMessageFormatCompiler } from "ngx-translate-messageformat-compiler"; import { OptionsWowSectionComponent } from "./options-wow-section.component"; +import { WowUpReleaseChannelType } from "../../models/wowup/wowup-release-channel-type"; describe("OptionsWowSectionComponent", () => { let component: OptionsWowSectionComponent; let fixture: ComponentFixture; + let wowUpService: WowUpService; + let wowUpServiceSpy: any; + let warcraftService: WarcraftService; + let warcraftServiceSpy: any; beforeEach(async () => { + wowUpServiceSpy = jasmine.createSpyObj("WowUpService", [""], { + wowUpReleaseChannel: WowUpReleaseChannelType.Stable, + }) + await TestBed.configureTestingModule({ declarations: [OptionsWowSectionComponent], + imports: [ + HttpClientModule, + MatDialogModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + deps: [HttpClient], + }, + compiler: { + provide: TranslateCompiler, + useClass: TranslateMessageFormatCompiler, + }, + }) + ], + providers: [ + MatDialog, + ] + }).overrideComponent(OptionsWowSectionComponent, { + set: { + providers: [ + { provide: WowUpService, useValue: wowUpServiceSpy }, + { provide: WarcraftService, useValue: warcraftServiceSpy }, + ]}, }).compileComponents(); - }); - beforeEach(() => { fixture = TestBed.createComponent(OptionsWowSectionComponent); component = fixture.componentInstance; + wowUpService = fixture.debugElement.injector.get(WowUpService); + warcraftService = fixture.debugElement.injector.get(WarcraftService); + fixture.detectChanges(); }); diff --git a/wowup-electron/src/app/components/progress-spinner/progress-spinner.component.spec.ts b/wowup-electron/src/app/components/progress-spinner/progress-spinner.component.spec.ts index 066b0c58..376adc9d 100644 --- a/wowup-electron/src/app/components/progress-spinner/progress-spinner.component.spec.ts +++ b/wowup-electron/src/app/components/progress-spinner/progress-spinner.component.spec.ts @@ -1,5 +1,11 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; import { ProgressSpinnerComponent } from "./progress-spinner.component"; +import { HttpClient, HttpClientModule } from "@angular/common/http"; +import { TranslateCompiler, TranslateLoader, TranslateModule } from "@ngx-translate/core"; +import { httpLoaderFactory } from "../../app.module"; +import { TranslateMessageFormatCompiler } from "ngx-translate-messageformat-compiler"; +import { CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; +import { MatModule } from "../../mat-module"; describe("ProgressSpinnerComponent", () => { let component: ProgressSpinnerComponent; @@ -8,10 +14,24 @@ describe("ProgressSpinnerComponent", () => { beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [ProgressSpinnerComponent], + imports: [ + MatModule, + HttpClientModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + deps: [HttpClient], + }, + compiler: { + provide: TranslateCompiler, + useClass: TranslateMessageFormatCompiler, + }, + }) + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }).compileComponents(); - }); - beforeEach(() => { fixture = TestBed.createComponent(ProgressSpinnerComponent); component = fixture.componentInstance; fixture.detectChanges(); diff --git a/wowup-electron/src/app/components/telemetry-dialog/telemetry-dialog.component.spec.ts b/wowup-electron/src/app/components/telemetry-dialog/telemetry-dialog.component.spec.ts index c10c7dfc..c25ad216 100644 --- a/wowup-electron/src/app/components/telemetry-dialog/telemetry-dialog.component.spec.ts +++ b/wowup-electron/src/app/components/telemetry-dialog/telemetry-dialog.component.spec.ts @@ -1,5 +1,11 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; import { TelemetryDialogComponent } from "./telemetry-dialog.component"; +import { MatDialogRef } from "@angular/material/dialog"; +import { HttpClient, HttpClientModule } from "@angular/common/http"; +import { TranslateCompiler, TranslateLoader, TranslateModule } from "@ngx-translate/core"; +import { httpLoaderFactory } from "../../app.module"; +import { TranslateMessageFormatCompiler } from "ngx-translate-messageformat-compiler"; +import { MatModule } from "../../mat-module"; describe("TelemetryDialogComponent", () => { let component: TelemetryDialogComponent; @@ -8,10 +14,26 @@ describe("TelemetryDialogComponent", () => { beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [TelemetryDialogComponent], + imports: [ + MatModule, + HttpClientModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + deps: [HttpClient], + }, + compiler: { + provide: TranslateCompiler, + useClass: TranslateMessageFormatCompiler, + }, + }) + ], + providers: [ + {provide: MatDialogRef, useValue: {} }, + ] }).compileComponents(); - }); - beforeEach(() => { fixture = TestBed.createComponent(TelemetryDialogComponent); component = fixture.componentInstance; fixture.detectChanges(); diff --git a/wowup-electron/src/app/components/titlebar/titlebar.component.html b/wowup-electron/src/app/components/titlebar/titlebar.component.html index e97e7de2..2b6df5a1 100644 --- a/wowup-electron/src/app/components/titlebar/titlebar.component.html +++ b/wowup-electron/src/app/components/titlebar/titlebar.component.html @@ -13,7 +13,7 @@
WowUp.io
-