blob: e17ff50d1e731d5b059b1723e7173d0f3446162a [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';
17import { ActivatedRoute, Params } from '@angular/router';
18import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
19import { FormsModule } from '@angular/forms';
20import { DebugElement } from '@angular/core';
21import { By } from '@angular/platform-browser';
22import { MeterComponent } from './meter.component';
23import { LogService } from '../../../log.service';
24import { DialogService } from '../../../fw/layer/dialog.service';
25import { FnService } from '../../../fw/util/fn.service';
26import { IconComponent } from '../../../fw/svg/icon/icon.component';
27import { IconService } from '../../../fw/svg/icon.service';
28import { KeyService } from '../../../fw/util/key.service';
29import { LionService } from '../../../fw/util/lion.service';
30import { LoadingService } from '../../../fw/layer/loading.service';
31import { ThemeService } from '../../../fw/util/theme.service';
32import { TableFilterPipe } from '../../../fw/widget/tablefilter.pipe';
33import { UrlFnService } from '../../../fw/remote/urlfn.service';
34import { WebSocketService } from '../../../fw/remote/websocket.service';
35import { of, Subject } from 'rxjs';
36import { } from 'jasmine';
37import { RouterTestingModule } from '@angular/router/testing';
38
39
40class MockActivatedRoute extends ActivatedRoute {
41 constructor(params: Params) {
42 super();
43 this.queryParams = of(params);
44 }
45}
46
47
48class MockDialogService { }
49
50class MockFnService { }
51
52class MockIconService {
53 loadIconDef() { }
54}
55
56class MockKeyService { }
57
58class MockLoadingService {
59 startAnim() { }
60 stop() { }
61 waiting() { }
62}
63
64class MockThemeService { }
65
66class MockUrlFnService { }
67
68class MockWebSocketService {
69 createWebSocket() { }
70 isConnected() { return false; }
71 unbindHandlers() { }
72 bindHandlers() { }
73}
74
75
76/**
77 * ONOS GUI -- Meter Panel View -- Unit Tests
78 */
79
80describe('MeterComponent', () => {
81
82 let fs: FnService;
83 let ar: MockActivatedRoute;
84 let windowMock: Window;
85 let logServiceSpy: jasmine.SpyObj<LogService>;
86 let component: MeterComponent;
87 let fixture: ComponentFixture<MeterComponent>;
88
89 const bundleObj = {
90 'core.view.Meter': {
91 test: 'test1'
92 }
93 };
94
95 const mockLion = (key) => {
96 return bundleObj[key] || '%' + key + '%';
97 };
98
99
100
101 beforeEach(async(() => {
102
103 const logSpy = jasmine.createSpyObj('LogService', ['info', 'debug', 'warn', 'error']);
104 ar = new MockActivatedRoute({ 'debug': 'txrx' });
105
106 windowMock = <any>{
107 location: <any>{
108 hostname: 'foo',
109 host: 'foo',
110 port: '80',
111 protocol: 'http',
112 search: { debug: 'true' },
113 href: 'ws://foo:123/onos/ui/websock/path',
114 absUrl: 'ws://foo:123/onos/ui/websock/path'
115 }
116 };
117 fs = new FnService(ar, logSpy, windowMock);
118
119 TestBed.configureTestingModule({
120 imports: [BrowserAnimationsModule, FormsModule, RouterTestingModule],
121 declarations: [MeterComponent, IconComponent, TableFilterPipe],
122 providers: [
123 { provide: DialogService, useClass: MockDialogService },
124 { provide: FnService, useValue: fs },
125 { provide: IconService, useClass: MockIconService },
126 { provide: KeyService, useClass: MockKeyService },
127 {
128 provide: LionService, useFactory: (() => {
129 return {
130 bundle: ((bundleId) => mockLion),
131 ubercache: new Array(),
132 loadCbs: new Map<string, () => void>([])
133 };
134 })
135 },
136 { provide: LoadingService, useClass: MockLoadingService },
137 { provide: LogService, useValue: logSpy },
138 { provide: ThemeService, useClass: MockThemeService },
139 { provide: UrlFnService, useClass: MockUrlFnService },
140 { provide: WebSocketService, useClass: MockWebSocketService },
141 { provide: 'Window', useValue: windowMock },
142 ]
143 })
144 .compileComponents();
145 logServiceSpy = TestBed.get(LogService);
146 }));
147
148 beforeEach(() => {
149 fixture = TestBed.createComponent(MeterComponent);
150 component = fixture.componentInstance;
151 fixture.detectChanges();
152 });
153
154 it('should create', () => {
155 expect(component).toBeTruthy();
156 });
157
158
159 it('should have a div.tabular-header inside a div#ov-meter', () => {
160 const metDe: DebugElement = fixture.debugElement;
161 const divDe = metDe.query(By.css('div#ov-meter div.tabular-header'));
162 expect(divDe).toBeTruthy();
163 });
164
165 it('should have a h2 inside the div.tabular-header', () => {
166 const metDe: DebugElement = fixture.debugElement;
167 const divDe = metDe.query(By.css('div#ov-meter div.tabular-header h2'));
168 const div: HTMLElement = divDe.nativeElement;
169 expect(div.textContent).toEqual(' Meter for Device (0 Total )');
170 });
171
172 it('should have a refresh button inside the div.tabular-header', () => {
173 const metDe: DebugElement = fixture.debugElement;
174 const divDe = metDe.query(By.css('div#ov-meter div.tabular-header div.ctrl-btns div.refresh'));
175 expect(divDe).toBeTruthy();
176 });
177
178
179 it('should have a div.summary-list inside a div#ov-meter', () => {
180 const hostDe: DebugElement = fixture.debugElement;
181 const divDe = hostDe.query(By.css('div#ov-meter div.summary-list'));
182 expect(divDe).toBeTruthy();
183 });
184
185 it('should have a div.table-header inside a div.summary-list inside a div#ov-meter', () => {
186 const hostDe: DebugElement = fixture.debugElement;
187 const divDe = hostDe.query(By.css('div#ov-meter div.summary-list div.table-header'));
188 expect(divDe).toBeTruthy();
189 });
190
191 it('should have a div.table-body inside a div.summary-list inside a div#ov-meter', () => {
192 const hostDe: DebugElement = fixture.debugElement;
193 const divDe = hostDe.query(By.css('div#ov-meter div.summary-list div.table-body'));
194 expect(divDe).toBeTruthy();
195 });
196});