Skip to content

Commit

Permalink
feat: modify tests to cover blob add on upload-client
Browse files Browse the repository at this point in the history
  • Loading branch information
joaosa committed Apr 30, 2024
1 parent 07929d3 commit 28cbbac
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 49 deletions.
6 changes: 6 additions & 0 deletions packages/upload-client/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ import {
Failure,
} from '@ucanto/interface'
import {
BlobAdd,
BlobAddSuccess,
BlobAddFailure,
StoreAdd,
StoreAddSuccess,
StoreAddSuccessUpload,
Expand Down Expand Up @@ -95,6 +98,9 @@ export interface ProgressStatus extends XHRProgressStatus {
export type ProgressFn = (status: ProgressStatus) => void

export interface Service extends StorefrontService {
blob: {
add: ServiceMethod<BlobAdd, BlobAddSuccess, BlobAddFailure>
}
store: {
add: ServiceMethod<StoreAdd, StoreAddSuccess, Failure>
get: ServiceMethod<StoreGet, StoreGetSuccess, StoreGetFailure>
Expand Down
4 changes: 4 additions & 0 deletions packages/upload-client/test/helpers/mocks.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const notImplemented = () => {

/**
* @param {Partial<{
* blob: Partial<import('../../src/types.js').Service['blob']>
* store: Partial<import('../../src/types.js').Service['store']>
* upload: Partial<import('../../src/types.js').Service['upload']>
* usage: Partial<import('../../src/types.js').Service['usage']>
Expand All @@ -14,6 +15,9 @@ const notImplemented = () => {
*/
export function mockService(impl) {
return {
blob: {
add: withCallCount(impl.blob?.add ?? notImplemented),
},
store: {
add: withCallCount(impl.store?.add ?? notImplemented),
get: withCallCount(impl.store?.get ?? notImplemented),
Expand Down
95 changes: 46 additions & 49 deletions packages/upload-client/test/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import * as Server from '@ucanto/server'
import { provide } from '@ucanto/server'
import * as CAR from '@ucanto/transport/car'
import * as Signer from '@ucanto/principal/ed25519'
import * as StoreCapabilities from '@web3-storage/capabilities/store'
import * as BlobCapabilities from '@web3-storage/capabilities/blob'
import * as UploadCapabilities from '@web3-storage/capabilities/upload'
import * as StorefrontCapabilities from '@web3-storage/capabilities/filecoin/storefront'
import { Piece } from '@web3-storage/data-segment'
Expand Down Expand Up @@ -41,7 +41,7 @@ describe('uploadFile', () => {
let carCID

const proofs = await Promise.all([
StoreCapabilities.add.delegate({
BlobCapabilities.add.delegate({
issuer: space,
audience: agent,
with: space.did(),
Expand All @@ -65,13 +65,13 @@ describe('uploadFile', () => {
}

const service = mockService({
store: {
add: provide(StoreCapabilities.add, ({ invocation, capability }) => {
blob: {
add: provide(BlobCapabilities.add, ({ invocation, capability }) => {
assert.equal(invocation.issuer.did(), agent.did())
assert.equal(invocation.capabilities.length, 1)
assert.equal(capability.can, StoreCapabilities.add.can)
assert.equal(capability.can, BlobCapabilities.add.can)
assert.equal(capability.with, space.did())
return { ok: { ...res, allocated: capability.nb.size } }
return { ok: { ...res, allocated: capability.nb.blob.size } }
}),
},
filecoin: {
Expand Down Expand Up @@ -127,8 +127,8 @@ describe('uploadFile', () => {
}
)

assert(service.store.add.called)
assert.equal(service.store.add.callCount, 1)
assert(service.blob.add.called)
assert.equal(service.blob.add.callCount, 1)
assert(service.filecoin.offer.called)
assert.equal(service.filecoin.offer.callCount, 1)
assert(service.upload.add.called)
Expand All @@ -148,7 +148,7 @@ describe('uploadFile', () => {
const carCIDs = []

const proofs = await Promise.all([
StoreCapabilities.add.delegate({
BlobCapabilities.add.delegate({
issuer: space,
audience: agent,
with: space.did(),
Expand All @@ -171,14 +171,11 @@ describe('uploadFile', () => {
}

const service = mockService({
store: {
add: provide(StoreCapabilities.add, ({ capability }) => ({
ok: {
...res,
link: /** @type {import('../src/types.js').CARLink} */ (
capability.nb.link
),
allocated: capability.nb.size,
blob: {
add: provide(BlobCapabilities.add, ({ capability }) => Server.ok({
site: {
// TODO unsure what to place here as site value
'ucan/await': ['.out.ok.site', piece],
},
})),
},
Expand Down Expand Up @@ -241,7 +238,7 @@ describe('uploadFile', () => {
const expectedCar = await toCAR(bytes)

const proofs = await Promise.all([
StoreCapabilities.add.delegate({
BlobCapabilities.add.delegate({
issuer: space,
audience: agent,
with: space.did(),
Expand All @@ -265,13 +262,13 @@ describe('uploadFile', () => {
}

const service = mockService({
store: {
add: provide(StoreCapabilities.add, ({ invocation, capability }) => {
blob: {
add: provide(BlobCapabilities.add, ({ invocation, capability }) => {
assert.equal(invocation.issuer.did(), agent.did())
assert.equal(invocation.capabilities.length, 1)
assert.equal(capability.can, StoreCapabilities.add.can)
assert.equal(capability.can, BlobCapabilities.add.can)
assert.equal(capability.with, space.did())
return { ok: { ...res, allocated: capability.nb.size } }
return { ok: { ...res, allocated: capability.nb.blob.size } }
}),
},
filecoin: {
Expand Down Expand Up @@ -307,8 +304,8 @@ describe('uploadFile', () => {
)
)

assert(service.store.add.called)
assert.equal(service.store.add.callCount, 1)
assert(service.blob.add.called)
assert.equal(service.blob.add.callCount, 1)
assert(service.filecoin.offer.called)
assert.equal(service.filecoin.offer.callCount, 1)
})
Expand All @@ -328,7 +325,7 @@ describe('uploadDirectory', () => {
let carCID = null

const proofs = await Promise.all([
StoreCapabilities.add.delegate({
BlobCapabilities.add.delegate({
issuer: space,
audience: agent,
with: space.did(),
Expand All @@ -351,12 +348,12 @@ describe('uploadDirectory', () => {
}

const service = mockService({
store: {
add: provide(StoreCapabilities.add, ({ capability, invocation }) => {
blob: {
add: provide(BlobCapabilities.add, ({ capability, invocation }) => {
assert.equal(invocation.issuer.did(), agent.did())
assert.equal(invocation.capabilities.length, 1)
const invCap = invocation.capabilities[0]
assert.equal(invCap.can, StoreCapabilities.add.can)
assert.equal(invCap.can, BlobCapabilities.add.can)
assert.equal(invCap.with, space.did())
return {
ok: {
Expand Down Expand Up @@ -418,8 +415,8 @@ describe('uploadDirectory', () => {
}
)

assert(service.store.add.called)
assert.equal(service.store.add.callCount, 1)
assert(service.blob.add.called)
assert.equal(service.blob.add.callCount, 1)
assert(service.filecoin.offer.called)
assert.equal(service.filecoin.offer.callCount, 1)
assert(service.upload.add.called)
Expand All @@ -441,7 +438,7 @@ describe('uploadDirectory', () => {
const carCIDs = []

const proofs = await Promise.all([
StoreCapabilities.add.delegate({
BlobCapabilities.add.delegate({
issuer: space,
audience: agent,
with: space.did(),
Expand All @@ -464,8 +461,8 @@ describe('uploadDirectory', () => {
}

const service = mockService({
store: {
add: provide(StoreCapabilities.add, ({ capability }) => ({
blob: {
add: provide(BlobCapabilities.add, ({ capability }) => ({
ok: {
...res,
link: /** @type {import('../src/types.js').CARLink} */ (
Expand Down Expand Up @@ -526,7 +523,7 @@ describe('uploadDirectory', () => {
const piece = Piece.fromPayload(someBytes).link

const proofs = await Promise.all([
StoreCapabilities.add.delegate({
BlobCapabilities.add.delegate({
issuer: space,
audience: agent,
with: space.did(),
Expand All @@ -541,12 +538,12 @@ describe('uploadDirectory', () => {
])
function createSimpleMockUploadServer() {
/**
* @type {Array<Server.ProviderInput<import('@ucanto/interface').InferInvokedCapability<import('@web3-storage/capabilities').Store['add']|import('@web3-storage/capabilities').Upload['add']>>>}
* @type {Array<Server.ProviderInput<import('@ucanto/interface').InferInvokedCapability<import('@web3-storage/capabilities').Blob['add']|import('@web3-storage/capabilities').Upload['add']>>>}
*/
const invocations = []
const service = mockService({
store: {
add: provide(StoreCapabilities.add, (invocation) => {
blob: {
add: provide(BlobCapabilities.add, (invocation) => {
invocations.push(invocation)
return {
ok: {
Expand Down Expand Up @@ -694,7 +691,7 @@ describe('uploadCAR', () => {
const carCIDs = []

const proofs = await Promise.all([
StoreCapabilities.add.delegate({
BlobCapabilities.add.delegate({
issuer: space,
audience: agent,
with: space.did(),
Expand All @@ -717,12 +714,12 @@ describe('uploadCAR', () => {
}

const service = mockService({
store: {
add: provide(StoreCapabilities.add, ({ capability, invocation }) => {
blob: {
add: provide(BlobCapabilities.add, ({ capability, invocation }) => {
assert.equal(invocation.issuer.did(), agent.did())
assert.equal(invocation.capabilities.length, 1)
const invCap = invocation.capabilities[0]
assert.equal(invCap.can, StoreCapabilities.add.can)
assert.equal(invCap.can, BlobCapabilities.add.can)
assert.equal(invCap.with, space.did())
return {
ok: {
Expand Down Expand Up @@ -788,8 +785,8 @@ describe('uploadCAR', () => {
}
)

assert(service.store.add.called)
assert.equal(service.store.add.callCount, 2)
assert(service.blob.add.called)
assert.equal(service.blob.add.callCount, 2)
assert(service.filecoin.offer.called)
assert.equal(service.filecoin.offer.callCount, 2)
assert(service.upload.add.called)
Expand All @@ -812,7 +809,7 @@ describe('uploadCAR', () => {
const pieceCIDs = []

const proofs = await Promise.all([
StoreCapabilities.add.delegate({
BlobCapabilities.add.delegate({
issuer: space,
audience: agent,
with: space.did(),
Expand All @@ -835,11 +832,11 @@ describe('uploadCAR', () => {
}

const service = mockService({
store: {
add: provide(StoreCapabilities.add, ({ capability, invocation }) => {
blob: {
add: provide(BlobCapabilities.add, ({ capability, invocation }) => {
assert.equal(invocation.issuer.did(), agent.did())
assert.equal(invocation.capabilities.length, 1)
assert.equal(capability.can, StoreCapabilities.add.can)
assert.equal(capability.can, BlobCapabilities.add.can)
assert.equal(capability.with, space.did())
return {
ok: {
Expand Down Expand Up @@ -903,8 +900,8 @@ describe('uploadCAR', () => {
}
)

assert(service.store.add.called)
assert.equal(service.store.add.callCount, 1)
assert(service.blob.add.called)
assert.equal(service.blob.add.callCount, 1)
assert(service.filecoin.offer.called)
assert.equal(service.filecoin.offer.callCount, 1)
assert(service.upload.add.called)
Expand Down

0 comments on commit 28cbbac

Please sign in to comment.