From 18c17f0f9560e336f3c2f3ecabae15b0930a2f48 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lukas=20B=C3=B6hm?= <lukas.l.boehm@fau.de>
Date: Fri, 26 Mar 2021 21:25:12 +0100
Subject: [PATCH] testUploadAttachment

---
 api/api.go      |  2 +-
 api/api_test.go | 81 +++++++++++++++++++++++++++++++++++++++++--------
 2 files changed, 69 insertions(+), 14 deletions(-)

diff --git a/api/api.go b/api/api.go
index 05cfea4..5b18a49 100644
--- a/api/api.go
+++ b/api/api.go
@@ -238,7 +238,7 @@ func UploadAttachment(w http.ResponseWriter, r *http.Request) *HTTPError {
 		return &HTTPError{err, "Can't fetch data", 500}
 	}
 	if share.IsTemporary != true {
-		return &HTTPError{ errors.New("Cant upload to finalized shares"), "Can't upload to finalized Shares.",  403 }
+		return &HTTPError{ errors.New("Can't upload to finalized shares"), "Can't upload to finalized Shares.",  403 }
 	}
 
 	// Parse file from body
diff --git a/api/api_test.go b/api/api_test.go
index 02f7b9f..8289709 100644
--- a/api/api_test.go
+++ b/api/api_test.go
@@ -1,15 +1,20 @@
 package main
 
 import (
+	"bytes"
 	"encoding/json"
 	"fmt"
 	"github.com/google/uuid"
 	"github.com/gorilla/mux"
 	"github.com/stretchr/testify/assert"
+	"io"
 	"io/ioutil"
 	"log"
+	"mime/multipart"
 	"net/http"
 	"net/http/httptest"
+	"os"
+	"path/filepath"
 	"strings"
 	"testing"
 )
@@ -63,6 +68,8 @@ func Reset() {
 	for _, sh := range shares {
 		db.Create(&sh)
 	}
+	// testfile
+	ioutil.WriteFile(filepath.Join(config.mediaDir, "kekw.txt"), []byte("Hallo welt"), os.ModePerm)
 }
 
 /////////////////////////////////////
@@ -80,8 +87,8 @@ func TestAllShares(t *testing.T) {
 		body, _ := ioutil.ReadAll(res.Body)
 		var erg []Share
 		json.Unmarshal(body, &erg)
-		assert.Equal(t, http.StatusOK, res.StatusCode)
-		assert.Equal(t, shares[1], erg[0])
+		assert.EqualValues(t, http.StatusOK, res.StatusCode)
+		assert.EqualValues(t, shares[1], erg[0])
 	})
 }
 
@@ -139,7 +146,7 @@ func TestDownloadFile(t *testing.T) {
 	defer ts.Close()
 
 	t.Run("happy path", func(t *testing.T) {
-
+		//assert
 	})
 }
 
@@ -151,35 +158,58 @@ func TestOpenShare(t *testing.T) {
 	defer ts.Close()
 
 	t.Run("happy path", func(t *testing.T) {
-		b, _ := json.Marshal(Share {
-			ID: uuid.MustParse("e5134044-2704-4864-85be-318fb158009f"),
-			Name: "TestOpenShare",
-		})
+		var newShare = Share{
+			ID:            uuid.MustParse("e5134044-2704-4864-85be-318fb158009f"),
+			Name:          "TestOpenShare",
+			Expires:       nil,
+			DownloadLimit: 69,
+			IsPublic:      false,
+			Attachments: []Attachment {
+				{
+					ID: uuid.MustParse("2b524827-9c3c-47e0-9277-8b51fd45b4bd"),
+					Filename: "kekw.txt",
+					Filesize: 123456,
+					IsEncrypted: false,
+					ShareID: uuid.MustParse("e5134044-2704-4864-85be-318fb158009f"),
+				},
+			},
+		}
+		b, _ := json.Marshal(newShare)
 		req, _ := http.NewRequest("POST", ts.URL + "/shares", strings.NewReader(string(b)))
 		res, _ := http.DefaultClient.Do(req)
-		//body, _ := ioutil.ReadAll(res.Body)
+		body, _ := ioutil.ReadAll(res.Body)
+		var actual Share
+		json.Unmarshal(body, &actual)
+		// checks
 		assert.Equal(t, http.StatusOK, res.StatusCode)
+		assert.DirExists(t, filepath.Join(config.mediaDir, "temp", newShare.ID.String()))
+		assert.NoDirExists(t, filepath.Join(config.mediaDir, "data", newShare.ID.String()))
+
+		assert.Equal(t, newShare.ID, actual.ID)
+		//assert.(t, newShare, actual)
 	})
 
 	t.Run("bad request", func(t *testing.T) {
 		req, _ := http.NewRequest("POST", ts.URL + "/shares", nil)
 		res, _ := http.DefaultClient.Do(req)
-
-		body, _ := ioutil.ReadAll(res.Body)
-		fmt.Println(string(body))
+		//body, _ := ioutil.ReadAll(res.Body)
+		//fmt.Println(string(body))
+		// checks
 		assert.Equal(t, http.StatusBadRequest, res.StatusCode)
 	})
 }
 
 func TestCloseShare(t *testing.T) {
+	Reset()
 	router := mux.NewRouter()
 	ts := httptest.NewServer(router)
 	router.Handle("/share/{id}", endpointREST(CloseShare)).Methods("POST")
 	defer ts.Close()
 
 	t.Run("happy path", func(t *testing.T) {
-		req, _ := http.NewRequest("POST", ts.URL + "/share/e5134044-2704-4864-85be-318fb158009f", nil)
+		req, _ := http.NewRequest("POST", ts.URL + "/share/a558aca3-fb40-400b-8dc6-ae49c705c791", nil)
 		res, _ := http.DefaultClient.Do(req)
+
 		body, _ := ioutil.ReadAll(res.Body)
 		fmt.Println(string(body))
 		assert.Equal(t, http.StatusOK, res.StatusCode)
@@ -197,8 +227,28 @@ func TestCloseShare(t *testing.T) {
 }
 
 func TestUploadAttachment(t *testing.T) {
+	Reset()
+	router := mux.NewRouter()
+	ts := httptest.NewServer(router)
+	router.Handle("/share/{id}/attachments", endpointREST(UploadAttachment)).Methods("POST")
+	defer ts.Close()
+
 	t.Run("happy path", func(t *testing.T) {
+		body := &bytes.Buffer{}
+		writer := multipart.NewWriter(body)
+		fw, _ := writer.CreateFormFile("files", "poggers.txt")
+		file, _ := os.Open(filepath.Join(config.mediaDir, "poggers.txt"))
+		io.Copy(fw, file)
+		file.Close()
+		writer.Close()
+
+		req, _ := http.NewRequest("POST", ts.URL + "/share/a558aca3-fb40-400b-8dc6-ae49c705c791/attachments", bytes.NewReader(body.Bytes()))
+		req.Header.Set("Content-Type", writer.FormDataContentType())
+		res, _ := http.DefaultClient.Do(req)
 
+		//resBody, _ :=ioutil.ReadAll(res.Body)
+		//fmt.Println(string(resBody))
+		assert.EqualValues(t, http.StatusOK, res.StatusCode)
 	})
 
 	t.Run("not found", func(t *testing.T) {
@@ -206,7 +256,12 @@ func TestUploadAttachment(t *testing.T) {
 	})
 
 	t.Run("bad request", func(t *testing.T) {
+		req, _ := http.NewRequest("POST", ts.URL + "/share/a558aca3-fb40-400b-8dc6-ae49c705c791/attachments", nil)
+		res, _ := http.DefaultClient.Do(req)
+		assert.Equal(t, http.StatusBadRequest, res.StatusCode)
+	})
+
+	t.Run("forbidden", func(t *testing.T) {
 
 	})
 }
-
-- 
GitLab