Skip to content

Commit 9eda314

Browse files
committed
feat: Completed API
1 parent f3a4692 commit 9eda314

13 files changed

+237
-47
lines changed
File renamed without changes.

lib/api/configuration.ts renamed to lib/api/Configuration.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import got from 'got'
2-
import { Check } from './check'
2+
import { Check } from './Check'
33
import { Logger } from 'loglevel'
44
import { ConfigurationError } from '../error/ConfigurationError'
55
import * as SMTPTransport from 'nodemailer/lib/smtp-transport'
@@ -48,6 +48,11 @@ export class Configuration {
4848
*/
4949
public domain: string
5050

51+
/**
52+
* From address for notifications
53+
*/
54+
public notificationFrom: string
55+
5156
/**
5257
* Transport options for nodemailer for the notifications
5358
*/
@@ -139,6 +144,7 @@ export class Configuration {
139144

140145
this.domain = configuration.domain || null
141146
this.space = configuration.space || null
147+
this.notificationFrom = configuration.notificationfrom || null
142148

143149
// Load checks
144150

lib/api/confluence.ts renamed to lib/api/Confluence.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import moment = require('moment')
33
import { Logger } from 'loglevel'
44
import log = require('loglevel')
55
import { ConfluenceError } from '../error/ConfluenceError'
6-
import { DocumentInfo } from './documentInfo'
6+
import { DocumentInfo } from './DocumentInfo'
77
import { Moment } from 'moment'
88

99
/**
File renamed without changes.

lib/api/Notification.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Configuration } from './Configuration'
2+
import { Confluence } from './Confluence'
3+
import { createTransport } from 'nodemailer'
4+
import * as Mail from 'nodemailer/lib/mailer'
5+
import { DocumentInfo } from './DocumentInfo'
6+
import * as Handlebars from 'handlebars'
7+
8+
export class Notification {
9+
private _configuration: Configuration
10+
private _confluence: Confluence
11+
private _transport: Mail
12+
13+
constructor(configuration: Configuration, confluence: Confluence, transport: Mail = null) {
14+
this._configuration = configuration
15+
this._confluence = confluence
16+
this._transport = transport || createTransport(this._configuration.transportOptions)
17+
}
18+
19+
public async notify(documentInfo: DocumentInfo): Promise<void> {
20+
const subjectTemplate = Handlebars.compile(this._configuration.notificationSubjectTemplate)
21+
const bodyTemplate = Handlebars.compile(this._configuration.notificationBodyTemplate)
22+
await this._transport.sendMail({
23+
from: this._configuration.notificationFrom,
24+
to: `${documentInfo.author}@${this._configuration.domain}`,
25+
subject: subjectTemplate(documentInfo),
26+
html: bodyTemplate(documentInfo),
27+
})
28+
}
29+
}

lib/api/outdateCheck.ts renamed to lib/api/OutdateCheck.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { Configuration } from './configuration'
2-
import { Confluence } from './confluence'
1+
import { Configuration } from './Configuration'
2+
import { Confluence } from './Confluence'
33
import { Logger } from 'loglevel'
44
import log = require('loglevel')
5-
import { Notification } from './notification'
5+
import { Notification } from './Notification'
66

77
/**
88
* The main out of date checker

lib/api/notification.ts

Lines changed: 0 additions & 23 deletions
This file was deleted.

package-lock.json

Lines changed: 138 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
"loglevel": "^1.6.8",
2828
"got": "^11.3.0",
2929
"nodemailer": "^6.4.10",
30-
"cheerio": "^1.0.0-rc.3"
30+
"cheerio": "^1.0.0-rc.3",
31+
"handlebars": "^4.7.6"
3132
},
3233
"devDependencies": {
3334
"@types/bluebird": "^3.5.32",
@@ -57,6 +58,8 @@
5758
"ts-node": "^8.10.2",
5859
"moment": "^2.27.0",
5960
"@types/nodemailer": "^6.4.0",
60-
"@types/cheerio": "^0.22.18"
61+
"@types/cheerio": "^0.22.18",
62+
"sinon": "^9.0.2",
63+
"@types/sinon": "^9.0.4"
6164
}
6265
}

test/ConfigurationTest.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'mocha'
2-
import { Configuration } from '../lib/api/configuration'
2+
import { Configuration } from '../lib/api/Configuration'
33
import { MockServer } from './MockServer'
44
import chai = require('chai')
55
import chaiAsPromised = require('chai-as-promised')
@@ -24,5 +24,7 @@ describe('The Configuration API', (): void => {
2424

2525
chai.expect(configuration.transportOptions.host).to.eq('localhost')
2626
chai.expect(configuration.transportOptions.port).to.eq('25')
27+
28+
chai.expect(configuration.notificationFrom).to.eq('Notification <[email protected]>')
2729
})
2830
})

0 commit comments

Comments
 (0)