From b415cbb0824140cbdf1a724fbbb8315afa946b39 Mon Sep 17 00:00:00 2001 From: David Dal Busco Date: Fri, 23 Aug 2024 16:13:10 +0200 Subject: [PATCH] test: migrate configuration Signed-off-by: David Dal Busco --- .../orbiter.upgrade-configuration.spec.ts | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 src/tests/orbiter.upgrade-configuration.spec.ts diff --git a/src/tests/orbiter.upgrade-configuration.spec.ts b/src/tests/orbiter.upgrade-configuration.spec.ts new file mode 100644 index 000000000..9186d31f8 --- /dev/null +++ b/src/tests/orbiter.upgrade-configuration.spec.ts @@ -0,0 +1,129 @@ +import type { _SERVICE as OrbiterActor0_0_7 } from '$declarations/deprecated/orbiter-0-0-7.did'; +import { idlFactory as idlFactorOrbiter0_0_7 } from '$declarations/deprecated/orbiter-0-0-7.factory.did'; +import type { _SERVICE as OrbiterActor } from '$declarations/orbiter/orbiter.did'; +import { idlFactory as idlFactorOrbiter } from '$declarations/orbiter/orbiter.factory.did'; +import { Ed25519KeyIdentity } from '@dfinity/identity'; +import { Principal } from '@dfinity/principal'; +import { fromNullable } from '@dfinity/utils'; +import { PocketIc, type Actor } from '@hadronous/pic'; +import { afterEach, beforeEach, describe, expect, inject } from 'vitest'; +import { satelliteIdMock } from './mocks/orbiter.mocks'; +import { tick } from './utils/pic-tests.utils'; +import { ORBITER_WASM_PATH, controllersInitArgs, downloadOrbiter } from './utils/setup-tests.utils'; + +describe('Orbiter upgrade- Configuration', () => { + let pic: PocketIc; + let actor: Actor; + let canisterId: Principal; + + const controller = Ed25519KeyIdentity.generate(); + + afterEach(async () => { + await pic?.tearDown(); + }); + + const upgrade = async () => { + await tick(pic); + + await pic.upgradeCanister({ + canisterId, + wasm: ORBITER_WASM_PATH, + sender: controller.getPrincipal() + }); + }; + + describe('v0.0.7 -> v0.0.8', async () => { + beforeEach(async () => { + pic = await PocketIc.create(inject('PIC_URL')); + + const destination = await downloadOrbiter('0.0.7'); + + const { actor: c, canisterId: cId } = await pic.setupCanister({ + idlFactory: idlFactorOrbiter0_0_7, + wasm: destination, + arg: controllersInitArgs(controller), + sender: controller.getPrincipal() + }); + + actor = c; + canisterId = cId; + actor.setIdentity(controller); + }); + + it('should migrate no entry if the configuration was not set', async () => { + await upgrade(); + + const newActor = pic.createActor(idlFactorOrbiter, canisterId); + newActor.setIdentity(controller); + + const { list_satellite_configs } = newActor; + + const configs = await list_satellite_configs(); + expect(configs.length).toBe(0); + }); + + it('should migrate configuration disabled to none', async () => { + const { set_satellite_configs } = actor; + + await expect( + set_satellite_configs([ + [ + satelliteIdMock, + { + version: [], + enabled: false + } + ] + ]) + ).resolves.not.toThrowError(); + + await upgrade(); + + const newActor = pic.createActor(idlFactorOrbiter, canisterId); + newActor.setIdentity(controller); + + const { list_satellite_configs } = newActor; + + const configs = await list_satellite_configs(); + expect(configs.length).toBe(1); + + expect(configs[0][0].toText()).toEqual(satelliteIdMock.toText()); + expect(fromNullable(configs[0][1].version)).toBe(1n); + expect(fromNullable(configs[0][1].features)).toBeUndefined(); + }); + + it('should migrate configuration enabled to the new features', async () => { + const { set_satellite_configs } = actor; + + await expect( + set_satellite_configs([ + [ + satelliteIdMock, + { + version: [], + enabled: true + } + ] + ]) + ).resolves.not.toThrowError(); + + await upgrade(); + + const newActor = pic.createActor(idlFactorOrbiter, canisterId); + newActor.setIdentity(controller); + + const { list_satellite_configs } = newActor; + + const configs = await list_satellite_configs(); + expect(configs.length).toBe(1); + + expect(configs[0][0].toText()).toEqual(satelliteIdMock.toText()); + expect(fromNullable(configs[0][1].version)).toBe(1n); + expect(fromNullable(configs[0][1].features)).toEqual({ + page_views: true, + performance_metrics: true, + track_events: true + }); + }); + }); +});