package errors

import (
	"errors"

	"github.com/hashicorp/go-multierror"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("Error", func() {
	Describe("New", func() {
		var (
			innerError = errors.New("some error")
		)

		It("should returns new error", func() {
			err := New(innerError)
			Expect(errors.Is(err, innerError)).Should(BeTrue())
			Expect(errors.Unwrap(err)).Should(Equal(innerError))
			Expect(err.Error()).Should(Equal(innerError.Error()))
		})

		It("should returns new error with one detail", func() {
			details := errors.New("a")
			err := New(innerError, details)
			Expect(errors.Is(err, innerError)).Should(BeTrue())
			Expect(Details(err)).Should(Equal(details))
		})

		It("should returns new error with two detail", func() {
			details := []error{errors.New("a"), errors.New("b")}
			err := New(innerError, details...)
			Expect(errors.Is(err, innerError)).Should(BeTrue())
			Expect(Details(err)).Should(Equal(multierror.Append(nil, details...)))
		})
	})
})
