Skip to content

Commit d8f09c1

Browse files
committed
Set up tests, add comments
1 parent 5ec092a commit d8f09c1

13 files changed

+354
-216
lines changed

packages/storage/compat/task.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import {
2626
Subscribe,
2727
Unsubscribe
2828
} from '../src/implementation/observer';
29-
import { UploadTaskSnapshot } from '../src/tasksnapshot';
29+
import { UploadTaskResumableSnapshot } from '../src/tasksnapshot';
3030
import { ReferenceCompat } from './reference';
3131
import { FirebaseStorageError } from '../src/implementation/error';
3232

@@ -75,19 +75,19 @@ export class UploadTaskCompat implements types.UploadTask {
7575
completed?: CompleteFn | null
7676
): Unsubscribe | Subscribe<UploadTaskSnapshotCompat> {
7777
let wrappedNextOrObserver:
78-
| StorageObserver<UploadTaskSnapshot>
78+
| StorageObserver<UploadTaskResumableSnapshot>
7979
| undefined
80-
| ((a: UploadTaskSnapshot) => unknown) = undefined;
80+
| ((a: UploadTaskResumableSnapshot) => unknown) = undefined;
8181
if (!!nextOrObserver) {
8282
if (typeof nextOrObserver === 'function') {
83-
wrappedNextOrObserver = (taskSnapshot: UploadTaskSnapshot) =>
83+
wrappedNextOrObserver = (taskSnapshot: UploadTaskResumableSnapshot) =>
8484
nextOrObserver(
8585
new UploadTaskSnapshotCompat(taskSnapshot, this, this._ref)
8686
);
8787
} else {
8888
wrappedNextOrObserver = {
8989
next: !!nextOrObserver.next
90-
? (taskSnapshot: UploadTaskSnapshot) =>
90+
? (taskSnapshot: UploadTaskResumableSnapshot) =>
9191
nextOrObserver.next!(
9292
new UploadTaskSnapshotCompat(taskSnapshot, this, this._ref)
9393
)

packages/storage/compat/tasksnapshot.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818
import * as types from '@firebase/storage-types';
1919
import { ReferenceCompat } from './reference';
2020
import { UploadTaskCompat } from './task';
21-
import { UploadTaskSnapshot } from '../src/tasksnapshot';
21+
import { UploadTaskResumableSnapshot } from '../src/tasksnapshot';
2222
import { Metadata } from '../src/metadata';
2323

2424
export class UploadTaskSnapshotCompat implements types.UploadTaskSnapshot {
2525
constructor(
26-
readonly _delegate: UploadTaskSnapshot,
26+
readonly _delegate: UploadTaskResumableSnapshot,
2727
readonly task: UploadTaskCompat,
2828
readonly ref: ReferenceCompat
2929
) {}

packages/storage/karma.conf.js

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,28 @@ module.exports = function (config) {
3131
};
3232

3333
function getTestFiles(argv) {
34+
let unitTestFiles = [];
35+
let integrationTestFiles = [];
36+
if (argv.exp) {
37+
unitTestFiles = ['test/unit/*'].filter(
38+
filename => !filename.includes('.compat.')
39+
);
40+
integrationTestFiles = ['test/integration/*exp*'];
41+
} else if (argv.compat) {
42+
unitTestFiles = ['test/unit/*'].filter(
43+
filename => !filename.includes('.exp.')
44+
);
45+
integrationTestFiles = ['test/integration/*compat*'];
46+
} else {
47+
console.log('Specify "exp" or "compat" option for karma command.');
48+
return;
49+
}
3450
if (argv.unit) {
35-
return ['test/unit/*'];
51+
return unitTestFiles;
3652
} else if (argv.integration) {
37-
return ['test/integration/*'];
53+
return integrationTestFiles;
3854
} else {
39-
return ['test/**/*'];
55+
return [...unitTestFiles, ...integrationTestFiles];
4056
}
4157
}
4258

packages/storage/package.json

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,15 @@
1717
"build:exp": "rollup -c rollup.config.exp.js",
1818
"build:deps": "lerna run --scope @firebase/storage --include-dependencies build",
1919
"dev": "rollup -c -w",
20-
"test": "run-p test:browser lint",
21-
"test:ci": "node ../../scripts/run_tests_in_ci.js -s test:browser",
22-
"test:browser:unit": "karma start --single-run --unit",
23-
"test:browser:integration": "karma start --single-run --integration",
24-
"test:browser": "karma start --single-run",
20+
"test": "run-p test:browser:compat lint",
21+
"test:exp": "run-p test:browser:exp lint",
22+
"test:ci": "node ../../scripts/run_tests_in_ci.js -s test:browser:compat",
23+
"test:browser:compat:unit": "karma start --single-run --unit",
24+
"test:browser:exp:unit": "karma start --single-run --exp --unit",
25+
"test:browser:compat:integration": "karma start --single-run --integration",
26+
"test:browser:exp:integration": "karma start --single-run --exp --integration",
27+
"test:browser:compat": "karma start --single-run --compat",
28+
"test:browser:exp": "karma start --single-run --exp",
2529
"prepare": "yarn build",
2630
"prettier": "prettier --write 'src/**/*.ts' 'test/**/*.ts'",
2731
"api-report": "api-extractor run --local --verbose"

packages/storage/src/implementation/metadata.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ export function downloadUrlFromResourceString(
187187
}
188188

189189
export function toResourceString(
190-
metadata: Metadata,
190+
metadata: { [key: string]: unknown },
191191
mappings: Mappings
192192
): string {
193193
const resource: {

packages/storage/src/implementation/requests.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ export function getDownloadUrl(
217217
export function updateMetadata(
218218
service: StorageService,
219219
location: Location,
220-
metadata: Metadata,
220+
metadata: { [key: string]: unknown },
221221
mappings: MetadataUtils.Mappings
222222
): RequestInfo<Metadata> {
223223
const urlPart = location.fullServerUrl();
@@ -279,6 +279,9 @@ export function metadataForUpload_(
279279
return metadataClone;
280280
}
281281

282+
/**
283+
* Prepare RequestInfo for non-resumable uploads as Content-Type: octet-stream.
284+
*/
282285
export function simpleUpload(
283286
service: StorageService,
284287
location: Location,
@@ -308,7 +311,9 @@ export function simpleUpload(
308311
requestInfo.errorHandler = sharedErrorHandler(location);
309312
return requestInfo;
310313
}
311-
314+
/**
315+
* Prepare RequestInfo for resumable uploads as Content-Type: multipart.
316+
*/
312317
export function multipartUpload(
313318
service: StorageService,
314319
location: Location,

packages/storage/src/reference.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import { ListOptions, ListResult } from './list';
3737
import { UploadTask } from './task';
3838
import { invalidRootOperation, noDownloadURL } from './implementation/error';
3939
import { validateNumber } from './implementation/type';
40-
import { UploadTaskNonResumableSnapshot } from './tasksnapshot';
40+
import { UploadTaskSnapshot } from './tasksnapshot';
4141
import * as fbsRequests from './implementation/requests';
4242

4343
/**
@@ -126,14 +126,13 @@ export class Reference {
126126
* @param ref - Storage Reference where data should be uploaded.
127127
* @param data - The data to upload.
128128
* @param metadata - Metadata for the newly uploaded string.
129-
* @returns An UploadTask that lets you control and
130-
* observe the upload.
129+
* @returns An UploadTaskNonResumableSnapshot
131130
*/
132131
export async function uploadBytes(
133132
ref: Reference,
134133
data: Blob | Uint8Array | ArrayBuffer,
135134
metadata: Metadata | null = null
136-
): Promise<UploadTaskNonResumableSnapshot> {
135+
): Promise<UploadTaskSnapshot> {
137136
ref._throwIfRoot('uploadBytes');
138137
const authToken = await ref.storage.getAuthToken();
139138
const requestInfo = fbsRequests.simpleUpload(
@@ -143,9 +142,9 @@ export async function uploadBytes(
143142
new FbsBlob(data),
144143
metadata
145144
);
146-
const multipartRequest = ref.storage.makeRequest(requestInfo, authToken);
147-
const finalMetadata = metadata || (await multipartRequest.getPromise());
148-
return new UploadTaskNonResumableSnapshot(finalMetadata, ref);
145+
const request = ref.storage.makeRequest(requestInfo, authToken);
146+
const finalMetadata = metadata || (await request.getPromise());
147+
return new UploadTaskSnapshot(finalMetadata, ref);
149148
}
150149

151150
/**
@@ -183,7 +182,7 @@ export function uploadString(
183182
format: StringFormat = StringFormat.RAW,
184183
metadata?: Metadata
185184
): UploadTask {
186-
ref._throwIfRoot('putString');
185+
ref._throwIfRoot('uploadString');
187186
const data = dataFromString(format, value);
188187
const metadataClone = { ...metadata } as Metadata;
189188
if (metadataClone['contentType'] == null && data.contentType != null) {
@@ -322,7 +321,7 @@ export async function getMetadata(ref: Reference): Promise<Metadata> {
322321
*/
323322
export async function updateMetadata(
324323
ref: Reference,
325-
metadata: Metadata
324+
metadata: { [key: string]: unknown }
326325
): Promise<Metadata> {
327326
ref._throwIfRoot('updateMetadata');
328327
const authToken = await ref.storage.getAuthToken();

packages/storage/src/task.ts

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import {
3636
Unsubscribe
3737
} from './implementation/observer';
3838
import { Request } from './implementation/request';
39-
import { UploadTaskSnapshot } from './tasksnapshot';
39+
import { UploadTaskResumableSnapshot } from './tasksnapshot';
4040
import { async as fbsAsync } from './implementation/async';
4141
import * as fbsMetadata from './implementation/metadata';
4242
import * as fbsRequests from './implementation/requests';
@@ -64,7 +64,7 @@ export class UploadTask {
6464
_transferred: number = 0;
6565
private _needToFetchStatus: boolean = false;
6666
private _needToFetchMetadata: boolean = false;
67-
private _observers: Array<StorageObserver<UploadTaskSnapshot>> = [];
67+
private _observers: Array<StorageObserver<UploadTaskResumableSnapshot>> = [];
6868
private _resumable: boolean;
6969
/**
7070
* @internal
@@ -76,9 +76,9 @@ export class UploadTask {
7676
private _chunkMultiplier: number = 1;
7777
private _errorHandler: (p1: FirebaseStorageError) => void;
7878
private _metadataErrorHandler: (p1: FirebaseStorageError) => void;
79-
private _resolve?: (p1: UploadTaskSnapshot) => void = undefined;
79+
private _resolve?: (p1: UploadTaskResumableSnapshot) => void = undefined;
8080
private _reject?: (p1: FirebaseStorageError) => void = undefined;
81-
private _promise: Promise<UploadTaskSnapshot>;
81+
private _promise: Promise<UploadTaskResumableSnapshot>;
8282

8383
/**
8484
* @param ref - The firebaseStorage.Reference object this task came
@@ -429,9 +429,9 @@ export class UploadTask {
429429
}
430430
}
431431

432-
get snapshot(): UploadTaskSnapshot {
432+
get snapshot(): UploadTaskResumableSnapshot {
433433
const externalState = taskStateFromInternalTaskState(this._state);
434-
return new UploadTaskSnapshot(
434+
return new UploadTaskResumableSnapshot(
435435
this._transferred,
436436
this._blob.size(),
437437
externalState,
@@ -448,11 +448,11 @@ export class UploadTask {
448448
on(
449449
type: TaskEvent,
450450
nextOrObserver?:
451-
| StorageObserver<UploadTaskSnapshot>
452-
| ((a: UploadTaskSnapshot) => unknown),
451+
| StorageObserver<UploadTaskResumableSnapshot>
452+
| ((a: UploadTaskResumableSnapshot) => unknown),
453453
error?: ErrorFn,
454454
completed?: CompleteFn
455-
): Unsubscribe | Subscribe<UploadTaskSnapshot> {
455+
): Unsubscribe | Subscribe<UploadTaskResumableSnapshot> {
456456
const observer = new Observer(nextOrObserver, error, completed);
457457
this._addObserver(observer);
458458
return () => {
@@ -467,13 +467,15 @@ export class UploadTask {
467467
* @param onRejected - The rejection callback.
468468
*/
469469
then<U>(
470-
onFulfilled?: ((value: UploadTaskSnapshot) => U | Promise<U>) | null,
470+
onFulfilled?:
471+
| ((value: UploadTaskResumableSnapshot) => U | Promise<U>)
472+
| null,
471473
onRejected?: ((error: FirebaseStorageError) => U | Promise<U>) | null
472474
): Promise<U> {
473475
// These casts are needed so that TypeScript can infer the types of the
474476
// resulting Promise.
475477
return this._promise.then<U>(
476-
onFulfilled as (value: UploadTaskSnapshot) => U | Promise<U>,
478+
onFulfilled as (value: UploadTaskResumableSnapshot) => U | Promise<U>,
477479
onRejected as ((error: unknown) => Promise<never>) | null
478480
);
479481
}
@@ -490,15 +492,17 @@ export class UploadTask {
490492
/**
491493
* Adds the given observer.
492494
*/
493-
private _addObserver(observer: Observer<UploadTaskSnapshot>): void {
495+
private _addObserver(observer: Observer<UploadTaskResumableSnapshot>): void {
494496
this._observers.push(observer);
495497
this._notifyObserver(observer);
496498
}
497499

498500
/**
499501
* Removes the given observer.
500502
*/
501-
private _removeObserver(observer: Observer<UploadTaskSnapshot>): void {
503+
private _removeObserver(
504+
observer: Observer<UploadTaskResumableSnapshot>
505+
): void {
502506
const i = this._observers.indexOf(observer);
503507
if (i !== -1) {
504508
this._observers.splice(i, 1);
@@ -536,7 +540,9 @@ export class UploadTask {
536540
}
537541
}
538542

539-
private _notifyObserver(observer: Observer<UploadTaskSnapshot>): void {
543+
private _notifyObserver(
544+
observer: Observer<UploadTaskResumableSnapshot>
545+
): void {
540546
const externalState = taskStateFromInternalTaskState(this._state);
541547
switch (externalState) {
542548
case TaskState.RUNNING:

packages/storage/src/tasksnapshot.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { Metadata } from './metadata';
1919
import { Reference } from './reference';
2020
import { UploadTask } from './task';
2121

22-
export class UploadTaskSnapshot {
22+
export class UploadTaskResumableSnapshot {
2323
constructor(
2424
readonly bytesTransferred: number,
2525
readonly totalBytes: number,
@@ -29,6 +29,6 @@ export class UploadTaskSnapshot {
2929
readonly ref: Reference
3030
) {}
3131
}
32-
export class UploadTaskNonResumableSnapshot {
32+
export class UploadTaskSnapshot {
3333
constructor(readonly metadata: Metadata, readonly ref: Reference) {}
3434
}

0 commit comments

Comments
 (0)