mirror of
https://github.com/yanislav-igonin/micrach
synced 2026-07-27 05:14:17 +03:00
* chore: add agents md * docs: expand repository and setup guides * docs: plan project modernization * docs: add Wave 1 implementation plan * test: characterize legacy behavior * build: update Go and Fiber v2 * fix(gateway): preserve duplicate auth behavior * refactor(db): migrate to pgx v5 * refactor: replace deprecated I/O APIs * build: add local PostgreSQL compose * build: add multi-stage image * ci: replace legacy deployment workflow * fix(deps): update vulnerable Go modules * docs: document modern development workflow
49 lines
1.8 KiB
Go
49 lines
1.8 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|
|
}
|