diff --git a/src/controllers/sites.js b/src/controllers/sites.js index ab3ccea80..0d41e57e1 100755 --- a/src/controllers/sites.js +++ b/src/controllers/sites.js @@ -110,6 +110,12 @@ function SitesController(ctx, log, env) { if (!accessControlUtil.hasAdminAccess()) { return forbidden('Only admins can create new sites'); } + const exists = await Site.findByBaseURL(context?.data?.baseURL); + if (exists) { + return createResponse({ + message: `Site with baseURL ${context?.data?.baseURL} exists`, + }, 409); + } const site = await Site.create({ organizationId: env.DEFAULT_ORGANIZATION_ID, ...context.data, @@ -589,6 +595,8 @@ function SitesController(ctx, log, env) { const projectedTrafficValue = pageViewsChange * cpc; + log.info(`Got RUM metrics for site ${siteId} current: ${current.length}`); + return ok({ pageViewsChange, ctrChange, diff --git a/test/controllers/sites.test.js b/test/controllers/sites.test.js index 37d1f7a6d..2fb4c0b7b 100644 --- a/test/controllers/sites.test.js +++ b/test/controllers/sites.test.js @@ -255,6 +255,7 @@ describe('Sites Controller', () => { }); it('creates a site', async () => { + mockDataAccess.Site.findByBaseURL.resolves(null); const response = await sitesController.createSite({ data: { baseURL: 'https://site1.com' } }); expect(mockDataAccess.Site.create).to.have.been.calledOnce; @@ -265,6 +266,15 @@ describe('Sites Controller', () => { expect(site).to.have.property('baseURL', 'https://site1.com'); }); + it('creates site returns 409 if a site with baseURL exists', async () => { + const response = await sitesController.createSite({ data: { baseURL: 'https://site1.com' } }); + + expect(mockDataAccess.Site.create).to.have.not.been.called; + expect(response.status).to.equal(409); + const respJson = await response.json(); + expect(respJson).to.have.property('message', 'Site with baseURL https://site1.com exists'); + }); + it('creates a site for a non-admin user', async () => { context.attributes.authInfo.withProfile({ is_admin: false }); const response = await sitesController.createSite({ data: { baseURL: 'https://site1.com' } });