From 23e8e3a17d762f72a2b8088da69f77e185ad4106 Mon Sep 17 00:00:00 2001 From: Gil Tichon Date: Mon, 13 May 2019 23:53:44 +0300 Subject: [PATCH] feat: announce only release versions (#31) * announcing only release versions * made it regex for each level, named tests * changed to using optional Boolean, default excluding unstable releases * single function resolving twitter post --- src/announce-it.test.ts | 26 ++++++++++++++++++++++++-- src/announce-it.ts | 12 +++++++++++- src/read-package-details.ts | 1 + 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/announce-it.test.ts b/src/announce-it.test.ts index bab2307..d4417c6 100644 --- a/src/announce-it.test.ts +++ b/src/announce-it.test.ts @@ -1,4 +1,4 @@ -import { assign } from 'lodash'; +import { assign, cloneDeep } from 'lodash'; import { KbAnnounceIt } from './announce-it'; import { IPackageDetails } from './read-package-details'; @@ -82,7 +82,7 @@ describe('kbAnnounceIt.announceRelease', () => { type: 'test-repo-type', url: 'test-repo-url' }, - version: 'test-version', + version: '0.0.0', announcements: { tweet: 'test-template' } @@ -99,6 +99,28 @@ describe('kbAnnounceIt.announceRelease', () => { }); }); + it('should post to twitter when stable release', () => { + return announceIt.announceRelease(packageDetails) + .then((tweet) => expect(tweet).toMatch('test-template')); + }); + + it('should throw an error when unstable release and not mentioned in packageDetails', () => { + const testPackageDetails = cloneDeep(packageDetails); + testPackageDetails.version = '0.0.0-next.1'; + + return announceIt.announceRelease(testPackageDetails) + .catch((tweet) => expect(tweet).toMatch('Not a stable release')); + }); + + it('should post to twitter when unstable release and mentioned in packageDetails', () => { + const testPackageDetails = cloneDeep(packageDetails); + testPackageDetails.version = '0.0.0-next.1'; + testPackageDetails.announcements.includeUnstable = true; + + return announceIt.announceRelease(testPackageDetails) + .then((tweet) => expect(tweet).toMatch('test-template')); + }); + it('should throw error on missing package details input', () => { const testPackageDetails: any = assign({}, packageDetails); testPackageDetails.name = null; diff --git a/src/announce-it.ts b/src/announce-it.ts index 94a08ae..1f8836a 100644 --- a/src/announce-it.ts +++ b/src/announce-it.ts @@ -32,12 +32,22 @@ export class KbAnnounceIt { } announceRelease(packageDetails: IPackageDetails): Promise { + if ( + !packageDetails.announcements.includeUnstable && + !packageDetails.version.match(/^(\d+\.)+\d+$/) + ) { + return Promise.reject('Not a stable release'); + } + const tweet = this.generateTweet(packageDetails); return this.client .get('account/verify_credentials') .then(() => this.client.post('statuses/update', { status: tweet })) - .then(() => console.log('Tweeted successfully:', tweet)); + .then(() => { + console.log('Tweeted successfully:', tweet); + return tweet; + }); } generateTweet(packageDetails: IPackageDetails): string { diff --git a/src/read-package-details.ts b/src/read-package-details.ts index 7bd49ab..f346df6 100644 --- a/src/read-package-details.ts +++ b/src/read-package-details.ts @@ -13,6 +13,7 @@ export interface IPackageDetails { }; announcements: { tweet: string; + includeUnstable?: boolean; }; }