diff --git a/appengine/sendgrid/app.js b/appengine/sendgrid/app.js index d09540f84a..34913821ce 100644 --- a/appengine/sendgrid/app.js +++ b/appengine/sendgrid/app.js @@ -25,7 +25,9 @@ const bodyParser = require('body-parser'); // but will need to be manually set when running locally. const SENDGRID_API_KEY = process.env.SENDGRID_API_KEY; const SENDGRID_SENDER = process.env.SENDGRID_SENDER; -const Sendgrid = require('sendgrid')(SENDGRID_API_KEY); +const Sendgrid = require('@sendgrid/client'); + +Sendgrid.setApiKey(SENDGRID_API_KEY); const app = express(); @@ -40,10 +42,10 @@ app.get('/', (req, res) => { res.render('index'); }); -app.post('/hello', (req, res, next) => { - const sgReq = Sendgrid.emptyRequest({ +app.post('/hello', async (req, res, next) => { + const request = { method: 'POST', - path: '/v3/mail/send', + url: '/v3/mail/send', body: { personalizations: [ { @@ -59,19 +61,33 @@ app.post('/hello', (req, res, next) => { }, ], }, - }); + }; + + // [END gae_flex_sendgrid] + + if (req.query.test) { + console.log('TEST!', req.body.email); + request.mailSettings = { + sandboxMode: { + enable: true, + }, + }; + } - Sendgrid.API(sgReq, err => { - if (err) { - next(err); - return; - } - // Render the index route on success - res.render('index', { - sent: true, - }); + // [START gae_flex_sendgrid] + try { + await Sendgrid.request(request); + } catch (err) { + next(err); + return; + } + + // Render the index route on success + res.render('index', { + sent: true, }); }); +// [END gae_flex_sendgrid] if (module === require.main) { const PORT = process.env.PORT || 8080; @@ -82,4 +98,3 @@ if (module === require.main) { } module.exports = app; -// [END gae_flex_sendgrid] diff --git a/appengine/sendgrid/package.json b/appengine/sendgrid/package.json index 397812bcbe..e14f6ebea4 100644 --- a/appengine/sendgrid/package.json +++ b/appengine/sendgrid/package.json @@ -9,12 +9,31 @@ "node": ">=8" }, "scripts": { - "start": "node app.js" + "start": "node app.js", + "test": "mocha test/app.test.js" + }, + "cloud-repo-tools": { + "test": { + "app": { + "msg": "Value:" + } + }, + "requiresKeyFile": true, + "requiresProjectId": true, + "requiredEnvVars": [ + "SENDGRID_SENDER", + "SENDGRID_API_KEY" + ] }, "dependencies": { - "body-parser": "^1.18.3", + "body-parser": "^1.19.0", "express": "^4.16.4", "pug": "^2.0.3", - "sendgrid": "^5.2.3" + "@sendgrid/client": "^6.3.0" + }, + "devDependencies": { + "assert": "^1.4.1", + "mocha": "^6.1.4", + "supertest": "^4.0.2" } } diff --git a/appengine/sendgrid/test/app.test.js b/appengine/sendgrid/test/app.test.js new file mode 100644 index 0000000000..04be507901 --- /dev/null +++ b/appengine/sendgrid/test/app.test.js @@ -0,0 +1,23 @@ +const assert = require('assert'); +const Supertest = require('supertest'); +const supertest = Supertest('http://localhost:8080'); + +it('GET /: should show homepage template', async () => { + await supertest + .get('/') + .expect(200) + .expect(response => { + assert(response.text.includes('Hello World!')); + }); +}); + +it('POST /hello: should send an email', async () => { + await supertest + .post('/hello?test=true') + .type('form') + .send({email: 'testuser@google.com'}) + .expect(200) + .expect(response => { + assert(response.text.includes('Email sent!')); + }); +}); diff --git a/appengine/sendgrid/views/index.pug b/appengine/sendgrid/views/index.pug index 2f20c4eb52..bfe06c6075 100644 --- a/appengine/sendgrid/views/index.pug +++ b/appengine/sendgrid/views/index.pug @@ -9,6 +9,6 @@ html if sent p Email sent! else - form(name="hello", action="/hello", method="post") + form(name="hello", action="/hello?test=true", method="post") input(type="email", placeholder="Enter your email to send yourself a Hello World message", name="email", style="width: 50%; margin-right: 15px;") input(type="submit", value="Send")