meteor3: re-enable fixtures and sitemaps with async/Meteor-3 implementations
fixtures: drop @cleverbeagle/seeder (sync Mongo, unmaintained) for a small idempotent async seeder (same dev accounts). sitemaps: drop dead gadicohen:sitemaps for a WebApp.connectHandlers /sitemap.xml with the same static page list (the per-fire section was already disabled). Verified on dev boot: 6 users ensured, sitemap serving; REST smoke byte-identical.
This commit is contained in:
parent
66bab7a43b
commit
0ff9848cd4
8 changed files with 20493 additions and 15709 deletions
|
|
@ -1,54 +1,71 @@
|
|||
import seeder from '@cleverbeagle/seeder';
|
||||
/* eslint-disable no-await-in-loop */
|
||||
import { Meteor } from 'meteor/meteor';
|
||||
import { Accounts } from 'meteor/accounts-base';
|
||||
import Documents from '../../api/Documents/Documents';
|
||||
|
||||
const documentsSeed = userId => ({
|
||||
collection: Documents,
|
||||
environments: ['development', 'staging'],
|
||||
noLimit: true,
|
||||
modelCount: 5,
|
||||
model(dataIndex) {
|
||||
return {
|
||||
owner: userId,
|
||||
title: `Document #${dataIndex + 1}`,
|
||||
body: `This is the body of document #${dataIndex + 1}`,
|
||||
};
|
||||
},
|
||||
});
|
||||
/*
|
||||
* Dev/staging fixtures. Replaces @cleverbeagle/seeder (sync Mongo, no Meteor 3
|
||||
* support) with a small async seeder: idempotent (find-before-create), only
|
||||
* runs outside production.
|
||||
*/
|
||||
|
||||
seeder(Meteor.users, {
|
||||
environments: ['development', 'staging'],
|
||||
noLimit: true,
|
||||
data: [{
|
||||
const USERS = [
|
||||
{
|
||||
email: 'admin@admin.com',
|
||||
password: 'password',
|
||||
profile: {
|
||||
name: {
|
||||
first: 'Andy',
|
||||
last: 'Warhol',
|
||||
},
|
||||
},
|
||||
roles: ['admin'],
|
||||
data(userId) {
|
||||
return documentsSeed(userId);
|
||||
},
|
||||
}],
|
||||
modelCount: 5,
|
||||
model(index, faker) {
|
||||
const userCount = index + 1;
|
||||
return {
|
||||
email: `user+${userCount}@test.com`,
|
||||
password: 'password',
|
||||
profile: {
|
||||
name: {
|
||||
first: faker.name.firstName(),
|
||||
last: faker.name.lastName(),
|
||||
},
|
||||
},
|
||||
roles: ['user'],
|
||||
data(userId) {
|
||||
return documentsSeed(userId);
|
||||
},
|
||||
};
|
||||
profile: { name: { first: 'Andy', last: 'Warhol' } },
|
||||
roles: ['admin']
|
||||
},
|
||||
...[
|
||||
['Frida', 'Kahlo'],
|
||||
['Joaquín', 'Sorolla'],
|
||||
['Maruja', 'Mallo'],
|
||||
['Remedios', 'Varo'],
|
||||
['Pablo', 'Picasso']
|
||||
].map(([first, last], i) => ({
|
||||
email: `user+${i + 1}@test.com`,
|
||||
password: 'password',
|
||||
profile: { name: { first, last } },
|
||||
roles: ['user']
|
||||
}))
|
||||
];
|
||||
|
||||
const DOCUMENTS_PER_USER = 5;
|
||||
|
||||
async function ensureUser({ email, password, profile, roles }) {
|
||||
const existing = await Meteor.users.findOneAsync({ 'emails.address': email });
|
||||
const userId = existing
|
||||
? existing._id
|
||||
: await Accounts.createUserAsync({ email, password, profile });
|
||||
if (!existing && roles) {
|
||||
await Meteor.users.updateAsync(userId, { $set: { roles } });
|
||||
}
|
||||
return userId;
|
||||
}
|
||||
|
||||
async function ensureDocuments(userId) {
|
||||
const count = await Documents.find({ owner: userId }).countAsync();
|
||||
if (count > 0) return;
|
||||
for (let i = 0; i < DOCUMENTS_PER_USER; i += 1) {
|
||||
await Documents.insertAsync({
|
||||
owner: userId,
|
||||
title: `Document #${i + 1}`,
|
||||
body: `This is the body of document #${i + 1}`
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Meteor.startup(async () => {
|
||||
// dev always; staging opts in with TCEF_SEED=1 (the old seeder's
|
||||
// 'staging' environment had no reliable detection either).
|
||||
if (!Meteor.isDevelopment && process.env.TCEF_SEED !== '1') return;
|
||||
try {
|
||||
for (const user of USERS) {
|
||||
const userId = await ensureUser(user);
|
||||
await ensureDocuments(userId);
|
||||
}
|
||||
console.log(`fixtures: ${USERS.length} dev users ensured`);
|
||||
} catch (e) {
|
||||
console.warn(`fixtures: seeding failed: ${e}`);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue