mirror of
https://github.com/hanzoai/firebase-js-sdk.git
synced 2026-09-24 16:59:10 +00:00
147 lines
4.6 KiB
TypeScript
147 lines
4.6 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2020 Google LLC
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import firebase from '@firebase/app-compat';
|
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
import '@firebase/auth-compat';
|
|
|
|
// See https://github.com/typescript-eslint/typescript-eslint/issues/363
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
import * as storage from '@firebase/storage-types';
|
|
|
|
import { expect } from 'chai';
|
|
import '../../src/index';
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
const PROJECT_CONFIG = require('../../../../config/project.json');
|
|
|
|
export const PROJECT_ID = PROJECT_CONFIG.projectId;
|
|
export const STORAGE_BUCKET = PROJECT_CONFIG.storageBucket;
|
|
export const API_KEY = PROJECT_CONFIG.apiKey;
|
|
|
|
let appCount = 0;
|
|
|
|
export async function withTestInstance(
|
|
fn: (storage: storage.FirebaseStorage) => void | Promise<void>
|
|
): Promise<void> {
|
|
const app = firebase.initializeApp(
|
|
{ apiKey: API_KEY, projectId: PROJECT_ID, storageBucket: STORAGE_BUCKET },
|
|
'test-app-' + appCount++
|
|
);
|
|
await firebase.auth!(app).signInAnonymously();
|
|
const storage = firebase.storage!(app);
|
|
return fn(storage);
|
|
}
|
|
|
|
describe('FirebaseStorage Compat', () => {
|
|
it('can upload bytes', () => {
|
|
return withTestInstance(async storage => {
|
|
const ref = storage.ref('public/bytes');
|
|
await ref.put(new Uint8Array([0, 1, 3]));
|
|
});
|
|
});
|
|
|
|
it('can upload string', () => {
|
|
return withTestInstance(async storage => {
|
|
const ref = storage.ref('public/string');
|
|
await ref.putString('foo');
|
|
});
|
|
});
|
|
|
|
it('validates operations on root', () => {
|
|
return withTestInstance(async storage => {
|
|
const ref = storage.ref('');
|
|
try {
|
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
ref.putString('foo');
|
|
expect.fail();
|
|
} catch (e) {
|
|
expect((e as Error).message).to.satisfy((v: string) =>
|
|
v.match(
|
|
/The operation 'putString' cannot be performed on a root reference/
|
|
)
|
|
);
|
|
}
|
|
});
|
|
});
|
|
|
|
it('can delete object', () => {
|
|
return withTestInstance(async storage => {
|
|
const ref = storage.ref('public/delete');
|
|
await ref.putString('foo');
|
|
|
|
// getDownloadURL() succeeds for an existing object
|
|
await ref.getDownloadURL();
|
|
|
|
await ref.delete();
|
|
try {
|
|
// getDownloadURL() fails for a deleted object
|
|
await ref.getDownloadURL();
|
|
expect.fail();
|
|
} catch (e) {
|
|
expect((e as Error).message).to.satisfy((v: string) =>
|
|
v.match(/Object 'public\/delete' does not exist/)
|
|
);
|
|
}
|
|
});
|
|
});
|
|
|
|
it('can get download URL', () => {
|
|
return withTestInstance(async storage => {
|
|
const ref = storage.ref('public/downloadurl');
|
|
await ref.put(new Uint8Array([0, 1, 3]));
|
|
const url = await ref.getDownloadURL();
|
|
expect(url).to.satisfy((v: string) =>
|
|
v.match(
|
|
/https:\/\/firebasestorage\.googleapis\.com\/v0\/b\/.*\/o\/public%2Fdownloadurl/
|
|
)
|
|
);
|
|
});
|
|
});
|
|
|
|
it('can get metadata', () => {
|
|
return withTestInstance(async storage => {
|
|
const ref = storage.ref('public/getmetadata');
|
|
await ref.put(new Uint8Array([0, 1, 3]));
|
|
const metadata = await ref.getMetadata();
|
|
expect(metadata.name).to.equal('getmetadata');
|
|
});
|
|
});
|
|
|
|
it('can update metadata', () => {
|
|
return withTestInstance(async storage => {
|
|
const ref = storage.ref('public/updatemetadata');
|
|
await ref.put(new Uint8Array([0, 1, 3]));
|
|
const metadata = await ref.updateMetadata({
|
|
customMetadata: { foo: 'bar' }
|
|
});
|
|
expect(metadata.customMetadata).to.deep.equal({ foo: 'bar' });
|
|
});
|
|
});
|
|
|
|
it('can list files', () => {
|
|
return withTestInstance(async storage => {
|
|
await storage.ref('public/list/a').putString('');
|
|
await storage.ref('public/list/b').putString('');
|
|
await storage.ref('public/list/c/d').putString('');
|
|
const listResult = await storage.ref('public/list').listAll();
|
|
expect(listResult.items.map(v => v.name)).to.have.members(['a', 'b']);
|
|
expect(listResult.prefixes.map(v => v.name)).to.have.members(['c']);
|
|
});
|
|
});
|
|
});
|