Provision subdomain for ALL new teams, add tests

This commit is contained in:
Tom Moor 2018-11-12 14:00:23 -08:00
parent b3a8d34af3
commit c60bd4260f
5 changed files with 40 additions and 17 deletions

View File

@ -35,6 +35,7 @@
"shared"
],
"moduleNameMapper": {
"^shared/(.*)$": "<rootDir>/shared/$1",
"^.*[.](s?css|css)$": "<rootDir>/__mocks__/styleMock.js",
"^.*[.](gif|ttf|eot|svg)$": "<rootDir>/__test__/fileMock.js"
},

View File

@ -92,14 +92,8 @@ router.get('google.callback', auth({ required: false }), async ctx => {
});
if (isFirstUser) {
await team.createFirstCollection(user.id);
// attempt to give the new team a subdomain based on google hosted domain
try {
await team.update({ subdomain: hostname });
} catch (err) {
// subdomain was invalid or already used
}
await team.provisionFirstCollection(user.id);
await team.provisionSubdomain(hostname);
}
// set cookies on response and redirect to team subdomain

View File

@ -61,14 +61,8 @@ router.get('slack.callback', auth({ required: false }), async ctx => {
});
if (isFirstUser) {
await team.createFirstCollection(user.id);
// attempt to give the new team the same subdomain as they use on slack
try {
await team.update({ subdomain: data.team.domain });
} catch (err) {
// subdomain was invalid or already used
}
await team.provisionFirstCollection(user.id);
await team.provisionSubdomain(data.team.domain);
}
// set cookies on response and redirect to team subdomain

View File

@ -85,7 +85,22 @@ const uploadAvatar = async model => {
}
};
Team.prototype.createFirstCollection = async function(userId) {
Team.prototype.provisionSubdomain = async function(subdomain) {
let append = 0;
while (true) {
try {
await this.update({ subdomain });
break;
} catch (err) {
// subdomain was invalid or already used, try again
subdomain = `${subdomain}${++append}`;
}
}
return subdomain;
};
Team.prototype.provisionFirstCollection = async function(userId) {
return await Collection.create({
name: 'General',
description: 'Your first Collection',

View File

@ -0,0 +1,19 @@
/* eslint-disable flowtype/require-valid-file-annotation */
import { flushdb } from '../test/support';
import { buildTeam } from '../test/factories';
beforeEach(flushdb);
it('should set subdomain if available', async () => {
const team = await buildTeam();
const subdomain = await team.provisionSubdomain('testy');
expect(subdomain).toEqual('testy');
expect(team.subdomain).toEqual('testy');
});
it('should set subdomain with append if unavailable', async () => {
const team = await buildTeam({ subdomain: 'myteam' });
const subdomain = await team.provisionSubdomain('myteam');
expect(subdomain).toEqual('myteam1');
expect(team.subdomain).toEqual('myteam1');
});