nexo/services/push-proxy/server/android_notification_test.go

83 lines
2.3 KiB
Go

// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package server
import (
"encoding/json"
"errors"
"net/http"
"os"
"testing"
"github.com/stretchr/testify/require"
"github.com/mattermost/mattermost/server/public/shared/mlog"
)
func TestAndroidInitialize(t *testing.T) {
fileName := FindConfigFile("mattermost-push-proxy.sample.json")
cfg, err := LoadConfig(fileName)
require.NoError(t, err)
logger, err := mlog.NewLogger()
require.NoError(t, err)
// Verify error for no service file
pushSettings := AndroidPushSettings{}
cfg.AndroidPushSettings[0] = pushSettings
require.Error(t, NewAndroidNotificationServer(cfg.AndroidPushSettings[0], logger, nil, cfg.SendTimeoutSec, cfg.RetryTimeoutSec).Initialize())
f, err := os.CreateTemp("", "example")
require.NoError(t, err)
defer os.Remove(f.Name()) // clean up
cfg.AndroidPushSettings[0].ServiceFileLocation = f.Name()
// Verify error for bad JSON
_, err = f.Write([]byte("badJSON"))
require.NoError(t, err)
require.Error(t, NewAndroidNotificationServer(cfg.AndroidPushSettings[0], logger, nil, cfg.SendTimeoutSec, cfg.RetryTimeoutSec).Initialize())
require.NoError(t, f.Truncate(0))
_, err = f.Seek(0, 0)
require.NoError(t, err)
// Verify no error for dummy JSON
require.NoError(t, json.NewEncoder(f).Encode(serviceAccount{
Type: "service_account",
ProjectID: "sample",
}))
require.NoError(t, f.Sync())
require.NoError(t, NewAndroidNotificationServer(cfg.AndroidPushSettings[0], logger, nil, cfg.SendTimeoutSec, cfg.RetryTimeoutSec).Initialize())
require.NoError(t, f.Close())
}
// Copied from firebase.google.com/go/v4@v4.14.0/internal/errors.go
type ErrorCode string
type FirebaseError struct {
ErrorCode ErrorCode
String string
Response *http.Response
Ext map[string]interface{}
}
func (fe *FirebaseError) Error() string {
return fe.String
}
func TestGetErrorCode(t *testing.T) {
var errorCode ErrorCode = "some error code"
err := &FirebaseError{
ErrorCode: errorCode,
}
extractedCode, found := getErrorCode(err)
require.True(t, found)
require.Equal(t, string(errorCode), extractedCode)
extractedCode, found = getErrorCode(errors.New("non firebase error"))
require.Equal(t, "", extractedCode)
require.False(t, found)
}