Base solution for your next web application

Activities of "sumitshah"

Have setup SQL Server 2016 standard edition on my local machine and added the below connection string in the appsettings.json file:

"Default": "Server=SUMITSH-W10\SQL2016; Database=IDMS_vNext_AspNetZero; Trusted_Connection=True;"

If, am not using the named instance of DB, the code works as desired and am able to connect with the DB.

"Default": "Server=SUMITSH-W10; Database=Dw_Admin_AspNetZero_Schema; Trusted_Connection=True;"

Not sure, if defining the connection string for the named instance correctly.

This is giving me error as below:

An error occurred while starting the application.

SqlException: Invalid object name 'AbpEditions'.

System.Data.SqlClient.SqlConnection.OnError(SqlException exception, bool breakConnection, Action<Action> wrapCloseInAction)

SqlException: Invalid object name 'AbpEditions'.

System.Data.SqlClient.SqlConnection.OnError(SqlException exception, bool breakConnection, Action<Action> wrapCloseInAction)

System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, bool breakConnection, Action<Action> wrapCloseInAction)

System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, bool callerHasConnectionLock, bool asyncClose)

System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, out bool dataReady)

System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()

System.Data.SqlClient.SqlDataReader.get_MetaData()

System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, string resetOptionsString)

System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, bool returnStream, bool async, int timeout, out Task task, bool asyncWrite, SqlDataReader ds)

System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, bool returnStream, TaskCompletionSource<object> completion, int timeout, out Task task, bool asyncWrite, string method)

System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior)

System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)

System.Data.Common.DbCommand.ExecuteReader()

Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary<string, object> parameterValues)

Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection connection, IReadOnlyDictionary<string, object> parameterValues)

Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable+Enumerator.BufferlessMoveNext(bool buffer)

Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerExecutionStrategy.Execute<TState, TResult>(TState state, Func<DbContext, TState, TResult> operation, Func<DbContext, TState, ExecutionResult<TResult>> verifySucceeded)

Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable+Enumerator.MoveNext()

System.Linq.Enumerable.TryGetFirst<TSource>(IEnumerable<TSource> source, out bool found)

lambda_method(Closure , QueryContext )

Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler+<>c__DisplayClass17_1.<CompileQueryCore>b__0(QueryContext qc)

Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute<TResult>(Expression query)

Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute<TResult>(Expression expression)

System.Linq.Queryable.FirstOrDefault<TSource>(IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate)

Infogroup.IDMS.Migrations.Seed.Host.DefaultEditionCreator.CreateEditions() in DefaultEditionCreator.cs + 26. var defaultEdition = _context.Editions.IgnoreQueryFilters().FirstOrDefault(e => e.Name == EditionManager.DefaultEditionName);

Infogroup.IDMS.Migrations.Seed.Host.DefaultEditionCreator.Create() in DefaultEditionCreator.cs + 21. CreateEditions();

Infogroup.IDMS.Migrations.Seed.Host.InitialHostDbBuilder.Create() in InitialHostDbBuilder.cs + 16. new DefaultEditionCreator(_context).Create();

Infogroup.IDMS.Migrations.Seed.SeedHelper.SeedHostDb(IDMSDbContext context) in SeedHelper.cs + 26. new InitialHostDbBuilder(context).Create();

Infogroup.IDMS.Migrations.Seed.SeedHelper.WithDbContext<TDbContext>(IIocResolver iocResolver, Action<TDbContext> contextAction) in SeedHelper.cs + 42. contextAction(context);

Infogroup.IDMS.Migrations.Seed.SeedHelper.SeedHostDb(IIocResolver iocResolver) in SeedHelper.cs + 18. WithDbContext<IDMSDbContext>(iocResolver, SeedHostDb);

Infogroup.IDMS.EntityFrameworkCore.IDMSEntityFrameworkCoreModule.PostInitialize() in IDMSEntityFrameworkCoreModule.cs + 58. SeedHelper.SeedHostDb(IocManager);

System.Collections.Generic.List.ForEach(Action<T> action)

Abp.AbpBootstrapper.Initialize() in AbpBootstrapper.cs

Abp.AspNetCore.AbpApplicationBuilderExtensions.UseAbp(IApplicationBuilder app, Action<AbpApplicationBuilderOptions> optionsAction) in AbpApplicationBuilderExtensions.cs

Infogroup.IDMS.Web.Startup.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) in Startup.cs + 149. app.UseAbp(options =>

System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()

Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)

Microsoft.AspNetCore.ApplicationInsights.HostingStartup.ApplicationInsightsLoggerStartupFilter+<>c__DisplayClass0_1.<Configure>b__0(IApplicationBuilder builder)

Microsoft.ApplicationInsights.AspNetCore.ApplicationInsightsStartupFilter+<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)

Microsoft.AspNetCore.Server.IISIntegration.IISSetupFilter+<>c__DisplayClass3_0.<Configure>b__0(IApplicationBuilder app)

Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter+<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder builder)

Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()

Show raw exception details

System.Data.SqlClient.SqlException (0x80131904): Invalid object name 'AbpEditions'. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, TaskCompletionSource1 completion, Int32 timeout, Task& task, Boolean asyncWrite, String method) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) at System.Data.Common.DbCommand.ExecuteReader() at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary2 parameterValues) at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection connection, IReadOnlyDictionary2 parameterValues) at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable1.Enumerator.BufferlessMoveNext(Boolean buffer) at Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func3 operation, Func3 verifySucceeded) at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable1.Enumerator.MoveNext() at System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable1 source, Boolean& found) at lambda_method(Closure , QueryContext ) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass17_11.<CompileQueryCore>b__0(QueryContext qc) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query) at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable1 source, Expression1 predicate) at Infogroup.IDMS.Migrations.Seed.Host.DefaultEditionCreator.CreateEditions() in D:\Development\IDMS_vNext\IDMS\src\Infogroup.IDMS.EntityFrameworkCore\Migrations\Seed\Host\DefaultEditionCreator.cs:line 26 at Infogroup.IDMS.Migrations.Seed.Host.DefaultEditionCreator.Create() in D:\Development\IDMS_vNext\IDMS\src\Infogroup.IDMS.EntityFrameworkCore\Migrations\Seed\Host\DefaultEditionCreator.cs:line 21 at Infogroup.IDMS.Migrations.Seed.Host.InitialHostDbBuilder.Create() in D:\Development\IDMS_vNext\IDMS\src\Infogroup.IDMS.EntityFrameworkCore\Migrations\Seed\Host\InitialHostDbBuilder.cs:line 16 at Infogroup.IDMS.Migrations.Seed.SeedHelper.SeedHostDb(IDMSDbContext context) in D:\Development\IDMS_vNext\IDMS\src\Infogroup.IDMS.EntityFrameworkCore\Migrations\Seed\SeedHelper.cs:line 26 at Infogroup.IDMS.Migrations.Seed.SeedHelper.WithDbContext[TDbContext](IIocResolver iocResolver, Action1 contextAction) in D:\Development\IDMS_vNext\IDMS\src\Infogroup.IDMS.EntityFrameworkCore\Migrations\Seed\SeedHelper.cs:line 42 at Infogroup.IDMS.Migrations.Seed.SeedHelper.SeedHostDb(IIocResolver iocResolver) in D:\Development\IDMS_vNext\IDMS\src\Infogroup.IDMS.EntityFrameworkCore\Migrations\Seed\SeedHelper.cs:line 18 at Infogroup.IDMS.EntityFrameworkCore.IDMSEntityFrameworkCoreModule.PostInitialize() in D:\Development\IDMS_vNext\IDMS\src\Infogroup.IDMS.EntityFrameworkCore\EntityFrameworkCore\IDMSEntityFrameworkCoreModule.cs:line 58 at System.Collections.Generic.List1.ForEach(Action1 action) at Abp.AbpBootstrapper.Initialize() in D:\Github\aspnetboilerplate\src\Abp\AbpBootstrapper.cs:line 160 at Abp.AspNetCore.AbpApplicationBuilderExtensions.UseAbp(IApplicationBuilder app, Action`1 optionsAction) in D:\Github\aspnetboilerplate\src\Abp.AspNetCore\AspNetCore\AbpApplicationBuilderExtensions.cs:line 37 at Infogroup.IDMS.Web.Startup.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) in D:\Development\IDMS_vNext\IDMS\src\Infogroup.IDMS.Web.Host\Startup\Startup.cs:line 149 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app) at Microsoft.AspNetCore.ApplicationInsights.HostingStartup.ApplicationInsightsLoggerStartupFilter.<>c__DisplayClass0_1.

**If, am not using the named instance of DB, the code works as desired and am able to connect with the DB.

"Default": "Server=SUMITSH-W10; Database=Dw_Admin_AspNetZero_Schema; Trusted_Connection=True;"

Not sure, if defining the connection string for the named instance correctly.**

Hi Alper,

Thank you very much for the response.

Have already tried your suggestion with no success.

Using the aspnetzero RAD tools we have created a component and its back-end services. The functionality is working as desired. Now we are trying to write unit tests in jasmine for this particular component. For this we have created a new spec.ts file and import all the required dependencies. We need to create mock service to bind mock data on page load.

We followed a few of the posts mentioned below of how to mock the back end services: <a class="postlink" href="https://codecraft.tv/courses/angular/unit-testing/mocks-and-spies/">https://codecraft.tv/courses/angular/un ... and-spies/</a> <a class="postlink" href="https://alligator.io/angular/testing-with-spies/">https://alligator.io/angular/testing-with-spies/</a>

We are facing issue creating the mock service and consuming the same in the describe function. Below is the component.ts code

import { Component, Injector, ViewEncapsulation, ViewChild } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Http } from '@angular/http';
import { DatabasesServiceProxy, DatabaseDto  } from '@shared/service-proxies/service-proxies';
import { NotifyService } from '@abp/notify/notify.service';
import { AppComponentBase } from '@shared/common/app-component-base';
import { TokenAuthServiceProxy } from '@shared/service-proxies/service-proxies';
import { CreateOrEditDatabaseModalComponent } from './create-or-edit-database-modal.component';
import { ViewDatabaseModalComponent } from './view-database-modal.component';
import { appModuleAnimation } from '@shared/animations/routerTransition';
import { DataTable } from 'primeng/components/datatable/datatable';
import { Paginator } from 'primeng/components/paginator/paginator';
import { LazyLoadEvent } from 'primeng/components/common/lazyloadevent';
import { FileDownloadService } from '@shared/utils/file-download.service';
import * as moment from 'moment';

@Component({
    templateUrl: './databases.component.html',
    encapsulation: ViewEncapsulation.None,
    animations: [appModuleAnimation()]
})
export class DatabasesComponent extends AppComponentBase {

    @ViewChild('createOrEditDatabaseModal') createOrEditDatabaseModal: CreateOrEditDatabaseModalComponent;
    @ViewChild('viewDatabaseModalComponent') viewDatabaseModal: ViewDatabaseModalComponent;
    @ViewChild('dataTable') dataTable: DataTable;
    @ViewChild('paginator') paginator: Paginator;
	
    advancedFiltersAreShown = false;
	filterText = '';
		lK_DatabaseTypeFilter = '';
		cDatabaseNameFilter = '';
		cListFileUploadedPathFilter = '';
		cListReadyToLoadPathFilter = '';
		maxdCreatedDateFilter : moment.Moment;
		mindCreatedDateFilter : moment.Moment;
		cCreatedByFilter = '';
		maxdModifiedDateFilter : moment.Moment;
		mindModifiedDateFilter : moment.Moment;
		cModifiedByFilter = '';
		lK_AccountingDivisionCodeFilter = '';
		cAdministrationEmailFilter = '';
		divisioncDivisionNameFilter = '';

	

    constructor(
        injector: Injector,
        private _http: Http,
        private _databasesServiceProxy: DatabasesServiceProxy,
        private _notifyService: NotifyService,
        private _tokenAuth: TokenAuthServiceProxy,
        private _activatedRoute: ActivatedRoute,
        private _fileDownloadService: FileDownloadService
    )
    {
        super(injector);
    }

    getDatabases(event?: LazyLoadEvent) {
        if (this.primengDatatableHelper.shouldResetPaging(event)) {
            this.paginator.changePage(0);
            return;
        }

        this.primengDatatableHelper.showLoadingIndicator();

        this._databasesServiceProxy.getAll(
			this.filterText,
			this.lK_DatabaseTypeFilter,
			this.cDatabaseNameFilter,
			this.cListFileUploadedPathFilter,
			this.cListReadyToLoadPathFilter,
			this.maxdCreatedDateFilter,
			this.mindCreatedDateFilter,
			this.cCreatedByFilter,
			this.maxdModifiedDateFilter,
			this.mindModifiedDateFilter,
			this.cModifiedByFilter,
			this.lK_AccountingDivisionCodeFilter,
			this.cAdministrationEmailFilter,
            this.cAdministrationEmailFilter,
            null,
            this.primengDatatableHelper.getSorting(this.dataTable),
            this.primengDatatableHelper.getSkipCount(this.paginator, event),
            this.primengDatatableHelper.getMaxResultCount(this.paginator, event)
        ).subscribe(result => {
            this.primengDatatableHelper.totalRecordsCount = result.totalCount;
            this.primengDatatableHelper.records = result.items;
            this.primengDatatableHelper.hideLoadingIndicator();
        });
    }

    reloadPage(): void {
        this.paginator.changePage(this.paginator.getPage());
    }

    createDatabase(): void {
        this.createOrEditDatabaseModal.show();
    }

    deleteDatabase(database: DatabaseDto): void {
        this.message.confirm(
            '',
            (isConfirmed) => {
                if (isConfirmed) {
                    this._databasesServiceProxy.delete(database.id)
                        .subscribe(() => {
                            this.reloadPage();
                            this.notify.success(this.l('SuccessfullyDeleted'));
                        });
                }
            }
        );
    }

	exportToExcel(): void {
        this._databasesServiceProxy.getDatabasesToExcel(
		this.filterText,
			this.lK_DatabaseTypeFilter,
			this.cDatabaseNameFilter,
			this.cListFileUploadedPathFilter,
			this.cListReadyToLoadPathFilter,
			this.maxdCreatedDateFilter,
			this.mindCreatedDateFilter,
			this.cCreatedByFilter,
			this.maxdModifiedDateFilter,
			this.mindModifiedDateFilter,
			this.cModifiedByFilter,
			this.lK_AccountingDivisionCodeFilter,
			this.cAdministrationEmailFilter,
			this.divisioncDivisionNameFilter,
		)
        .subscribe(result => {
            this._fileDownloadService.downloadTempFile(result);
         });
    }
}

could you please help us on this.

Thank you!!

So have already attached the component.ts file code with this post. I want to write unit test in jasmine for this component. The component has a getDatabases method which calls a service getAll. I need to mock this service and create some basic specs in jamine.

Have tried below code for writing the specs.ts file:

/// <reference path="D:/Development/IDMS_vNext/IDMS/src/Infogroup.IDMS.Web.Host/node_modules/@types/jasmine/index.d.ts" />
import { TestBed, async, ComponentFixture, ComponentFixtureAutoDetect } from '@angular/core/testing';
import { BrowserModule, By } from "@angular/platform-browser";
import { NgModule, Injector, DebugElement } from '@angular/core';
import { CommonModule, DeprecatedI18NPipesModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { DatabasesComponent } from './databases.component';
import { ViewDatabaseModalComponent } from './view-database-modal.component';
import { CreateOrEditDatabaseModalComponent } from './create-or-edit-database-modal.component';
import { DivisionLookupTableModalComponent } from './division-lookup-table-modal.component';
import { DivisionsComponent } from '../../divisions/divisions/divisions.component';
import { ViewDivisionModalComponent } from '../../divisions/divisions/view-division-modal.component';
import { CreateOrEditDivisionModalComponent } from '../../divisions/divisions/create-or-edit-division-modal.component';
import { DataTableModule } from 'primeng/primeng';
import { FileUploadModule } from 'primeng/primeng';
import { AutoCompleteModule } from 'primeng/primeng';
import { PaginatorModule } from 'primeng/primeng';
import { EditorModule } from 'primeng/primeng';
import { InputMaskModule } from 'primeng/primeng';
import { ModalModule, TabsModule, TooltipModule } from 'ngx-bootstrap';
import { AppCommonModule } from '@app/shared/common/app-common.module';
import { UtilsModule } from '@shared/utils/utils.module';
import { MaintenanceRoutingModule } from '../../maintenance-routing.module';
import { CountoModule } from 'angular2-counto';
import { EasyPieChartModule } from 'ng2modules-easypiechart';
import { DropdownModule } from 'primeng/dropdown';
import { KendoDivisionsComponent } from '@app/maintenance/KendoUI/divisions/divisions.component';
import { KendoCreateOrEditDivisionModalComponent } from '@app/maintenance/KendoUI/divisions/create-or-edit-division-modal.component';
import { KendoViewDivisionModalComponent } from '@app/maintenance/KendoUI/divisions/view-division-modal.component';
import { GridModule } from '@progress/kendo-angular-grid';
import { KendoCreateOrEditDatabaseModalComponent } from '@app/maintenance/KendoUI/databases/databases/create-or-edit-database-modal.component';
import { KendoDivisionLookupTableModalComponent } from '@app/maintenance/KendoUI/databases/databases/division-lookup-table-modal.component';
import { KendoDatabasesComponent } from '@app/maintenance/KendoUI/databases/databases/databases.component';
import { KendoViewDatabaseModalComponent } from '@app/maintenance/KendoUI/databases/databases/view-database-modal.component';
import { CampaignsComponent } from '@app/maintenance/campaigns/campaigns/campaigns.component';
import { BuildsComponent } from '@app/maintenance/prime-ngTurbo-table/builds/builds/builds.component';
import { ViewBuildModalComponent } from '@app/maintenance/prime-ngTurbo-table/builds/builds/view-build-modal.component';
import { CreateOrEditBuildModalComponent } from '@app/maintenance/prime-ngTurbo-table/builds/builds/create-or-edit-build-modal.component';
import { ChildDatabaseComponent } from '@app/maintenance/prime-ng/child-database/child-database.component';
import { PrimeNGComponent } from '@app/maintenance/prime-ng/prime-ng/prime-ng.component';
import { TurboComponent } from '@app/maintenance/prime-ngTurbo-table/databases//databases/prime-ngTurbo-table.component';
import { TableModule } from 'primeng/table';
import { SegmentsComponent } from '../../campaigns/segments/segments.component';
import { CreateOrEditCampaignModalComponent } from '../../campaigns/campaigns/create-or-edit-campaign-modal.component';
import { CreateOrEditSegmentModalComponent } from '@app/maintenance/campaigns/Segments/create-or-edit-segment-modal.component';
import { HttpModule, JsonpModule, Http } from '@angular/http';
import { DatabasesServiceProxy, TokenAuthServiceProxy, LookupsServiceProxy, SessionServiceProxy, PagedResultDtoOfGetDatabaseForView } from '@shared/service-proxies/service-proxies';
import { RouterTestingModule } from "@angular/router/testing";
import { AppSessionService } from '@shared/common/session/app-session.service';
import { AppUiCustomizationService } from '@shared/common/ui/app-ui-customization.service';
import { LinkedAccountService } from '@app/shared/layout/linked-account.service';
import { AppUrlService } from '@shared/common/nav/app-url.service';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/observable/of';
import * as moment from 'moment';
import { NotifyService } from 'abp-ng2-module/src/notify/notify.service';
import { ActivatedRoute } from '@angular/router';
import { FileDownloadService } from '@shared/utils/file-download.service';
let component: DatabasesComponent;
let fixture: ComponentFixture<DatabasesComponent>;

class MockDatabasesService {
    result: { totalcount: number,items: any; };
    public results: Array<any>;
    public getAll(
        filterText?: string,
        lK_DatabaseTypeFilter?: string,
        cDatabaseNameFilter?: string,
        cListFileUploadedPathFilter?: string,
        cListReadyToLoadPathFilter?: string,        
        maxdCreatedDateFilter?: moment.Moment,
        mindCreatedDateFilter?: moment.Moment,
        cCreatedByFilter?: string,
        maxdModifiedDateFilter?: moment.Moment,
        mindModifiedDateFilter?: moment.Moment,
        cModifiedByFilter?: string,
        lK_AccountingDivisionCodeFilter?: string,
        cAdministrationEmailFilter?: string,
        divisionDivisionIdFilter?:string,
        sorting?: string,
        skipCount?: string,
        maxResultCount?: number
    ) {
        this.result = {
            totalcount:1209,
            items:[
                {
                    "database": {
                        "lK_DatabaseType": "U",
                        "cDatabaseName": "US Data Warehouse11",
                        "cListFileUploadedPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\DDI_Upload\\ReadyToLoadFiles\\",
                        "cListReadyToLoadPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\DDI_Upload\\ReadyToLoadFiles\\",
                        "dCreatedDate": "2009-08-03T05:25:10.963",
                        "cCreatedBy": "admin1",
                        "dModifiedDate": "2015-01-19T03:53:26.337",
                        "cModifiedBy": "test.test",
                        "lK_AccountingDivisionCode": "559000",
                        "cAdministratorEmail": "[email protected]",
                        "divisionId": 181,
                        "id": 65
                    },
                    "divisioncDivisionName": "Walter Karl"
                },
                {
                    "database": {
                        "lK_DatabaseType": "C",
                        "cDatabaseName": "Canadian Data Warehouse",
                        "cListFileUploadedPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\DDI_Upload\\ReadyToLoadFiles\\",
                        "cListReadyToLoadPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\DDI_Upload\\ReadyToLoadFiles\\",
                        "dCreatedDate": "2009-08-06T16:32:14.533",
                        "cCreatedBy": "admin1",
                        "dModifiedDate": "2015-01-22T14:23:46.133",
                        "cModifiedBy": "test.test",
                        "lK_AccountingDivisionCode": "559000",
                        "cAdministratorEmail": "[email protected]",
                        "divisionId": 177,
                        "id": 66
                    },
                    "divisioncDivisionName": "Infogroup - ITS"
                },
                {
                    "database": {
                        "lK_DatabaseType": "U",
                        "cDatabaseName": "Pitney Bowes - Private DB",
                        "cListFileUploadedPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\List_Owner_Upload\\SourceFiles\\",
                        "cListReadyToLoadPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\DDI_Upload\\ReadyToLoadFiles\\",
                        "dCreatedDate": "2009-08-06T15:55:10.963",
                        "cCreatedBy": "admin1",
                        "dModifiedDate": "2017-08-16T21:35:43.967",
                        "cModifiedBy": "test.test",
                        "lK_AccountingDivisionCode": "559000",
                        "cAdministratorEmail": "[email protected]",
                        "divisionId": 187,
                        "id": 68
                    },
                    "divisioncDivisionName": "Division for Inactive-Old Database"
                },
                {
                    "database": {
                        "lK_DatabaseType": "U",
                        "cDatabaseName": "Jameson - OLD",
                        "cListFileUploadedPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\List_Owner_Upload\\SourceFiles\\",
                        "cListReadyToLoadPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\DDI_Upload\\ReadyToLoadFiles\\",
                        "dCreatedDate": "2011-06-23T07:26:46.72",
                        "cCreatedBy": "test.test",
                        "dModifiedDate": "2017-08-16T21:35:43.967",
                        "cModifiedBy": "test.test",
                        "lK_AccountingDivisionCode": "999999",
                        "cAdministratorEmail": "[email protected]",
                        "divisionId": 187,
                        "id": 69
                    },
                    "divisioncDivisionName": "Division for Inactive-Old Database"
                },
                {
                    "database": {
                        "lK_DatabaseType": "U",
                        "cDatabaseName": "BNP Media - ePost DB",
                        "cListFileUploadedPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\List_Owner_Upload\\SourceFiles\\",
                        "cListReadyToLoadPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\DDI_Upload\\ReadyToLoadFiles\\",
                        "dCreatedDate": "2011-07-19T14:21:17.547",
                        "cCreatedBy": "test.test",
                        "dModifiedDate": "2017-08-16T21:35:43.967",
                        "cModifiedBy": "test.test",
                        "lK_AccountingDivisionCode": "999999",
                        "cAdministratorEmail": "[email protected]",
                        "divisionId": 187,
                        "id": 70
                    },
                    "divisioncDivisionName": "Division for Inactive-Old Database"
                },
                {
                    "database": {
                        "lK_DatabaseType": "U",
                        "cDatabaseName": "Sapphire",
                        "cListFileUploadedPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\DDI_Upload\\ReadyToLoadFiles\\",
                        "cListReadyToLoadPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\DDI_Upload\\ReadyToLoadFiles\\",
                        "dCreatedDate": "2011-09-14T11:21:44.967",
                        "cCreatedBy": "test.test",
                        "dModifiedDate": "2014-05-18T11:48:09.763",
                        "cModifiedBy": "test.test",
                        "lK_AccountingDivisionCode": "559000",
                        "cAdministratorEmail": "[email protected]",
                        "divisionId": 188,
                        "id": 71
                    },
                    "divisioncDivisionName": "Infogroup"
                },
                {
                    "database": {
                        "lK_DatabaseType": "U",
                        "cDatabaseName": "Interactive Reporting",
                        "cListFileUploadedPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\List_Owner_Upload\\SourceFiles\\",
                        "cListReadyToLoadPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\DDI_Upload\\ReadyToLoadFiles\\",
                        "dCreatedDate": "2011-12-16T13:20:33.303",
                        "cCreatedBy": "test.test",
                        "dModifiedDate": "2017-08-16T21:35:43.967",
                        "cModifiedBy": "test.test",
                        "lK_AccountingDivisionCode": "000000",
                        "cAdministratorEmail": "[email protected]",
                        "divisionId": 187,
                        "id": 72
                    },
                    "divisioncDivisionName": "Division for Inactive-Old Database"
                },
                {
                    "database": {
                        "lK_DatabaseType": "U",
                        "cDatabaseName": "Advanstar",
                        "cListFileUploadedPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\List_Owner_Upload\\SourceFiles\\",
                        "cListReadyToLoadPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\DDI_Upload\\ReadyToLoadFiles\\",
                        "dCreatedDate": "2012-01-09T18:02:43.223",
                        "cCreatedBy": "test.test",
                        "dModifiedDate": "2017-08-16T21:35:43.967",
                        "cModifiedBy": "test.test",
                        "lK_AccountingDivisionCode": "999999",
                        "cAdministratorEmail": "[email protected]",
                        "divisionId": 187,
                        "id": 73
                    },
                    "divisioncDivisionName": "Division for Inactive-Old Database"
                },
                {
                    "database": {
                        "lK_DatabaseType": "U",
                        "cDatabaseName": "Apogee for Converts Only",
                        "cListFileUploadedPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\DDI_Upload\\ReadyToLoadFiles\\",
                        "cListReadyToLoadPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\DDI_Upload\\ReadyToLoadFiles\\",
                        "dCreatedDate": "2012-02-15T14:22:28.47",
                        "cCreatedBy": "test.test",
                        "dModifiedDate": "2012-07-15T18:31:52.137",
                        "cModifiedBy": "test.test",
                        "lK_AccountingDivisionCode": "506000",
                        "cAdministratorEmail": "[email protected]",
                        "divisionId": 177,
                        "id": 74
                    },
                    "divisioncDivisionName": "Infogroup - ITS"
                },
                {
                    "database": {
                        "lK_DatabaseType": "U",
                        "cDatabaseName": "CORP Base",
                        "cListFileUploadedPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\DDI_Upload\\ReadyToLoadFiles\\",
                        "cListReadyToLoadPath": "\\\\intra.infousa.com\\prl\\IDMSDevTest\\DDI_Upload\\ReadyToLoadFiles\\",
                        "dCreatedDate": "2012-03-05T10:59:18.713",
                        "cCreatedBy": "test.test",
                        "dModifiedDate": "2012-04-05T16:41:09.82",
                        "cModifiedBy": "test.test",
                        "lK_AccountingDivisionCode": "559000",
                        "cAdministratorEmail": "[email protected]",
                        "divisionId": 177,
                        "id": 75
                    },
                    "divisioncDivisionName": "Infogroup - ITS"
                }
            ]
        }

        //return Observable.of(this.items);
        return Observable.of<PagedResultDtoOfGetDatabaseForView>(<any>null);
    }
}

describe('Databases Component', () => {
    let fixture: ComponentFixture<DatabasesComponent>;
    let debugElement: DebugElement;
    let databasesService: MockDatabasesService;
    let incrementSpy;

    beforeEach(async(() => {
                TestBed.configureTestingModule({
            imports: [
                ReactiveFormsModule,
                BrowserModule, FormsModule, DataTableModule, BrowserAnimationsModule,
                DropdownModule,
                FileUploadModule,
                AutoCompleteModule,
                PaginatorModule,
                EditorModule,
                InputMaskModule,
                CommonModule,
                FormsModule,
                ModalModule,
                TabsModule,
                TooltipModule,
                AppCommonModule,
                UtilsModule,
                MaintenanceRoutingModule,
                CountoModule,
                EasyPieChartModule,
                GridModule,
                TableModule,
                HttpModule,
                RouterTestingModule.withRoutes([
                    {
                        path: '',
                        children: [
                            { path: 'databases/databases', component: DatabasesComponent, data: { permission: 'Pages.Databases' } }

                        ]
                    }
                ]),
            ],
            declarations: [
                DatabasesComponent,
                ViewDatabaseModalComponent,
                CreateOrEditDatabaseModalComponent,
                DivisionLookupTableModalComponent,
                DivisionsComponent,
                ViewDivisionModalComponent,
                CreateOrEditDivisionModalComponent,
                KendoDivisionsComponent,
                KendoCreateOrEditDivisionModalComponent,
                KendoViewDivisionModalComponent,
                KendoCreateOrEditDatabaseModalComponent,
                KendoDivisionLookupTableModalComponent,
                KendoDatabasesComponent,
                KendoViewDatabaseModalComponent,
                CampaignsComponent,
                BuildsComponent,
                ViewBuildModalComponent,
                CreateOrEditBuildModalComponent,
                ChildDatabaseComponent,
                PrimeNGComponent,
                TurboComponent,
                SegmentsComponent,
                CreateOrEditCampaignModalComponent,
                CreateOrEditSegmentModalComponent
            ],
            providers: [
                { provide: ComponentFixtureAutoDetect, useValue: true },
                DatabasesServiceProxy,
                TokenAuthServiceProxy,
                AppSessionService,
                SessionServiceProxy,
                AppUiCustomizationService,
                LinkedAccountService,
                AppUrlService,
                LookupsServiceProxy
                    ]
                }).compileComponents();

        fixture = TestBed.createComponent(DatabasesComponent);
        debugElement = fixture.debugElement;

        databasesService = debugElement.injector.get(DatabasesServiceProxy);
        incrementSpy = spyOn(databasesService, 'getAll').and.callThrough();
    }));

    //it('should call increment on the service', () => {
    //    debugElement
    //        .query(By.css('button.increment'))
    //        .triggerEventHandler('click', null);

    //    expect(incrementDecrementService.value).toBe(1);
    //    expect(incrementSpy).toHaveBeenCalled();
    //});

    it('should have a defined component', () => {
        expect(component).toBeDefined();
    });
});



//describe('Component: Login', () => {

//    let component: DatabasesComponent;
//    let service: MockDatabasesService;

//    beforeEach(() => {
//        
//    });

//    afterEach(() => {
//        service = null;
//        component = null;
//    });


//    //it('canLogin returns false when the user is not authenticated', () => {
//    //    service.authenticated = false;
//    //    expect(component.needsLogin()).toBeTruthy();
//    //});

//    //it('canLogin returns false when the user is not authenticated', () => {
//    //    service.authenticated = true;
//    //    expect(component.needsLogin()).toBeFalsy();
//    //});
//});


//describe('Databases Componentt', () => {
//    let fixture: ComponentFixture<DatabasesComponent>;
//    let itemService: MockDatabasesService;

//    describe('Async', () => {
//        beforeEach(async(() => {
//            TestBed.configureTestingModule({
//                declarations: [
//                    ItemListComponent
//                ],
//                providers: [
//                    //ItemService
//                    { provide: ItemService, useClass: MockMyService }
//                ],
//                imports: [
//                    GridModule, HttpModule
//                ],
//                schemas: [CUSTOM_ELEMENTS_SCHEMA]
//            });

//            fixture = TestBed.createComponent(ItemListComponent);
//            itemService = fixture.debugElement.injector.get(ItemService);

//            spyOn(itemService, 'getLatest')
//                .and.returnValue({ subscribe: () => { itemService.items } });

//            fixture.detectChanges();

//        }));

//        afterEach(() => {
//            fixture = undefined;//teardown
//        });

//        it('should get items', () => {
//            itemService.getLatest();
//            expect(fixture.debugElement.componentInstance.items.length).toEqual(1);
//        });

//    });
//});



////describe('Database component', () => {
////    beforeEach(async(() => {
////        TestBed.configureTestingModule({
////            imports: [
////                ReactiveFormsModule,
////                BrowserModule, FormsModule, DataTableModule, BrowserAnimationsModule,
////                DropdownModule,
////                FileUploadModule,
////                AutoCompleteModule,
////                PaginatorModule,
////                EditorModule,
////                InputMaskModule,
////                CommonModule,
////                FormsModule,
////                ModalModule,
////                TabsModule,
////                TooltipModule,
////                AppCommonModule,
////                UtilsModule,
////                MaintenanceRoutingModule,
////                CountoModule,
////                EasyPieChartModule,
////                GridModule,
////                TableModule,
////                HttpModule,
////                RouterTestingModule.withRoutes([
////                    {
////                        path: '',
////                        children: [
////                            { path: 'databases/databases', component: DatabasesComponent, data: { permission: 'Pages.Databases' } }

////                        ]
////                    }
////                ]),
////            ],
////            declarations: [
////                DatabasesComponent,
////                ViewDatabaseModalComponent,
////                CreateOrEditDatabaseModalComponent,
////                DivisionLookupTableModalComponent,
////                DivisionsComponent,
////                ViewDivisionModalComponent,
////                CreateOrEditDivisionModalComponent,
////                KendoDivisionsComponent,
////                KendoCreateOrEditDivisionModalComponent,
////                KendoViewDivisionModalComponent,
////                KendoCreateOrEditDatabaseModalComponent,
////                KendoDivisionLookupTableModalComponent,
////                KendoDatabasesComponent,
////                KendoViewDatabaseModalComponent,
////                CampaignsComponent,
////                BuildsComponent,
////                ViewBuildModalComponent,
////                CreateOrEditBuildModalComponent,
////                ChildDatabaseComponent,
////                PrimeNGComponent,
////                TurboComponent,
////                SegmentsComponent,
////                CreateOrEditCampaignModalComponent,
////                CreateOrEditSegmentModalComponent
////            ],
////            providers: [
////                { provide: ComponentFixtureAutoDetect, useValue: true },
////                DatabasesServiceProxy,
////                TokenAuthServiceProxy,
////                AppSessionService,
////                SessionServiceProxy,
////                AppUiCustomizationService,
////                LinkedAccountService,
////                AppUrlService,
////                LookupsServiceProxy
////            ]
////        });
////        fixture = TestBed.createComponent(DatabasesComponent);
////        component = fixture.componentInstance;
////    }));

    //it('should do something', async(() => {
    //    expect(true).toEqual(true);
    //}));

    //it('should return hello world', () => {
    //    const result = "Hello world!";
    //    expect(result).toEqual('Hello world!');
    //});

    //it('should have a defined component', () => {
    //    expect(component).toBeDefined();
    //});
//});

Not sure how can we mock a parameter service.

We have implemented AspNetZero Angular-.netCore template in our project and below is the folder structure of components:

Maintenance(Parent) |-- Campaigns | |-- campaigns.component.ts | |--add-edit-campaigns.component.ts | |--add-edit-segments.component.ts | |--campaigns.module.ts | |--campaigns-routing.modules.ts | |-- AdGroups | |--adgroups.component.ts | |--add-edit-adgroups.component.ts | |--adgroups.module.ts | |--adgroups-routing.module.ts | |--Keywords | |--keywords.component.ts | |--add-edit-keywords.component.ts | |--keywords.module.ts | |--keyword-routing.module.ts

We have already implemented modules lazy loading. We now need to implement dynamic component loading of modals as in case of the Campaigns, the components would increase exponentially as we proceed with the development.

So as per the current implementation, when the campaigns.component is loading, along with this the add-edit-campaigns.component and add-edit-segment component is also getting pre-loaded in the DOM as both are modal components.

As the number of modal components would increase, all these components would be pre-loaded in the DOM which would hamper the performance.

Could you please help us out and explain how can we implement Dynamic component of modals.

THank you for the reply, we were able to implement the Dynamic modal component loading by following the second link and a few changes to our code.

One change we did was installing ng-bootstrap version 1.1.1 for the code to work as desired. The lastest ng-bootstrap version did'nt work.

I've heard it will be available with Angular 8 as an opt-in.Are we going to integrate anytime soon with ASP NET Zero Angular.

Hello All,

We are trying to deploy a website developed using aspnetzero in angular and .net core.

Have recently upgraded the aspnetzero framework to 6.9.1 and are following the below steps to deploy it in IIS:

  1. Publish the host project which generates both the server side dll's as well as angular bundles.
  2. GOTO IIS and create two separate websites one for server and other for client
  3. Create two separate folders and copy the server code in one and client code in other
  4. Point the websites to respective folders
  5. Make the required changes in the appsettings.Production,json (for server) and appconfig,Production.json (for client)
  6. Apply certificate (signed by COMODO) to the client and define https bindings for both the client and the server in IIS

Doing all this setup we are able to browse the application but when we hit the URL it is showing the site is not secure (as shown below).

We have already gone through the deployment steps mentioned on the aspnetzero documents portal but they are very basic and are not helping in solving our issue:

https://docs.aspnetzero.com/documents/aspnet-core-angular/latest/Deployment-Angular-Publish-IIS#angular-application-publishing

While doing this deployment we have a come up with few queries:

  1. How do we deploy client and server as two different secure (https) websites in IIS
  2. Will we be requiring 2 separate SSL certificates, one for the server and other for the client.

We have migrated to the latest version i.e. v7.0 and using the Angular-.net core template.

Just like we can create custom sessions in asp.net web forms eg. Session["UserSpecificStates"] = "New York, Alabama", we want to create similar session/ claims in aspnetzero.

There is no proper documentation available for custom claims/session in abp.

Can anyone please share how this can be implemented.

Thanks in advance.

Thank you for the prompt reply.

Does using the claims have any limitations. So to be precise how many claims can be added and also is there any limitation to no. of values added to a particular claim.

For example:

  1. I create additional 20-30 user specific claims which maintain different user specific data. Is this possible?
  2. In a specific claim can I store a long string. Any limitation to no. of characters to be stored in a claim?
Showing 1 to 10 of 105 entries