Refactor Agents to be singleton

Initial work for Last.fm scrobbler
This commit is contained in:
Deluan
2021-06-22 11:15:51 -04:00
committed by Deluan Quintão
parent f9fa9667a3
commit d5461d0ae9
17 changed files with 289 additions and 212 deletions
+28 -28
View File
@@ -20,14 +20,14 @@ var _ = Describe("Agents", func() {
var ag *Agents
BeforeEach(func() {
conf.Server.Agents = ""
ag = NewAgents(ctx)
ag = New(ctx)
})
It("calls the placeholder GetBiography", func() {
Expect(ag.GetBiography("123", "John Doe", "mb123")).To(Equal(placeholderBiography))
Expect(ag.GetBiography(ctx, "123", "John Doe", "mb123")).To(Equal(placeholderBiography))
})
It("calls the placeholder GetImages", func() {
images, err := ag.GetImages("123", "John Doe", "mb123")
images, err := ag.GetImages(ctx, "123", "John Doe", "mb123")
Expect(err).ToNot(HaveOccurred())
Expect(images).To(HaveLen(3))
for _, i := range images {
@@ -50,24 +50,24 @@ var _ = Describe("Agents", func() {
}{}
})
conf.Server.Agents = "empty,fake"
ag = NewAgents(ctx)
ag = New(ctx)
Expect(ag.AgentName()).To(Equal("agents"))
})
Describe("GetMBID", func() {
It("returns on first match", func() {
Expect(ag.GetMBID("123", "test")).To(Equal("mbid"))
Expect(ag.GetMBID(ctx, "123", "test")).To(Equal("mbid"))
Expect(mock.Args).To(ConsistOf("123", "test"))
})
It("skips the agent if it returns an error", func() {
mock.Err = errors.New("error")
_, err := ag.GetMBID("123", "test")
_, err := ag.GetMBID(ctx, "123", "test")
Expect(err).To(MatchError(ErrNotFound))
Expect(mock.Args).To(ConsistOf("123", "test"))
})
It("interrupts if the context is canceled", func() {
cancel()
_, err := ag.GetMBID("123", "test")
_, err := ag.GetMBID(ctx, "123", "test")
Expect(err).To(MatchError(ErrNotFound))
Expect(mock.Args).To(BeEmpty())
})
@@ -75,18 +75,18 @@ var _ = Describe("Agents", func() {
Describe("GetURL", func() {
It("returns on first match", func() {
Expect(ag.GetURL("123", "test", "mb123")).To(Equal("url"))
Expect(ag.GetURL(ctx, "123", "test", "mb123")).To(Equal("url"))
Expect(mock.Args).To(ConsistOf("123", "test", "mb123"))
})
It("skips the agent if it returns an error", func() {
mock.Err = errors.New("error")
_, err := ag.GetURL("123", "test", "mb123")
_, err := ag.GetURL(ctx, "123", "test", "mb123")
Expect(err).To(MatchError(ErrNotFound))
Expect(mock.Args).To(ConsistOf("123", "test", "mb123"))
})
It("interrupts if the context is canceled", func() {
cancel()
_, err := ag.GetURL("123", "test", "mb123")
_, err := ag.GetURL(ctx, "123", "test", "mb123")
Expect(err).To(MatchError(ErrNotFound))
Expect(mock.Args).To(BeEmpty())
})
@@ -94,17 +94,17 @@ var _ = Describe("Agents", func() {
Describe("GetBiography", func() {
It("returns on first match", func() {
Expect(ag.GetBiography("123", "test", "mb123")).To(Equal("bio"))
Expect(ag.GetBiography(ctx, "123", "test", "mb123")).To(Equal("bio"))
Expect(mock.Args).To(ConsistOf("123", "test", "mb123"))
})
It("skips the agent if it returns an error", func() {
mock.Err = errors.New("error")
Expect(ag.GetBiography("123", "test", "mb123")).To(Equal(placeholderBiography))
Expect(ag.GetBiography(ctx, "123", "test", "mb123")).To(Equal(placeholderBiography))
Expect(mock.Args).To(ConsistOf("123", "test", "mb123"))
})
It("interrupts if the context is canceled", func() {
cancel()
_, err := ag.GetBiography("123", "test", "mb123")
_, err := ag.GetBiography(ctx, "123", "test", "mb123")
Expect(err).To(MatchError(ErrNotFound))
Expect(mock.Args).To(BeEmpty())
})
@@ -112,7 +112,7 @@ var _ = Describe("Agents", func() {
Describe("GetImages", func() {
It("returns on first match", func() {
Expect(ag.GetImages("123", "test", "mb123")).To(Equal([]ArtistImage{{
Expect(ag.GetImages(ctx, "123", "test", "mb123")).To(Equal([]ArtistImage{{
URL: "imageUrl",
Size: 100,
}}))
@@ -120,12 +120,12 @@ var _ = Describe("Agents", func() {
})
It("skips the agent if it returns an error", func() {
mock.Err = errors.New("error")
Expect(ag.GetImages("123", "test", "mb123")).To(HaveLen(3))
Expect(ag.GetImages(ctx, "123", "test", "mb123")).To(HaveLen(3))
Expect(mock.Args).To(ConsistOf("123", "test", "mb123"))
})
It("interrupts if the context is canceled", func() {
cancel()
_, err := ag.GetImages("123", "test", "mb123")
_, err := ag.GetImages(ctx, "123", "test", "mb123")
Expect(err).To(MatchError(ErrNotFound))
Expect(mock.Args).To(BeEmpty())
})
@@ -133,7 +133,7 @@ var _ = Describe("Agents", func() {
Describe("GetSimilar", func() {
It("returns on first match", func() {
Expect(ag.GetSimilar("123", "test", "mb123", 1)).To(Equal([]Artist{{
Expect(ag.GetSimilar(ctx, "123", "test", "mb123", 1)).To(Equal([]Artist{{
Name: "Joe Dohn",
MBID: "mbid321",
}}))
@@ -141,13 +141,13 @@ var _ = Describe("Agents", func() {
})
It("skips the agent if it returns an error", func() {
mock.Err = errors.New("error")
_, err := ag.GetSimilar("123", "test", "mb123", 1)
_, err := ag.GetSimilar(ctx, "123", "test", "mb123", 1)
Expect(err).To(MatchError(ErrNotFound))
Expect(mock.Args).To(ConsistOf("123", "test", "mb123", 1))
})
It("interrupts if the context is canceled", func() {
cancel()
_, err := ag.GetSimilar("123", "test", "mb123", 1)
_, err := ag.GetSimilar(ctx, "123", "test", "mb123", 1)
Expect(err).To(MatchError(ErrNotFound))
Expect(mock.Args).To(BeEmpty())
})
@@ -155,7 +155,7 @@ var _ = Describe("Agents", func() {
Describe("GetTopSongs", func() {
It("returns on first match", func() {
Expect(ag.GetTopSongs("123", "test", "mb123", 2)).To(Equal([]Song{{
Expect(ag.GetTopSongs(ctx, "123", "test", "mb123", 2)).To(Equal([]Song{{
Name: "A Song",
MBID: "mbid444",
}}))
@@ -163,13 +163,13 @@ var _ = Describe("Agents", func() {
})
It("skips the agent if it returns an error", func() {
mock.Err = errors.New("error")
_, err := ag.GetTopSongs("123", "test", "mb123", 2)
_, err := ag.GetTopSongs(ctx, "123", "test", "mb123", 2)
Expect(err).To(MatchError(ErrNotFound))
Expect(mock.Args).To(ConsistOf("123", "test", "mb123", 2))
})
It("interrupts if the context is canceled", func() {
cancel()
_, err := ag.GetTopSongs("123", "test", "mb123", 2)
_, err := ag.GetTopSongs(ctx, "123", "test", "mb123", 2)
Expect(err).To(MatchError(ErrNotFound))
Expect(mock.Args).To(BeEmpty())
})
@@ -186,7 +186,7 @@ func (a *mockAgent) AgentName() string {
return "fake"
}
func (a *mockAgent) GetMBID(id string, name string) (string, error) {
func (a *mockAgent) GetMBID(ctx context.Context, id string, name string) (string, error) {
a.Args = []interface{}{id, name}
if a.Err != nil {
return "", a.Err
@@ -194,7 +194,7 @@ func (a *mockAgent) GetMBID(id string, name string) (string, error) {
return "mbid", nil
}
func (a *mockAgent) GetURL(id, name, mbid string) (string, error) {
func (a *mockAgent) GetURL(ctx context.Context, id, name, mbid string) (string, error) {
a.Args = []interface{}{id, name, mbid}
if a.Err != nil {
return "", a.Err
@@ -202,7 +202,7 @@ func (a *mockAgent) GetURL(id, name, mbid string) (string, error) {
return "url", nil
}
func (a *mockAgent) GetBiography(id, name, mbid string) (string, error) {
func (a *mockAgent) GetBiography(ctx context.Context, id, name, mbid string) (string, error) {
a.Args = []interface{}{id, name, mbid}
if a.Err != nil {
return "", a.Err
@@ -210,7 +210,7 @@ func (a *mockAgent) GetBiography(id, name, mbid string) (string, error) {
return "bio", nil
}
func (a *mockAgent) GetImages(id, name, mbid string) ([]ArtistImage, error) {
func (a *mockAgent) GetImages(ctx context.Context, id, name, mbid string) ([]ArtistImage, error) {
a.Args = []interface{}{id, name, mbid}
if a.Err != nil {
return nil, a.Err
@@ -221,7 +221,7 @@ func (a *mockAgent) GetImages(id, name, mbid string) ([]ArtistImage, error) {
}}, nil
}
func (a *mockAgent) GetSimilar(id, name, mbid string, limit int) ([]Artist, error) {
func (a *mockAgent) GetSimilar(ctx context.Context, id, name, mbid string, limit int) ([]Artist, error) {
a.Args = []interface{}{id, name, mbid, limit}
if a.Err != nil {
return nil, a.Err
@@ -232,7 +232,7 @@ func (a *mockAgent) GetSimilar(id, name, mbid string, limit int) ([]Artist, erro
}}, nil
}
func (a *mockAgent) GetTopSongs(id, artistName, mbid string, count int) ([]Song, error) {
func (a *mockAgent) GetTopSongs(ctx context.Context, id, artistName, mbid string, count int) ([]Song, error) {
a.Args = []interface{}{id, artistName, mbid, count}
if a.Err != nil {
return nil, a.Err