PR comments

This commit is contained in:
Martin McKeaveney 2022-09-07 23:21:14 +01:00
parent 381622aa7a
commit 2991d05d5b
5 changed files with 437 additions and 430 deletions

View File

@ -1,4 +1,5 @@
import { doWithDB } from "../db" import { doWithDB } from "../db"
import { queryPlatformView } from "../db/views"
import { StaticDatabases, ViewName } from "../db/constants" import { StaticDatabases, ViewName } from "../db/constants"
import { baseGlobalDBName } from "./utils" import { baseGlobalDBName } from "./utils"
import { import {
@ -8,7 +9,6 @@ import {
getTenantIDFromAppID, getTenantIDFromAppID,
} from "../context" } from "../context"
import env from "../environment" import env from "../environment"
import { queryPlatformView } from "../db"
const TENANT_DOC = StaticDatabases.PLATFORM_INFO.docs.tenants const TENANT_DOC = StaticDatabases.PLATFORM_INFO.docs.tenants
const PLATFORM_INFO_DB = StaticDatabases.PLATFORM_INFO.name const PLATFORM_INFO_DB = StaticDatabases.PLATFORM_INFO.name

File diff suppressed because it is too large Load Diff

View File

@ -23,6 +23,7 @@
"dev:stack:init": "node ./scripts/dev/manage.js init", "dev:stack:init": "node ./scripts/dev/manage.js init",
"dev:builder": "npm run dev:stack:init && nodemon", "dev:builder": "npm run dev:stack:init && nodemon",
"test": "jest --runInBand", "test": "jest --runInBand",
"test:watch": "jest --watch",
"env:multi:enable": "node scripts/multiTenancy.js enable", "env:multi:enable": "node scripts/multiTenancy.js enable",
"env:multi:disable": "node scripts/multiTenancy.js disable", "env:multi:disable": "node scripts/multiTenancy.js disable",
"env:selfhost:enable": "node scripts/selfhost.js enable", "env:selfhost:enable": "node scripts/selfhost.js enable",
@ -104,4 +105,4 @@
] ]
}, },
"gitHead": "d1836a898cab3f8ab80ee6d8f42be1a9eed7dcdc" "gitHead": "d1836a898cab3f8ab80ee6d8f42be1a9eed7dcdc"
} }

View File

@ -242,6 +242,26 @@ describe("/api/global/users", () => {
expect(response.body.message).toBe(`Unavailable`) expect(response.body.message).toBe(`Unavailable`)
expect(events.user.created).toBeCalledTimes(0) expect(events.user.created).toBeCalledTimes(0)
}) })
it("should not be able to create a user with the same email and different casing", async () => {
const user = structures.users.user()
await api.users.saveUser(user)
user.email = user.email.toUpperCase()
await api.users.saveUser(user)
expect(events.user.created).toBeCalledTimes(1)
})
it("should not be able to bulk create a user with the same email and different casing", async () => {
const user = structures.users.user()
await api.users.saveUser(user)
user.email = user.email.toUpperCase()
await api.users.bulkCreateUsers([user])
expect(events.user.created).toBeCalledTimes(1)
})
}) })
describe("update", () => { describe("update", () => {

View File

@ -267,8 +267,9 @@ export const addTenant = async (
} }
const getExistingTenantUsers = async (emails: string[]): Promise<User[]> => { const getExistingTenantUsers = async (emails: string[]): Promise<User[]> => {
const lcEmails = emails.map(email => email.toLowerCase())
return dbUtils.queryGlobalView(ViewName.USER_BY_EMAIL, { return dbUtils.queryGlobalView(ViewName.USER_BY_EMAIL, {
keys: emails, keys: lcEmails,
include_docs: true, include_docs: true,
arrayResponse: true, arrayResponse: true,
}) })
@ -277,8 +278,9 @@ const getExistingTenantUsers = async (emails: string[]): Promise<User[]> => {
const getExistingPlatformUsers = async ( const getExistingPlatformUsers = async (
emails: string[] emails: string[]
): Promise<PlatformUserByEmail[]> => { ): Promise<PlatformUserByEmail[]> => {
const lcEmails = emails.map(email => email.toLowerCase())
return dbUtils.queryPlatformView(ViewName.PLATFORM_USERS_LOWERCASE, { return dbUtils.queryPlatformView(ViewName.PLATFORM_USERS_LOWERCASE, {
keys: emails.map(email => email.toLowerCase()), keys: lcEmails,
include_docs: true, include_docs: true,
arrayResponse: true, arrayResponse: true,
}) })
@ -287,8 +289,9 @@ const getExistingPlatformUsers = async (
const getExistingAccounts = async ( const getExistingAccounts = async (
emails: string[] emails: string[]
): Promise<AccountMetadata[]> => { ): Promise<AccountMetadata[]> => {
const lcEmails = emails.map(email => email.toLowerCase())
return dbUtils.queryPlatformView(ViewName.ACCOUNT_BY_EMAIL, { return dbUtils.queryPlatformView(ViewName.ACCOUNT_BY_EMAIL, {
keys: emails, keys: lcEmails,
include_docs: true, include_docs: true,
arrayResponse: true, arrayResponse: true,
}) })
@ -333,7 +336,7 @@ export const bulkCreate = async (
for (const newUser of newUsersRequested) { for (const newUser of newUsersRequested) {
if ( if (
newUsers.find( newUsers.find(
(x: any) => x.email.toLowerCase() === newUser.email.toLowerCase() (x: User) => x.email.toLowerCase() === newUser.email.toLowerCase()
) || ) ||
existingEmails.includes(newUser.email.toLowerCase()) existingEmails.includes(newUser.email.toLowerCase())
) { ) {