mirror of https://github.com/abpframework/abp.git
committed by
GitHub
65 changed files with 2249 additions and 2077 deletions
@ -0,0 +1,339 @@ |
|||||
|
.ui-table { |
||||
|
position: relative; |
||||
|
|
||||
|
.ui-table-tbody > tr:nth-child(even):hover, |
||||
|
.ui-table-tbody > tr:hover { |
||||
|
filter: brightness(90%); |
||||
|
} |
||||
|
|
||||
|
.ui-table-tbody > tr.empty-row:hover { |
||||
|
filter: none; |
||||
|
} |
||||
|
|
||||
|
.ui-table-tbody > tr.empty-row > div.empty-row-content { |
||||
|
padding: 10px; |
||||
|
text-align: center; |
||||
|
} |
||||
|
|
||||
|
.ui-table-caption, |
||||
|
.ui-table-summary { |
||||
|
background-color: #f4f4f4; |
||||
|
color: #333333; |
||||
|
border: 1px solid #c8c8c8; |
||||
|
padding: 0.571em 1em; |
||||
|
text-align: center; |
||||
|
} |
||||
|
.ui-table-caption { |
||||
|
border-bottom: 0 none; |
||||
|
font-weight: 700; |
||||
|
} |
||||
|
.ui-table-summary { |
||||
|
border-top: 0 none; |
||||
|
font-weight: 700; |
||||
|
} |
||||
|
.ui-table-thead > tr > th { |
||||
|
padding: 0.571em 0.857em; |
||||
|
border: 1px solid #c8c8c8; |
||||
|
font-weight: 700; |
||||
|
color: #333333; |
||||
|
background-color: #f4f4f4; |
||||
|
} |
||||
|
.ui-table-tbody > tr > td { |
||||
|
padding: 0.571em 0.857em; |
||||
|
} |
||||
|
.ui-table-tfoot > tr > td { |
||||
|
padding: 0.571em 0.857em; |
||||
|
border: 1px solid #c8c8c8; |
||||
|
font-weight: 700; |
||||
|
color: #333333; |
||||
|
background-color: #ffffff; |
||||
|
} |
||||
|
.ui-sortable-column { |
||||
|
-moz-transition: box-shadow 0.2s; |
||||
|
-o-transition: box-shadow 0.2s; |
||||
|
-webkit-transition: box-shadow 0.2s; |
||||
|
transition: box-shadow 0.2s; |
||||
|
} |
||||
|
.ui-sortable-column:focus { |
||||
|
outline: 0 none; |
||||
|
outline-offset: 0; |
||||
|
-webkit-box-shadow: inset 0 0 0 0.2em #8dcdff; |
||||
|
-moz-box-shadow: inset 0 0 0 0.2em #8dcdff; |
||||
|
box-shadow: inset 0 0 0 0.2em #8dcdff; |
||||
|
} |
||||
|
.ui-sortable-column .ui-sortable-column-icon { |
||||
|
color: #848484; |
||||
|
} |
||||
|
.ui-sortable-column:not(.ui-state-highlight):hover { |
||||
|
background-color: #e0e0e0; |
||||
|
color: #333333; |
||||
|
} |
||||
|
.ui-sortable-column:not(.ui-state-highlight):hover .ui-sortable-column-icon { |
||||
|
color: #333333; |
||||
|
} |
||||
|
.ui-sortable-column.ui-state-highlight { |
||||
|
background-color: #007ad9; |
||||
|
color: #ffffff; |
||||
|
} |
||||
|
.ui-sortable-column.ui-state-highlight .ui-sortable-column-icon { |
||||
|
color: #ffffff; |
||||
|
} |
||||
|
.ui-editable-column input { |
||||
|
font-size: 14px; |
||||
|
font-family: 'Open Sans', 'Helvetica Neue', sans-serif; |
||||
|
} |
||||
|
.ui-editable-column input:focus { |
||||
|
outline: 1px solid #007ad9; |
||||
|
outline-offset: 2px; |
||||
|
} |
||||
|
.ui-table-tbody > tr { |
||||
|
background-color: #ffffff; |
||||
|
color: #333333; |
||||
|
} |
||||
|
.ui-table-tbody > tr > td { |
||||
|
background-color: inherit; |
||||
|
border: 1px solid #c8c8c8; |
||||
|
} |
||||
|
.ui-table-tbody > tr.ui-state-highlight { |
||||
|
background-color: #007ad9; |
||||
|
color: #ffffff; |
||||
|
} |
||||
|
.ui-table-tbody > tr.ui-state-highlight a { |
||||
|
color: #ffffff; |
||||
|
} |
||||
|
.ui-table-tbody > tr.ui-contextmenu-selected { |
||||
|
background-color: #007ad9; |
||||
|
color: #ffffff; |
||||
|
} |
||||
|
.ui-table-tbody > tr.ui-table-dragpoint-top > td { |
||||
|
-webkit-box-shadow: inset 0 2px 0 0 #007ad9; |
||||
|
-moz-box-shadow: inset 0 2px 0 0 #007ad9; |
||||
|
box-shadow: inset 0 2px 0 0 #007ad9; |
||||
|
} |
||||
|
.ui-table-tbody > tr.ui-table-dragpoint-bottom > td { |
||||
|
-webkit-box-shadow: inset 0 -2px 0 0 #007ad9; |
||||
|
-moz-box-shadow: inset 0 -2px 0 0 #007ad9; |
||||
|
box-shadow: inset 0 -2px 0 0 #007ad9; |
||||
|
} |
||||
|
.ui-table-tbody > tr:nth-child(even) { |
||||
|
background-color: #f9f9f9; |
||||
|
} |
||||
|
.ui-table-tbody > tr:nth-child(even).ui-state-highlight { |
||||
|
background-color: #007ad9; |
||||
|
color: #ffffff; |
||||
|
} |
||||
|
.ui-table-tbody > tr:nth-child(even).ui-state-highlight a { |
||||
|
color: #ffffff; |
||||
|
} |
||||
|
.ui-table-tbody > tr:nth-child(even).ui-contextmenu-selected { |
||||
|
background-color: #007ad9; |
||||
|
color: #ffffff; |
||||
|
} |
||||
|
|
||||
|
&.ui-table-hoverable-rows |
||||
|
.ui-table-tbody |
||||
|
> tr.ui-selectable-row:not(.ui-state-highlight):not(.ui-contextmenu-selected):hover { |
||||
|
cursor: pointer; |
||||
|
background-color: #eaeaea; |
||||
|
color: #333333; |
||||
|
} |
||||
|
.ui-column-resizer-helper { |
||||
|
background-color: #007ad9; |
||||
|
} |
||||
|
@media screen and (max-width: 40em) { |
||||
|
&.ui-table-responsive .ui-table-tbody > tr > td { |
||||
|
border: 0 none; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
table { |
||||
|
border-collapse: collapse; |
||||
|
width: 100%; |
||||
|
table-layout: fixed; |
||||
|
} |
||||
|
|
||||
|
.ui-table-tbody > tr > td, |
||||
|
.ui-table-tfoot > tr > td, |
||||
|
.ui-table-thead > tr > th { |
||||
|
padding: 0.571em 0.857em; |
||||
|
} |
||||
|
|
||||
|
.ui-sortable-column { |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
|
||||
|
p-sorticon { |
||||
|
vertical-align: middle; |
||||
|
} |
||||
|
|
||||
|
.ui-table-auto-layout > .ui-table-wrapper { |
||||
|
overflow-x: auto; |
||||
|
} |
||||
|
|
||||
|
.ui-table-auto-layout > .ui-table-wrapper > table { |
||||
|
table-layout: auto; |
||||
|
} |
||||
|
|
||||
|
.ui-table-caption, |
||||
|
.ui-table-summary { |
||||
|
padding: 0.25em 0.5em; |
||||
|
text-align: center; |
||||
|
font-weight: 700; |
||||
|
} |
||||
|
|
||||
|
.ui-table-caption { |
||||
|
border-bottom: 0; |
||||
|
} |
||||
|
|
||||
|
.ui-table-summary { |
||||
|
border-top: 0; |
||||
|
} |
||||
|
|
||||
|
.ui-table-scrollable-wrapper { |
||||
|
position: relative; |
||||
|
} |
||||
|
|
||||
|
.ui-table-scrollable-footer, |
||||
|
.ui-table-scrollable-header { |
||||
|
overflow: hidden; |
||||
|
border: 0; |
||||
|
} |
||||
|
|
||||
|
.ui-table-scrollable-body { |
||||
|
overflow: auto; |
||||
|
position: relative; |
||||
|
} |
||||
|
|
||||
|
.ui-table-virtual-table { |
||||
|
position: absolute; |
||||
|
} |
||||
|
|
||||
|
.ui-table-loading-virtual-table { |
||||
|
display: none; |
||||
|
} |
||||
|
|
||||
|
.ui-table-frozen-view .ui-table-scrollable-body { |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
|
||||
|
.ui-table-frozen-view > .ui-table-scrollable-body > table > .ui-table-tbody > tr > td:last-child { |
||||
|
border-right: 0; |
||||
|
} |
||||
|
|
||||
|
.ui-table-unfrozen-view { |
||||
|
position: absolute; |
||||
|
top: 0; |
||||
|
} |
||||
|
|
||||
|
.ui-table-resizable > .ui-table-wrapper { |
||||
|
overflow-x: auto; |
||||
|
} |
||||
|
|
||||
|
.ui-table-resizable .ui-table-tbody > tr > td, |
||||
|
.ui-table-resizable .ui-table-tfoot > tr > td, |
||||
|
.ui-table-resizable .ui-table-thead > tr > th { |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
|
||||
|
.ui-table-resizable .ui-resizable-column { |
||||
|
background-clip: padding-box; |
||||
|
position: relative; |
||||
|
} |
||||
|
|
||||
|
.ui-table-resizable-fit .ui-resizable-column:last-child .ui-column-resizer { |
||||
|
display: none; |
||||
|
} |
||||
|
|
||||
|
.ui-column-resizer { |
||||
|
display: block; |
||||
|
position: absolute !important; |
||||
|
top: 0; |
||||
|
right: 0; |
||||
|
margin: 0; |
||||
|
width: 0.5em; |
||||
|
height: 100%; |
||||
|
padding: 0; |
||||
|
cursor: col-resize; |
||||
|
border: 1px solid rgba(0, 0, 0, 0); |
||||
|
} |
||||
|
|
||||
|
.ui-column-resizer-helper { |
||||
|
width: 1px; |
||||
|
position: absolute; |
||||
|
z-index: 10; |
||||
|
display: none; |
||||
|
} |
||||
|
|
||||
|
.ui-table-tbody > tr > td.ui-editing-cell { |
||||
|
padding: 0; |
||||
|
} |
||||
|
|
||||
|
.ui-table-tbody > tr > td.ui-editing-cell p-celleditor > * { |
||||
|
width: 100%; |
||||
|
} |
||||
|
|
||||
|
.ui-table-reorder-indicator-down, |
||||
|
.ui-table-reorder-indicator-up { |
||||
|
position: absolute; |
||||
|
display: none; |
||||
|
} |
||||
|
|
||||
|
.ui-table-responsive .ui-table-tbody > tr > td .ui-column-title { |
||||
|
display: none; |
||||
|
} |
||||
|
|
||||
|
@media screen and (max-width: 40em) { |
||||
|
.ui-table-responsive .ui-table-tfoot > tr > td, |
||||
|
.ui-table-responsive .ui-table-thead > tr > th, |
||||
|
.ui-table-responsive colgroup { |
||||
|
display: none !important; |
||||
|
} |
||||
|
.ui-table-responsive .ui-table-tbody > tr > td { |
||||
|
text-align: left; |
||||
|
display: block; |
||||
|
border: 0; |
||||
|
width: 100% !important; |
||||
|
box-sizing: border-box; |
||||
|
float: left; |
||||
|
clear: left; |
||||
|
} |
||||
|
.ui-table-responsive .ui-table-tbody > tr > td .ui-column-title { |
||||
|
padding: 0.4em; |
||||
|
min-width: 30%; |
||||
|
display: inline-block; |
||||
|
margin: -0.4em 1em -0.4em -0.4em; |
||||
|
font-weight: 700; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.ui-widget { |
||||
|
font-family: 'Open Sans', 'Helvetica Neue', sans-serif; |
||||
|
font-size: 14px; |
||||
|
text-decoration: none; |
||||
|
} |
||||
|
|
||||
|
.page-item.disabled .page-link, |
||||
|
.page-link { |
||||
|
background-color: transparent; |
||||
|
border: none; |
||||
|
} |
||||
|
|
||||
|
.page-item.disabled .page-link { |
||||
|
box-shadow: none; |
||||
|
} |
||||
|
|
||||
|
.pagination { |
||||
|
margin-bottom: 0; |
||||
|
} |
||||
|
|
||||
|
.pagination-wrapper { |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
border-top: 0; |
||||
|
padding: 0; |
||||
|
} |
||||
|
|
||||
|
.op-0 { |
||||
|
opacity: 0; |
||||
|
} |
||||
|
} |
||||
@ -1,63 +0,0 @@ |
|||||
import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; |
|
||||
import { PaginationComponent } from '../components'; |
|
||||
|
|
||||
describe('PaginationComponent', () => { |
|
||||
let spectator: SpectatorHost<PaginationComponent>; |
|
||||
const createHost = createHostFactory({ |
|
||||
component: PaginationComponent, |
|
||||
}); |
|
||||
|
|
||||
beforeEach(() => { |
|
||||
spectator = createHost( |
|
||||
'<abp-pagination [totalPages]="totalPages" [value]="value"></abp-pagination>', |
|
||||
{ |
|
||||
hostProps: { |
|
||||
value: 5, |
|
||||
totalPages: 12, |
|
||||
}, |
|
||||
}, |
|
||||
); |
|
||||
}); |
|
||||
|
|
||||
it('should add ui-state-active class to current page', () => { |
|
||||
expect(spectator.query('.ui-state-active').textContent).toBe('5'); |
|
||||
}); |
|
||||
|
|
||||
it('should display the correct pages', () => { |
|
||||
expect(spectator.queryAll('.ui-paginator-page').map(node => node.textContent)).toEqual([ |
|
||||
'3', |
|
||||
'4', |
|
||||
'5', |
|
||||
'6', |
|
||||
'7', |
|
||||
]); |
|
||||
|
|
||||
spectator.click('.ui-paginator-first'); |
|
||||
|
|
||||
expect(spectator.queryAll('.ui-paginator-page').map(node => node.textContent)).toEqual([ |
|
||||
'1', |
|
||||
'2', |
|
||||
'3', |
|
||||
'4', |
|
||||
'5', |
|
||||
]); |
|
||||
|
|
||||
spectator.setHostInput({ value: 12 }); |
|
||||
|
|
||||
expect(spectator.queryAll('.ui-paginator-page').map(node => node.textContent)).toEqual([ |
|
||||
'8', |
|
||||
'9', |
|
||||
'10', |
|
||||
'11', |
|
||||
'12', |
|
||||
]); |
|
||||
|
|
||||
spectator.setHostInput({ value: 1, totalPages: 3 }); |
|
||||
|
|
||||
expect(spectator.queryAll('.ui-paginator-page').map(node => node.textContent)).toEqual([ |
|
||||
'1', |
|
||||
'2', |
|
||||
'3', |
|
||||
]); |
|
||||
}); |
|
||||
}); |
|
||||
File diff suppressed because it is too large
@ -0,0 +1,4 @@ |
|||||
|
{ |
||||
|
"singleQuote": true, |
||||
|
"printWidth": 100 |
||||
|
} |
||||
@ -0,0 +1,8 @@ |
|||||
|
{ |
||||
|
"recommendations": [ |
||||
|
"angular.ng-template", |
||||
|
"esbenp.prettier-vscode", |
||||
|
"ms-vscode.vscode-typescript-tslint-plugin", |
||||
|
"visualstudioexptteam.vscodeintellicode" |
||||
|
] |
||||
|
} |
||||
@ -1,11 +1,11 @@ |
|||||
import { browser, by, element } from 'protractor'; |
import { browser, by, element } from 'protractor'; |
||||
|
|
||||
export class AppPage { |
export class AppPage { |
||||
navigateTo() { |
navigateTo(): Promise<unknown> { |
||||
return browser.get(browser.baseUrl) as Promise<any>; |
return browser.get(browser.baseUrl) as Promise<unknown>; |
||||
} |
} |
||||
|
|
||||
getTitleText() { |
getTitleText(): Promise<string> { |
||||
return element(by.css('app-root h1')).getText() as Promise<string>; |
return element(by.css('app-root .content span')).getText() as Promise<string>; |
||||
} |
} |
||||
} |
} |
||||
|
|||||
@ -1,58 +1,54 @@ |
|||||
{ |
{ |
||||
"name": "MyProjectName", |
"name": "ng9-abp", |
||||
"version": "0.0.0", |
"version": "0.0.0", |
||||
"scripts": { |
"scripts": { |
||||
"ng": "ng", |
"ng": "ng", |
||||
"start": "ng serve", |
"start": "ng serve", |
||||
"start:hmr": "ng serve --configuration hmr", |
|
||||
"build": "ng build", |
"build": "ng build", |
||||
"build:prod": "ng build --prod", |
|
||||
"test": "ng test", |
"test": "ng test", |
||||
"lint": "ng lint", |
"lint": "ng lint", |
||||
"e2e": "ng e2e" |
"e2e": "ng e2e" |
||||
}, |
}, |
||||
"private": true, |
"private": true, |
||||
"dependencies": { |
"dependencies": { |
||||
"@abp/ng.account": "^2.1.0", |
"@abp/ng.account": "~2.1.0", |
||||
"@abp/ng.identity": "^2.1.0", |
"@abp/ng.identity": "~2.1.0", |
||||
"@abp/ng.setting-management": "^2.1.0", |
"@abp/ng.setting-management": "~2.1.0", |
||||
"@abp/ng.tenant-management": "^2.1.0", |
"@abp/ng.tenant-management": "~2.1.0", |
||||
"@abp/ng.theme.basic": "^2.1.0", |
"@abp/ng.theme.basic": "~2.1.0", |
||||
"@angular/animations": "~8.2.14", |
"@angular/animations": "~9.0.2", |
||||
"@angular/common": "~8.2.14", |
"@angular/common": "~9.0.2", |
||||
"@angular/compiler": "~8.2.14", |
"@angular/compiler": "~9.0.2", |
||||
"@angular/core": "~8.2.14", |
"@angular/core": "~9.0.2", |
||||
"@angular/forms": "~8.2.14", |
"@angular/forms": "~9.0.2", |
||||
"@angular/platform-browser": "~8.2.14", |
"@angular/platform-browser": "~9.0.2", |
||||
"@angular/platform-browser-dynamic": "~8.2.14", |
"@angular/platform-browser-dynamic": "~9.0.2", |
||||
"@angular/router": "~8.2.14", |
"@angular/router": "~9.0.2", |
||||
"rxjs": "~6.4.0", |
"rxjs": "~6.5.4", |
||||
"tslib": "^1.10.0", |
"tslib": "^1.10.0", |
||||
"zone.js": "~0.9.1" |
"zone.js": "~0.10.2" |
||||
}, |
}, |
||||
"devDependencies": { |
"devDependencies": { |
||||
"@angular-devkit/build-angular": "~0.803.20", |
"@angular-devkit/build-angular": "~0.900.3", |
||||
"@angular/cli": "~8.3.20", |
"@angular/cli": "~9.0.3", |
||||
"@angular/compiler-cli": "~8.2.14", |
"@angular/compiler-cli": "~9.0.2", |
||||
"@angular/language-service": "~8.2.14", |
"@angular/language-service": "~9.0.2", |
||||
"@angularclass/hmr": "^2.1.3", |
"@ngxs/logger-plugin": "^3.6.2", |
||||
"@ngxs/hmr-plugin": "^3.5.1", |
"@types/jasmine": "~3.5.0", |
||||
"@ngxs/logger-plugin": "^3.5.1", |
|
||||
"@types/jasmine": "~3.3.8", |
|
||||
"@types/jasminewd2": "~2.0.3", |
"@types/jasminewd2": "~2.0.3", |
||||
"@types/node": "~8.9.4", |
"@types/node": "^12.11.1", |
||||
"codelyzer": "^5.0.0", |
"codelyzer": "^5.1.2", |
||||
"jasmine-core": "~3.4.0", |
"jasmine-core": "~3.5.0", |
||||
"jasmine-spec-reporter": "~4.2.1", |
"jasmine-spec-reporter": "~4.2.1", |
||||
"karma": "~4.1.0", |
"karma": "~4.3.0", |
||||
"karma-chrome-launcher": "~2.2.0", |
"karma-chrome-launcher": "~3.1.0", |
||||
"karma-coverage-istanbul-reporter": "~2.0.1", |
"karma-coverage-istanbul-reporter": "~2.1.0", |
||||
"karma-jasmine": "~2.0.1", |
"karma-jasmine": "~2.0.1", |
||||
"karma-jasmine-html-reporter": "^1.4.0", |
"karma-jasmine-html-reporter": "^1.4.2", |
||||
"ngxs-schematic": "^1.1.9", |
"ngxs-schematic": "^1.1.9", |
||||
"protractor": "~5.4.0", |
"protractor": "~5.4.3", |
||||
"ts-node": "~7.0.0", |
"ts-node": "~8.3.0", |
||||
"tslint": "~5.15.0", |
"tslint": "~5.18.0", |
||||
"typescript": "~3.5.3" |
"typescript": "~3.7.5" |
||||
} |
} |
||||
} |
} |
||||
|
|||||
@ -1,68 +0,0 @@ |
|||||
import { LazyLoadService } from '@abp/ng.core'; |
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing'; |
|
||||
import { RouterTestingModule } from '@angular/router/testing'; |
|
||||
import { NgxsModule } from '@ngxs/store'; |
|
||||
import { OAuthService } from 'angular-oauth2-oidc'; |
|
||||
import { AppComponent } from './app.component'; |
|
||||
import { LoaderBarComponent } from '@abp/ng.theme.shared'; |
|
||||
import { Subject, Observable } from 'rxjs'; |
|
||||
import { Component } from '@angular/core'; |
|
||||
import { By } from '@angular/platform-browser'; |
|
||||
|
|
||||
@Component({ |
|
||||
template: '', |
|
||||
selector: 'abp-loader-bar', |
|
||||
}) |
|
||||
class DummyLoaderBarComponent {} |
|
||||
|
|
||||
describe('AppComponent', () => { |
|
||||
let component: AppComponent; |
|
||||
let fixture: ComponentFixture<AppComponent>; |
|
||||
let mockLazyLoadService: { load: () => Observable<void> }; |
|
||||
let loadResponse$: Subject<void>; |
|
||||
let spy: jasmine.Spy<() => Observable<void>>; |
|
||||
|
|
||||
beforeEach(() => { |
|
||||
TestBed.configureTestingModule({ |
|
||||
imports: [RouterTestingModule], |
|
||||
declarations: [AppComponent, DummyLoaderBarComponent], |
|
||||
providers: [{ provide: LazyLoadService, useValue: { load: () => loadResponse$ } }], |
|
||||
}); |
|
||||
loadResponse$ = new Subject(); |
|
||||
fixture = TestBed.createComponent(AppComponent); |
|
||||
component = fixture.componentInstance; |
|
||||
mockLazyLoadService = TestBed.get(LazyLoadService); |
|
||||
spy = spyOn(mockLazyLoadService, 'load'); |
|
||||
spy.and.returnValue(loadResponse$); |
|
||||
fixture.detectChanges(); |
|
||||
}); |
|
||||
|
|
||||
describe('LazyLoadService load method', () => { |
|
||||
it('should call', () => { |
|
||||
expect(spy).toHaveBeenCalledWith( |
|
||||
[ |
|
||||
'primeng.min.css', |
|
||||
'primeicons.css', |
|
||||
'primeng-nova-light-theme.css', |
|
||||
'fontawesome-all.min.css', |
|
||||
'fontawesome-v4-shims.min.css', |
|
||||
], |
|
||||
'style', |
|
||||
null, |
|
||||
'head', |
|
||||
); |
|
||||
}); |
|
||||
}); |
|
||||
|
|
||||
describe('template', () => { |
|
||||
it('should have the abp-loader-bar', () => { |
|
||||
const abpLoader = fixture.debugElement.query(By.css('abp-loader-bar')); |
|
||||
expect(abpLoader).toBeTruthy(); |
|
||||
}); |
|
||||
|
|
||||
it('should have router-outlet', () => { |
|
||||
const abpLoader = fixture.debugElement.query(By.css('router-outlet')); |
|
||||
expect(abpLoader).toBeTruthy(); |
|
||||
}); |
|
||||
}); |
|
||||
}); |
|
||||
@ -1,51 +0,0 @@ |
|||||
import { ComponentFixture, TestBed } from '@angular/core/testing'; |
|
||||
import { OAuthService } from 'angular-oauth2-oidc'; |
|
||||
import { HomeComponent } from './home.component'; |
|
||||
import { HomeModule } from './home.module'; |
|
||||
import { RouterTestingModule } from '@angular/router/testing'; |
|
||||
import { NgxsModule } from '@ngxs/store'; |
|
||||
import { By } from '@angular/platform-browser'; |
|
||||
|
|
||||
describe('HomeComponent', () => { |
|
||||
let component: HomeComponent; |
|
||||
let fixture: ComponentFixture<HomeComponent>; |
|
||||
let mockOAuthService: { hasValidAccessToken: () => boolean }; |
|
||||
|
|
||||
beforeEach(() => { |
|
||||
TestBed.configureTestingModule({ |
|
||||
imports: [ NgxsModule.forRoot(), HomeModule, RouterTestingModule], |
|
||||
providers: [{ provide: OAuthService, useValue: { hasValidAccessToken: () => false } }], |
|
||||
}); |
|
||||
fixture = TestBed.createComponent(HomeComponent); |
|
||||
component = fixture.componentInstance; |
|
||||
mockOAuthService = TestBed.get(OAuthService); |
|
||||
fixture.detectChanges(); |
|
||||
}); |
|
||||
|
|
||||
describe('#hasLoggedIn', () => { |
|
||||
it('should return the hasValidAccessToken method of oAuthService', () => { |
|
||||
const spy = spyOn(mockOAuthService, 'hasValidAccessToken'); |
|
||||
spy.and.returnValue(false); |
|
||||
|
|
||||
expect(component.hasLoggedIn).toBe(false); |
|
||||
expect(spy).toHaveBeenCalled(); |
|
||||
}); |
|
||||
}); |
|
||||
|
|
||||
describe('login button', () => { |
|
||||
it('should display', () => { |
|
||||
const button = fixture.debugElement.query(By.css('[routerLink="/account/login"]')); |
|
||||
expect(button).toBeTruthy(); |
|
||||
expect(button.nativeElement.textContent).toContain('AbpAccount::Login'); |
|
||||
}); |
|
||||
|
|
||||
it('should not display when user logged in', () => { |
|
||||
const spy = spyOn(mockOAuthService, 'hasValidAccessToken'); |
|
||||
spy.and.returnValue(true); |
|
||||
fixture.detectChanges(); |
|
||||
|
|
||||
const button = fixture.debugElement.query(By.css('#login-button')); |
|
||||
expect(button).toBeFalsy(); |
|
||||
}); |
|
||||
}); |
|
||||
}); |
|
||||
@ -1,7 +0,0 @@ |
|||||
import { NgModule } from '@angular/core'; |
|
||||
import { AccountModule } from '@abp/ng.account'; |
|
||||
|
|
||||
@NgModule({ |
|
||||
imports: [AccountModule], |
|
||||
}) |
|
||||
export class AccountWrapperModule {} |
|
||||
@ -1,7 +0,0 @@ |
|||||
import { NgModule } from '@angular/core'; |
|
||||
import { IdentityModule } from '@abp/ng.identity'; |
|
||||
|
|
||||
@NgModule({ |
|
||||
imports: [IdentityModule], |
|
||||
}) |
|
||||
export class IdentityWrapperModule {} |
|
||||
@ -1,7 +0,0 @@ |
|||||
import { NgModule } from '@angular/core'; |
|
||||
import { SettingManagementModule } from '@abp/ng.setting-management'; |
|
||||
|
|
||||
@NgModule({ |
|
||||
imports: [SettingManagementModule], |
|
||||
}) |
|
||||
export class SettingManagementWrapperModule {} |
|
||||
@ -1,7 +0,0 @@ |
|||||
import { NgModule } from '@angular/core'; |
|
||||
import { TenantManagementModule } from '@abp/ng.tenant-management'; |
|
||||
|
|
||||
@NgModule({ |
|
||||
imports: [TenantManagementModule], |
|
||||
}) |
|
||||
export class TenantManagementWrapperModule {} |
|
||||
@ -1,25 +0,0 @@ |
|||||
export const environment = { |
|
||||
production: false, |
|
||||
hmr: true, |
|
||||
application: { |
|
||||
name: 'MyProjectName', |
|
||||
logoUrl: '', |
|
||||
}, |
|
||||
oAuthConfig: { |
|
||||
issuer: 'https://localhost:44305', |
|
||||
clientId: 'MyProjectName_App', |
|
||||
dummyClientSecret: '1q2w3e*', |
|
||||
scope: 'MyProjectName', |
|
||||
showDebugInformation: true, |
|
||||
oidc: false, |
|
||||
requireHttps: true, |
|
||||
}, |
|
||||
apis: { |
|
||||
default: { |
|
||||
url: 'https://localhost:44305', |
|
||||
}, |
|
||||
}, |
|
||||
localization: { |
|
||||
defaultResourceName: 'MyProjectName', |
|
||||
}, |
|
||||
}; |
|
||||
@ -1,20 +1,13 @@ |
|||||
import { enableProdMode } from '@angular/core'; |
import { enableProdMode } from '@angular/core'; |
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; |
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; |
||||
import { BootstrapModuleFn as Bootstrap, hmr, WebpackModule } from '@ngxs/hmr-plugin'; |
|
||||
|
|
||||
import { AppModule } from './app/app.module'; |
import { AppModule } from './app/app.module'; |
||||
import { environment } from './environments/environment'; |
import { environment } from './environments/environment'; |
||||
|
|
||||
declare const module: WebpackModule; |
|
||||
|
|
||||
if (environment.production) { |
if (environment.production) { |
||||
enableProdMode(); |
enableProdMode(); |
||||
} |
} |
||||
|
|
||||
const bootstrap: Bootstrap = () => platformBrowserDynamic().bootstrapModule(AppModule); |
platformBrowserDynamic() |
||||
|
.bootstrapModule(AppModule) |
||||
if (environment.hmr) { |
.catch(err => console.error(err)); |
||||
hmr(module, bootstrap).catch(err => console.error(err)); |
|
||||
} else { |
|
||||
bootstrap().catch(err => console.log(err)); |
|
||||
} |
|
||||
|
|||||
Loading…
Reference in new issue