UNPKG

igniteui-angular-sovn

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

633 lines (584 loc) 26.1 kB
import * as path from "path"; import { EmptyTree } from "@angular-devkit/schematics"; import { SchematicTestRunner, UnitTestTree, } from "@angular-devkit/schematics/testing"; const version = "13.0.0"; describe(`Update to ${version}`, () => { let appTree: UnitTestTree; const schematicRunner = new SchematicTestRunner( "ig-migrate", path.join(__dirname, "../migration-collection.json") ); const configJson = { projects: { testProj: { root: "/", sourceRoot: "/testSrc", }, }, schematics: { "@schematics/angular:component": { prefix: "appPrefix", }, }, }; beforeEach(() => { appTree = new UnitTestTree(new EmptyTree()); appTree.create("/angular.json", JSON.stringify(configJson)); }); const migrationName = "migration-22"; const lineBreaksAndSpaceRegex = /\s/g; it("should rename CarouselAnimationType to HorizontalAnimationType", async () => { appTree.create( "/testSrc/appPrefix/component/test.component.ts", `import { Component, ViewChild } from '@angular/core'; import { CarouselAnimationType } from 'igniteui-angular-sovn'; @Component({ selector: 'animationType', templateUrl: './test.component.html', styleUrls: ['./test.component.scss'] }) export class AnimationType { public animationType: CarouselAnimationType = CarouselAnimationType.slide; } ` ); const tree = await schematicRunner .runSchematicAsync(migrationName, {}, appTree) .toPromise(); const expectedContent = `import { Component, ViewChild } from '@angular/core'; import { HorizontalAnimationType } from 'igniteui-angular-sovn'; @Component({ selector: 'animationType', templateUrl: './test.component.html', styleUrls: ['./test.component.scss'] }) export class AnimationType { public animationType: HorizontalAnimationType = HorizontalAnimationType.slide; } `; expect( tree.readContent("/testSrc/appPrefix/component/test.component.ts") ).toEqual(expectedContent); }); it("should rename IgxComboComponent selectItems to select", () => { pending("LS must be setup for tests."); }); it("should rename IgxComboComponent deselectItems to deselect", () => { pending("LS must be setup for tests."); }); it("should rename IgxComboComponent selectedItems() to selected", () => { pending("LS must be setup for tests."); }); it("should remove paging and paginationTemplate property and define a igx-paginator component with custom content", async () => { appTree.create( "/testSrc/appPrefix/component/test.component.html", ` <div class="columnHidingContainer"> <div *ngFor="let col of grid.columns"> {{col.field}} </div> </div> <div class="gridContainer"> <igx-grid igxPreventDocumentScroll #grid [data]="data" [autoGenerate]="false" width="100%" height="560px" columnWidth="200px" [allowFiltering]="true"> <igx-column [field]="'ID'" dataType="string" [sortable]="true"></igx-column> <igx-column [field]="'ContactName'" dataType="string" [sortable]="true" [disableHiding]="true"></igx-column> <igx-column [field]="'ContactTitle'" dataType="string" [sortable]="true" [disableHiding]="true"></igx-column> <igx-column [field]="'City'" dataType="string" [sortable]="true"></igx-column> <igx-column [field]="'CompanyName'" dataType="string" [sortable]="true"></igx-column> </igx-grid> </div>` ); const tree = await schematicRunner .runSchematicAsync(migrationName, {}, appTree) .toPromise(); expect( tree .readContent("/testSrc/appPrefix/component/test.component.html") .replace(lineBreaksAndSpaceRegex, "") ).toEqual( ` <div class="columnHidingContainer"> <div *ngFor="let col of grid.columns"> {{col.field}} </div> </div> <div class="gridContainer"> <igx-grid igxPreventDocumentScroll #grid [data]="data" [autoGenerate]="false" width="100%" height="560px" columnWidth="200px" [allowFiltering]="true"> <igx-column [field]="'ID'" dataType="string" [sortable]="true"></igx-column> <igx-column [field]="'ContactName'" dataType="string" [sortable]="true" [disableHiding]="true"></igx-column> <igx-column [field]="'ContactTitle'" dataType="string" [sortable]="true" [disableHiding]="true"></igx-column> <igx-column [field]="'City'" dataType="string" [sortable]="true"></igx-column> <igx-column [field]="'CompanyName'" dataType="string" [sortable]="true"></igx-column> </igx-grid> </div> `.replace(lineBreaksAndSpaceRegex, "") ); }); it("should insert a comment when exporter services are present in module.ts files", async () => { appTree.create( "/testSrc/appPrefix/component/app.module.ts", `import { NgModule } from "@angular/core"; import { FormsModule } from "@angular/forms"; import { BrowserModule } from "@angular/platform-browser"; import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; import { AppComponent } from "./app.component"; import { IgxCsvExporterService, IgxExcelExporterService } from "igniteui-angular-sovn"; import { ExcelExportComponent } from "./services/export-excel/excel-export.component"; @NgModule({ bootstrap: [AppComponent], declarations: [ AppComponent, ExcelExportComponent ], imports: [ BrowserModule, BrowserAnimationsModule, FormsModule ], providers: [ IgxCsvExporterService, IgxExcelExporterService ], schemas: [] }) export class AppModule {} ` ); const tree = await schematicRunner .runSchematicAsync(migrationName, {}, appTree) .toPromise(); expect( tree.readContent("/testSrc/appPrefix/component/app.module.ts") ).toEqual( `// IgxCsvExporterService and IgxExcelExporterService no longer need to be manually provided and can be safely removed. import { NgModule } from "@angular/core"; import { FormsModule } from "@angular/forms"; import { BrowserModule } from "@angular/platform-browser"; import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; import { AppComponent } from "./app.component"; import { IgxCsvExporterService, IgxExcelExporterService } from "igniteui-angular-sovn"; import { ExcelExportComponent } from "./services/export-excel/excel-export.component"; @NgModule({ bootstrap: [AppComponent], declarations: [ AppComponent, ExcelExportComponent ], imports: [ BrowserModule, BrowserAnimationsModule, FormsModule ], providers: [ IgxCsvExporterService, IgxExcelExporterService ], schemas: [] }) export class AppModule {} ` ); }); it("Should properly rename rowData property to data", async () => { pending("set up tests for migrations through lang service"); appTree.create( "/testSrc/appPrefix/component/test.component.ts", ` import { IgxGridRow, IgxTreeGridRow, IgxHierarchicalGridRow, IgxChildGridRowComponent, IgxRowDirective } from 'igniteui-angular-sovn'; export class MyClass { @ViewChild(IgxGridComponent, { read: IgxGridComponent }) public grid: IgxGridComponent; public tgrid: IgxGridComponent; public hgrid: IgxGridComponent; public ngAfterViewInit() { // rowData const rowData = this.grid.getRowByIndex(0).rowData; const rowData2 = this.tgrid.getRowByIndex(0).rowData; const rowData3 = this.hgrid.getRowByIndex(0).rowData; const rowData4 = this.grid.rowList.first.rowData; const rowData5 = this.tgrid.rowList.first.rowData; const rowData6 = this.hgrid.rowList.first.rowData; // rowID const rowID = this.grid.getRowByIndex(0).rowID; const rowID2 = this.tgrid.getRowByIndex(0).rowID; const rowID3 = this.hgrid.getRowByIndex(0).rowID; const rowID4 = this.grid.rowList.first.rowID; const rowID5 = this.tgrid.rowList.first.rowID; const rowID6 = this.hgrid.rowList.first.rowID; const treeRowID = this.tgrid.getRowByIndex(0).treeRow.rowID; } } ` ); const tree = await schematicRunner .runSchematicAsync(migrationName, {}, appTree) .toPromise(); expect( tree.readContent("/testSrc/appPrefix/component/test.component.ts") ).toEqual( ` import { IgxGridRow, IgxTreeGridRow, IgxHierarchicalGridRow, IgxChildGridRowComponent, IgxRowDirective } from 'igniteui-angular-sovn'; export class MyClass { @ViewChild(IgxGridComponent, { read: IgxGridComponent }) public grid: IgxGridComponent; public tgrid: IgxGridComponent; public hgrid: IgxGridComponent; public ngAfterViewInit() { // rowData const rowData = this.grid.getRowByIndex(0).data; const rowData2 = this.tgrid.getRowByIndex(0).data; const rowData3 = this.hgrid.getRowByIndex(0).data; const rowData4 = this.grid.rowList.first.data; const rowData5 = this.tgrid.rowList.first.data; const rowData6 = this.hgrid.rowList.first.data; // rowID const rowID = this.grid.getRowByIndex(0).key; const rowID2 = this.tgrid.getRowByIndex(0).key; const rowID3 = this.hgrid.getRowByIndex(0).key; const rowID4 = this.grid.rowList.first.key; const rowID5 = this.tgrid.rowList.first.key; const rowID6 = this.hgrid.rowList.first.key; const treeRowID = this.tgrid.getRowByIndex(0).treeRow.key; } } ` ); }); it("Should properly rename columnsCollection property to columns", async () => { pending("set up tests for migrations through lang service"); appTree.create( "/testSrc/appPrefix/component/test.component.ts", ` import { IgxGridComponent } from 'igniteui-angular-sovn'; export class MyClass { @ViewChild(IgxGridComponent, { read: IgxGridComponent }) public grid1: IgxGridComponent; public ngAfterViewInit() { const columns = grid1.columnsCollection; } } ` ); const tree = await schematicRunner .runSchematicAsync(migrationName, {}, appTree) .toPromise(); expect( tree.readContent("/testSrc/appPrefix/component/test.component.ts") ).toEqual( ` import { IgxGridComponent } from 'igniteui-angular-sovn'; export class MyClass { @ViewChild(IgxGridComponent, { read: IgxGridComponent }) public grid1: IgxGridComponent; public ngAfterViewInit() { const columns = grid1.columns; } } ` ); }); it("Should properly rename columnsCollection property to columns - treeGrid", async () => { pending("set up tests for migrations through lang service"); appTree.create( "/testSrc/appPrefix/component/test.component.ts", ` import { IgxTreeGridComponent } from 'igniteui-angular-sovn'; export class MyClass { @ViewChild(IgxTreeGridComponent, { read: IgxTreeGridComponent }) public tGrid1: IgxTreeGridComponent; public ngAfterViewInit() { const columns = this.tGrid1.columns; } public soSth() { const editableColumns = this.tGrid1.columnsCollection.filter(c => e.editable); } } ` ); const tree = await schematicRunner .runSchematicAsync(migrationName, {}, appTree) .toPromise(); expect( tree.readContent("/testSrc/appPrefix/component/test.component.ts") ).toEqual( ` import { IgxTreeGridComponent } from 'igniteui-angular-sovn'; export class MyClass { @ViewChild(IgxTreeGridComponent, { read: IgxTreeGridComponent }) public tGrid1: IgxTreeGridComponent; public ngAfterViewInit() { const columns = this.tGrid1.columnsCollection; } public soSth() { const editableColumns = this.tGrid1.columns.filter(c => e.editable); } } ` ); }); it("should remove grid toolbar inputs and define a igx-grid-toolbar component instead", async () => { appTree.create( "/testSrc/appPrefix/component/test.component.html", ` <igx-grid #grid1 [data]="data" [showToolbar]='someVal' height="300px" width="300px" columnHiding="'true'" [toolbarTitle]='someVal1' columnHidingTitle='hidingTitle' hiddenColumnsText='hiddenColumns' [columnPinning]="someVal2" [columnPinningTitle]="pinningTitle" [pinnedColumnsText]="pinnedColumns"> <igx-column field="Name" header="Athlete"></igx-column> <igx-column field="TrackProgress" header="Track Progress"></igx-column> <igx-column field="CountryFlag" header="Country"></igx-column> </igx-grid>` ); const tree = await schematicRunner .runSchematicAsync(migrationName, {}, appTree) .toPromise(); expect( tree.readContent("/testSrc/appPrefix/component/test.component.html") ).toEqual(` <igx-grid #grid1 [data]="data" height="300px" width="300px"> <igx-grid-toolbar *ngIf="someVal"> <igx-grid-toolbar-title>someVal1</igx-grid-toolbar-title> <igx-grid-toolbar-actions> <igx-grid-toolbar-hiding title="hidingTitle" buttonText="hiddenColumns"></igx-grid-toolbar-hiding> <igx-grid-toolbar-pinning *ngIf="someVal2" title="pinningTitle" buttonText="pinnedColumns"></igx-grid-toolbar-pinning> </igx-grid-toolbar-actions> </igx-grid-toolbar> <igx-column field="Name" header="Athlete"></igx-column> <igx-column field="TrackProgress" header="Track Progress"></igx-column> <igx-column field="CountryFlag" header="Country"></igx-column> </igx-grid>`); }); it("should migrate row island toolbar inputs to igx-grid-toolbar component instead", async () => { appTree.create( "/testSrc/appPrefix/component/test.component.html", ` <igx-hierarchical-grid [showExpandAll]='true' [data]="localData" [autoGenerate]="true" [height]="'600px'" [width]="'800px'" #hGrid [primaryKey]="'ID'"> <igx-grid-toolbar> <igx-grid-toolbar-title>Singers</igx-grid-toolbar-title> <igx-grid-toolbar-actions> <igx-grid-toolbar-hiding title="Column Hiding" buttonText="Hidden"></igx-grid-toolbar-hiding> </igx-grid-toolbar-actions> </igx-grid-toolbar> <igx-row-island #island [key]="'childData'" [autoGenerate]="true" [primaryKey]="'ID'" [toolbarTitle]="someVal1" columnHiding="'true'" [columnHidingTitle]="hidingTitle" [columnPinning]="someVal2" hiddenColumnsText="Hidden"> <igx-row-island [key]="'childData'" [autoGenerate]="true" [allowFiltering]="true" [rowSelection]="'multiple'"> </igx-row-island> </igx-row-island> <igx-row-island [key]="'childData2'" [autoGenerate]="true" [allowFiltering]="true"></igx-row-island> </igx-hierarchical-grid>` ); const tree = await schematicRunner .runSchematicAsync(migrationName, {}, appTree) .toPromise(); expect( tree.readContent("/testSrc/appPrefix/component/test.component.html") ).toEqual(` <igx-hierarchical-grid [showExpandAll]='true' [data]="localData" [autoGenerate]="true" [height]="'600px'" [width]="'800px'" #hGrid [primaryKey]="'ID'"> <igx-grid-toolbar> <igx-grid-toolbar-title>Singers</igx-grid-toolbar-title> <igx-grid-toolbar-actions> <igx-grid-toolbar-hiding title="Column Hiding" buttonText="Hidden"></igx-grid-toolbar-hiding> </igx-grid-toolbar-actions> </igx-grid-toolbar> <igx-row-island #island [key]="'childData'" [autoGenerate]="true" [primaryKey]="'ID'"> <igx-grid-toolbar> <igx-grid-toolbar-title>someVal1</igx-grid-toolbar-title> <igx-grid-toolbar-actions> <igx-grid-toolbar-hiding title="hidingTitle" buttonText="Hidden"></igx-grid-toolbar-hiding> <igx-grid-toolbar-pinning *ngIf="someVal2"></igx-grid-toolbar-pinning> </igx-grid-toolbar-actions> </igx-grid-toolbar> <igx-row-island [key]="'childData'" [autoGenerate]="true" [allowFiltering]="true" [rowSelection]="'multiple'"> </igx-row-island> </igx-row-island> <igx-row-island [key]="'childData2'" [autoGenerate]="true" [allowFiltering]="true"></igx-row-island> </igx-hierarchical-grid>`); }); it("should update existing toolbar component", async () => { appTree.create( "/testSrc/appPrefix/component/test.component.html", ` <igx-grid #grid1 [data]="data" height="300px" width="300px" [toolbarTitle]="someVal1" [hiddenColumnsText]="hiddenColumns" [columnPinningTitle]="pinnedColumns"> <igx-grid-toolbar *ngIf="someVal"> <igx-grid-toolbar-actions> <igx-grid-toolbar-hiding title="hidingTitle"></igx-grid-toolbar-hiding> </igx-grid-toolbar-actions> </igx-grid-toolbar> <igx-column field="Name" header="Athlete"></igx-column> <igx-column field="TrackProgress" header="Track Progress"></igx-column> <igx-column field="CountryFlag" header="Country"></igx-column> </igx-grid>` ); const tree = await schematicRunner .runSchematicAsync(migrationName, {}, appTree) .toPromise(); expect( tree.readContent("/testSrc/appPrefix/component/test.component.html") ).toEqual(` <igx-grid #grid1 [data]="data" height="300px" width="300px"> <igx-grid-toolbar *ngIf="someVal"> <igx-grid-toolbar-title>someVal1</igx-grid-toolbar-title> <igx-grid-toolbar-actions> <igx-grid-toolbar-hiding title="hidingTitle" buttonText="hiddenColumns"></igx-grid-toolbar-hiding> <igx-grid-toolbar-pinning title="pinnedColumns"></igx-grid-toolbar-pinning> </igx-grid-toolbar-actions> </igx-grid-toolbar> <igx-column field="Name" header="Athlete"></igx-column> <igx-column field="TrackProgress" header="Track Progress"></igx-column> <igx-column field="CountryFlag" header="Country"></igx-column> </igx-grid>`); }); it("should remove grid toolbar inputs and define a igx-grid-toolbar component instead", async () => { appTree.create( "/testSrc/appPrefix/component/test.component.html", ` <igx-grid #grid1 [data]="data" height="300px" width="300px" [pinnedColumnsText]="pinnedColumns"> <igx-column field="Name" header="Athlete"></igx-column> <igx-column field="TrackProgress" header="Track Progress"></igx-column> <igx-column field="CountryFlag" header="Country"></igx-column> </igx-grid>` ); const tree = await schematicRunner .runSchematicAsync(migrationName, {}, appTree) .toPromise(); expect( tree.readContent("/testSrc/appPrefix/component/test.component.html") ).toEqual(` <igx-grid #grid1 [data]="data" height="300px" width="300px"> <igx-grid-toolbar> <igx-grid-toolbar-actions> <igx-grid-toolbar-pinning buttonText="pinnedColumns"></igx-grid-toolbar-pinning> </igx-grid-toolbar-actions> </igx-grid-toolbar> <igx-column field="Name" header="Athlete"></igx-column> <igx-column field="TrackProgress" header="Track Progress"></igx-column> <igx-column field="CountryFlag" header="Country"></igx-column> </igx-grid>`); }); it("should contain all actions from the before toolbar", async () => { appTree.create( "/testSrc/appPrefix/component/test.component.html", ` <igx-grid #grid1 hiddenColumnsText="Hidden" primaryKey='id'> <igx-grid-toolbar *ngIf="showToolbar"> <igx-grid-toolbar-actions> <igx-grid-toolbar-hiding title="Indicators"></igx-grid-toolbar-hiding> <igx-grid-toolbar-pinning></igx-grid-toolbar-pinning> <igx-grid-toolbar-exporter [exportCSV]="false"> <span excelText>Export to Excel</span> </igx-grid-toolbar-exporter> <igx-grid-toolbar-advanced-filtering>Custom text for the toggle button</igx-grid-toolbar-advanced-filtering> </igx-grid-toolbar-actions> </igx-grid-toolbar> </igx-grid>` ); const tree = await schematicRunner .runSchematicAsync(migrationName, {}, appTree) .toPromise(); expect( tree.readContent("/testSrc/appPrefix/component/test.component.html") ).toEqual(` <igx-grid #grid1 primaryKey='id'> <igx-grid-toolbar *ngIf="showToolbar"> <igx-grid-toolbar-actions> <igx-grid-toolbar-hiding title="Indicators" buttonText="Hidden"></igx-grid-toolbar-hiding> <igx-grid-toolbar-pinning></igx-grid-toolbar-pinning> <igx-grid-toolbar-exporter exportCSV="false"> <span excelText>Export to Excel</span> </igx-grid-toolbar-exporter> <igx-grid-toolbar-advanced-filtering>Custom text for the toggle button</igx-grid-toolbar-advanced-filtering> </igx-grid-toolbar-actions> </igx-grid-toolbar> </igx-grid>`); }); it("should remove grid toolbar exporter inputs and define a igx-grid-toolbar component instead", async () => { appTree.create( "/testSrc/appPrefix/component/test.component.html", ` <igx-grid #grid1 [data]="data" height="300px" width="300px" [exportExcel]="true" [exportCsv]="csvExport"> <igx-grid-toolbar> <igx-grid-toolbar-actions> <igx-grid-toolbar-exporter [exportCSV]="true" [exportExcel]="true"> <span excelText>Custom text for the excel export entry</span> <span csvText>Custom text for the CSV export entry</span> </igx-grid-toolbar-exporter> </igx-grid-toolbar-actions> </igx-grid-toolbar> <igx-column field="Name" header="Athlete"></igx-column> <igx-column field="TrackProgress" header="Track Progress"></igx-column> <igx-column field="CountryFlag" header="Country"></igx-column> </igx-grid>` ); const tree = await schematicRunner .runSchematicAsync(migrationName, {}, appTree) .toPromise(); expect( tree.readContent("/testSrc/appPrefix/component/test.component.html") ).toEqual(` <igx-grid #grid1 [data]="data" height="300px" width="300px"> <igx-grid-toolbar> <igx-grid-toolbar-actions> <igx-grid-toolbar-exporter exportExcel="true" exportCSV="csvExport"> <span excelText>Custom text for the excel export entry</span> <span csvText>Custom text for the CSV export entry</span> </igx-grid-toolbar-exporter> </igx-grid-toolbar-actions> </igx-grid-toolbar> <igx-column field="Name" header="Athlete"></igx-column> <igx-column field="TrackProgress" header="Track Progress"></igx-column> <igx-column field="CountryFlag" header="Country"></igx-column> </igx-grid>`); }); it("should remove grid toolbar inputs but do not remove all templating inside tooblar component", async () => { appTree.create( "/testSrc/appPrefix/component/test.component.html", ` <igx-grid #grid1 [data]="data" [showToolbar]="true" [toolbarTitle]="fdasfsa" height="300px" width="300px"> <igx-grid-toolbar> <igx-select [(ngModel)]="currentSortingType" (selectionChanging)="sortTypeSelection($event)"> <label igxLabel>Select Sorting Type</label> <igx-select-item *ngFor="let type of sortingTypes" [value]="type.value"> {{type.name}} </igx-select-item> </igx-select> </igx-grid-toolbar> <igx-column field="Name" header="Athlete"></igx-column> <igx-column field="TrackProgress" header="Track Progress"></igx-column> <igx-column field="CountryFlag" header="Country"></igx-column> </igx-grid>` ); const tree = await schematicRunner .runSchematicAsync(migrationName, {}, appTree) .toPromise(); expect( tree.readContent("/testSrc/appPrefix/component/test.component.html") ).toEqual(` <igx-grid #grid1 [data]="data" height="300px" width="300px"> <igx-grid-toolbar *ngIf="true"> <igx-grid-toolbar-title>fdasfsa</igx-grid-toolbar-title> <igx-select [(ngModel)]="currentSortingType" (selectionChanging)="sortTypeSelection($event)"> <label igxLabel>Select Sorting Type</label> <igx-select-item *ngFor="let type of sortingTypes" [value]="type.value"> {{type.name}} </igx-select-item> </igx-select> </igx-grid-toolbar> <igx-column field="Name" header="Athlete"></igx-column> <igx-column field="TrackProgress" header="Track Progress"></igx-column> <igx-column field="CountryFlag" header="Country"></igx-column> </igx-grid>`); }); });