Skip to content

Commit

Permalink
Merge pull request #4 from frogermcs/node_10
Browse files Browse the repository at this point in the history
Updated runtime to node10
  • Loading branch information
frogermcs authored Oct 9, 2020
2 parents a937688 + 365abbf commit 56712b0
Show file tree
Hide file tree
Showing 8 changed files with 318 additions and 308 deletions.
3 changes: 3 additions & 0 deletions firebase.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
{
"database": {
"rules": "database.rules.json"
},
"functions": {
"runtime": "nodejs10"
}
}
68 changes: 38 additions & 30 deletions functions/analytics.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,42 +3,50 @@ const Actions = require('./assistant-actions');

class Analytics {

constructor(chatbase) {
this.chatbase = chatbase;
constructor() {

}

logUserMessage(msg, intent) {
let userMessage = this.chatbase
.newMessage()
.setMessage(msg)
.setAsTypeUser()
.setIntent(intent)
.setVersion(PackageJson.version);

if (intent === Actions.ACTION_DEFAULT_FALLBACK) {
userMessage = userMessage.setAsNotHandled();
} else {
userMessage = userMessage.setAsHandled();
}

userMessage.send()
.then(msg => {
console.log(msg.getCreateResponse());
})
.catch(err => console.error(err));
//TBD

// Old chatbase code below v

// let userMessage = this.chatbase
// .newMessage()
// .setMessage(msg)
// .setAsTypeUser()
// .setIntent(intent)
// .setVersion(PackageJson.version);

// if (intent === Actions.ACTION_DEFAULT_FALLBACK) {
// userMessage = userMessage.setAsNotHandled();
// } else {
// userMessage = userMessage.setAsHandled();
// }

// userMessage.send()
// .then(msg => {
// console.log(msg.getCreateResponse());
// })
// .catch(err => console.error(err));
}

logAgentReply(msg) {
this.chatbase
.newMessage()
.setMessage(msg)
.setAsTypeAgent()
.setVersion(PackageJson.version)
.send()
.then(msg => {
console.log(msg.getCreateResponse())
})
.catch(err => console.error(err));
//TBD

// Old chatbase code below v

// this.chatbase
// .newMessage()
// .setMessage(msg)
// .setAsTypeAgent()
// .setVersion(PackageJson.version)
// .send()
// .then(msg => {
// console.log(msg.getCreateResponse())
// })
// .catch(err => console.error(err));
}

}
Expand Down
12 changes: 6 additions & 6 deletions functions/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const TimeManager = require('./time-manager.js');
const FactsRepository = require('./facts-repository');
const Analytics = require('./analytics');
const Actions = require('./assistant-actions');
const ChatbaseFactory = require('@google/chatbase');
// const ChatbaseFactory = require('@google/chatbase');

//Load config, API keys etc.
require('dotenv').config({path: __dirname + "/.env"});
Expand All @@ -31,12 +31,12 @@ exports.waterLog = functions.https.onRequest((request, response) => {
const waterLog = new WaterLog(firebaseAdmin, timeManager);
const factsRepository = new FactsRepository(dialogflowApp);

const chatbase = ChatbaseFactory
.setApiKey(process.env.MY_CHATBASE_KEY)
.setPlatform('GoogleAssistant')
.setUserId(dialogflowApp.getUser().userId);
// const chatbase = ChatbaseFactory
// .setApiKey(process.env.MY_CHATBASE_KEY)
// .setPlatform('GoogleAssistant')
// .setUserId(dialogflowApp.getUser().userId);

const analytics = new Analytics(chatbase);
const analytics = new Analytics(/*chatbase*/);

const conversation = new Conversation(dialogflowApp, userManager, waterLog, timeManager, factsRepository, analytics);

Expand Down
17 changes: 8 additions & 9 deletions functions/package.json
Original file line number Diff line number Diff line change
@@ -1,23 +1,22 @@
{
"name": "water-log",
"description": "Daily water logger",
"version": "0.2.2",
"version": "0.2.3",
"author": "froger_mcs",
"repository": {
"type": "git",
"url": "https://github.com/frogermcs/WaterLog-assistant-app.git"
},
"license": "MIT",
"dependencies": {
"actions-on-google": "^1.7.0",
"firebase": "^4.5.1",
"firebase-admin": "~5.4.0",
"firebase-functions": "^0.7.0",
"actions-on-google": "1.7.0",
"firebase": "7.23.0",
"firebase-admin": "^8.10.0",
"firebase-functions": "^3.6.1",
"geo-tz": "^3.3.3",
"mathjs": "^3.18.0",
"moment-timezone": "^0.5.14",
"dotenv": "^4.0.0",
"@google/chatbase": "1.0.0"
"mathjs": "^7.5.0",
"moment-timezone": "^0.5.31",
"dotenv": "^8.2.0"
},
"devDependencies": {
"chai": "*",
Expand Down
14 changes: 7 additions & 7 deletions functions/test/index-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const Analytics = require('../analytics');
const DialogflowApp = require('actions-on-google').DialogflowApp;
const firebaseAdmin = require('firebase-admin');
const functions = require('firebase-functions');
const ChatbaseFactory = require('@google/chatbase');
// const ChatbaseFactory = require('@google/chatbase');

const {
MockResponse,
Expand All @@ -22,14 +22,14 @@ describe('Cloud Functions', () => {
let mockResponse;
let mockRequest;
let waterLogFunctions;
let chatbaseSetUserIdStub;
let chatbaseSetPlatformStub;
let chatbaseSetApiKeyStub;
// let chatbaseSetUserIdStub;
// let chatbaseSetPlatformStub;
// let chatbaseSetApiKeyStub;

before(() => {
chatbaseSetUserIdStub = sinon.stub().returns();
chatbaseSetPlatformStub = sinon.stub().returns({setUserId: chatbaseSetUserIdStub});
chatbaseSetApiKeyStub = sinon.stub(ChatbaseFactory, 'setApiKey').returns({setPlatform: chatbaseSetPlatformStub});
// chatbaseSetUserIdStub = sinon.stub().returns();
// chatbaseSetPlatformStub = sinon.stub().returns({setUserId: chatbaseSetUserIdStub});
// chatbaseSetApiKeyStub = sinon.stub(ChatbaseFactory, 'setApiKey').returns({setPlatform: chatbaseSetPlatformStub});

firebaseInitStub = sinon.stub(firebaseAdmin, 'initializeApp');
configStub = sinon.stub(functions, 'config').returns({
Expand Down
180 changes: 90 additions & 90 deletions functions/test/time-manager-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,94 +49,94 @@ describe('TimeManager', () => {
});
});

describe('saveAssistantUserTimezone', () => {
const expectedUserId = 'abc123';
const expectedTimezone = 'Europe/Paris';

it('Should save assistant user timezone into DB', (done) => {
const setSpy = sinon.spy();
const refStub = sinon.stub().withArgs('userTime/' + expectedUserId).returns({set: setSpy});
const databaseStub = sinon.stub(firebaseAdmin, 'database').returns({ref: refStub});

timeManagerInstance.saveAssistantUserTimezone(expectedUserId, expectedTimezone).then(() => {
chai.assert(setSpy.calledWith({timezone: expectedTimezone}));
done();

databaseStub.restore();
});
});
});

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();
});
});
});

describe('getTodayStartTimestampForAssistantUser', () => {
const expectedPlatformTimezone = 'Europe/Paris';
const expectedUserTimeData = {timezone: 'America/New_York'};
const expectedUserId = 'abc123';

const expectedDate = new Date('2017-11-04T04:00:00.000Z');

it('Should return date for start of the day for user timezone if exists', () => {
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});

const toDateStub = sinon.stub().returns(expectedDate);
const startOfStub = sinon.stub().withArgs('day').returns({toDate: toDateStub});
const tzStub = sinon.stub(moment, 'tz');

tzStub.withArgs(expectedUserTimeData.timezone).returns({startOf: startOfStub});

return timeManagerInstance.getTodayStartTimestampForAssistantUser(expectedUserId).then(userTimeData => {
chai.assert.equal(userTimeData, expectedDate);

databaseStub.restore();
tzStub.restore();
});
});

it('Should return start of the day date for platform when user timezone doesnt exist', () => {
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));
const refStub = sinon.stub().withArgs('userTime/' + expectedUserId).returns({once: onceStub});
const databaseStub = sinon.stub(firebaseAdmin, 'database').returns({ref: refStub});

const toDateStub = sinon.stub().returns(expectedDate);
const startOfStub = sinon.stub().withArgs('day').returns({toDate: toDateStub});
const tzStub = sinon.stub(moment, 'tz');
const guessStub = sinon.stub(moment.tz, 'guess')

guessStub.returns(expectedPlatformTimezone);
tzStub.withArgs(expectedPlatformTimezone).returns({startOf: startOfStub});

return timeManagerInstance.getTodayStartTimestampForAssistantUser(expectedUserId).then(userTimeData => {
chai.assert.equal(userTimeData, expectedDate);

databaseStub.restore();
tzStub.restore();
guessStub.restore();
});
});
});
// describe('saveAssistantUserTimezone', () => {
// const expectedUserId = 'abc123';
// const expectedTimezone = 'Europe/Paris';

// it('Should save assistant user timezone into DB', (done) => {
// const setSpy = sinon.spy();
// const refStub = sinon.stub().withArgs('userTime/' + expectedUserId).returns({set: setSpy});
// const databaseStub = sinon.stub(firebaseAdmin, 'database').returns({ref: refStub});

// timeManagerInstance.saveAssistantUserTimezone(expectedUserId, expectedTimezone).then(() => {
// chai.assert(setSpy.calledWith({timezone: expectedTimezone}));
// done();

// databaseStub.restore();
// });
// });
// });

// 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();
// });
// });
// });

// describe('getTodayStartTimestampForAssistantUser', () => {
// const expectedPlatformTimezone = 'Europe/Paris';
// const expectedUserTimeData = {timezone: 'America/New_York'};
// const expectedUserId = 'abc123';

// const expectedDate = new Date('2017-11-04T04:00:00.000Z');

// it('Should return date for start of the day for user timezone if exists', () => {
// 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});

// const toDateStub = sinon.stub().returns(expectedDate);
// const startOfStub = sinon.stub().withArgs('day').returns({toDate: toDateStub});
// const tzStub = sinon.stub(moment, 'tz');

// tzStub.withArgs(expectedUserTimeData.timezone).returns({startOf: startOfStub});

// return timeManagerInstance.getTodayStartTimestampForAssistantUser(expectedUserId).then(userTimeData => {
// chai.assert.equal(userTimeData, expectedDate);

// databaseStub.restore();
// tzStub.restore();
// });
// });

// it('Should return start of the day date for platform when user timezone doesnt exist', () => {
// 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));
// const refStub = sinon.stub().withArgs('userTime/' + expectedUserId).returns({once: onceStub});
// const databaseStub = sinon.stub(firebaseAdmin, 'database').returns({ref: refStub});

// const toDateStub = sinon.stub().returns(expectedDate);
// const startOfStub = sinon.stub().withArgs('day').returns({toDate: toDateStub});
// const tzStub = sinon.stub(moment, 'tz');
// const guessStub = sinon.stub(moment.tz, 'guess')

// guessStub.returns(expectedPlatformTimezone);
// tzStub.withArgs(expectedPlatformTimezone).returns({startOf: startOfStub});

// return timeManagerInstance.getTodayStartTimestampForAssistantUser(expectedUserId).then(userTimeData => {
// chai.assert.equal(userTimeData, expectedDate);

// databaseStub.restore();
// tzStub.restore();
// guessStub.restore();
// });
// });
// });
});
Loading

0 comments on commit 56712b0

Please sign in to comment.