blob: bcf0ca2007d20b3bb3f3e353c2fe7a1914d69b5a [file] [log] [blame]
Bhavesh72ead492018-07-19 16:29:18 +05301/*
2 * Copyright 2018-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16import { async, ComponentFixture, TestBed } from '@angular/core/testing';
17
18import { GroupComponent } from './group.component';
19import { LogService } from '../../../log.service';
20import { ConsoleLoggerService } from '../../../consolelogger.service';
21import { IconComponent } from '../../../fw/svg/icon/icon.component';
22import { DialogService } from '../../../fw/layer/dialog.service';
23import { FnService } from '../../../fw/util/fn.service';
24import { IconService } from '../../../fw/svg/icon.service';
25import { KeyService } from '../../../fw/util/key.service';
26import { LoadingService } from '../../../fw/layer/loading.service';
27import { ThemeService } from '../../../fw/util/theme.service';
28import { UrlFnService } from '../../../fw/remote/urlfn.service';
29import { WebSocketService } from '../../../fw/remote/websocket.service';
30import { ActivatedRoute, Params } from '@angular/router';
31import { of } from 'rxjs';
32import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
33import { FormsModule } from '@angular/forms';
34import { TableFilterPipe } from '../../../fw/widget/tablefilter.pipe';
35import { RouterTestingModule } from '@angular/router/testing';
36import { DebugElement } from '@angular/core';
37import { By } from '@angular/platform-browser';
38
39class MockActivatedRoute extends ActivatedRoute {
40 constructor(params: Params) {
41 super();
42 this.queryParams = of(params);
43 }
44}
45
46class MockDialogService { }
47
48class MockFnService { }
49
50class MockIconService {
51 loadIconDef() { }
52}
53
54class MockKeyService { }
55
56class MockLoadingService {
57 startAnim() { }
58 stop() { }
59 waiting() { }
60}
61
62class MockThemeService { }
63
64class MockUrlFnService { }
65
66class MockWebSocketService {
67 createWebSocket() { }
68 isConnected() { return false; }
69 unbindHandlers() { }
70 bindHandlers() { }
71}
72
73/**
74 * ONOS GUI -- Group View Module - Unit Tests
75 */
76describe('GroupComponent', () => {
77 let component: GroupComponent;
78 let fixture: ComponentFixture<GroupComponent>;
79 let log: LogService;
80 let fs: FnService;
81 let ar: MockActivatedRoute;
82 let windowMock: Window;
83 const bundleObj = {
84 'core.view.Group': {
85 test: 'test1',
86 tt_help: 'Help!'
87 }
88 };
89 const mockLion = (key) => {
90 return bundleObj[key] || '%' + key + '%';
91 };
92
93 beforeEach(async(() => {
94 log = new ConsoleLoggerService();
95 ar = new MockActivatedRoute({ 'debug': 'txrx' });
96
97 windowMock = <any>{
98 location: <any>{
99 hostname: 'foo',
100 host: 'foo',
101 port: '80',
102 protocol: 'http',
103 search: { debug: 'true' },
104 href: 'ws://foo:123/onos/ui/websock/path',
105 absUrl: 'ws://foo:123/onos/ui/websock/path'
106 }
107 };
108 fs = new FnService(ar, log, windowMock);
109
110 TestBed.configureTestingModule({
111 imports: [BrowserAnimationsModule, FormsModule, RouterTestingModule],
112 declarations: [GroupComponent, IconComponent, TableFilterPipe],
113 providers: [
114 { provide: DialogService, useClass: MockDialogService },
115 { provide: FnService, useValue: fs },
116 { provide: IconService, useClass: MockIconService },
117 { provide: KeyService, useClass: MockKeyService },
118 { provide: LoadingService, useClass: MockLoadingService },
119 { provide: LogService, useValue: log },
120 { provide: ThemeService, useClass: MockThemeService },
121 { provide: UrlFnService, useClass: MockUrlFnService },
122 { provide: WebSocketService, useClass: MockWebSocketService },
123 { provide: 'Window', useValue: windowMock },
124 ]
125 })
126 .compileComponents();
127 }));
128
129 beforeEach(() => {
130 fixture = TestBed.createComponent(GroupComponent);
131 component = fixture.componentInstance;
132 fixture.detectChanges();
133 });
134
135 it('should create', () => {
136 expect(component).toBeTruthy();
137 });
138
139 it('should have a div.tabular-header inside a div#ov-group', () => {
140 const groupDe: DebugElement = fixture.debugElement;
141 const divDe = groupDe.query(By.css('div#ov-group div.tabular-header'));
142 expect(divDe).toBeTruthy();
143 });
144
145 it('should have a h2 inside the div.tabular-header', () => {
146 const groupDe: DebugElement = fixture.debugElement;
147 const divDe = groupDe.query(By.css('div#ov-group div.tabular-header h2'));
148 const div: HTMLElement = divDe.nativeElement;
149 expect(div.textContent).toEqual(' Groups for Device (0 total) ');
150 });
151
152 it('should have a refresh button inside the div.tabular-header', () => {
153 const groupDe: DebugElement = fixture.debugElement;
154 const divDe = groupDe.query(By.css('div#ov-group div.tabular-header div.ctrl-btns div.refresh'));
155 expect(divDe).toBeTruthy();
156 });
157
158 it('should have a div.summary-list inside a div#ov-group', () => {
159 const groupDe: DebugElement = fixture.debugElement;
160 const divDe = groupDe.query(By.css('div#ov-group div.summary-list'));
161 expect(divDe).toBeTruthy();
162 });
163
164 it('should have a div.table-header inside a div.summary-list inside a div#ov-group', () => {
165 const groupDe: DebugElement = fixture.debugElement;
166 const divDe = groupDe.query(By.css('div#ov-group div.summary-list div.table-header'));
167 expect(divDe).toBeTruthy();
168 });
169
170 it('should have a div.table-body inside a div.summary-list inside a div#ov-group', () => {
171 const groupDe: DebugElement = fixture.debugElement;
172 const divDe = groupDe.query(By.css('div#ov-group div.summary-list div.table-body'));
173 expect(divDe).toBeTruthy();
174 });
175});