Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: update manager e2e tests #237

Merged
merged 3 commits into from
Aug 31, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
194 changes: 178 additions & 16 deletions test-e2e/manager-basic.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,180 @@ import { KeyManager } from '@mapeo/crypto'
import { MapeoManager } from '../src/mapeo-manager.js'
import RAM from 'random-access-memory'

test('Managing multiple projects', async (t) => {
test('Managing created projects', async (t) => {
const manager = new MapeoManager({
rootKey: KeyManager.generateRootKey(),
dbFolder: ':memory:',
coreStorage: () => new RAM(),
})

const initialProjects = await manager.listProjects()
const project1Id = await manager.createProject()
const project2Id = await manager.createProject({
name: 'project 2',
})

t.is(
initialProjects.length,
0,
'no projects exist when manager is initially created'
)
t.test('initial information from listed projects', async (t) => {
const listedProjects = await manager.listProjects()

t.is(listedProjects.length, 2)

const listedProject1 = listedProjects.find(
(p) => p.projectId === project1Id
)

const listedProject2 = listedProjects.find(
(p) => p.projectId === project2Id
)

t.ok(listedProject1)
t.absent(listedProject1?.name)
t.ok(listedProject1?.createdAt)
t.ok(listedProject1?.updatedAt)

t.ok(listedProject2)
t.is(listedProject2?.name, 'project 2')
t.ok(listedProject2?.createdAt)
t.ok(listedProject2?.updatedAt)
})

const project1 = await manager.getProject(project1Id)
const project2 = await manager.getProject(project2Id)

t.ok(project1)
t.ok(project2)

t.test('initial settings from project instances', async (t) => {
const settings1 = await project1.$getProjectSettings()
const settings2 = await project2.$getProjectSettings()

t.alike(settings1, {
name: undefined,
defaultPresets: undefined,
})

t.alike(settings2, {
name: 'project 2',
defaultPresets: undefined,
})
})

t.test('after updating project settings', async (t) => {
await project1.$setProjectSettings({
name: 'project 1',
})
await project2.$setProjectSettings({
name: 'project 2 updated',
})

const settings1 = await project1.$getProjectSettings()
const settings2 = await project2.$getProjectSettings()

t.alike(settings1, {
name: 'project 1',
defaultPresets: undefined,
})

t.alike(settings2, {
name: 'project 2 updated',
defaultPresets: undefined,
})

const listedProjects = await manager.listProjects()

t.is(listedProjects.length, 2)

const project1FromListed = listedProjects.find(
(p) => p.projectId === project1Id
)

const project2FromListed = listedProjects.find(
(p) => p.projectId === project2Id
)

t.ok(project1FromListed)
t.is(project1FromListed?.name, 'project 1')
t.ok(project1FromListed?.createdAt)
t.ok(project1FromListed?.updatedAt)

t.ok(project2FromListed)
t.is(project2FromListed?.name, 'project 2 updated')
t.ok(project2FromListed?.createdAt)
t.ok(project2FromListed?.updatedAt)
})
})

test('Managing added projects', async (t) => {
const manager = new MapeoManager({
rootKey: KeyManager.generateRootKey(),
dbFolder: ':memory:',
coreStorage: () => new RAM(),
})

const project1Id = await manager.addProject({
projectKey: KeyManager.generateProjectKeypair().publicKey,
encryptionKeys: { auth: randomBytes(32) },
projectInfo: { name: 'project 1' },
})

const project2Id = await manager.addProject({
projectKey: KeyManager.generateProjectKeypair().publicKey,
encryptionKeys: { auth: randomBytes(32) },
projectInfo: { name: 'project 2' },
})

t.test('initial information from listed projects', async (t) => {
const listedProjects = await manager.listProjects()

t.is(listedProjects.length, 2)

const listedProject1 = listedProjects.find(
(p) => p.projectId === project1Id
)

const listedProject2 = listedProjects.find(
(p) => p.projectId === project2Id
)

t.ok(listedProject1)
t.is(listedProject1?.name, 'project 1')
t.absent(listedProject1?.createdAt)
t.absent(listedProject1?.updatedAt)

t.ok(listedProject2)
t.is(listedProject2?.name, 'project 2')
t.absent(listedProject2?.createdAt)
t.absent(listedProject2?.updatedAt)
})

// TODO: Ideally would use the todo opt but usage in a subtest doesn't work: https://github.com/holepunchto/brittle/issues/39
// t.test('initial settings from project instances', async (t) => {
// const project1 = await manager.getProject(project1Id)
// const project2 = await manager.getProject(project2Id)

// t.ok(project1)
// t.ok(project2)

// const settings1 = await project1.$getProjectSettings()
// const settings2 = await project2.$getProjectSettings()

// t.alike(settings1, {
// name: 'project 1',
// defaultPresets: undefined,
// })

// t.alike(settings2, {
// name: 'project 2',
// defaultPresets: undefined,
// })
// })
})

test('Managing both created and added projects', async (t) => {
const manager = new MapeoManager({
rootKey: KeyManager.generateRootKey(),
dbFolder: ':memory:',
coreStorage: () => new RAM(),
})

const createdProjectId = await manager.createProject({
name: 'created project',
Expand All @@ -33,17 +193,21 @@ test('Managing multiple projects', async (t) => {

t.is(listedProjects.length, 2)

const createdProject = listedProjects.find(
const createdProjectListed = listedProjects.find(
({ projectId }) => projectId === createdProjectId
)
t.ok(createdProject, 'created project is listed')
t.is(createdProject?.name, 'created project')
t.ok(createdProjectListed, 'created project is listed')

const addedProject = listedProjects.find(
const addedProjectListed = listedProjects.find(
({ projectId }) => projectId === addedProjectId
)
t.ok(addedProject, 'added project is listed')
t.is(addedProject?.name, 'added project')
t.ok(addedProjectListed, 'added project is listed')

const createdProject = await manager.getProject(createdProjectId)
t.ok(createdProject)

const addedProject = await manager.getProject(addedProjectId)
t.ok(addedProject)
})

test('Manager cannot add project that already exists', async (t) => {
Expand All @@ -60,9 +224,7 @@ test('Manager cannot add project that already exists', async (t) => {
t.exception(
manager.addProject({
projectKey: Buffer.from(existingProjectId, 'hex'),
encryptionKeys: {
auth: randomBytes(32),
},
encryptionKeys: { auth: randomBytes(32) },
}),
'attempting to add project that already exists throws'
)
Expand Down
Loading