micrach/utils/utils_test.go

49 lines
1.8 KiB
Go
Raw Normal View History

2026-07-15 22:08:35 +03:00
package utils
import (
"mime/multipart"
"net/textproto"
"strings"
"testing"
"micrach/repositories"
)
func fileHeader(contentType string, size int64) *multipart.FileHeader {
header := make(textproto.MIMEHeader)
header.Set("Content-Type", contentType)
return &multipart.FileHeader{Filename: "upload", Header: header, Size: size}
}
func TestValidatePost(t *testing.T) {
validPNG := fileHeader("image/png", 1)
validJPEG := fileHeader("image/jpeg", FILE_SIZE_IN_BYTES)
tests := []struct {
name string
title string
text string
files []*multipart.FileHeader
want string
}{
{name: "text only", text: "hello"},
{name: "file only", files: []*multipart.FileHeader{validPNG}},
{name: "empty", want: repositories.InvalidTextOrFilesErrorMessage},
{name: "title over limit", title: strings.Repeat("я", 101), text: "ok", want: repositories.InvalidTitleLengthErrorMessage},
{name: "text over limit", text: strings.Repeat("я", 1001), want: repositories.InvalidTextLengthErrorMessage},
{name: "four files", files: []*multipart.FileHeader{validPNG, validPNG, validJPEG, validJPEG}},
{name: "five files", files: []*multipart.FileHeader{validPNG, validPNG, validPNG, validPNG, validPNG}, want: repositories.InvalidFilesLengthErrorMessage},
{name: "unsupported content type", files: []*multipart.FileHeader{fileHeader("image/gif", 1)}, want: repositories.InvalidFileExtErrorMessage},
{name: "size at limit", files: []*multipart.FileHeader{validJPEG}},
{name: "size over limit", files: []*multipart.FileHeader{fileHeader("image/jpeg", FILE_SIZE_IN_BYTES+1)}, want: repositories.InvalidFileSizeErrorMessage},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := ValidatePost(tt.title, tt.text, tt.files); got != tt.want {
t.Fatalf("ValidatePost() = %q, want %q", got, tt.want)
}
})
}
}