functions.database.ref('todos').onWrite((snapshot, context) => { const email = context.auth.token.email; const result = snapshot.after.val(); let lastValue = {}; for (const prop in result) { lastValue = {id: prop, value: result[prop]} } admin.database().ref('replicateTodos').child(lastValue.id).set({description: lastValue.value.description , status: lastValue.value.status , title: lastValue.value.title, email: email }) })
describe('loadAssistantUser', () => { it('Shouldnt load expected user from DB', (done) => { const dataUserExists = new functions.database.DeltaSnapshot(null, null, null, exampleUser); const fakeEvent = {data: dataUserExists}; const onceStub = sinon.stub().withArgs('value').returns(Promise.resolve(fakeEvent.data)); const refStub = sinon.stub().withArgs('users/' + exampleUser.userId).returns({once: onceStub}); const databaseStub = sinon.stub(firebase, 'database').returns({ref: refStub}); userManagerInstance.loadAssistantUser(exampleUser.userId).then(user => { chai.assert.deepEqual(user, exampleUser); done(); databaseStub.restore(); }); }); });
functions.database.ref('todos').onUpdate((snapshot, context) => { console.log('snapshot', snapshot) console.log('context', context) })
functions.database.ref('/organizations/{organizationId}').onWrite(event => { if(event.data.previous.exists()) { // we only want to do this once return; } defaultTemplates.forEach((tpl) => { let ntRef = admin.database().ref(`/notification_templates/${event.params.organizationId}`).push(); ntRef.set(tpl) }) })
functions.database.ref('/users/{userId}').onWrite((event) => { console.log('Making Full Name for UserID:', event.params.userId); // Get the first and last names const firstName = event.data._newData.firstName || ''; const lastName = event.data._newData.lastName || ''; const userData = { fullName: `${firstName} ${lastName}`, }; // Add Role if it doesn't already exist if (event && event.data && event.data._data && !event.data._newData.role) { userData.role = 'user'; } return event.data.ref.update(userData); })
describe('getLoggedWaterForUser', () => { it('Should load logged water for given user and present data from recent day', (done) => { //Fake timestamps to distinguish "today" and "yesterday" const timestampYesterday = 10; const timestampMidnight = 50; const timestampToday = 100; const expectedRequestData = { abc: {userId: exampleUser.userId, mililiters: 100, timestamp: timestampYesterday}, def: {userId: exampleUser.userId, mililiters: 50, timestamp: timestampToday} }; const dataUserExists = new functions.database.DeltaSnapshot(null, null, null, expectedRequestData); const fakeEvent = {data: dataUserExists}; const onceStub = sinon.stub().withArgs('value').returns(Promise.resolve(fakeEvent.data)); const equalToStub = sinon.stub().withArgs(exampleUser.userId).returns({once: onceStub}); const orderByChildStub = sinon.stub().withArgs('userId').returns({equalTo: equalToStub}); const refStub = sinon.stub().withArgs('waterLogs').returns({orderByChild: orderByChildStub}); const databaseStub = sinon.stub(firebaseAdmin, 'database').returns({ref: refStub}); const todayStartTimestampStub = sinon.stub(timeManagerInstance, 'getTodayStartTimestampForAssistantUser').resolves(timestampMidnight); waterLogInstance.getLoggedWaterForUser(exampleUser.userId).then(loggedMililiters => { chai.assert.equal(50, loggedMililiters); done(); databaseStub.restore(); todayStartTimestampStub.restore(); }); }); });
functions.database.ref('todos').onDelete((snapshot, context) => { console.log('deleting', snapshot) console.log('deleting', context) const email = context.auth.token.email; const result = snapshot.after.val(); let lastValue = {}; for (const prop in result) { lastValue = {id: prop, value: result[prop]} } admin.database().ref('replicateTodos').child(lastValue.id).set({description: lastValue.value.description , status: lastValue.value.status , title: lastValue.value.title, email: email }) })
const dataTimezoneExists = new functions.database.DeltaSnapshot(null, null, null, expectedUserTimeData); const fakeEvent = {data: dataTimezoneExists}; const onceStub = sinon.stub().withArgs('value').returns(Promise.resolve(fakeEvent.data)); const dataTimezoneNotExists = new functions.database.DeltaSnapshot(null, null, null, null); const fakeEvent = {data: dataTimezoneNotExists}; const onceStub = sinon.stub().withArgs('value').returns(Promise.resolve(fakeEvent.data));
functions.database.ref('/messages/{messageID}').onCreate(snapshot => { const { email, message } = snapshot.val(); if (email === 'test@test.test') { snapshot.ref.set(null); } return sendMail(email, message); })
describe('getAssistantUserTimeData', () => { const expectedUserTimeData = {timezone: 'America/New_York'}; const expectedUserId = 'abc123'; it('Should return local user time if exists', (done) => { const dataTimezoneExists = new functions.database.DeltaSnapshot(null, null, null, expectedUserTimeData); const fakeEvent = {data: dataTimezoneExists}; const onceStub = sinon.stub().withArgs('value').returns(Promise.resolve(fakeEvent.data)); const refStub = sinon.stub().withArgs('userTime/' + expectedUserId).returns({once: onceStub}); const databaseStub = sinon.stub(firebaseAdmin, 'database').returns({ref: refStub}); timeManagerInstance.getAssistantUserTimeData(expectedUserId).then(userTimeData => { chai.assert.deepEqual(userTimeData, expectedUserTimeData); done(); databaseStub.restore(); }); }); });
functions.database.ref('/places/{placeId}') .onDelete(snap => { const placeData = snap.val(); const imagePath = placeData.imagePath; return bucket.file(imagePath).delete(); })
describe('isFirstUsage', () => { it('Should return first usage when user doesnt exist in DB', (done) => { const dataUserDoesntExist = new functions.database.DeltaSnapshot(null, null, null, null); const fakeEvent = {data: dataUserDoesntExist}; const onceStub = sinon.stub().withArgs('value').returns(Promise.resolve(fakeEvent.data)); const dataUserExists = new functions.database.DeltaSnapshot(null, null, null, "exampleUser"); const fakeEvent = {data: dataUserExists}; const onceStub = sinon.stub().withArgs('value').returns(Promise.resolve(fakeEvent.data));