package backend_test

import (
	"testing"

	"github.com/restic/restic/internal/backend"
	"github.com/restic/restic/internal/test"
)

type testBackend struct {
	backend.Backend
}

func (t *testBackend) Unwrap() backend.Backend {
	return nil
}

type otherTestBackend struct {
	backend.Backend
}

func (t *otherTestBackend) Unwrap() backend.Backend {
	return t.Backend
}

func TestAsBackend(t *testing.T) {
	other := otherTestBackend{}
	test.Assert(t, backend.AsBackend[*testBackend](other) == nil, "otherTestBackend is not a testBackend backend")

	testBe := &testBackend{}
	test.Assert(t, backend.AsBackend[*testBackend](testBe) == testBe, "testBackend was not returned")

	wrapper := &otherTestBackend{Backend: testBe}
	test.Assert(t, backend.AsBackend[*testBackend](wrapper) == testBe, "failed to unwrap testBackend backend")

	wrapper.Backend = other
	test.Assert(t, backend.AsBackend[*testBackend](wrapper) == nil, "a wrapped otherTestBackend is not a testBackend")
}