Skip to content
This repository was archived by the owner on Jun 23, 2025. It is now read-only.

Commit cb2c465

Browse files
committed
fix(LazyMapsAPILoader): HTTP loading mode
Fixes: #644 Closes #655
1 parent 3fb6603 commit cb2c465

2 files changed

Lines changed: 61 additions & 28 deletions

File tree

src/core/services/maps-api-loader/lazy-maps-api-loader.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import {DOCUMENT_GLOBAL, WINDOW_GLOBAL} from '../../utils/browser-globals';
55
import {MapsAPILoader} from './maps-api-loader';
66

77
export enum GoogleMapsScriptProtocol {
8-
HTTP,
9-
HTTPS,
10-
AUTO
8+
HTTP = 1,
9+
HTTPS = 2,
10+
AUTO = 3
1111
}
1212

1313
/**
Lines changed: 58 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import {TestBed, inject} from '@angular/core/testing';
22

3-
import {LazyMapsAPILoader} from '../../../src/core/services/maps-api-loader/lazy-maps-api-loader';
3+
import {GoogleMapsScriptProtocol, LazyMapsAPILoader, LazyMapsAPILoaderConfig} from '../../../src/core/services/maps-api-loader/lazy-maps-api-loader';
44
import {MapsAPILoader} from '../../../src/core/services/maps-api-loader/maps-api-loader';
55
import {DOCUMENT_GLOBAL, WINDOW_GLOBAL} from '../../../src/core/utils/browser-globals';
66

77
export function main() {
88
describe('Service: LazyMapsAPILoader', () => {
9-
beforeEach(() => {
9+
it('should create the default script URL', () => {
1010
TestBed.configureTestingModule({
1111
providers: [
1212
{provide: MapsAPILoader, useClass: LazyMapsAPILoader},
@@ -16,30 +16,63 @@ export function main() {
1616
}
1717
]
1818
});
19+
20+
inject([MapsAPILoader, DOCUMENT_GLOBAL], (loader: LazyMapsAPILoader, doc: Document) => {
21+
interface Script {
22+
src?: string;
23+
async?: boolean;
24+
defer?: boolean;
25+
type?: string;
26+
}
27+
const scriptElem: Script = {};
28+
(<jasmine.Spy>doc.createElement).and.returnValue(scriptElem);
29+
doc.body = jasmine.createSpyObj('body', ['appendChild']);
30+
31+
loader.load();
32+
expect(doc.createElement).toHaveBeenCalled();
33+
expect(scriptElem.type).toEqual('text/javascript');
34+
expect(scriptElem.async).toEqual(true);
35+
expect(scriptElem.defer).toEqual(true);
36+
expect(scriptElem.src).toBeDefined();
37+
expect(scriptElem.src).toContain('https://maps.googleapis.com/maps/api/js');
38+
expect(scriptElem.src).toContain('v=3');
39+
expect(scriptElem.src).toContain('callback=angular2GoogleMapsLazyMapsAPILoader');
40+
expect(doc.body.appendChild).toHaveBeenCalledWith(scriptElem);
41+
});
1942
});
2043

21-
it('should create the default script URL',
22-
inject([MapsAPILoader, DOCUMENT_GLOBAL], (loader: LazyMapsAPILoader, doc: Document) => {
23-
interface Script {
24-
src?: string;
25-
async?: boolean;
26-
defer?: boolean;
27-
type?: string;
28-
}
29-
const scriptElem: Script = {};
30-
(<jasmine.Spy>doc.createElement).and.returnValue(scriptElem);
31-
doc.body = jasmine.createSpyObj('body', ['appendChild']);
32-
33-
loader.load();
34-
expect(doc.createElement).toHaveBeenCalled();
35-
expect(scriptElem.type).toEqual('text/javascript');
36-
expect(scriptElem.async).toEqual(true);
37-
expect(scriptElem.defer).toEqual(true);
38-
expect(scriptElem.src).toBeDefined();
39-
expect(scriptElem.src).toContain('https://maps.googleapis.com/maps/api/js');
40-
expect(scriptElem.src).toContain('v=3');
41-
expect(scriptElem.src).toContain('callback=angular2GoogleMapsLazyMapsAPILoader');
42-
expect(doc.body.appendChild).toHaveBeenCalledWith(scriptElem);
43-
}));
44+
it('should load the script via http when provided', () => {
45+
const lazyLoadingConf: LazyMapsAPILoaderConfig = new LazyMapsAPILoaderConfig();
46+
lazyLoadingConf.protocol = GoogleMapsScriptProtocol.HTTP;
47+
48+
TestBed.configureTestingModule({
49+
providers: [
50+
{provide: MapsAPILoader, useClass: LazyMapsAPILoader},
51+
{provide: WINDOW_GLOBAL, useValue: {}}, {
52+
provide: DOCUMENT_GLOBAL,
53+
useValue: jasmine.createSpyObj<Document>('Document', ['createElement'])
54+
}
55+
]
56+
});
57+
58+
inject([MapsAPILoader, DOCUMENT_GLOBAL], (loader: LazyMapsAPILoader, doc: Document) => {
59+
interface Script {
60+
src?: string;
61+
async?: boolean;
62+
defer?: boolean;
63+
type?: string;
64+
}
65+
const scriptElem: Script = {};
66+
(<jasmine.Spy>doc.createElement).and.returnValue(scriptElem);
67+
doc.body = jasmine.createSpyObj('body', ['appendChild']);
68+
69+
loader.load();
70+
expect(doc.createElement).toHaveBeenCalled();
71+
expect(scriptElem.src).toContain('http://maps.googleapis.com/maps/api/js');
72+
expect(scriptElem.src).toContain('v=3');
73+
expect(scriptElem.src).toContain('callback=angular2GoogleMapsLazyMapsAPILoader');
74+
expect(doc.body.appendChild).toHaveBeenCalledWith(scriptElem);
75+
});
76+
});
4477
});
4578
}

0 commit comments

Comments
 (0)