@actyx/sdk
Version:
Actyx SDK
91 lines (81 loc) • 2.93 kB
text/typescript
/*
* Actyx SDK: Functions for writing distributed apps
* deployed on peer-to-peer networks, without any servers.
*
* Copyright (C) 2021 Actyx AG
*/
import { isRight } from 'fp-ts/lib/Either'
import { Event, _compareEvents } from '.'
import { ConnectivityStatus } from './types'
describe('util', () => {
it(`should correctly compare events`, () => {
const e1: Event = {
lamport: 1,
offset: 10,
stream: 'a',
} as Event
const e2: Event = {
lamport: 2,
offset: 20,
stream: 'b',
} as Event
const mkL = (lamport: number): Event => ({ lamport } as Event)
const mkS = (stream: string): Event => ({ ...mkL(0), stream } as Event)
const mkO = (offset: number): Event => ({ ...mkL(0), ...mkS('a'), offset } as Event)
expect(_compareEvents(mkL(1), mkL(2))).toBeLessThan(0)
expect(_compareEvents(mkL(2), mkL(1))).toBeGreaterThan(0)
expect(_compareEvents(mkS('a'), mkS('b'))).toBeLessThan(0)
expect(_compareEvents(mkS('b'), mkS('a'))).toBeGreaterThan(0)
expect(_compareEvents(mkO(1), mkO(2))).toBeLessThan(0)
expect(_compareEvents(mkO(2), mkO(1))).toBeGreaterThan(0)
expect(_compareEvents(e1, e2)).toBeLessThan(0)
})
})
describe('connectivity status codes', () => {
it('should decode FullyConnected', () => {
const v = {
status: 'FullyConnected',
inCurrentStatusForMs: 100,
}
expect(isRight(ConnectivityStatus.decode(v))).toBe(true)
// eslint-disable-next-line @typescript-eslint/no-explicit-any
expect((ConnectivityStatus.decode(v) as any).right).toEqual(v)
})
it('should decode PartiallyConnected with empty specials', () => {
const v = {
status: 'PartiallyConnected',
inCurrentStatusForMs: 100,
swarmConnectivityLevel: 70,
eventsToRead: 5,
eventsToSend: 6,
specialsDisconnected: [],
}
expect(isRight(ConnectivityStatus.decode(v))).toBe(true)
// eslint-disable-next-line @typescript-eslint/no-explicit-any
expect((ConnectivityStatus.decode(v) as any).right).toEqual(v)
})
it('should decode PartiallyConnected with filled specials', () => {
const v = {
status: 'PartiallyConnected',
inCurrentStatusForMs: 100,
swarmConnectivityLevel: 70,
eventsToRead: 5,
eventsToSend: 6,
specialsDisconnected: ['some-source'],
}
expect(isRight(ConnectivityStatus.decode(v))).toBe(true)
// eslint-disable-next-line @typescript-eslint/no-explicit-any
expect((ConnectivityStatus.decode(v) as any).right).toEqual(v)
})
it('should decode NotConnected', () => {
const v = {
status: 'NotConnected',
inCurrentStatusForMs: 2000000,
eventsToRead: 5,
eventsToSend: 6,
}
expect(isRight(ConnectivityStatus.decode(v))).toBe(true)
// eslint-disable-next-line @typescript-eslint/no-explicit-any
expect((ConnectivityStatus.decode(v) as any).right).toEqual(v)
})
})