@storecraft/storage-google
Version:
Official Google Storage adapter for storecraft
89 lines (73 loc) • 2.17 kB
JavaScript
import 'dotenv/config';
import { test } from 'uvu';
import * as assert from 'uvu/assert';
import { GoogleStorage } from '@storecraft/storage-google'
import { readFile } from 'node:fs/promises';
import { storage as storage_test_runner } from '@storecraft/core/test-runner'
const areBlobsEqual = async (blob1, blob2) => {
return !Buffer.from(await blob1.arrayBuffer()).compare(
Buffer.from(await blob2.arrayBuffer())
);
};
const storage = new GoogleStorage({
bucket: process.env.GS_BUCKET, client_email: process.env.GS_CLIENT_EMAIL,
private_key: process.env.GS_PRIVATE_KEY, private_key_id: process.env.GS_PRIVATE_KEY_ID
});
const suite = storage_test_runner.create(storage);
suite.before(async () => { await storage.init(undefined) });
suite('blob put/get/delete', async () => {
const data = [
// {
// key: 'folder1/tomer.txt',
// blob: new Blob(['this is some text from tomer :)']),
// },
{
key: 'folder2/node2222.png',
blob: new Blob([await readFile('./node.png')])
}
];
data.forEach(
async d => {
// write
await storage.putBlob(d.key, d.blob);
// read
const { value: blob_read } = await storage.getBlob(d.key);
const url = await storage.getSigned(d.key);
console.log('presign GET url ', url);
// compare
const equal = await areBlobsEqual(blob_read, d.blob);
assert.ok(equal, 'Blobs are not equal !!!');
// delete
// await storage.remove(d.key);
}
);
});
suite('blob put (presign)', async () => {
const data = [
// {
// key: 'folder1/tomer.txt',
// blob: new Blob(['this is some text from tomer :)']),
// },
{
key: 'folder2/node_test2.png',
blob: new Blob([await readFile('./node.png')])
}
];
data.forEach(
async d => {
// get put presigned url
const { url, method, headers } = await storage.putSigned(d.key);
// now let's use it to upload
const r = await fetch(
url, {
method,
headers,
body: d.blob
}
);
console.log(url)
assert.ok(r.ok, 'upload failed')
}
);
});
suite.run();