Skip to content
Snippets Groups Projects
Commit 6656a290 authored by Yannis Barlas's avatar Yannis Barlas
Browse files

Merge branch 'email-unique-per-provider' into 'main'

fix: unique provider email

See merge request !64
parents a17dcc62 f04f5892
No related branches found
No related tags found
1 merge request!64fix: unique provider email
......@@ -99,4 +99,41 @@ describe('Identity model', () => {
identityWithProfileData.profileData.displayName,
)
})
it('creates two identities with the same email but different provider', async () => {
const user = await createUser()
const createIdentity = async provider => {
return Identity.insert({
userId: user.id,
email: 'john@example.com',
provider,
})
}
// first time should be fine
const id1 = await createIdentity('test1')
const id2 = await createIdentity('test2')
expect(id1.email).toEqual(id2.email)
expect(id1.provider).not.toEqual(id2.provider)
})
it('fails when creating two identities with the same email and provider', async () => {
const user = await createUser()
const createIdentity = async () => {
await Identity.insert({
userId: user.id,
email: 'john@example.com',
provider: 'test',
})
}
// first time should be fine
await createIdentity()
// second time should throw an error
await expect(createIdentity).rejects.toThrow(/unique_provider_email/)
})
})
const logger = require('@pubsweet/logger')
exports.up = async knex => {
try {
await knex.schema.alterTable('identities', table => {
table.dropUnique(['email'], 'unique_email')
})
await knex.raw(
'ALTER TABLE identities ADD CONSTRAINT unique_provider_email UNIQUE (provider, email);',
)
return true
} catch (e) {
logger.error(e)
throw new Error(
'Migration: Identity: require unique email per provider failed',
)
}
}
exports.down = async knex => {
try {
await knex.schema.alterTable('identities', table => {
table.dropUnique(['provider', 'email'], 'unique_provider_email')
})
await knex.raw(
'ALTER TABLE identities ADD CONSTRAINT unique_email UNIQUE (email);',
)
return true
} catch (e) {
logger.error(e)
throw new Error('Migration: Identity: require unique email failed')
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment