From 71a49e2b43218d34f97b2276c43bdeb2df4a53d2 Mon Sep 17 00:00:00 2001 From: Tobi Smethurst <31960611+tsmethurst@users.noreply.github.com> Date: Thu, 1 Apr 2021 20:46:45 +0200 Subject: Api/v1/accounts (#8) * start work on accounts module * plodding away on the accounts endpoint * groundwork for other account routes * add password validator * validation utils * require account approval flags * comments * comments * go fmt * comments * add distributor stub * rename api to federator * tidy a bit * validate new account requests * rename r router * comments * add domain blocks * add some more shortcuts * add some more shortcuts * check email + username availability * email block checking for signups * chunking away at it * tick off a few more things * some fiddling with tests * add mock package * relocate repo * move mocks around * set app id on new signups * initialize oauth server properly * rename oauth server * proper mocking tests * go fmt ./... * add required fields * change name of func * move validation to account.go * more tests! * add some file utility tools * add mediaconfig * new shortcut * add some more fields * add followrequest model * add notify * update mastotypes * mock out storage interface * start building media interface * start on update credentials * mess about with media a bit more * test image manipulation * media more or less working * account update nearly working * rearranging my package ;) ;) ;) * phew big stuff!!!! * fix type checking * *fiddles* * Add CreateTables func * account registration flow working * tidy * script to step through auth flow * add a lil helper for generating user uris * fiddling with federation a bit * update progress * Tidying and linting --- internal/media/util_test.go | 147 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 internal/media/util_test.go (limited to 'internal/media/util_test.go') diff --git a/internal/media/util_test.go b/internal/media/util_test.go new file mode 100644 index 000000000..f24c1660f --- /dev/null +++ b/internal/media/util_test.go @@ -0,0 +1,147 @@ +/* + GoToSocial + Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +package media + +import ( + "io/ioutil" + "testing" + + "github.com/sirupsen/logrus" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/suite" +) + +type MediaUtilTestSuite struct { + suite.Suite + log *logrus.Logger +} + +/* + TEST INFRASTRUCTURE +*/ + +// SetupSuite sets some variables on the suite that we can use as consts (more or less) throughout +func (suite *MediaUtilTestSuite) SetupSuite() { + // some of our subsequent entities need a log so create this here + log := logrus.New() + log.SetLevel(logrus.TraceLevel) + suite.log = log +} + +func (suite *MediaUtilTestSuite) TearDownSuite() { + +} + +// SetupTest creates a db connection and creates necessary tables before each test +func (suite *MediaUtilTestSuite) SetupTest() { + +} + +// TearDownTest drops tables to make sure there's no data in the db +func (suite *MediaUtilTestSuite) TearDownTest() { + +} + +/* + ACTUAL TESTS +*/ + +func (suite *MediaUtilTestSuite) TestParseContentTypeOK() { + f, err := ioutil.ReadFile("./test/test-jpeg.jpg") + assert.Nil(suite.T(), err) + ct, err := parseContentType(f) + assert.Nil(suite.T(), err) + assert.Equal(suite.T(), "image/jpeg", ct) +} + +func (suite *MediaUtilTestSuite) TestParseContentTypeNotOK() { + f, err := ioutil.ReadFile("./test/test-corrupted.jpg") + assert.Nil(suite.T(), err) + ct, err := parseContentType(f) + assert.NotNil(suite.T(), err) + assert.Equal(suite.T(), "", ct) + assert.Equal(suite.T(), "filetype unknown", err.Error()) +} + +func (suite *MediaUtilTestSuite) TestRemoveEXIF() { + // load and validate image + b, err := ioutil.ReadFile("./test/test-with-exif.jpg") + assert.Nil(suite.T(), err) + + // clean it up and validate the clean version + clean, err := purgeExif(b) + assert.Nil(suite.T(), err) + + // compare it to our stored sample + sampleBytes, err := ioutil.ReadFile("./test/test-without-exif.jpg") + assert.Nil(suite.T(), err) + assert.EqualValues(suite.T(), sampleBytes, clean) +} + +func (suite *MediaUtilTestSuite) TestDeriveImageFromJPEG() { + // load image + b, err := ioutil.ReadFile("./test/test-jpeg.jpg") + assert.Nil(suite.T(), err) + + // clean it up and validate the clean version + imageAndMeta, err := deriveImage(b, "image/jpeg") + assert.Nil(suite.T(), err) + + assert.Equal(suite.T(), 1920, imageAndMeta.width) + assert.Equal(suite.T(), 1080, imageAndMeta.height) + assert.Equal(suite.T(), 1.7777777777777777, imageAndMeta.aspect) + assert.Equal(suite.T(), 2073600, imageAndMeta.size) + assert.Equal(suite.T(), "LjCZnlvyRkRn_NvzRjWF?urqV@f9", imageAndMeta.blurhash) + + // assert that the final image is what we would expect + sampleBytes, err := ioutil.ReadFile("./test/test-jpeg-processed.jpg") + assert.Nil(suite.T(), err) + assert.EqualValues(suite.T(), sampleBytes, imageAndMeta.image) +} + +func (suite *MediaUtilTestSuite) TestDeriveThumbnailFromJPEG() { + // load image + b, err := ioutil.ReadFile("./test/test-jpeg.jpg") + assert.Nil(suite.T(), err) + + // clean it up and validate the clean version + imageAndMeta, err := deriveThumbnail(b, "image/jpeg") + assert.Nil(suite.T(), err) + + assert.Equal(suite.T(), 256, imageAndMeta.width) + assert.Equal(suite.T(), 144, imageAndMeta.height) + assert.Equal(suite.T(), 1.7777777777777777, imageAndMeta.aspect) + assert.Equal(suite.T(), 36864, imageAndMeta.size) + + sampleBytes, err := ioutil.ReadFile("./test/test-jpeg-thumbnail.jpg") + assert.Nil(suite.T(), err) + assert.EqualValues(suite.T(), sampleBytes, imageAndMeta.image) +} + +func (suite *MediaUtilTestSuite) TestSupportedImageTypes() { + ok := supportedImageType("image/jpeg") + assert.True(suite.T(), ok) + + ok = supportedImageType("image/bmp") + assert.False(suite.T(), ok) +} + +func TestMediaUtilTestSuite(t *testing.T) { + suite.Run(t, new(MediaUtilTestSuite)) +} -- cgit v1.2.3