status-im/status-go

View on GitHub
images/encode_test.go

Summary

Maintainability
A
0 mins
Test Coverage
package images

import (
    "bytes"
    "errors"
    "testing"

    "github.com/stretchr/testify/require"
)

func TestEncode(t *testing.T) {
    cs := []struct {
        FileName   string
        RenderSize int
    }{
        {
            "elephant.jpg",
            1447,
        },
        {
            "rose.webp",
            11119,
        },
        {
            "spin.gif",
            2263,
        },
        {
            "status.png",
            5834,
        },
    }
    options := EncodeConfig{
        Quality: 70,
    }

    for _, c := range cs {
        img, err := Decode(path + c.FileName)
        require.NoError(t, err)

        bb := bytes.NewBuffer([]byte{})
        err = Encode(bb, img, options)
        require.NoError(t, err)

        require.Exactly(t, c.RenderSize, bb.Len())
    }
}

func TestEncodeToBestSize(t *testing.T) {
    cs := []struct {
        FileName   string
        RenderSize int
        Error      error
    }{
        {
            "elephant.jpg",
            1467,
            nil,
        },
        {
            "rose.webp",
            8513,
            errors.New("image size after processing exceeds max, expected < '5632', received < '8513'"),
        },
        {
            "spin.gif",
            2407,
            nil,
        },
        {
            "status.png",
            4725,
            nil,
        },
    }

    for _, c := range cs {
        img, err := Decode(path + c.FileName)
        require.NoError(t, err)

        bb := bytes.NewBuffer([]byte{})
        err = EncodeToBestSize(bb, img, ResizeDimensions[0])

        require.Exactly(t, c.RenderSize, bb.Len())

        if c.Error != nil {
            require.EqualError(t, err, c.Error.Error())
        } else {
            require.NoError(t, err)
        }
    }
}

func TestCompressToFileLimits(t *testing.T) {
    img, err := Decode(path + "IMG_1205.HEIC.jpg")
    require.NoError(t, err)

    bb := bytes.NewBuffer([]byte{})
    err = CompressToFileLimits(bb, img, FileSizeLimits{50000, 350000})
    require.NoError(t, err)
    require.Equal(t, 291645, bb.Len())
}

func TestGetPayloadFromURI(t *testing.T) {
    payload, err := GetPayloadFromURI("data:image/jpeg;base64,/9j/2wCEAFA3PEY8MlA=")
    require.NoError(t, err)
    require.Equal(
        t,
        []byte{0xff, 0xd8, 0xff, 0xdb, 0x0, 0x84, 0x0, 0x50, 0x37, 0x3c, 0x46, 0x3c, 0x32, 0x50},
        payload,
    )
}

func TestIsSvg(t *testing.T) {
    GoodSVG := []byte(`<svg width="300" height="130" xmlns="http://www.w3.org/2000/svg">
      <rect width="200" height="100" x="10" y="10" rx="20" ry="20" fill="blue" />
      Sorry, your browser does not support inline SVG.  
    </svg>`)

    BadSVG := []byte(`<head>
    <link rel="stylesheet" href="styles.css">
  </head>`)

    require.Equal(t, IsSVG(BadSVG), false)
    require.Equal(t, IsSVG(GoodSVG), true)
}

func TestIsIco(t *testing.T) {
    GoodICO, err := Asset("_assets/tests/wikipedia.ico")
    require.NoError(t, err)

    GoodPNG, err := Asset("_assets/tests/qr/defaultQR.png")
    require.NoError(t, err)

    require.Equal(t, IsIco(GoodICO), true)
    require.Equal(t, IsIco(GoodPNG), false)
    require.Equal(t, IsPng(GoodPNG), true)
    require.Equal(t, IsPng(GoodICO), false)
}