52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
|
|
package chain_test
|
||
|
|
|
||
|
|
import (
|
||
|
|
"errors"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/navidrome/navidrome/utils/chain"
|
||
|
|
. "github.com/onsi/ginkgo/v2"
|
||
|
|
. "github.com/onsi/gomega"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestChain(t *testing.T) {
|
||
|
|
RegisterFailHandler(Fail)
|
||
|
|
RunSpecs(t, "chain Suite")
|
||
|
|
}
|
||
|
|
|
||
|
|
var _ = Describe("RunSequentially", func() {
|
||
|
|
It("should return nil if no functions are provided", func() {
|
||
|
|
err := chain.RunSequentially()
|
||
|
|
Expect(err).To(BeNil())
|
||
|
|
})
|
||
|
|
|
||
|
|
It("should return nil if all functions succeed", func() {
|
||
|
|
err := chain.RunSequentially(
|
||
|
|
func() error { return nil },
|
||
|
|
func() error { return nil },
|
||
|
|
)
|
||
|
|
Expect(err).To(BeNil())
|
||
|
|
})
|
||
|
|
|
||
|
|
It("should return the error from the first failing function", func() {
|
||
|
|
expectedErr := errors.New("error in function 2")
|
||
|
|
err := chain.RunSequentially(
|
||
|
|
func() error { return nil },
|
||
|
|
func() error { return expectedErr },
|
||
|
|
func() error { return errors.New("error in function 3") },
|
||
|
|
)
|
||
|
|
Expect(err).To(Equal(expectedErr))
|
||
|
|
})
|
||
|
|
|
||
|
|
It("should not run functions after the first failing function", func() {
|
||
|
|
expectedErr := errors.New("error in function 1")
|
||
|
|
var runCount int
|
||
|
|
err := chain.RunSequentially(
|
||
|
|
func() error { runCount++; return expectedErr },
|
||
|
|
func() error { runCount++; return nil },
|
||
|
|
)
|
||
|
|
Expect(err).To(Equal(expectedErr))
|
||
|
|
Expect(runCount).To(Equal(1))
|
||
|
|
})
|
||
|
|
})
|