From b8d09a66662fa2658dac6f2ba47b8a7dddd17c97 Mon Sep 17 00:00:00 2001 From: Cory Sanin Date: Fri, 29 Aug 2025 01:53:50 -0500 Subject: [PATCH] test for conditions --- src/sequencer.ts | 3 ++ test/sequencer.test.ts | 69 +++++++++++++++++++++++++++++++++++++++++- test/voice.test.ts | 30 +++++++++--------- 3 files changed, 86 insertions(+), 16 deletions(-) diff --git a/src/sequencer.ts b/src/sequencer.ts index 16ad1e9..13f6d11 100644 --- a/src/sequencer.ts +++ b/src/sequencer.ts @@ -41,6 +41,8 @@ function conditionIsMet(condition: string | undefined, currentWeather: CurrentWe case '=': case '==': return lhsResolved == rhsResolved; + case '!=': + return lhsResolved != rhsResolved; case '<': return lhsResolved < rhsResolved; case '<=': @@ -88,6 +90,7 @@ async function Sequencer(conf: Config): Promise { config = conf; const weather = new OpenWeatherAPI(conf.weather); const currentWeather = await weather.getCurrent(); + console.log(JSON.stringify(currentWeather)); const sequence: string[] = []; const program: SegmentName[] = selectOne(conf.programs); for (let i = 0; i < program.length; i++) { diff --git a/test/sequencer.test.ts b/test/sequencer.test.ts index a1d25e4..d806fab 100644 --- a/test/sequencer.test.ts +++ b/test/sequencer.test.ts @@ -9,7 +9,48 @@ vi.mock('openweather-api-node', () => { return { OpenWeatherAPI: vi.fn().mockImplementation((_) => { return { - getCurrent: vi.fn(() => {}) + getCurrent: vi.fn(() => { + return { + "lat": 43.0748, + "lon": -89.3838, + "dt": "2025-08-29T06:31:05.000Z", + "dtRaw": 1756449065, + "timezoneOffset": -18000, + "astronomical": { + "sunrise": "2025-08-29T11:19:05.000Z", + "sunriseRaw": 1756466345, + "sunset": "2025-08-30T00:38:08.000Z", + "sunsetRaw": 1756514288 + }, + "weather": { + "temp": { + "cur": 55.85, + "min": 52.99, + "max": 58.01 + }, + "feelsLike": { + "cur": 55.31 + }, + "pressure": 1022, + "humidity": 89, + "clouds": 0, + "visibility": 10000, + "wind": { + "deg": 140, + "speed": 5.75 + }, + "rain": 0, + "snow": 0, + "conditionId": 800, + "main": "Clear", + "description": "clear sky", + "icon": { + "url": "http://openweathermap.org/img/wn/01n@2x.png", + "raw": "01n" + } + } + } + }) } }) } @@ -39,5 +80,31 @@ describe('sequencer', () => { weather: dummyWeather })).to.include.ordered.members(['seq1.flac', 'seq1.flac', 'seq2.flac']); }); + + it('can include tracks conditionally', async () => { + expect(await Sequencer({ + programs: [['segment 1', 'segment 2']], + segments: { + 'segment 1': ['sequence 1'], + 'segment 2': ['sequence 2'] + }, + sequences: { + 'sequence 1': { + 'conditions': ['1 = 1', '1.1 > 1', '2 >= 1', '1 < 2', '1 <= 1', '-1 != 0', undefined], + 'tracks': [ + 'seq1.flac' + ] + }, + 'sequence 2': { + 'conditions': ['weather.lat = -500'], + 'tracks': [ + 'seq2.flac' + ] + } + }, + voices: {}, + weather: dummyWeather + })).to.be.ordered.members(['seq1.flac']); + }); }); diff --git a/test/voice.test.ts b/test/voice.test.ts index 988c3bd..51d95c6 100644 --- a/test/voice.test.ts +++ b/test/voice.test.ts @@ -10,7 +10,7 @@ const dummyVoice: Voice = { describe('voiceLines', () => { it('handles integers', () => { - expect(voiceLines(dummyVoice, 16549872)).to.include.ordered.members( + expect(voiceLines(dummyVoice, 16549872)).to.be.ordered.members( [ LINES.SIX, LINES.TEEN, LINES.MILLION, LINES.FIVE, LINES.HUNDRED, LINES.FORTY, LINES.NINE, LINES.THOUSAND, LINES.EIGHT, LINES.HUNDRED, LINES.SEVENTY, LINES.TWO @@ -19,7 +19,7 @@ describe('voiceLines', () => { }); it('handles floating point', () => { - expect(voiceLines(dummyVoice, 672.09435)).to.include.ordered.members( + expect(voiceLines(dummyVoice, 672.09435)).to.be.ordered.members( [ LINES.SIX, LINES.HUNDRED, LINES.SEVENTY, LINES.TWO, LINES.POINT, LINES.ZERO, LINES.NINE, LINES.FOUR, LINES.THREE, LINES.FIVE @@ -28,7 +28,7 @@ describe('voiceLines', () => { }); it('handles the negative', () => { - expect(voiceLines(dummyVoice, -672.09435)).to.include.ordered.members( + expect(voiceLines(dummyVoice, -672.09435)).to.be.ordered.members( [ LINES.NEGATIVE, LINES.SIX, LINES.HUNDRED, LINES.SEVENTY, LINES.TWO, LINES.POINT, LINES.ZERO, LINES.NINE, LINES.FOUR, LINES.THREE, LINES.FIVE @@ -37,7 +37,7 @@ describe('voiceLines', () => { }); it('handles zero', () => { - expect(voiceLines(dummyVoice, 0)).to.include.ordered.members( + expect(voiceLines(dummyVoice, 0)).to.be.ordered.members( [ LINES.ZERO ] @@ -45,31 +45,31 @@ describe('voiceLines', () => { }); it('handles large numbers with many zeroes', () => { - expect(voiceLines(dummyVoice, 700000000000001)).to.include.ordered.members( + expect(voiceLines(dummyVoice, 700000000000001)).to.be.ordered.members( [ LINES.SEVEN, LINES.HUNDRED, LINES.TRILLION, LINES.ONE ] ); - expect(voiceLines(dummyVoice, 1000001)).to.include.ordered.members( + expect(voiceLines(dummyVoice, 1000001)).to.be.ordered.members( [ LINES.ONE, LINES.MILLION, LINES.ONE ] ); - expect(voiceLines(dummyVoice, 9000000001000)).to.include.ordered.members( + expect(voiceLines(dummyVoice, 9000000001000)).to.be.ordered.members( [ LINES.NINE, LINES.TRILLION, LINES.ONE, LINES.THOUSAND ] ); - expect(voiceLines(dummyVoice, 60002000000000.12)).to.include.ordered.members( + expect(voiceLines(dummyVoice, 60002000000000.12)).to.be.ordered.members( [ LINES.SIXTY, LINES.TRILLION, LINES.TWO, LINES.BILLION, LINES.POINT, LINES.ONE, LINES.TWO ] ); - expect(voiceLines(dummyVoice, 100010001)).to.include.ordered.members( + expect(voiceLines(dummyVoice, 100010001)).to.be.ordered.members( [ LINES.ONE, LINES.HUNDRED, LINES.MILLION, LINES.TEN, LINES.THOUSAND, LINES.ONE ] @@ -77,31 +77,31 @@ describe('voiceLines', () => { }); it('handles irregularly named numbers', () => { - expect(voiceLines(dummyVoice, 210)).to.include.ordered.members( + expect(voiceLines(dummyVoice, 210)).to.be.ordered.members( [ LINES.TWO, LINES.HUNDRED, LINES.TEN ] ); - expect(voiceLines(dummyVoice, 311)).to.include.ordered.members( + expect(voiceLines(dummyVoice, 311)).to.be.ordered.members( [ LINES.THREE, LINES.HUNDRED, LINES.ELEVEN ] ); - expect(voiceLines(dummyVoice, 412)).to.include.ordered.members( + expect(voiceLines(dummyVoice, 412)).to.be.ordered.members( [ LINES.FOUR, LINES.HUNDRED, LINES.TWELVE ] ); - expect(voiceLines(dummyVoice, 513)).to.include.ordered.members( + expect(voiceLines(dummyVoice, 513)).to.be.ordered.members( [ LINES.FIVE, LINES.HUNDRED, LINES.THIRTEEN ] ); - expect(voiceLines(dummyVoice, 615)).to.include.ordered.members( + expect(voiceLines(dummyVoice, 615)).to.be.ordered.members( [ LINES.SIX, LINES.HUNDRED, LINES.FIFTEEN ] @@ -121,7 +121,7 @@ describe('voiceLines', () => { directory, extension: 'flac' } - expect(voiceLines(v, 29)).to.include.ordered.members([ + expect(voiceLines(v, 29)).to.be.ordered.members([ path.join(directory, `twenty.flac`), path.join(directory, `nine.flac`), ]);