Return NotFound error when no torrents or quality matches found instead of silent empty response

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/claude-agent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
Alexander
2026-05-11 20:46:40 +02:00
parent 0fd51a1e03
commit 451fd97c95
4 changed files with 57 additions and 73 deletions
+19 -34
View File
@@ -507,24 +507,15 @@ func TestMonitorAlbumStream_AutomaticNoResults(t *testing.T) {
messages := collectAllMessages(t, stream, 0)
assertContainsStep(t, messages, pb.MonitorStep_MONITOR_STEP_COMPLETE)
var result *pb.MonitorAlbumResponse
var hasError bool
for _, msg := range messages {
if r := msg.GetResult(); r != nil {
result = r
if errUpdate := msg.GetError(); errUpdate != nil {
hasError = true
assert.Contains(t, errUpdate.Message, "no torrents found")
break
}
}
require.NotNil(t, result)
require.NotNil(t, result.Album)
assert.Nil(t, result.Release)
ctx := context.Background()
var count int
err := suite.pool.QueryRow(ctx, "SELECT COUNT(*) FROM torrents").Scan(&count)
require.NoError(t, err)
assert.Equal(t, 0, count)
assert.True(t, hasError, "expected error event for no results")
}
func TestMonitorAlbumStream_AutomaticAllSeedersZero(t *testing.T) {
@@ -553,16 +544,15 @@ func TestMonitorAlbumStream_AutomaticAllSeedersZero(t *testing.T) {
messages := collectAllMessages(t, stream, 0)
var result *pb.MonitorAlbumResponse
var hasError bool
for _, msg := range messages {
if r := msg.GetResult(); r != nil {
result = r
if errUpdate := msg.GetError(); errUpdate != nil {
hasError = true
assert.Contains(t, errUpdate.Message, "no torrents found")
break
}
}
require.NotNil(t, result)
require.NotNil(t, result.Album)
assert.Nil(t, result.Release)
assert.True(t, hasError, "expected error event for zero seeders")
}
func TestMonitorAlbumStream_AutomaticAllMagnetsFail(t *testing.T) {
@@ -594,16 +584,14 @@ func TestMonitorAlbumStream_AutomaticAllMagnetsFail(t *testing.T) {
messages := collectAllMessages(t, stream, 0)
var result *pb.MonitorAlbumResponse
var hasError bool
for _, msg := range messages {
if r := msg.GetResult(); r != nil {
result = r
if errUpdate := msg.GetError(); errUpdate != nil {
hasError = true
break
}
}
require.NotNil(t, result)
require.NotNil(t, result.Album)
assert.Nil(t, result.Release)
assert.True(t, hasError, "expected error event for all magnets failing")
}
func TestMonitorAlbumStream_AutomaticNoQualityMatch(t *testing.T) {
@@ -635,18 +623,15 @@ func TestMonitorAlbumStream_AutomaticNoQualityMatch(t *testing.T) {
messages := collectAllMessages(t, stream, 0)
assertContainsStep(t, messages, pb.MonitorStep_MONITOR_STEP_FILTERING_QUALITY)
var result *pb.MonitorAlbumResponse
var hasError bool
for _, msg := range messages {
if r := msg.GetResult(); r != nil {
result = r
if errUpdate := msg.GetError(); errUpdate != nil {
hasError = true
assert.Contains(t, errUpdate.Message, "no releases match quality filter")
break
}
}
require.NotNil(t, result)
require.NotNil(t, result.Album)
assert.Nil(t, result.Release)
assert.True(t, hasError, "expected error event for no quality match")
}
func TestMonitorAlbumStream_AutomaticQBitDown(t *testing.T) {
+25 -33
View File
@@ -320,24 +320,15 @@ func TestMonitorAlbum_IndexerNoResults(t *testing.T) {
}
ctx := context.Background()
resp, err := suite.client.MonitorAlbum(ctx, &pb.MonitorAlbumRequest{
_, err := suite.client.MonitorAlbum(ctx, &pb.MonitorAlbumRequest{
AlbumId: "test-album-ext-id",
Quality: pb.QualityType_QUALITY_LOSSLESS,
})
require.NoError(t, err)
require.NotNil(t, resp.Album)
require.NotNil(t, resp.Artist)
assert.Nil(t, resp.Release)
var count int
err = suite.pool.QueryRow(ctx, "SELECT COUNT(*) FROM torrents").Scan(&count)
require.NoError(t, err)
assert.Equal(t, 0, count)
err = suite.pool.QueryRow(ctx, "SELECT COUNT(*) FROM downloads").Scan(&count)
require.NoError(t, err)
assert.Equal(t, 0, count)
require.Error(t, err)
st, ok := status.FromError(err)
require.True(t, ok)
assert.Equal(t, codes.NotFound, st.Code())
}
func TestMonitorAlbum_AllSeedersZero(t *testing.T) {
@@ -359,15 +350,15 @@ func TestMonitorAlbum_AllSeedersZero(t *testing.T) {
}
ctx := context.Background()
resp, err := suite.client.MonitorAlbum(ctx, &pb.MonitorAlbumRequest{
_, err := suite.client.MonitorAlbum(ctx, &pb.MonitorAlbumRequest{
AlbumId: "test-album-ext-id",
Quality: pb.QualityType_QUALITY_LOSSLESS,
})
require.NoError(t, err)
require.NotNil(t, resp.Album)
require.NotNil(t, resp.Artist)
assert.Nil(t, resp.Release)
require.Error(t, err)
st, ok := status.FromError(err)
require.True(t, ok)
assert.Equal(t, codes.NotFound, st.Code())
}
func TestMonitorAlbum_AllMagnetsFail(t *testing.T) {
@@ -392,15 +383,15 @@ func TestMonitorAlbum_AllMagnetsFail(t *testing.T) {
}
ctx := context.Background()
resp, err := suite.client.MonitorAlbum(ctx, &pb.MonitorAlbumRequest{
_, err := suite.client.MonitorAlbum(ctx, &pb.MonitorAlbumRequest{
AlbumId: "test-album-ext-id",
Quality: pb.QualityType_QUALITY_LOSSLESS,
})
require.NoError(t, err)
require.NotNil(t, resp.Album)
require.NotNil(t, resp.Artist)
assert.Nil(t, resp.Release)
require.Error(t, err)
st, ok := status.FromError(err)
require.True(t, ok)
assert.Equal(t, codes.NotFound, st.Code())
}
func TestMonitorAlbum_NoQualityMatch(t *testing.T) {
@@ -425,15 +416,15 @@ func TestMonitorAlbum_NoQualityMatch(t *testing.T) {
}
ctx := context.Background()
resp, err := suite.client.MonitorAlbum(ctx, &pb.MonitorAlbumRequest{
_, err := suite.client.MonitorAlbum(ctx, &pb.MonitorAlbumRequest{
AlbumId: "test-album-ext-id",
Quality: pb.QualityType_QUALITY_LOSSLESS,
})
require.NoError(t, err)
require.NotNil(t, resp.Album)
require.NotNil(t, resp.Artist)
assert.Nil(t, resp.Release)
require.Error(t, err)
st, ok := status.FromError(err)
require.True(t, ok)
assert.Equal(t, codes.NotFound, st.Code())
}
func TestMonitorAlbum_QBitDown(t *testing.T) {
@@ -1149,14 +1140,15 @@ func TestMonitorAlbum_SearchRetryAllExhausted(t *testing.T) {
}
ctx := context.Background()
resp, err := suite.client.MonitorAlbum(ctx, &pb.MonitorAlbumRequest{
_, err := suite.client.MonitorAlbum(ctx, &pb.MonitorAlbumRequest{
AlbumId: "test-album-ext-id",
Quality: pb.QualityType_QUALITY_LOSSLESS,
})
require.NoError(t, err)
require.NotNil(t, resp.Album)
assert.Nil(t, resp.Release)
require.Error(t, err)
st, ok := status.FromError(err)
require.True(t, ok)
assert.Equal(t, codes.NotFound, st.Code())
assert.Equal(t, 2, queryCount)
}