Skip to content

Commit 847c474

Browse files
committed
feat(google-maps) Add google-map-marker component
Add tests to Google Map marker component.
1 parent 84741ed commit 847c474

File tree

9 files changed

+357
-120
lines changed

9 files changed

+357
-120
lines changed

src/dev-app/google-map/google-map-demo.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
[zoom]="zoom"
66
(mapClick)="handleClick($event)"
77
(mapMousemove)="handleMove($event)">
8-
<google-map-marker [position]="gettysburg"
8+
<google-map-marker [position]="markerPosition"
99
[options]="markerOptions"
1010
(mapClick)="clickMarker($event)"></google-map-marker>
1111
</google-map>

src/dev-app/google-map/google-map-demo.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export class GoogleMapDemo {
2020

2121
center = {lat: 24, lng: 12};
2222
markerOptions = {draggable: false};
23-
gettysburg = {lat: 39.830205, lng:-77.232949};
23+
markerPosition = {lat: 39.830205, lng: -77.232949};
2424
zoom = 4;
2525
display?: google.maps.LatLngLiteral;
2626

src/google-maps/google-map-marker/google-map-marker-module.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import { NgModule } from '@angular/core';
10-
import { GoogleMapMarker } from './google-map-marker';
9+
import {NgModule} from '@angular/core';
10+
import {GoogleMapMarker} from './google-map-marker';
1111

1212
@NgModule({
1313
exports: [GoogleMapMarker],

src/google-maps/google-map-marker/google-map-marker.spec.ts

Lines changed: 208 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
import { Component } from '@angular/core';
2-
import { async, TestBed } from '@angular/core/testing';
3-
import { By } from '@angular/platform-browser';
1+
import {Component} from '@angular/core';
2+
import {async, TestBed} from '@angular/core/testing';
3+
import {By} from '@angular/platform-browser';
44

5-
import {DEFAULT_OPTIONS, GoogleMapMarkerModule} from './index';
5+
import {
6+
createMarkerConstructorSpy,
7+
createMarkerSpy,
8+
TestingWindow
9+
} from '../testing/fake-google-map-utils';
610

7-
import {createMarkerSpy, createMarkerConstructorSpy, TestingWindow} from '../testing/fake-google-map-utils';
11+
import {DEFAULT_MARKER_OPTIONS, GoogleMapMarker, GoogleMapMarkerModule} from './index';
812

913
describe('GoogleMapMarker', () => {
1014
beforeEach(async(() => {
@@ -24,26 +28,214 @@ describe('GoogleMapMarker', () => {
2428
});
2529

2630
it('initializes a Google Map marker', () => {
27-
let markerSpy = createMarkerSpy(DEFAULT_OPTIONS);
28-
let markerConstructorSpy = createMarkerConstructorSpy(markerSpy);
31+
let markerSpy = createMarkerSpy(DEFAULT_MARKER_OPTIONS);
32+
let markerConstructorSpy = createMarkerConstructorSpy(markerSpy).and.callThrough();
2933

3034
const fixture = TestBed.createComponent(TestApp);
35+
const fakeMap = {} as unknown as google.maps.Map;
36+
const markerComponent =
37+
fixture.debugElement.query(By.directive(GoogleMapMarker)).componentInstance;
38+
markerComponent.setMap(fakeMap);
3139
fixture.detectChanges();
3240

33-
expect(markerConstructorSpy).toHaveBeenCalledWith(DEFAULT_OPTIONS);
41+
expect(markerConstructorSpy).toHaveBeenCalledWith({
42+
...DEFAULT_MARKER_OPTIONS,
43+
title: undefined,
44+
label: undefined,
45+
clickable: undefined,
46+
map: fakeMap
47+
});
48+
});
49+
50+
it('sets marker inputs', () => {
51+
const fakeMap = {} as unknown as google.maps.Map;
52+
const options: google.maps.MarkerOptions = {
53+
position: {lat: 3, lng: 5},
54+
title: 'marker title',
55+
label: 'marker label',
56+
clickable: false,
57+
map: fakeMap,
58+
};
59+
let markerSpy = createMarkerSpy(options);
60+
let markerConstructorSpy = createMarkerConstructorSpy(markerSpy).and.callThrough();
61+
62+
const fixture = TestBed.createComponent(TestApp);
63+
fixture.componentInstance.position = options.position;
64+
fixture.componentInstance.title = options.title;
65+
fixture.componentInstance.label = options.label;
66+
fixture.componentInstance.clickable = options.clickable;
67+
const markerComponent =
68+
fixture.debugElement.query(By.directive(GoogleMapMarker)).componentInstance;
69+
markerComponent.setMap(fakeMap);
70+
fixture.detectChanges();
71+
72+
expect(markerConstructorSpy).toHaveBeenCalledWith(options);
73+
});
74+
75+
it('sets marker options, ignoring map', () => {
76+
const fakeMap = {} as unknown as google.maps.Map;
77+
const options: google.maps.MarkerOptions = {
78+
position: {lat: 3, lng: 5},
79+
title: 'marker title',
80+
label: 'marker label',
81+
clickable: false,
82+
icon: 'icon name',
83+
};
84+
let markerSpy = createMarkerSpy(options);
85+
let markerConstructorSpy = createMarkerConstructorSpy(markerSpy).and.callThrough();
86+
87+
const fixture = TestBed.createComponent(TestApp);
88+
fixture.componentInstance.options = options;
89+
const markerComponent =
90+
fixture.debugElement.query(By.directive(GoogleMapMarker)).componentInstance;
91+
markerComponent.setMap(fakeMap);
92+
fixture.detectChanges();
93+
94+
expect(markerConstructorSpy).toHaveBeenCalledWith({...options, map: fakeMap});
3495
});
3596

36-
it('sets marker inputs', () => {});
97+
it('gives precedence to specific inputs over options', () => {
98+
const fakeMap = {} as unknown as google.maps.Map;
99+
const options: google.maps.MarkerOptions = {
100+
position: {lat: 3, lng: 5},
101+
title: 'marker title',
102+
label: 'marker label',
103+
clickable: false,
104+
icon: 'icon name',
105+
};
106+
const expectedOptions: google.maps.MarkerOptions = {
107+
position: {lat: 5, lng: 12},
108+
title: 'updated title',
109+
label: 'updated label',
110+
clickable: true,
111+
icon: 'icon name',
112+
map: fakeMap,
113+
};
114+
let markerSpy = createMarkerSpy(options);
115+
let markerConstructorSpy = createMarkerConstructorSpy(markerSpy).and.callThrough();
116+
117+
const fixture = TestBed.createComponent(TestApp);
118+
fixture.componentInstance.position = expectedOptions.position;
119+
fixture.componentInstance.title = expectedOptions.title;
120+
fixture.componentInstance.label = expectedOptions.label;
121+
fixture.componentInstance.clickable = expectedOptions.clickable;
122+
fixture.componentInstance.options = options;
123+
const markerComponent =
124+
fixture.debugElement.query(By.directive(GoogleMapMarker)).componentInstance;
125+
markerComponent.setMap(fakeMap);
126+
fixture.detectChanges();
37127

38-
it('sets marker options, ignoring map', () => {});
128+
expect(markerConstructorSpy).toHaveBeenCalledWith(expectedOptions);
129+
});
39130

40-
it('gives precedence to specific inputs over options', () => {});
131+
it('sets the map on the marker only once', () => {
132+
let markerSpy = createMarkerSpy(DEFAULT_MARKER_OPTIONS);
133+
let markerConstructorSpy = createMarkerConstructorSpy(markerSpy).and.callThrough();
41134

42-
it('sets the map on the marker only once', () => {});
135+
const fixture = TestBed.createComponent(TestApp);
136+
const fakeMap = {} as unknown as google.maps.Map;
137+
const fakeMap2 = {testValue: 'test'} as unknown as google.maps.Map;
138+
const markerComponent =
139+
fixture.debugElement.query(By.directive(GoogleMapMarker)).componentInstance;
140+
markerComponent.setMap(fakeMap);
141+
markerComponent.setMap(fakeMap2);
142+
fixture.detectChanges();
143+
144+
expect(markerConstructorSpy).toHaveBeenCalledWith({
145+
...DEFAULT_MARKER_OPTIONS,
146+
title: undefined,
147+
label: undefined,
148+
clickable: undefined,
149+
map: fakeMap
150+
});
151+
expect(markerSpy.setOptions).not.toHaveBeenCalled();
152+
});
43153

44-
it('exposes methods that provide information about the marker', () => {});
154+
it('exposes methods that provide information about the marker', () => {
155+
let markerSpy = createMarkerSpy(DEFAULT_MARKER_OPTIONS);
156+
createMarkerConstructorSpy(markerSpy).and.callThrough();
45157

46-
it('initializes marker event handlers', () => {});
158+
const fixture = TestBed.createComponent(TestApp);
159+
const fakeMap = {} as unknown as google.maps.Map;
160+
const markerComponent =
161+
fixture.debugElement.query(By.directive(GoogleMapMarker)).componentInstance;
162+
markerComponent.setMap(fakeMap);
163+
fixture.detectChanges();
164+
165+
markerSpy.getAnimation.and.returnValue(null);
166+
expect(markerComponent.getAnimation()).toBe(null);
167+
168+
markerSpy.getClickable.and.returnValue(true);
169+
expect(markerComponent.getClickable()).toBe(true);
170+
171+
markerSpy.getCursor.and.returnValue('cursor');
172+
expect(markerComponent.getCursor()).toBe('cursor');
173+
174+
markerSpy.getDraggable.and.returnValue(true);
175+
expect(markerComponent.getDraggable()).toBe(true);
176+
177+
markerSpy.getIcon.and.returnValue('icon');
178+
expect(markerComponent.getIcon()).toBe('icon');
179+
180+
markerSpy.getLabel.and.returnValue('label');
181+
expect(markerComponent.getLabel()).toBe('label');
182+
183+
markerSpy.getOpacity.and.returnValue(5);
184+
expect(markerComponent.getOpacity()).toBe(5);
185+
186+
markerSpy.getPosition.and.returnValue({lat: 1, lng: 2});
187+
expect(markerComponent.getPosition()).toEqual({lat: 1, lng: 2});
188+
189+
markerSpy.getShape.and.returnValue(null);
190+
expect(markerComponent.getShape()).toBe(null);
191+
192+
markerSpy.getTitle.and.returnValue('title');
193+
expect(markerComponent.getTitle()).toBe('title');
194+
195+
markerSpy.getVisible.and.returnValue(true);
196+
expect(markerComponent.getVisible()).toBe(true);
197+
198+
markerSpy.getZIndex.and.returnValue(2);
199+
expect(markerComponent.getZIndex()).toBe(2);
200+
});
201+
202+
it('initializes marker event handlers', () => {
203+
let markerSpy = createMarkerSpy(DEFAULT_MARKER_OPTIONS);
204+
createMarkerConstructorSpy(markerSpy).and.callThrough();
205+
206+
const fixture = TestBed.createComponent(TestApp);
207+
const fakeMap = {} as unknown as google.maps.Map;
208+
const markerComponent =
209+
fixture.debugElement.query(By.directive(GoogleMapMarker)).componentInstance;
210+
markerComponent.setMap(fakeMap);
211+
fixture.detectChanges();
212+
213+
expect(markerSpy.addListener)
214+
.not.toHaveBeenCalledWith('animation_changed', jasmine.any(Function));
215+
expect(markerSpy.addListener).toHaveBeenCalledWith('click', jasmine.any(Function));
216+
expect(markerSpy.addListener)
217+
.not.toHaveBeenCalledWith('clickable_changed', jasmine.any(Function));
218+
expect(markerSpy.addListener).not.toHaveBeenCalledWith('cursor_changed', jasmine.any(Function));
219+
expect(markerSpy.addListener).not.toHaveBeenCalledWith('dblclick', jasmine.any(Function));
220+
expect(markerSpy.addListener).not.toHaveBeenCalledWith('drag', jasmine.any(Function));
221+
expect(markerSpy.addListener).not.toHaveBeenCalledWith('dragend', jasmine.any(Function));
222+
expect(markerSpy.addListener)
223+
.not.toHaveBeenCalledWith('draggable_changed', jasmine.any(Function));
224+
expect(markerSpy.addListener).not.toHaveBeenCalledWith('dragstart', jasmine.any(Function));
225+
expect(markerSpy.addListener).not.toHaveBeenCalledWith('flat_changed', jasmine.any(Function));
226+
expect(markerSpy.addListener).not.toHaveBeenCalledWith('icon_changed', jasmine.any(Function));
227+
expect(markerSpy.addListener).not.toHaveBeenCalledWith('mousedown', jasmine.any(Function));
228+
expect(markerSpy.addListener).not.toHaveBeenCalledWith('mouseout', jasmine.any(Function));
229+
expect(markerSpy.addListener).not.toHaveBeenCalledWith('mouseover', jasmine.any(Function));
230+
expect(markerSpy.addListener).not.toHaveBeenCalledWith('mouseup', jasmine.any(Function));
231+
expect(markerSpy.addListener).toHaveBeenCalledWith('position_changed', jasmine.any(Function));
232+
expect(markerSpy.addListener).not.toHaveBeenCalledWith('rightclick', jasmine.any(Function));
233+
expect(markerSpy.addListener).not.toHaveBeenCalledWith('shape_changed', jasmine.any(Function));
234+
expect(markerSpy.addListener).not.toHaveBeenCalledWith('title_changed', jasmine.any(Function));
235+
expect(markerSpy.addListener)
236+
.not.toHaveBeenCalledWith('visible_changed', jasmine.any(Function));
237+
expect(markerSpy.addListener).not.toHaveBeenCalledWith('zindex_changed', jasmine.any(Function));
238+
});
47239
});
48240

49241
@Component({
@@ -58,8 +250,8 @@ describe('GoogleMapMarker', () => {
58250
})
59251
class TestApp {
60252
title?: string;
61-
position?: google.maps.LatLngLiteral;
62-
label?: string;
253+
position?: google.maps.LatLng|google.maps.LatLngLiteral;
254+
label?: string|google.maps.MarkerLabel;
63255
clickable?: boolean;
64256
options?: google.maps.MarkerOptions;
65257

0 commit comments

Comments
 (0)