@storacha/client
Version:
Client for the storacha.network w3up api
82 lines • 4.39 kB
JavaScript
import * as Test from '../test.js';
import * as Account from '../../src/account.js';
import * as Result from '../../src/result.js';
/**
*
* @param {*} client
* @param {import('@storacha/upload-api').DebugEmail} mail
* @param {(email: {url: string | URL}) => Promise<void>} grantAccess
* @param {`${string}@${string}`} email
*/
async function initializeAccount(client, mail, grantAccess, email = 'alice@web.mail') {
const login = Account.login(client, email);
const message = await mail.take();
await grantAccess(message);
const account = Result.try(await login);
await account.save();
return account;
}
export const PlanClient = Test.withContext({
get: {
'should get a plan': async (assert, { client, plansStorage, grantAccess, mail }) => {
const account = await initializeAccount(client, mail, grantAccess);
await assert.rejects(client.capability.plan.get(account.did()));
const exampleProduct = 'did:web:example.com';
Result.try(await plansStorage.initialize(account.did(), 'stripe:123xyz', exampleProduct));
const res = await client.capability.plan.get(account.did(), {
nonce: 'retry',
});
assert.equal(res.product, exampleProduct);
assert.ok(res.updatedAt);
await assert.rejects(client.capability.plan.get('did:mailto:example.com:notauser'));
},
},
set: {
'should set a plan': async (assert, { client, plansStorage, grantAccess, mail }) => {
const account = await initializeAccount(client, mail, grantAccess);
const initialProduct = 'did:web:example.com';
const updatedProduct = 'did:web:example.com:updated';
await assert.rejects(client.capability.plan.set(account.did(), updatedProduct));
Result.try(await plansStorage.initialize(account.did(), 'stripe:123xyz', initialProduct));
assert.equal((await client.capability.plan.get(account.did())).product, initialProduct);
assert.ok(await client.capability.plan.set(account.did(), updatedProduct, {
nonce: '2',
}));
assert.equal((await client.capability.plan.get(account.did(), { nonce: '2' }))
.product, updatedProduct);
await assert.rejects(client.capability.plan.set('did:mailto:example.com:notauser', initialProduct, { nonce: '3' }));
},
},
createAdminSession: {
'should create an admin session': async (assert, { client, plansStorage, grantAccess, mail }) => {
const account = await initializeAccount(client, mail, grantAccess);
await assert.rejects(client.capability.plan.createAdminSession(account.did(), 'https://example.com/return-url'));
const initialProduct = 'did:web:example.com';
Result.try(await plansStorage.initialize(account.did(), 'stripe:123xyz', initialProduct));
const session = await client.capability.plan.createAdminSession(account.did(), 'https://example.com/return-url', { nonce: '2' });
assert.ok(session.url);
await assert.rejects(client.capability.plan.createAdminSession('did:mailto:example.com:notauser', 'https://example.com/return-url', { nonce: '3' }));
},
},
createCheckoutSession: {
'should create a checkout session': async (assert, { client, plansStorage, grantAccess, mail }) => {
const account = await initializeAccount(client, mail, grantAccess);
const session = await client.capability.plan.createCheckoutSession(account.did(), {
successURL: 'https://example.com/return-url',
cancelURL: 'https://example.com/cancel-url',
planID: 'did:web:example.com',
freeTrial: false,
});
assert.ok(session.url);
const errorUser = await initializeAccount(client, mail, grantAccess, 'erroruser@example.com');
await assert.rejects(client.capability.plan.createCheckoutSession(errorUser.did(), {
successURL: 'https://example.com/return-url',
cancelURL: 'https://example.com/cancel-url',
planID: 'did:web:example.com',
freeTrial: false,
}));
},
},
});
Test.test({ PlanClient });
//# sourceMappingURL=plan.test.js.map