1package tq
2
3import (
4	"testing"
5
6	"github.com/git-lfs/git-lfs/v3/lfsapi"
7	"github.com/git-lfs/git-lfs/v3/lfshttp"
8	"github.com/stretchr/testify/assert"
9	"github.com/stretchr/testify/require"
10)
11
12type testAdapter struct {
13	name string
14	dir  Direction
15}
16
17func (a *testAdapter) Name() string {
18	return a.name
19}
20
21func (a *testAdapter) Direction() Direction {
22	return a.dir
23}
24
25func (a *testAdapter) Begin(cfg AdapterConfig, cb ProgressCallback) error {
26	return nil
27}
28
29func (a *testAdapter) Add(ts ...*Transfer) (retries <-chan TransferResult) {
30	return nil
31}
32
33func (a *testAdapter) End() {
34}
35
36func newTestAdapter(name string, dir Direction) Adapter {
37	return &testAdapter{name, dir}
38}
39
40func newRenamedTestAdapter(name string, dir Direction) Adapter {
41	return &testAdapter{"RENAMED", dir}
42}
43
44func testBasicAdapterExists(t *testing.T) {
45	m := NewManifest(nil, nil, "", "")
46
47	assert := assert.New(t)
48
49	dls := m.GetDownloadAdapterNames()
50	if assert.NotNil(dls) {
51		assert.Equal([]string{"basic"}, dls)
52	}
53	uls := m.GetUploadAdapterNames()
54	if assert.NotNil(uls) {
55		assert.Equal([]string{"basic"}, uls)
56	}
57
58	da := m.NewDownloadAdapter("basic")
59	if assert.NotNil(da) {
60		assert.Equal("basic", da.Name())
61		assert.Equal(Download, da.Direction())
62	}
63
64	ua := m.NewUploadAdapter("basic")
65	if assert.NotNil(ua) {
66		assert.Equal("basic", ua.Name())
67		assert.Equal(Upload, ua.Direction())
68	}
69}
70
71func testAdapterRegAndOverride(t *testing.T) {
72	m := NewManifest(nil, nil, "", "")
73	assert := assert.New(t)
74
75	assert.Nil(m.NewDownloadAdapter("test"))
76	assert.Nil(m.NewUploadAdapter("test"))
77
78	m.RegisterNewAdapterFunc("test", Upload, newTestAdapter)
79	assert.Nil(m.NewDownloadAdapter("test"))
80	assert.NotNil(m.NewUploadAdapter("test"))
81
82	m.RegisterNewAdapterFunc("test", Download, newTestAdapter)
83	da := m.NewDownloadAdapter("test")
84	if assert.NotNil(da) {
85		assert.Equal("test", da.Name())
86		assert.Equal(Download, da.Direction())
87	}
88
89	ua := m.NewUploadAdapter("test")
90	if assert.NotNil(ua) {
91		assert.Equal("test", ua.Name())
92		assert.Equal(Upload, ua.Direction())
93	}
94
95	// Test override
96	m.RegisterNewAdapterFunc("test", Upload, newRenamedTestAdapter)
97	ua = m.NewUploadAdapter("test")
98	if assert.NotNil(ua) {
99		assert.Equal("RENAMED", ua.Name())
100		assert.Equal(Upload, ua.Direction())
101	}
102
103	da = m.NewDownloadAdapter("test")
104	if assert.NotNil(da) {
105		assert.Equal("test", da.Name())
106		assert.Equal(Download, da.Direction())
107	}
108
109	m.RegisterNewAdapterFunc("test", Download, newRenamedTestAdapter)
110	da = m.NewDownloadAdapter("test")
111	if assert.NotNil(da) {
112		assert.Equal("RENAMED", da.Name())
113		assert.Equal(Download, da.Direction())
114	}
115}
116
117func testAdapterRegButBasicOnly(t *testing.T) {
118	cli, err := lfsapi.NewClient(lfshttp.NewContext(nil, nil, map[string]string{
119		"lfs.basictransfersonly": "yes",
120	}))
121	require.Nil(t, err)
122
123	m := NewManifest(nil, cli, "", "")
124
125	assert := assert.New(t)
126
127	m.RegisterNewAdapterFunc("test", Upload, newTestAdapter)
128	m.RegisterNewAdapterFunc("test", Download, newTestAdapter)
129	// Will still be created if we ask for them
130	assert.NotNil(m.NewUploadAdapter("test"))
131	assert.NotNil(m.NewDownloadAdapter("test"))
132
133	// But list will exclude
134	ld := m.GetDownloadAdapterNames()
135	assert.Equal([]string{BasicAdapterName}, ld)
136	lu := m.GetUploadAdapterNames()
137	assert.Equal([]string{BasicAdapterName}, lu)
138}
139