Skip to content

Commit acd09e8

Browse files
committed
feature(wysiwyg): adding tests
1 parent d4e4894 commit acd09e8

File tree

2 files changed

+162
-1
lines changed

2 files changed

+162
-1
lines changed

apps/codelab/src/app/multiselect/multiselect-item.directive.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import { Directive, HostListener, Inject, Input } from '@angular/core';
1+
import {
2+
Directive,
3+
ElementRef,
4+
HostListener,
5+
Inject,
6+
Input
7+
} from '@angular/core';
28
import {
39
MULTISELECT_LIST,
410
MultiselectListDirective
@@ -11,6 +17,7 @@ export class MultiselectItemDirective<T> {
1117
@Input() msItem: T;
1218

1319
constructor(
20+
public element: ElementRef<HTMLElement>,
1421
@Inject(MULTISELECT_LIST) public parentList: MultiselectListDirective<T>
1522
) {}
1623

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
import { ComponentFixture, TestBed } from '@angular/core/testing';
2+
import {
3+
Component,
4+
Provider,
5+
QueryList,
6+
Type,
7+
ViewChild,
8+
ViewChildren
9+
} from '@angular/core';
10+
import { MultiselectModule } from './multiselect.module';
11+
import { MultiselectModel } from './multiselect-model';
12+
import { MultiselectListDirective } from './multiselect-list.directive';
13+
import { MultiselectItemDirective } from './multiselect-item.directive';
14+
15+
@Component({
16+
template: `
17+
<div [msModel]="selectionModel" multiselectList>
18+
<div *ngFor="let item of items" [msItem]="item" multiselectItem>
19+
{{ item }}
20+
</div>
21+
</div>
22+
`
23+
})
24+
class MultiselectTestComponent {
25+
@ViewChild(MultiselectListDirective)
26+
multiselectListInstance: MultiselectListDirective<string>;
27+
@ViewChildren(MultiselectItemDirective) multiselectItems: QueryList<
28+
MultiselectItemDirective<string>
29+
>;
30+
31+
public items = ['a', 'b', 'c', 'd', 'e'];
32+
33+
public selectionModel: MultiselectModel<string> = new MultiselectModel(
34+
this.items
35+
);
36+
}
37+
38+
describe('Multiselect', () => {
39+
function createComponent<T>(
40+
componentType: Type<T>,
41+
providers: Provider[] = [],
42+
extraDeclarations: Type<any>[] = []
43+
): ComponentFixture<T> {
44+
TestBed.configureTestingModule({
45+
imports: [MultiselectModule],
46+
declarations: [componentType, ...extraDeclarations],
47+
providers: [...providers]
48+
});
49+
50+
return TestBed.createComponent<T>(componentType);
51+
}
52+
53+
it('should select item', () => {
54+
const fixture = createComponent(MultiselectTestComponent);
55+
56+
fixture.detectChanges();
57+
58+
const itemEls = fixture.componentInstance.multiselectItems.map(
59+
item => item.element.nativeElement
60+
);
61+
62+
const itemEl = itemEls[0];
63+
64+
itemEl.dispatchEvent(new MouseEvent('click'));
65+
66+
fixture.detectChanges();
67+
68+
expect(fixture.componentInstance.selectionModel.selected).toEqual(['a']);
69+
});
70+
71+
it('should do not deselect selected if click on same thing', () => {
72+
const fixture = createComponent(MultiselectTestComponent);
73+
74+
fixture.detectChanges();
75+
76+
const itemEls = fixture.componentInstance.multiselectItems.map(
77+
item => item.element.nativeElement
78+
);
79+
80+
const itemEl = itemEls[0];
81+
82+
itemEl.dispatchEvent(new MouseEvent('click'));
83+
84+
fixture.detectChanges();
85+
86+
itemEl.dispatchEvent(new MouseEvent('click'));
87+
88+
fixture.detectChanges();
89+
90+
expect(fixture.componentInstance.selectionModel.selected).toEqual(['a']);
91+
});
92+
93+
it('selecting with ctrl', () => {
94+
const fixture = createComponent(MultiselectTestComponent);
95+
96+
fixture.detectChanges();
97+
98+
const itemEls = fixture.componentInstance.multiselectItems.map(
99+
item => item.element.nativeElement
100+
);
101+
102+
const itemFirstEl = itemEls[0];
103+
const itemSecondEl = itemEls[1];
104+
105+
itemFirstEl.dispatchEvent(new MouseEvent('click'));
106+
107+
fixture.detectChanges();
108+
109+
itemSecondEl.dispatchEvent(
110+
new MouseEvent('click', {
111+
ctrlKey: true
112+
})
113+
);
114+
115+
fixture.detectChanges();
116+
117+
expect(fixture.componentInstance.selectionModel.selected).toEqual([
118+
'a',
119+
'b'
120+
]);
121+
});
122+
123+
it('selecting with shift', () => {
124+
const fixture = createComponent(MultiselectTestComponent);
125+
126+
fixture.detectChanges();
127+
128+
const itemEls = fixture.componentInstance.multiselectItems.map(
129+
item => item.element.nativeElement
130+
);
131+
132+
const itemFirstEl = itemEls[0];
133+
const itemSecondEl = itemEls[3];
134+
135+
itemFirstEl.dispatchEvent(new MouseEvent('click'));
136+
137+
fixture.detectChanges();
138+
139+
itemSecondEl.dispatchEvent(
140+
new MouseEvent('click', {
141+
shiftKey: true
142+
})
143+
);
144+
145+
fixture.detectChanges();
146+
147+
expect(fixture.componentInstance.selectionModel.selected).toEqual([
148+
'a',
149+
'b',
150+
'c',
151+
'd'
152+
]);
153+
});
154+
});

0 commit comments

Comments
 (0)