diff --git a/backend/media/service.go b/backend/media/service.go index b3ec3c1..5f7d4c8 100644 --- a/backend/media/service.go +++ b/backend/media/service.go @@ -367,7 +367,7 @@ outer: } func (s *MediaSetService) GetPeaksForSegment(ctx context.Context, id uuid.UUID, startFrame, endFrame int64, numBins int) ([]int16, error) { - if startFrame < 0 || endFrame < 0 || numBins <= 0 { + if startFrame < 0 || endFrame < 0 || numBins <= 0 || startFrame == endFrame { s.logger.With("startFrame", startFrame, "endFrame", endFrame, "numBins", numBins).Error("invalid arguments") return nil, errors.New("invalid arguments") } diff --git a/backend/media/service_test.go b/backend/media/service_test.go index 44282e1..c45b554 100644 --- a/backend/media/service_test.go +++ b/backend/media/service_test.go @@ -51,6 +51,15 @@ func TestPeaksForSegment(t *testing.T) { wantPeaks []int16 wantErr string }{ + { + name: "NOK, invalid arguments", + fixturePath: "testdata/tone-44100-stereo-int16.raw", + startFrame: 0, + endFrame: 0, + channels: 2, + numBins: 1, + wantErr: "invalid arguments", + }, { name: "OK, entire fixture, stereo, 1 bin", fixturePath: "testdata/tone-44100-stereo-int16.raw", @@ -146,7 +155,6 @@ func TestPeaksForSegment(t *testing.T) { // store is passed the mediaSetID and returns a mediaSet store := &mocks.Store{} store.On("GetMediaSet", mock.Anything, mediaSet.ID).Return(mediaSet, nil) - defer store.AssertExpectations(t) // fileStore is passed the expected byte range, and returns an io.Reader fileStore := &mocks.FileStore{} @@ -158,6 +166,8 @@ func TestPeaksForSegment(t *testing.T) { peaks, err := service.GetPeaksForSegment(context.Background(), mediaSet.ID, tc.startFrame, tc.endFrame, tc.numBins) if tc.wantErr == "" { + defer store.AssertExpectations(t) + require.NoError(t, err) assert.Equal(t, tc.wantPeaks, peaks) } else {