diff --git a/package-lock.json b/package-lock.json index f9eca4f..26b05c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "bolingbrook-church", - "version": "1.2.14", + "version": "1.2.15", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 8c64a59..e8bd758 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bolingbrook-church", - "version": "1.2.14", + "version": "1.2.15", "license": "MIT", "angular-cli": {}, "scripts": { diff --git a/src/app/components/pages/home.ts b/src/app/components/pages/home.ts index a0dd229..871586f 100644 --- a/src/app/components/pages/home.ts +++ b/src/app/components/pages/home.ts @@ -10,7 +10,7 @@ import }) export class HomeComponent implements OnInit { - streaming: boolean = false; + live: boolean = false; sources: BackgroundVideoSource[]; sermon: Sermon; @@ -27,11 +27,13 @@ export class HomeComponent implements OnInit { this.sermons.latest() .subscribe((sermon) => { this.sermon = sermon; }); - } - get live(): boolean { - const now = moment.tz('America/Chicago'); - return (now.day() === 6 && now.hour() >= 11 && now.hour() < 14); + this.sermons + .liveToday() + .subscribe((liveToday) => { + const now = moment.tz('America/Chicago'); + this.live = (liveToday && now.day() === 6 && now.hour() >= 11 && now.hour() < 14); + }); } } diff --git a/src/app/services/firebase.service.ts b/src/app/services/firebase.service.ts index 02d9341..4213fcd 100644 --- a/src/app/services/firebase.service.ts +++ b/src/app/services/firebase.service.ts @@ -97,6 +97,11 @@ export class Database { constructor(private fb: FirebaseService) {} + exists(path: string): Observable { + return observe(this.fb.database.ref(path).once('value')) + .map((snap: firebase.database.DataSnapshot) => snap.exists()); + } + getOnce(path: string): Observable { return observe(this.fb.database.ref(path).once('value')) .map((snap: firebase.database.DataSnapshot) => snap.val()); diff --git a/src/app/services/sermon.service.spec.ts b/src/app/services/sermon.service.spec.ts new file mode 100644 index 0000000..f48fffb --- /dev/null +++ b/src/app/services/sermon.service.spec.ts @@ -0,0 +1,32 @@ +import { expect, sinon, async, MockBuilder } from 'testing'; +import { + Database, + Storage, + Sermon, + SermonService, + Observable +} from './index'; +import * as moment from 'moment'; +import 'moment-timezone'; + +describe('SermonService', () => { + describe('liveToday', () => { + it('should work', async(() => { + const db = MockBuilder + .of(Database) + .withStub('exists', Observable.of(true)) + .build(); + + const store = MockBuilder.of(Storage).build(); + + const service = new SermonService(db, store); + service + .liveToday() + .subscribe((isLive) => { + expect(isLive).to.be.true; + expect(db.exists).to.have.been.calledOnce; + }); + + })); + }); +}); diff --git a/src/app/services/sermon.service.ts b/src/app/services/sermon.service.ts index acfca1d..fd27319 100644 --- a/src/app/services/sermon.service.ts +++ b/src/app/services/sermon.service.ts @@ -36,6 +36,11 @@ export class SermonService { return cleaned; } + liveToday(date: moment.Moment = moment.tz('America/Chicago')): Observable { + const path = date.format('YYYY-MM-DD'); + return this.db.exists(path); + } + getSermon(date: string): Observable { return this.db.getOnce(`data/sermons/${date}`) .map((sermon: Sermon) => {