Skip to content
This repository was archived by the owner on Nov 5, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
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
1 change: 1 addition & 0 deletions jest.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ const config: Config = {
preset: 'ts-jest',
testEnvironment: 'node',
testMatch: ['**/?(*.)+(spec|test).ts'],
setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
};

export default config;
5 changes: 5 additions & 0 deletions jest.setup.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { closeQueue } from './src/queue/queue';

afterAll(async () => {
await closeQueue();
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import type { QueryInterface } from 'sequelize';
import getSchema from '../../utils/getSchema';

export async function up({ context: sequelize }: any): Promise<void> {
const schema = getSchema();
const qi: QueryInterface = sequelize.getQueryInterface();

await qi.renameColumn(
{
schema,
tableName: 'linked_identities',
},
'is_linked',
'are_splits_valid',
);
}

export async function down({ context: sequelize }: any): Promise<void> {
const schema = getSchema();
const qi: QueryInterface = sequelize.getQueryInterface();

await qi.renameColumn(
{
schema,
tableName: 'linked_identities',
},
'are_splits_valid',
'is_linked',
);
}
7 changes: 5 additions & 2 deletions src/eventHandlers/OwnerUpdatedEventHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,10 @@ export default class OwnerUpdatedEventHandler extends EventHandlerBase<'OwnerUpd
identityType: 'orcid',
ownerAddress: owner,
ownerAccountId,
isLinked: await validateLinkedIdentity(accountId, ownerAccountId),
areSplitsValid: await validateLinkedIdentity(
accountId,
ownerAccountId,
),
lastProcessedVersion: makeVersion(blockNumber, logIndex).toString(),
},
},
Expand All @@ -189,7 +192,7 @@ export default class OwnerUpdatedEventHandler extends EventHandlerBase<'OwnerUpd
// Update existing linked identity
linkedIdentity.ownerAddress = owner;
linkedIdentity.ownerAccountId = ownerAccountId;
linkedIdentity.isLinked = await validateLinkedIdentity(
linkedIdentity.areSplitsValid = await validateLinkedIdentity(
accountId,
linkedIdentity.ownerAccountId,
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export async function processLinkedIdentitySplits(
`ORCID account ${accountId} has no owner set yet. Skipping validation and splits creation.`,
);

linkedIdentity.isLinked = false;
linkedIdentity.areSplitsValid = false;

scopedLogger.bufferUpdate({
type: LinkedIdentityModel,
Expand Down Expand Up @@ -105,7 +105,7 @@ export async function processLinkedIdentitySplits(
);
}

linkedIdentity.isLinked = isLinked;
linkedIdentity.areSplitsValid = isLinked;

scopedLogger.bufferUpdate({
type: LinkedIdentityModel,
Expand Down
4 changes: 2 additions & 2 deletions src/models/LinkedIdentityModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export default class LinkedIdentityModel extends Model<
public declare identityType: LinkedIdentityType;
public declare ownerAddress: Address | null;
public declare ownerAccountId: AddressDriverId | null;
public declare isLinked: boolean;
public declare areSplitsValid: boolean;
public declare lastProcessedVersion: string;
public declare createdAt: CreationOptional<Date>;
public declare updatedAt: CreationOptional<Date>;
Expand All @@ -48,7 +48,7 @@ export default class LinkedIdentityModel extends Model<
allowNull: true,
type: DataTypes.STRING,
},
isLinked: {
areSplitsValid: {
allowNull: false,
type: DataTypes.BOOLEAN,
defaultValue: false,
Expand Down
5 changes: 5 additions & 0 deletions src/queue/queue.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,9 @@ eventProcessingQueue.on('job retrying', (job, err) => {
logger.info(`♻️ [${job}] failed (will be retried): ${err.message}`);
});

export async function closeQueue(): Promise<void> {
await eventProcessingQueue.close();
redisClient.quit();
}

export default eventProcessingQueue;
2 changes: 1 addition & 1 deletion src/utils/linkedIdentityUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export async function ensureLinkedIdentityExists(
identityType: 'orcid',
ownerAddress: null,
ownerAccountId: null,
isLinked: false,
areSplitsValid: false,
lastProcessedVersion: makeVersion(
ctx.blockNumber,
ctx.logIndex,
Expand Down
4 changes: 2 additions & 2 deletions tests/eventHandlers/OwnerUpdatedEventHandler.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ describe('OwnerUpdatedEventHandler', () => {
identityType: 'orcid',
ownerAddress: mockOwnerAddress,
ownerAccountId: '123456789',
isLinked: false,
areSplitsValid: false,
lastProcessedVersion: mockExpectedVersion,
},
});
Expand Down Expand Up @@ -255,7 +255,7 @@ describe('OwnerUpdatedEventHandler', () => {
// Assert
expect(existingLinkedIdentity.ownerAddress).toBe(mockOwnerAddress);
expect(existingLinkedIdentity.ownerAccountId).toBe('123456789');
expect(existingLinkedIdentity.isLinked).toBe(true); // the mocked validateLinkedIdentity returns true.
expect(existingLinkedIdentity.areSplitsValid).toBe(true); // the mocked validateLinkedIdentity returns true.
expect(existingLinkedIdentity.lastProcessedVersion).toBe(
mockExpectedVersion,
);
Expand Down
14 changes: 7 additions & 7 deletions tests/eventHandlers/SplitsSetEvent/setLinkedIdentityFlag.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ describe('processLinkedIdentitySplits', () => {
jest.mocked(accountIdUtils.assertIsRepoDriverId);
});

it('should update isLinked flag when validation returns true and create splits record', async () => {
it('should update areSplitsValid flag when validation returns true and create splits record', async () => {
(LinkedIdentityModel.findOne as jest.Mock).mockResolvedValue(
mockLinkedIdentity,
);
Expand Down Expand Up @@ -111,14 +111,14 @@ describe('processLinkedIdentitySplits', () => {
},
});

expect(mockLinkedIdentity.isLinked).toBe(true);
expect(mockLinkedIdentity.areSplitsValid).toBe(true);
expect(mockLinkedIdentity.save).toHaveBeenCalledWith({
transaction: mockTransaction,
});
});

it('should update isLinked flag when validation returns false and NOT create splits', async () => {
mockLinkedIdentity.isLinked = true;
it('should update areSplitsValid flag when validation returns false and NOT create splits', async () => {
mockLinkedIdentity.areSplitsValid = true;
(LinkedIdentityModel.findOne as jest.Mock).mockResolvedValue(
mockLinkedIdentity,
);
Expand Down Expand Up @@ -149,7 +149,7 @@ describe('processLinkedIdentitySplits', () => {

expect(receiversRepository.createSplitReceiver).not.toHaveBeenCalled();

expect(mockLinkedIdentity.isLinked).toBe(false);
expect(mockLinkedIdentity.areSplitsValid).toBe(false);
expect(mockLinkedIdentity.save).toHaveBeenCalledWith({
transaction: mockTransaction,
});
Expand Down Expand Up @@ -184,7 +184,7 @@ describe('processLinkedIdentitySplits', () => {
);
});

it('should always delete existing splits and recreate when isLinked is true', async () => {
it('should always delete existing splits and recreate when areSplitsValid is true', async () => {
jest.mocked(SplitsReceiverModel.destroy).mockResolvedValue(1);

(LinkedIdentityModel.findOne as jest.Mock).mockResolvedValue(
Expand All @@ -210,7 +210,7 @@ describe('processLinkedIdentitySplits', () => {
});
expect(receiversRepository.createSplitReceiver).toHaveBeenCalled();

expect(mockLinkedIdentity.isLinked).toBe(true);
expect(mockLinkedIdentity.areSplitsValid).toBe(true);
expect(mockLinkedIdentity.save).toHaveBeenCalledWith({
transaction: mockTransaction,
});
Expand Down
2 changes: 1 addition & 1 deletion tests/eventHandlers/SplitsSetEventHandler.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ describe('SplitsSetEventHandler', () => {
expect(setIsValidFlag).toHaveBeenCalled();
});

test('should set isLinked flag for ORCID account', async () => {
test('should set areSplitsValid flag for ORCID account', async () => {
// Arrange
const orcidAccountId =
'81320912658542974439730181977206773330805723773165208113981035642880'; // ORCID account
Expand Down