git_file_handlers_test.go

 1package http
 2
 3import (
 4	"bytes"
 5	"image"
 6	"image/png"
 7	"mime/multipart"
 8	"net/http"
 9	"net/http/httptest"
10	"testing"
11
12	"github.com/gorilla/mux"
13	"github.com/stretchr/testify/assert"
14	"github.com/stretchr/testify/require"
15
16	"github.com/MichaelMure/git-bug/api/auth"
17	"github.com/MichaelMure/git-bug/cache"
18	"github.com/MichaelMure/git-bug/repository"
19)
20
21func TestGitFileHandlers(t *testing.T) {
22	repo := repository.CreateGoGitTestRepo(t, false)
23
24	stderr := &bytes.Buffer{}
25
26	mrc := cache.NewMultiRepoCache()
27	repoCache, err := mrc.RegisterDefaultRepository(repo, stderr)
28	require.NoError(t, err)
29
30	author, err := repoCache.NewIdentity("test identity", "test@test.org")
31	require.NoError(t, err)
32
33	err = repoCache.SetUserIdentity(author)
34	require.NoError(t, err)
35
36	// UPLOAD
37
38	uploadHandler := NewGitUploadFileHandler(mrc)
39
40	img := image.NewNRGBA(image.Rect(0, 0, 50, 50))
41	data := &bytes.Buffer{}
42	err = png.Encode(data, img)
43	require.NoError(t, err)
44
45	body := &bytes.Buffer{}
46	writer := multipart.NewWriter(body)
47	part, err := writer.CreateFormFile("uploadfile", "noname")
48	assert.NoError(t, err)
49
50	_, err = part.Write(data.Bytes())
51	assert.NoError(t, err)
52
53	err = writer.Close()
54	assert.NoError(t, err)
55
56	w := httptest.NewRecorder()
57	r, _ := http.NewRequest("GET", "/", body)
58	r.Header.Add("Content-Type", writer.FormDataContentType())
59
60	// Simulate auth
61	r = r.WithContext(auth.CtxWithUser(r.Context(), author.Id()))
62
63	// Handler's params
64	r = mux.SetURLVars(r, map[string]string{
65		"repo": "",
66	})
67
68	uploadHandler.ServeHTTP(w, r)
69
70	assert.Equal(t, http.StatusOK, w.Code)
71	assert.Equal(t, `{"hash":"3426a1488292d8f3f3c59ca679681336542b986f"}`, w.Body.String())
72	// DOWNLOAD
73
74	downloadHandler := NewGitFileHandler(mrc)
75
76	w = httptest.NewRecorder()
77	r, _ = http.NewRequest("GET", "/", nil)
78
79	// Simulate auth
80	r = r.WithContext(auth.CtxWithUser(r.Context(), author.Id()))
81
82	// Handler's params
83	r = mux.SetURLVars(r, map[string]string{
84		"repo": "",
85		"hash": "3426a1488292d8f3f3c59ca679681336542b986f",
86	})
87
88	downloadHandler.ServeHTTP(w, r)
89	assert.Equal(t, http.StatusOK, w.Code)
90
91	assert.Equal(t, data.Bytes(), w.Body.Bytes())
92
93	require.Equal(t, cache.ExpectedCacheInitializationMessage, stderr.String())
94}