2fas-server/tests/browser_extension/browser_extension_test.go

97 lines
2.8 KiB
Go

package tests
import (
"fmt"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
"github.com/twofas/2fas-server/internal/common/crypto"
"github.com/twofas/2fas-server/tests"
"net/http"
"testing"
)
func TestBrowserExtensionTestSuite(t *testing.T) {
suite.Run(t, new(BrowserExtensionTestSuite))
}
type BrowserExtensionTestSuite struct {
suite.Suite
}
func (s *BrowserExtensionTestSuite) SetupTest() {
tests.DoSuccessDelete(s.T(), "/browser_extensions")
}
func (s *BrowserExtensionTestSuite) TestCreateBrowserExtension() {
type testCase struct {
extensionName string
expectedHttpCode int
}
testsCases := []testCase{
{extensionName: "", expectedHttpCode: 400},
{extensionName: " ", expectedHttpCode: 400},
{extensionName: " ", expectedHttpCode: 400},
{extensionName: "abc", expectedHttpCode: 200},
{extensionName: "efg ", expectedHttpCode: 200},
{extensionName: " ab123 ", expectedHttpCode: 200},
}
for _, tc := range testsCases {
response := createBrowserExtension(tc.extensionName)
assert.Equal(s.T(), tc.expectedHttpCode, response.StatusCode)
}
}
func (s *BrowserExtensionTestSuite) TestUpdateBrowserExtension() {
browserExt := tests.CreateBrowserExtension(s.T(), "go-test")
payload := []byte(`{"name": "updated-extension-name"}`)
tests.DoSuccessPut(s.T(), "/browser_extensions/"+browserExt.Id, payload, nil)
var browserExtension *tests.BrowserExtensionResponse
tests.DoSuccessGet(s.T(), "/browser_extensions/"+browserExt.Id, &browserExtension)
assert.Equal(s.T(), "updated-extension-name", browserExtension.Name)
}
func (s *BrowserExtensionTestSuite) TestUpdateNotExistingBrowserExtension() {
id := uuid.New()
payload := []byte(`{"name": "updated-extension-name"}`)
response := tests.DoPut("/browser_extensions/"+id.String(), payload, nil)
assert.Equal(s.T(), 404, response.StatusCode)
}
func (s *BrowserExtensionTestSuite) TestUpdateBrowserExtensionSetEmptyName() {
browserExt := tests.CreateBrowserExtension(s.T(), "go-test")
payload := []byte(`{"name": ""}`)
response := tests.DoPut("/browser_extensions/"+browserExt.Id, payload, nil)
assert.Equal(s.T(), 400, response.StatusCode)
}
func (s *BrowserExtensionTestSuite) TestDoNotFindNotExistingExtension() {
notExistingId := uuid.New()
var browserExtension *tests.BrowserExtensionResponse
response := tests.DoGet("/browser_extensions/"+notExistingId.String(), &browserExtension)
assert.Equal(s.T(), 404, response.StatusCode)
}
func createBrowserExtension(name string) *http.Response {
keyPair := crypto.GenerateKeyPair(2048)
pubKey := crypto.PublicKeyToBase64(keyPair.PublicKey)
payload := []byte(fmt.Sprintf(`{"name":"%s","browser_name":"go-browser","browser_version":"0.1","public_key":"%s"}`, name, pubKey))
return tests.DoPost("/browser_extensions", payload, nil)
}